diff --git a/www/class/centreonLDAP.class.php b/www/class/centreonLDAP.class.php index 693e25c55fef00bdf608bf0577d75e82182ad6cc..8b9924dd29aa6baef8d3b1d11ef715fb51eb0395 100644 --- a/www/class/centreonLDAP.class.php +++ b/www/class/centreonLDAP.class.php @@ -475,18 +475,27 @@ class CentreonLDAP */ public function listUserForGroup($groupdn) { - if (trim($this->groupSearchInfo['member']) == '') { + $this->setErrorHandler(); + if (trim($this->userSearchInfo['filter']) == '') { + restore_error_handler(); + return array(); + } + $groupdn = str_replace('\\', '\\\\', $groupdn); + $filter = '(&' . preg_replace('/%s/', '*', $this->userSearchInfo['filter']) . + '(' . $this->userSearchInfo['group'] . '=' . $this->replaceFilter($groupdn) . '))'; + $result = @ldap_search($this->ds, $this->userSearchInfo['base_search'], $filter); + if (false === $result) { + restore_error_handler(); return array(); } - $group = $this->getEntry($groupdn, $this->groupSearchInfo['member']); + $entries = ldap_get_entries($this->ds, $result); + $nbEntries = $entries["count"]; $list = array(); - if (!isset($group[$this->groupSearchInfo['member']])) { - return $list; - } elseif (is_array($group[$this->groupSearchInfo['member']])) { - return $group[$this->groupSearchInfo['member']]; - } else { - return array($group[$this->groupSearchInfo['member']]); + for ($i = 0; $i < $nbEntries; $i++) { + $list[] = $entries[$i]['dn']; } + restore_error_handler(); + return $list; } /** diff --git a/www/include/configuration/configObject/contact/DB-Func.php b/www/include/configuration/configObject/contact/DB-Func.php index a9f359b77f62bbee0607a3a0627d2bde855c4581..9d059544b3128e41fcdcf43d2f628e042453f8a8 100644 --- a/www/include/configuration/configObject/contact/DB-Func.php +++ b/www/include/configuration/configObject/contact/DB-Func.php @@ -919,7 +919,10 @@ function insertLdapContactInDB($tmpContacts = array()) } $pearDB->query(sprintf($sqlUpdate, $tmplSql)); } - $listGroup = $ldap->listGroupsForUser($tmpContacts["dn"][$select_key]); + $listGroup = array(); + if (false !== $ldap->connect()) { + $listGroup = $ldap->listGroupsForUser($tmpContacts["dn"][$select_key]); + } if (count($listGroup) > 0) { $query = "SELECT cg_id FROM contactgroup WHERE cg_name IN ('" . join("','", $listGroup) . "')"; $res = $pearDB->query($query);