summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap/lib
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2018-02-26 15:10:52 +0100
committerGitHub <noreply@github.com>2018-02-26 15:10:52 +0100
commit88ece3f5d7b061ab604edbb336747b3f2f61ba52 (patch)
treeec8852ace5dc24d8fe2f0bdc1acac629e64585c5 /apps/user_ldap/lib
parentbf2f744bc7e82e754a368dca72df6fc1bc01e3a8 (diff)
parentfb2ebbd23266a54b2430046913bda88996df40d4 (diff)
downloadnextcloud-server-88ece3f5d7b061ab604edbb336747b3f2f61ba52.tar.gz
nextcloud-server-88ece3f5d7b061ab604edbb336747b3f2f61ba52.zip
Merge pull request #8532 from nextcloud/8499-stable13
[stable13] Avoid fruitless login attempts
Diffstat (limited to 'apps/user_ldap/lib')
-rw-r--r--apps/user_ldap/lib/Connection.php33
1 files changed, 30 insertions, 3 deletions
diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php
index c73a35e6bf1..5105c12a22f 100644
--- a/apps/user_ldap/lib/Connection.php
+++ b/apps/user_ldap/lib/Connection.php
@@ -86,6 +86,8 @@ class Connection extends LDAPUtility {
protected $ignoreValidation = false;
+ protected $bindResult = [];
+
/**
* Constructor
* @param ILDAPWrapper $ldap
@@ -113,7 +115,8 @@ class Connection extends LDAPUtility {
public function __destruct() {
if(!$this->dontDestruct && $this->ldap->isResource($this->ldapConnectionRes)) {
@$this->ldap->unbind($this->ldapConnectionRes);
- };
+ }
+ $this->bindResult = [];
}
/**
@@ -202,6 +205,7 @@ class Connection extends LDAPUtility {
if(!is_null($this->ldapConnectionRes)) {
@$this->ldap->unbind($this->ldapConnectionRes);
$this->ldapConnectionRes = null;
+ $this->bindResult = [];
}
}
@@ -560,6 +564,7 @@ class Connection extends LDAPUtility {
if($isBackupHost && ($error !== 0 || $isOverrideMainServer)) {
$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;
@@ -612,13 +617,35 @@ class Connection extends LDAPUtility {
if(!$this->configuration->ldapConfigurationActive) {
return false;
}
- $cr = $this->getConnectionResource();
+ $cr = $this->ldapConnectionRes;
if(!$this->ldap->isResource($cr)) {
- return false;
+ $cr = $this->getConnectionResource();
}
+
+ if(
+ count($this->bindResult) !== 0
+ && $this->bindResult['dn'] === $this->configuration->ldapAgentName
+ && \OC::$server->getHasher()->verify(
+ $this->configPrefix . $this->configuration->ldapAgentPassword,
+ $this->bindResult['hash']
+ )
+ ) {
+ // don't attempt to bind again with the same data as before
+ // bind might have been invoked via getConnectionResource(),
+ // but we need results specifically for e.g. user login
+ return $this->bindResult['result'];
+ }
+
$ldapLogin = @$this->ldap->bind($cr,
$this->configuration->ldapAgentName,
$this->configuration->ldapAgentPassword);
+
+ $this->bindResult = [
+ 'dn' => $this->configuration->ldapAgentName,
+ 'hash' => \OC::$server->getHasher()->hash($this->configPrefix . $this->configuration->ldapAgentPassword),
+ 'result' => $ldapLogin,
+ ];
+
if(!$ldapLogin) {
$errno = $this->ldap->errno($cr);