diff --git a/lam/lib/modules/posixAccount.inc b/lam/lib/modules/posixAccount.inc index 8946d9fc..8657913a 100644 --- a/lam/lib/modules/posixAccount.inc +++ b/lam/lib/modules/posixAccount.inc @@ -2981,27 +2981,28 @@ class posixAccount extends baseModule implements passwordService { if ($this->groupCache != null) { return $this->groupCache; } - $typeSettings = $_SESSION['config']->get_typeSettings(); - $filter = '(objectClass=posixGroup)'; - if ($this->isWindows()) { - $filter = '(&(objectClass=group)(gidNumber=*))'; - } - if (!empty($typeSettings['filter_group'])) { - $typeFilter = $typeSettings['filter_group']; - if (strpos($typeFilter, '(') !== 0) { - $typeFilter = '(' . $typeFilter . ')'; + $this->groupCache = array(); + $typeManager = new TypeManager(); + foreach ($typeManager->getConfiguredTypesForScope('group') as $type) { + $filter = '(objectClass=posixGroup)'; + if ($this->isWindows()) { + $filter = '(&(objectClass=group)(gidNumber=*))'; } - $filter = '(&' . $filter . $typeFilter . ')'; - } - $results = searchLDAPByFilter($filter, array('cn', 'gidnumber'), array('group')); - $return = array(); - for ($i = 0; $i < sizeof($results); $i++) { - if (isset($results[$i]['cn'][0]) && isset($results[$i]['gidnumber'][0])) { - $return[] = array($results[$i]['gidnumber'][0], $results[$i]['cn'][0]); + $typeFilter = $type->getAdditionalLdapFilter(); + if (!empty($typeFilter)) { + if (strpos($typeFilter, '(') !== 0) { + $typeFilter = '(' . $typeFilter . ')'; + } + $filter = '(&' . $filter . $typeFilter . ')'; + } + $results = searchLDAP($type->getSuffix(), $filter, array('cn', 'gidnumber')); + for ($i = 0; $i < sizeof($results); $i++) { + if (isset($results[$i]['cn'][0]) && isset($results[$i]['gidnumber'][0])) { + $this->groupCache[] = array($results[$i]['gidnumber'][0], $results[$i]['cn'][0]); + } } } - $this->groupCache = $return; - return $return; + return $this->groupCache; } /**