new type API

This commit is contained in:
Roland Gruber 2017-05-08 19:59:28 +02:00
parent 7b82372a2d
commit 2f5f0caff1
1 changed files with 19 additions and 18 deletions

View File

@ -2981,27 +2981,28 @@ class posixAccount extends baseModule implements passwordService {
if ($this->groupCache != null) { if ($this->groupCache != null) {
return $this->groupCache; return $this->groupCache;
} }
$typeSettings = $_SESSION['config']->get_typeSettings(); $this->groupCache = array();
$filter = '(objectClass=posixGroup)'; $typeManager = new TypeManager();
if ($this->isWindows()) { foreach ($typeManager->getConfiguredTypesForScope('group') as $type) {
$filter = '(&(objectClass=group)(gidNumber=*))'; $filter = '(objectClass=posixGroup)';
} if ($this->isWindows()) {
if (!empty($typeSettings['filter_group'])) { $filter = '(&(objectClass=group)(gidNumber=*))';
$typeFilter = $typeSettings['filter_group'];
if (strpos($typeFilter, '(') !== 0) {
$typeFilter = '(' . $typeFilter . ')';
} }
$filter = '(&' . $filter . $typeFilter . ')'; $typeFilter = $type->getAdditionalLdapFilter();
} if (!empty($typeFilter)) {
$results = searchLDAPByFilter($filter, array('cn', 'gidnumber'), array('group')); if (strpos($typeFilter, '(') !== 0) {
$return = array(); $typeFilter = '(' . $typeFilter . ')';
for ($i = 0; $i < sizeof($results); $i++) { }
if (isset($results[$i]['cn'][0]) && isset($results[$i]['gidnumber'][0])) { $filter = '(&' . $filter . $typeFilter . ')';
$return[] = array($results[$i]['gidnumber'][0], $results[$i]['cn'][0]); }
$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 $this->groupCache;
return $return;
} }
/** /**