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-28 20:12:39 +0200 |
commit | 5f1cfbc4acbfc2fef12ab894d67fcb5892520b3f (patch) | |
tree | be7cc9cec0d316e2d1376c2c7593cade05d35ff4 | |
parent | c7c7433f11f16d6b9160dc38c646a6b7f9df0fdf (diff) | |
download | nextcloud-server-5f1cfbc4acbfc2fef12ab894d67fcb5892520b3f.tar.gz nextcloud-server-5f1cfbc4acbfc2fef12ab894d67fcb5892520b3f.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>
-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 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(); } @@ -1045,52 +1048,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 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 */ |