Do not send a pagination control with size = 0 if cookie is empty

It only makes sense to send a pagination control with size 0 with a
 cookie to abandon a paged search.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
pull/37197/head
Côme Chilliet 2023-03-13 16:05:41 +07:00
parent 4b79e75072
commit d82d6df646
No known key found for this signature in database
GPG Key ID: A3E2F658B28C760A
1 changed files with 13 additions and 9 deletions

@ -190,14 +190,18 @@ class LDAP implements ILDAPWrapper {
* {@inheritDoc}
*/
public function search($link, $baseDN, $filter, $attr, $attrsOnly = 0, $limit = 0, int $pageSize = 0, string $cookie = '') {
$serverControls = [[
'oid' => LDAP_CONTROL_PAGEDRESULTS,
'value' => [
'size' => $pageSize,
'cookie' => $cookie,
],
'iscritical' => false,
]];
if ($pageSize > 0 || $cookie !== '') {
$serverControls = [[
'oid' => LDAP_CONTROL_PAGEDRESULTS,
'value' => [
'size' => $pageSize,
'cookie' => $cookie,
],
'iscritical' => false,
]];
} else {
$serverControls = [];
}
$oldHandler = set_error_handler(function ($no, $message, $file, $line) use (&$oldHandler) {
if (strpos($message, 'Partial search results returned: Sizelimit exceeded') !== false) {
@ -387,7 +391,7 @@ class LDAP implements ILDAPWrapper {
if ($this->isResource($this->curArgs[0])) {
$resource = $this->curArgs[0];
} elseif (
$functionName === 'ldap_search'
$functionName === 'ldap_search'
&& is_array($this->curArgs[0])
&& $this->isResource($this->curArgs[0][0])
) {