summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2018-11-15 10:48:57 +0100
committerGitHub <noreply@github.com>2018-11-15 10:48:57 +0100
commit159d75945a57be7a391cc16a17744adfd4376473 (patch)
tree77d0a73948ef9780f6793869e0468f5732625cbd /apps/user_ldap
parentd70b010432292b0a6fb4ed96f504ee81fd2a352e (diff)
parentdeec5a70a00ac930d67c439c99a1a3fbf09af9ac (diff)
downloadnextcloud-server-159d75945a57be7a391cc16a17744adfd4376473.tar.gz
nextcloud-server-159d75945a57be7a391cc16a17744adfd4376473.zip
Merge pull request #12292 from nextcloud/fix/2947/lapse-sizelimit-error
avoid logging of "Partial search results returned: Sizelimit exceeded…"
Diffstat (limited to 'apps/user_ldap')
-rw-r--r--apps/user_ldap/lib/LDAP.php18
-rw-r--r--apps/user_ldap/tests/LDAPTest.php40
2 files changed, 57 insertions, 1 deletions
diff --git a/apps/user_ldap/lib/LDAP.php b/apps/user_ldap/lib/LDAP.php
index 2411b8d3438..e6039c77d12 100644
--- a/apps/user_ldap/lib/LDAP.php
+++ b/apps/user_ldap/lib/LDAP.php
@@ -189,9 +189,24 @@ class LDAP implements ILDAPWrapper {
* @param int $attrsOnly
* @param int $limit
* @return mixed
+ * @throws \Exception
*/
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;
+ });
+ try {
+ $result = $this->invokeLDAPMethod('search', $link, $baseDN, $filter, $attr, $attrsOnly, $limit);
+ restore_error_handler();
+ return $result;
+ } catch (\Exception $e) {
+ restore_error_handler();
+ throw $e;
+ }
}
/**
@@ -342,6 +357,7 @@ class LDAP implements ILDAPWrapper {
/**
* Called after an ldap method is run to act on LDAP error if necessary
+ * @throw \Exception
*/
private function postFunctionCall() {
if($this->isResource($this->curArgs[0])) {
diff --git a/apps/user_ldap/tests/LDAPTest.php b/apps/user_ldap/tests/LDAPTest.php
index 8e181741b50..3e754dbd272 100644
--- a/apps/user_ldap/tests/LDAPTest.php
+++ b/apps/user_ldap/tests/LDAPTest.php
@@ -37,6 +37,46 @@ class LDAPTest extends TestCase {
->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';