From 5f1cfbc4acbfc2fef12ab894d67fcb5892520b3f Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Wed, 27 May 2020 14:41:10 +0200 Subject: [PATCH] simplify getGroups, fixing wrong chunking logic pagination is taken care of properly in the search logic in Access class Signed-off-by: Arthur Schiwon --- apps/user_ldap/lib/Group_LDAP.php | 57 ++++--------------------------- 1 file changed, 7 insertions(+), 50 deletions(-) diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php index bdcf9be8d3d..b369842d847 100644 --- a/apps/user_ldap/lib/Group_LDAP.php +++ b/apps/user_ldap/lib/Group_LDAP.php @@ -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 -- 2.39.5