]> source.dussan.org Git - nextcloud-server.git/commitdiff
remove noise from detectUuid and cache results 19626/head
authorArthur Schiwon <blizzz@arthur-schiwon.de>
Wed, 19 Feb 2020 15:42:36 +0000 (16:42 +0100)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Mon, 24 Feb 2020 19:06:57 +0000 (19:06 +0000)
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
apps/user_ldap/lib/Access.php

index 64ee172a8bac1cbe02e8baff9391f5052ffbb6da..3ebd053402bba9e7cd525333d7d9659b244b0f16 100644 (file)
@@ -1676,13 +1676,19 @@ class Access extends LDAPUtility {
                        $uuidOverride = $this->connection->ldapExpertUUIDGroupAttr;
                }
 
-               if(($this->connection->$uuidAttr !== 'auto') && !$force) {
-                       return true;
-               }
+               if(!$force) {
+                       if($this->connection->$uuidAttr !== 'auto') {
+                               return true;
+                       } else if (is_string($uuidOverride) && trim($uuidOverride) !== '') {
+                               $this->connection->$uuidAttr = $uuidOverride;
+                               return true;
+                       }
 
-               if (is_string($uuidOverride) && trim($uuidOverride) !== '' && !$force) {
-                       $this->connection->$uuidAttr = $uuidOverride;
-                       return true;
+                       $attribute = $this->connection->getFromCache($uuidAttr);
+                       if(!$attribute === null) {
+                               $this->connection->$uuidAttr = $attribute;
+                               return true;
+                       }
                }
 
                foreach(self::UUID_ATTRIBUTES as $attribute) {
@@ -1691,27 +1697,29 @@ class Access extends LDAPUtility {
                                if(isset($ldapRecord[$attribute])) {
                                        $this->connection->$uuidAttr = $attribute;
                                        return true;
-                               } else {
-                                       continue;
                                }
+                               continue;
                        }
 
                        $value = $this->readAttribute($dn, $attribute);
                        if(is_array($value) && isset($value[0]) && !empty($value[0])) {
-                               \OCP\Util::writeLog(
-                                       'user_ldap',
-                                       'Setting '.$attribute.' as '.$uuidAttr,
-                                       ILogger::DEBUG
+                               \OC::$server->getLogger()->debug(
+                                       'Setting {attribute} as {subject}',
+                                       [
+                                               'app' => 'user_ldap',
+                                               'attribute' => $attribute,
+                                               'subject' => $uuidAttr
+                                       ]
                                );
                                $this->connection->$uuidAttr = $attribute;
+                               $this->connection->writeToCache($uuidAttr, $attribute);
                                return true;
+                       } elseif ($value === false) {
+                               // record not available
+                               return false;
                        }
                }
-               \OCP\Util::writeLog(
-                       'user_ldap',
-                       'Could not autodetect the UUID attribute',
-                       ILogger::ERROR
-               );
+               \OC::$server->getLogger()->debug('Could not autodetect the UUID attribute', ['app' => 'user_ldap']);
 
                return false;
        }