From bfd1c18f360812eb4e25cfebe6b7fc6534be88b4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 26 Apr 2007 00:08:06 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20Gros=20bug=20dans=20les=20fonctions=20LD?= =?UTF-8?q?AP=20qui=20ne=20g=E9rait=20pas=20bien=20la=20majuscule,=20minus?= =?UTF-8?q?cule.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/lib/ldap.class.php | 92 ++++++++++++++++++++++++--------------- htdocs/user/fiche.php | 4 +- 2 files changed, 58 insertions(+), 38 deletions(-) diff --git a/htdocs/lib/ldap.class.php b/htdocs/lib/ldap.class.php index b84d67b347f..23e37efecdf 100644 --- a/htdocs/lib/ldap.class.php +++ b/htdocs/lib/ldap.class.php @@ -735,69 +735,89 @@ class Ldap } - // 2.5 User methods ---------------------------------------------------------- /** - * 2.5.1 : Returns an array containing a details of users, sorted by - * username. The search criteria is a standard LDAP query - * returns all - * users. The $attributeArray variable contains the required user detail field names + * \brief Returns an array containing a details of elements + * \param $search + * \param $userDn + * \param $useridentifier + * \param $attributeArray Variables required + * \param $activefilter 1=utilise le champ this->filter comme filtre + * + * \remarks ldapsearch -LLLx -hlocalhost -Dcn=admin,dc=parinux,dc=org -w password -b "ou=adherents,ou=people,dc=parinux,dc=org" userPassword */ function getUsers($search, $userDn, $useridentifier, $attributeArray, $activefilter=0) { $userslist=array(); - dolibarr_syslog("Ldap.class::getUsers search=".$search." userDn=".$userDn." useridentifier=".$useridentifier." attributeArray=".$attributeArray); + dolibarr_syslog("Ldap::getUsers search=".$search." userDn=".$userDn." useridentifier=".$useridentifier." attributeArray=array(".join(',',$attributeArray).")"); // if the directory is AD, then bind first with the search user first if ($this->serverType == "activedirectory") { $this->bindauth($this->searchUser, $this->searchPassword); } - //permet de choisir le filtre adequat + // Define filter if ($activefilter == 1) { - $filter = '('.$this->filter.')'; + if ($this->filter) $filter = '('.$this->filter.')'; + else $filter='('.$useridentifier.'=*)'; } else { $filter = '('.$useridentifier.'='.$search.')'; } - $this->result = @ldap_search($this->connection, $userDn, $filter); - + if (is_array($attributeArray)) + { + // Return list with required fields + dolibarr_syslog("Ldap::getUsers connection=".$this->connection." userDn=".$userDn." filter=".$filter. " attributeArray=(".join(',',$attributeArray).")"); + $this->result = @ldap_search($this->connection, $userDn, $filter, $attributeArray); + } + else + { + // Return list with fields selected by default + dolibarr_syslog("Ldap::getUsers connection=".$this->connection." userDn=".$userDn." filter=".$filter); + $this->result = @ldap_search($this->connection, $userDn, $filter); + } if (!$this->result) { - $this->error = ldap_errno($this->connection)." ".ldap_error($this->connection); + $this->error = 'LDAP search failed: '.ldap_errno($this->connection)." ".ldap_error($this->connection); return -1; } $info = @ldap_get_entries($this->connection, $this->result); + + // Warning: Dans info, les noms d'attributs sont en minuscule meme si passé + // a ldap_search en majuscule !!! //print_r($info); - for ($i = 0; $i < $info["count"]; $i++) - { - $recordid=$this->ldap_utf8_decode($info[$i][$useridentifier][0]); - if ($recordid) - { - //print "Found record with key $useridentifier=".$recordid."
\n"; - $userslist[$recordid][$useridentifier]=$recordid; - - // Add to the array for each attribute in my list - for ($j = 0; $j < count($attributeArray); $j++) - { - //print " Param ".$attributeArray[$j]."=".$info[$i][$attributeArray[$j]][0]."
\n"; - - //permet de récupérer le SID avec Active Directory - if ($this->serverType == "activedirectory" && strtolower($attributeArray[$j]) == "objectsid") - { - $objectsid = $this->getObjectSid($recordid); - $userslist[$recordid][$attributeArray[$j]] = $objectsid; - } - else - { - $userslist[$recordid][$attributeArray[$j]] = $this->ldap_utf8_decode($info[$i][$attributeArray[$j]][0]); - } - } - } - } + + for ($i = 0; $i < $info["count"]; $i++) + { + $recordid=$this->ldap_utf8_decode($info[$i][$useridentifier][0]); + if ($recordid) + { + //print "Found record with key $useridentifier=".$recordid."
\n"; + $userslist[$recordid][$useridentifier]=$recordid; + + // Add to the array for each attribute in my list + for ($j = 0; $j < count($attributeArray); $j++) + { + $keyattributelower=strtolower($attributeArray[$j]); + //print " Param ".$attributeArray[$j]."=".$info[$i][$keyattributelower][0]."
\n"; + + //permet de récupérer le SID avec Active Directory + if ($this->serverType == "activedirectory" && $keyattributelower == "objectsid") + { + $objectsid = $this->getObjectSid($recordid); + $userslist[$recordid][$attributeArray[$j]] = $objectsid; + } + else + { + $userslist[$recordid][$attributeArray[$j]] = $this->ldap_utf8_decode($info[$i][$keyattributelower][0]); + } + } + } + } asort($userslist); return $userslist; diff --git a/htdocs/user/fiche.php b/htdocs/user/fiche.php index 200502d3e74..6a8d8c93d6c 100644 --- a/htdocs/user/fiche.php +++ b/htdocs/user/fiche.php @@ -345,7 +345,7 @@ if ($_POST["action"] == 'adduserldap') // Remove from required_fields all entries not configured in LDAP (empty) and duplicated $required_fields=array_unique(array_values(array_filter($required_fields, "dolValidElement"))); - $ldapusers = $ldap->getUsers($selecteduser, $conf->global->LDAP_USER_DN, $conf->global->LDAP_KEY_USERS, $required_fields); + $ldapusers = $ldap->getRecords($selecteduser, $conf->global->LDAP_USER_DN, $conf->global->LDAP_KEY_USERS, $required_fields); //print_r($ldapusers); if (is_array($ldapusers)) @@ -419,7 +419,7 @@ if (($action == 'create') || ($action == 'adduserldap')) $required_fields=array_unique(array_values(array_filter($required_fields, "dolValidElement"))); // Get from LDAP database an array of results - $ldapusers = $ldap->getUsers('*', $conf->global->LDAP_USER_DN, $conf->global->LDAP_KEY_USERS, $required_fields, 1); + $ldapusers = $ldap->getRecords('*', $conf->global->LDAP_USER_DN, $conf->global->LDAP_KEY_USERS, $required_fields, 1); if (is_array($ldapusers)) { $liste=array();