diff options
-rw-r--r-- | apps/user_ldap/lib/Connection.php | 50 | ||||
-rw-r--r-- | apps/user_ldap/tests/ConnectionTest.php | 2 |
2 files changed, 25 insertions, 27 deletions
diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php index 1cde3bc3960..95ddd3fc51c 100644 --- a/apps/user_ldap/lib/Connection.php +++ b/apps/user_ldap/lib/Connection.php @@ -598,25 +598,26 @@ class Connection extends LDAPUtility { } } - $forceBackupHost = ($this->configuration->ldapOverrideMainServer || $this->getFromCache('overrideMainServer')); $hasBackupHost = (trim($this->configuration->ldapBackupHost ?? '') !== ''); $hasBackgroundHost = (trim($this->configuration->ldapBackgroundHost ?? '') !== ''); - $useBackupHost = $hasBackupHost && (!\OC::$CLI || !$hasBackgroundHost); + $useBackgroundHost = (\OC::$CLI && $hasBackgroundHost); + $overrideCacheKey = ($useBackgroundHost ? 'overrideBackgroundServer' : 'overrideMainServer'); + $forceBackupHost = ($this->configuration->ldapOverrideMainServer || $this->getFromCache($overrideCacheKey)); $bindStatus = false; - try { - if (!$forceBackupHost) { - $host = $this->configuration->ldapHost; - $port = $this->configuration->ldapPort; - if (\OC::$CLI && $hasBackgroundHost) { - $host = $this->configuration->ldapBackgroundHost; - $port = $this->configuration->ldapBackgroundPort; + if (!$forceBackupHost) { + try { + $host = $this->configuration->ldapHost ?? ''; + $port = $this->configuration->ldapPort ?? ''; + if ($useBackgroundHost) { + $host = $this->configuration->ldapBackgroundHost ?? ''; + $port = $this->configuration->ldapBackgroundPort ?? ''; } $this->doConnect($host, $port); return $this->bind(); - } - } catch (ServerNotAvailableException $e) { - if (!$useBackupHost) { - throw $e; + } catch (ServerNotAvailableException $e) { + if (!$hasBackupHost) { + throw $e; + } } $this->logger->warning( 'Main LDAP not reachable, connecting to backup', @@ -626,19 +627,16 @@ class Connection extends LDAPUtility { ); } - //if LDAP server is not reachable, try the Backup (Replica!) Server - if ($useBackupHost || $forceBackupHost) { - $this->doConnect($this->configuration->ldapBackupHost, - $this->configuration->ldapBackupPort); - $this->bindResult = []; - $bindStatus = $this->bind(); - $error = $this->ldap->isResource($this->ldapConnectionRes) ? - $this->ldap->errno($this->ldapConnectionRes) : -1; - if ($bindStatus && $error === 0 && !$this->getFromCache('overrideMainServer')) { - //when bind to backup server succeeded and failed to main server, - //skip contacting him until next cache refresh - $this->writeToCache('overrideMainServer', true); - } + // if LDAP server is not reachable, try the Backup (Replica!) Server + $this->doConnect($this->configuration->ldapBackupHost ?? '', $this->configuration->ldapBackupPort ?? ''); + $this->bindResult = []; + $bindStatus = $this->bind(); + $error = $this->ldap->isResource($this->ldapConnectionRes) ? + $this->ldap->errno($this->ldapConnectionRes) : -1; + if ($bindStatus && $error === 0 && !$forceBackupHost) { + //when bind to backup server succeeded and failed to main server, + //skip contacting him until next cache refresh + $this->writeToCache($overrideCacheKey, true); } return $bindStatus; diff --git a/apps/user_ldap/tests/ConnectionTest.php b/apps/user_ldap/tests/ConnectionTest.php index 3b771c6d04f..b4e26c922ed 100644 --- a/apps/user_ldap/tests/ConnectionTest.php +++ b/apps/user_ldap/tests/ConnectionTest.php @@ -121,7 +121,7 @@ class ConnectionTest extends \Test\TestCase { ->willReturn(0); // Not called often enough? Then, the fallback to the backup server is broken. - $this->connection->expects($this->exactly(4)) + $this->connection->expects($this->exactly(2)) ->method('getFromCache') ->with('overrideMainServer') ->will($this->onConsecutiveCalls(false, false, true, true)); |