Merge pull request #26799 from nextcloud/backport/26785/stable19
[stable19] LDAP: do not bother to search after the last page
This commit is contained in:
commit
435ce0d971
|
@ -25,6 +25,7 @@ return array(
|
||||||
'OCA\\User_LDAP\\Controller\\RenewPasswordController' => $baseDir . '/../lib/Controller/RenewPasswordController.php',
|
'OCA\\User_LDAP\\Controller\\RenewPasswordController' => $baseDir . '/../lib/Controller/RenewPasswordController.php',
|
||||||
'OCA\\User_LDAP\\Exceptions\\AttributeNotSet' => $baseDir . '/../lib/Exceptions/AttributeNotSet.php',
|
'OCA\\User_LDAP\\Exceptions\\AttributeNotSet' => $baseDir . '/../lib/Exceptions/AttributeNotSet.php',
|
||||||
'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => $baseDir . '/../lib/Exceptions/ConstraintViolationException.php',
|
'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => $baseDir . '/../lib/Exceptions/ConstraintViolationException.php',
|
||||||
|
'OCA\\User_LDAP\\Exceptions\\NoMoreResults' => $baseDir . '/../lib/Exceptions/NoMoreResults.php',
|
||||||
'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => $baseDir . '/../lib/Exceptions/NotOnLDAP.php',
|
'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => $baseDir . '/../lib/Exceptions/NotOnLDAP.php',
|
||||||
'OCA\\User_LDAP\\FilesystemHelper' => $baseDir . '/../lib/FilesystemHelper.php',
|
'OCA\\User_LDAP\\FilesystemHelper' => $baseDir . '/../lib/FilesystemHelper.php',
|
||||||
'OCA\\User_LDAP\\GroupPluginManager' => $baseDir . '/../lib/GroupPluginManager.php',
|
'OCA\\User_LDAP\\GroupPluginManager' => $baseDir . '/../lib/GroupPluginManager.php',
|
||||||
|
|
|
@ -40,6 +40,7 @@ class ComposerStaticInitUser_LDAP
|
||||||
'OCA\\User_LDAP\\Controller\\RenewPasswordController' => __DIR__ . '/..' . '/../lib/Controller/RenewPasswordController.php',
|
'OCA\\User_LDAP\\Controller\\RenewPasswordController' => __DIR__ . '/..' . '/../lib/Controller/RenewPasswordController.php',
|
||||||
'OCA\\User_LDAP\\Exceptions\\AttributeNotSet' => __DIR__ . '/..' . '/../lib/Exceptions/AttributeNotSet.php',
|
'OCA\\User_LDAP\\Exceptions\\AttributeNotSet' => __DIR__ . '/..' . '/../lib/Exceptions/AttributeNotSet.php',
|
||||||
'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => __DIR__ . '/..' . '/../lib/Exceptions/ConstraintViolationException.php',
|
'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => __DIR__ . '/..' . '/../lib/Exceptions/ConstraintViolationException.php',
|
||||||
|
'OCA\\User_LDAP\\Exceptions\\NoMoreResults' => __DIR__ . '/..' . '/../lib/Exceptions/NoMoreResults.php',
|
||||||
'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => __DIR__ . '/..' . '/../lib/Exceptions/NotOnLDAP.php',
|
'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => __DIR__ . '/..' . '/../lib/Exceptions/NotOnLDAP.php',
|
||||||
'OCA\\User_LDAP\\FilesystemHelper' => __DIR__ . '/..' . '/../lib/FilesystemHelper.php',
|
'OCA\\User_LDAP\\FilesystemHelper' => __DIR__ . '/..' . '/../lib/FilesystemHelper.php',
|
||||||
'OCA\\User_LDAP\\GroupPluginManager' => __DIR__ . '/..' . '/../lib/GroupPluginManager.php',
|
'OCA\\User_LDAP\\GroupPluginManager' => __DIR__ . '/..' . '/../lib/GroupPluginManager.php',
|
||||||
|
|
|
@ -51,6 +51,7 @@ use OC\HintException;
|
||||||
use OC\Hooks\PublicEmitter;
|
use OC\Hooks\PublicEmitter;
|
||||||
use OC\ServerNotAvailableException;
|
use OC\ServerNotAvailableException;
|
||||||
use OCA\User_LDAP\Exceptions\ConstraintViolationException;
|
use OCA\User_LDAP\Exceptions\ConstraintViolationException;
|
||||||
|
use OCA\User_LDAP\Exceptions\NoMoreResults;
|
||||||
use OCA\User_LDAP\Mapping\AbstractMapping;
|
use OCA\User_LDAP\Mapping\AbstractMapping;
|
||||||
use OCA\User_LDAP\User\Manager;
|
use OCA\User_LDAP\User\Manager;
|
||||||
use OCA\User_LDAP\User\OfflineUser;
|
use OCA\User_LDAP\User\OfflineUser;
|
||||||
|
@ -267,7 +268,14 @@ class Access extends LDAPUtility {
|
||||||
* @throws ServerNotAvailableException
|
* @throws ServerNotAvailableException
|
||||||
*/
|
*/
|
||||||
public function executeRead($cr, $dn, $attribute, $filter, $maxResults) {
|
public function executeRead($cr, $dn, $attribute, $filter, $maxResults) {
|
||||||
|
try {
|
||||||
$this->initPagedSearch($filter, $dn, [$attribute], $maxResults, 0);
|
$this->initPagedSearch($filter, $dn, [$attribute], $maxResults, 0);
|
||||||
|
} catch (NoMoreResults $e) {
|
||||||
|
// does not happen, no pagination here since offset is 0, but the
|
||||||
|
// previous call is needed for a potential reset of the state.
|
||||||
|
// Tools would still point out a possible NoMoreResults exception.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
$dn = $this->helper->DNasBaseParameter($dn);
|
$dn = $this->helper->DNasBaseParameter($dn);
|
||||||
$rr = @$this->invokeLDAPMethod('read', $cr, $dn, $filter, [$attribute]);
|
$rr = @$this->invokeLDAPMethod('read', $cr, $dn, $filter, [$attribute]);
|
||||||
if (!$this->ldap->isResource($rr)) {
|
if (!$this->ldap->isResource($rr)) {
|
||||||
|
@ -1146,7 +1154,12 @@ class Access extends LDAPUtility {
|
||||||
}
|
}
|
||||||
|
|
||||||
//check whether paged search should be attempted
|
//check whether paged search should be attempted
|
||||||
|
try {
|
||||||
$pagedSearchOK = $this->initPagedSearch($filter, $base, $attr, (int)$limit, (int)$offset);
|
$pagedSearchOK = $this->initPagedSearch($filter, $base, $attr, (int)$limit, (int)$offset);
|
||||||
|
} catch (NoMoreResults $e) {
|
||||||
|
// beyond last results page
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$sr = $this->invokeLDAPMethod('search', $cr, $base, $filter, $attr);
|
$sr = $this->invokeLDAPMethod('search', $cr, $base, $filter, $attr);
|
||||||
// cannot use $cr anymore, might have changed in the previous call!
|
// cannot use $cr anymore, might have changed in the previous call!
|
||||||
|
@ -1999,6 +2012,7 @@ class Access extends LDAPUtility {
|
||||||
* @param int $offset
|
* @param int $offset
|
||||||
* @return bool|true
|
* @return bool|true
|
||||||
* @throws ServerNotAvailableException
|
* @throws ServerNotAvailableException
|
||||||
|
* @throws NoMoreResults
|
||||||
*/
|
*/
|
||||||
private function initPagedSearch(
|
private function initPagedSearch(
|
||||||
string $filter,
|
string $filter,
|
||||||
|
@ -2030,7 +2044,7 @@ class Access extends LDAPUtility {
|
||||||
if (!$this->hasMoreResults()) {
|
if (!$this->hasMoreResults()) {
|
||||||
// when the cookie is reset with != 0 offset, there are no further
|
// when the cookie is reset with != 0 offset, there are no further
|
||||||
// results, so stop.
|
// results, so stop.
|
||||||
return false;
|
throw new NoMoreResults();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($this->lastCookie !== '' && $offset === 0) {
|
if ($this->lastCookie !== '' && $offset === 0) {
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (c) 2021 Arthur Schiwon <blizzz@arthur-schiwon.de>
|
||||||
|
*
|
||||||
|
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
|
||||||
|
*
|
||||||
|
* @license GNU AGPL version 3 or any later version
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace OCA\User_LDAP\Exceptions;
|
||||||
|
|
||||||
|
class NoMoreResults extends \Exception {
|
||||||
|
}
|
Loading…
Reference in New Issue