diff options
Diffstat (limited to 'apps/user_ldap/lib/access.php')
-rw-r--r-- | apps/user_ldap/lib/access.php | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index 6d32e9b2ab0..04f73cf01fe 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -87,7 +87,7 @@ abstract class Access { for($i=0;$i<$result[$attr]['count'];$i++) { if($this->resemblesDN($attr)) { $values[] = $this->sanitizeDN($result[$attr][$i]); - } elseif(strtolower($attr) == 'objectguid' || strtolower($attr) == 'guid') { + } elseif(strtolower($attr) === 'objectguid' || strtolower($attr) === 'guid') { $values[] = $this->convertObjectGUID2Str($result[$attr][$i]); } else { $values[] = $result[$attr][$i]; @@ -317,7 +317,19 @@ abstract class Access { } $ldapname = $ldapname[0]; } - $intname = $isUser ? $this->sanitizeUsername($uuid) : $this->sanitizeUsername($ldapname); + + if($isUser) { + $usernameAttribute = $this->connection->ldapExpertUsernameAttr; + if(!emptY($usernameAttribute)) { + $username = $this->readAttribute($dn, $usernameAttribute); + $username = $username[0]; + } else { + $username = $uuid; + } + $intname = $this->sanitizeUsername($username); + } else { + $intname = $ldapname; + } //a new user/group! Add it only if it doesn't conflict with other backend's users or existing groups //disabling Cache is required to avoid that the new user is cached as not-existing in fooExists check @@ -429,8 +441,8 @@ abstract class Access { //while loop is just a precaution. If a name is not generated within //20 attempts, something else is very wrong. Avoids infinite loop. while($attempts < 20){ - $altName = $name . '_' . uniqid(); - if(\OCP\User::userExists($altName)) { + $altName = $name . '_' . rand(1000,9999); + if(!\OCP\User::userExists($altName)) { return $altName; } $attempts++; @@ -462,7 +474,7 @@ abstract class Access { while($row = $res->fetchRow()) { $usedNames[] = $row['owncloud_name']; } - if(!($usedNames) || count($usedNames) == 0) { + if(!($usedNames) || count($usedNames) === 0) { $lastNo = 1; //will become name_2 } else { natsort($usedNames); @@ -550,7 +562,7 @@ abstract class Access { $sqlAdjustment = ''; $dbtype = \OCP\Config::getSystemValue('dbtype'); - if($dbtype == 'mysql') { + if($dbtype === 'mysql') { $sqlAdjustment = 'FROM DUAL'; } @@ -574,7 +586,7 @@ abstract class Access { $insRows = $res->numRows(); - if($insRows == 0) { + if($insRows === 0) { return false; } @@ -656,7 +668,7 @@ abstract class Access { $linkResources = array_pad(array(), count($base), $link_resource); $sr = ldap_search($linkResources, $base, $filter, $attr); $error = ldap_errno($link_resource); - if(!is_array($sr) || $error != 0) { + if(!is_array($sr) || $error !== 0) { \OCP\Util::writeLog('user_ldap', 'Error when searching: '.ldap_error($link_resource).' code '.ldap_errno($link_resource), \OCP\Util::ERROR); @@ -724,7 +736,7 @@ abstract class Access { foreach($attr as $key) { $key = mb_strtolower($key, 'UTF-8'); if(isset($item[$key])) { - if($key != 'dn') { + if($key !== 'dn') { $selection[$i][$key] = $this->resemblesDN($key) ? $this->sanitizeDN($item[$key][0]) : $item[$key][0]; @@ -816,7 +828,7 @@ abstract class Access { private function combineFilter($filters, $operator) { $combinedFilter = '('.$operator; foreach($filters as $filter) { - if($filter[0] != '(') { + if($filter[0] !== '(') { $filter = '('.$filter.')'; } $combinedFilter.=$filter; @@ -857,7 +869,7 @@ abstract class Access { private function getFilterPartForSearch($search, $searchAttributes, $fallbackAttribute) { $filter = array(); $search = empty($search) ? '*' : '*'.$search.'*'; - if(!is_array($searchAttributes) || count($searchAttributes) == 0) { + if(!is_array($searchAttributes) || count($searchAttributes) === 0) { if(empty($fallbackAttribute)) { return ''; } @@ -867,7 +879,7 @@ abstract class Access { $filter[] = $attribute . '=' . $search; } } - if(count($filter) == 1) { + if(count($filter) === 1) { return '('.$filter[0].')'; } return $this->combineFilterWithOr($filter); @@ -893,7 +905,13 @@ abstract class Access { * @returns true on success, false otherwise */ private function detectUuidAttribute($dn, $force = false) { - if(($this->connection->ldapUuidAttribute != 'auto') && !$force) { + if(($this->connection->ldapUuidAttribute !== 'auto') && !$force) { + return true; + } + + $fixedAttribute = $this->connection->ldapExpertUUIDAttr; + if(!empty($fixedAttribute)) { + $this->connection->ldapUuidAttribute = $fixedAttribute; return true; } @@ -1007,7 +1025,7 @@ abstract class Access { * @returns string containing the key or empty if none is cached */ private function getPagedResultCookie($base, $filter, $limit, $offset) { - if($offset == 0) { + if($offset === 0) { return ''; } $offset -= $limit; @@ -1031,7 +1049,7 @@ abstract class Access { */ private function setPagedResultCookie($base, $filter, $limit, $offset, $cookie) { if(!empty($cookie)) { - $cachekey = 'lc' . dechex(crc32($base)) . '-' . dechex(crc32($filter)) . '-' .$limit . '-' . $offset; + $cachekey = 'lc' . crc32($base) . '-' . crc32($filter) . '-' .$limit . '-' . $offset; $cookie = $this->connection->writeToCache($cachekey, $cookie); } } |