diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2020-05-27 14:41:10 +0200 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2020-05-27 14:41:10 +0200 |
commit | aed6f0f71ec788a6dbbcdc01198e43fc6b6fb8c9 (patch) | |
tree | f6298e375fb0365ac43e3592b8f65366f819bac5 /apps | |
parent | a0771a389af6a4f3ff25410e96b168614b023759 (diff) | |
download | nextcloud-server-aed6f0f71ec788a6dbbcdc01198e43fc6b6fb8c9.tar.gz nextcloud-server-aed6f0f71ec788a6dbbcdc01198e43fc6b6fb8c9.zip |
simplify getGroups, fixing wrong chunking logic
pagination is taken care of properly in the search logic in Access class
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/user_ldap/lib/Group_LDAP.php | 57 |
1 files changed, 7 insertions, 50 deletions
diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php index 0fb8c93d162..a6cd9669c93 100644 --- a/apps/user_ldap/lib/Group_LDAP.php +++ b/apps/user_ldap/lib/Group_LDAP.php @@ -1015,16 +1015,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 []; } @@ -1058,52 +1061,6 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface, IGroupLD } /** - * 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 []; - } - $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 = []; - 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 */ |