LDAP: fix potential infinite loop introduced with 4c4aa92eef
, as side effect optimize groupExists-method.
This commit is contained in:
parent
8be8f6fff2
commit
741a21292e
|
@ -232,7 +232,26 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function groupExists($gid){
|
public function groupExists($gid){
|
||||||
return in_array($gid, $this->getGroups());
|
if($this->connection->isCached('groupExists'.$gid)) {
|
||||||
|
return $this->connection->getFromCache('groupExists'.$gid);
|
||||||
|
}
|
||||||
|
|
||||||
|
//getting dn, if false the group does not exist. If dn, it may be mapped only, requires more checking.
|
||||||
|
$dn = $this->username2dn($gid);
|
||||||
|
if(!$dn) {
|
||||||
|
$this->connection->writeToCache('groupExists'.$gid, false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//if group really still exists, we will be able to read its objectclass
|
||||||
|
$objcs = $this->readAttribute($dn, 'objectclass');
|
||||||
|
if(!$objcs || empty($objcs)) {
|
||||||
|
$this->connection->writeToCache('groupExists'.$gid, false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->connection->writeToCache('groupExists'.$gid, true);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -137,20 +137,6 @@ abstract class Access {
|
||||||
$dn = $this->ocname2dn($name, true);
|
$dn = $this->ocname2dn($name, true);
|
||||||
if($dn) {
|
if($dn) {
|
||||||
return $dn;
|
return $dn;
|
||||||
} else {
|
|
||||||
//fallback: user is not mapped
|
|
||||||
$filter = $this->combineFilterWithAnd(array(
|
|
||||||
$this->connection->ldapUserFilter,
|
|
||||||
$this->connection->ldapUserDisplayName . '=' . $name,
|
|
||||||
));
|
|
||||||
$result = $this->searchUsers($filter, 'dn');
|
|
||||||
if(isset($result[0]['dn'])) {
|
|
||||||
//try mapping, if names equalize return DN
|
|
||||||
$uid = $this->dn2username($result[0]['dn']);
|
|
||||||
if($uid == $name) {
|
|
||||||
return $result[0]['dn'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue