aboutsummaryrefslogtreecommitdiffstats
path: root/apps
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-27 14:41:10 +0200
commitaed6f0f71ec788a6dbbcdc01198e43fc6b6fb8c9 (patch)
treef6298e375fb0365ac43e3592b8f65366f819bac5 /apps
parenta0771a389af6a4f3ff25410e96b168614b023759 (diff)
downloadnextcloud-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.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 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
*/