Skip to content

Commit

Permalink
avoid logging of "Partial search results returned: Sizelimit exceeded…
Browse files Browse the repository at this point in the history
… at"

LDAP servers respond with that even if a limit was passed with the
request. Having this statement logged causes a lot of confusion.

Signed-off-by: Arthur Schiwon <[email protected]>
  • Loading branch information
blizzz committed Nov 5, 2018
1 parent 9ea6573 commit 931946f
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 1 deletion.
11 changes: 10 additions & 1 deletion apps/user_ldap/lib/LDAP.php
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,16 @@ public function read($link, $baseDN, $filter, $attr) {
* @return mixed
*/
public function search($link, $baseDN, $filter, $attr, $attrsOnly = 0, $limit = 0) {
return $this->invokeLDAPMethod('search', $link, $baseDN, $filter, $attr, $attrsOnly, $limit);
$oldHandler = set_error_handler(function($no, $message, $file, $line) use (&$oldHandler) {
if(strpos($message, 'Partial search results returned: Sizelimit exceeded') !== false) {
return true;
}
$oldHandler($no, $message, $file, $line);
return true;
});
$result = $this->invokeLDAPMethod('search', $link, $baseDN, $filter, $attr, $attrsOnly, $limit);
restore_error_handler();
return $result;
}

/**
Expand Down
40 changes: 40 additions & 0 deletions apps/user_ldap/tests/LDAPTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,46 @@ public function setUp() {
->getMock();
}

public function errorProvider() {
return [
[
'ldap_search(): Partial search results returned: Sizelimit exceeded at /srv/http/nextcloud/master/apps/user_ldap/lib/LDAP.php#292',
false
],
[
'Some other error', true
]
];
}

/**
* @param string $errorMessage
* @param bool $passThrough
* @dataProvider errorProvider
*/
public function testSearchWithErrorHandler(string $errorMessage, bool $passThrough) {

$wasErrorHandlerCalled = false;
$errorHandler = function($number, $message, $file, $line) use (&$wasErrorHandlerCalled) {
$wasErrorHandlerCalled = true;
};

set_error_handler($errorHandler);

$this->ldap
->expects($this->once())
->method('invokeLDAPMethod')
->with('search', $this->anything(), $this->anything(), $this->anything(), $this->anything(), $this->anything())
->willReturnCallback(function() use($errorMessage) {
trigger_error($errorMessage);
});

$this->ldap->search('pseudo-resource', 'base', 'filter', []);
$this->assertSame($wasErrorHandlerCalled, $passThrough);

restore_error_handler();
}

public function testModReplace() {
$link = $this->createMock(LDAP::class);
$userDN = 'CN=user';
Expand Down

0 comments on commit 931946f

Please sign in to comment.