]> source.dussan.org Git - nextcloud-server.git/commitdiff
simplify getGroups, fixing wrong chunking logic 21129/head
authorArthur Schiwon <blizzz@arthur-schiwon.de>
Wed, 27 May 2020 12:41:10 +0000 (14:41 +0200)
committerArthur Schiwon <blizzz@arthur-schiwon.de>
Thu, 28 May 2020 18:12:39 +0000 (20:12 +0200)
pagination is taken care of properly in the search logic in Access class

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
apps/user_ldap/lib/Group_LDAP.php

index bdcf9be8d3dd372882fae70f22c44c7fe2d2a5e8..b369842d8478048f4e12a94c5883727bb03be8d8 100644 (file)
@@ -1002,16 +1002,19 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface, IGroupLD
        }
 
        /**
-        * get a list of all groups
+        * get a list of all groups using a paged search
         *
         * @param string $search
-        * @param $limit
+        * @param int $limit
         * @param int $offset
         * @return array with group names
         *
-        * Returns a list with all groups (used by getGroups)
+        * Returns a list with all groups
+        * Uses a paged search if available to override a
+        * server side search limit.
+        * (active directory has a limit of 1000 by default)
         */
-       protected function getGroupsChunk($search = '', $limit = -1, $offset = 0) {
+       public function getGroups($search = '', $limit = -1, $offset = 0) {
                if(!$this->enabled) {
                        return array();
                }
@@ -1044,52 +1047,6 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface, IGroupLD
                return $ldap_groups;
        }
 
-       /**
-        * get a list of all groups using a paged search
-        *
-        * @param string $search
-        * @param int $limit
-        * @param int $offset
-        * @return array with group names
-        *
-        * Returns a list with all groups
-        * Uses a paged search if available to override a
-        * server side search limit.
-        * (active directory has a limit of 1000 by default)
-        */
-       public function getGroups($search = '', $limit = -1, $offset = 0) {
-               if(!$this->enabled) {
-                       return array();
-               }
-               $search = $this->access->escapeFilterPart($search, true);
-               $pagingSize = (int)$this->access->connection->ldapPagingSize;
-               if ($pagingSize <= 0) {
-                       return $this->getGroupsChunk($search, $limit, $offset);
-               }
-               $maxGroups = 100000; // limit max results (just for safety reasons)
-               if ($limit > -1) {
-                  $overallLimit = min($limit + $offset, $maxGroups);
-               } else {
-                  $overallLimit = $maxGroups;
-               }
-               $chunkOffset = $offset;
-               $allGroups = array();
-               while ($chunkOffset < $overallLimit) {
-                       $chunkLimit = min($pagingSize, $overallLimit - $chunkOffset);
-                       $ldapGroups = $this->getGroupsChunk($search, $chunkLimit, $chunkOffset);
-                       $nread = count($ldapGroups);
-                       \OCP\Util::writeLog('user_ldap', 'getGroups('.$search.'): read '.$nread.' at offset '.$chunkOffset.' (limit: '.$chunkLimit.')', ILogger::DEBUG);
-                       if ($nread) {
-                               $allGroups = array_merge($allGroups, $ldapGroups);
-                               $chunkOffset += $nread;
-                       }
-                       if ($nread < $chunkLimit) {
-                               break;
-                       }
-               }
-               return $allGroups;
-       }
-
        /**
         * @param string $group
         * @return bool