summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2020-05-27 14:41:10 +0200
committerArthur Schiwon <blizzz@arthur-schiwon.de>2020-05-28 20:12:39 +0200
commit5f1cfbc4acbfc2fef12ab894d67fcb5892520b3f (patch)
treebe7cc9cec0d316e2d1376c2c7593cade05d35ff4
parentc7c7433f11f16d6b9160dc38c646a6b7f9df0fdf (diff)
downloadnextcloud-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.php57
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
*/