summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorblizzz <blizzz@owncloud.com>2014-03-21 18:02:10 +0100
committerblizzz <blizzz@owncloud.com>2014-03-21 18:02:10 +0100
commit4be0b3f6cce540282c6745d6bf3d2a0fa4ac65b4 (patch)
tree371dd2eaacacdb7129d1ecd3c82023e375c107b7
parent43313d120dfd943e823f2f4ff12b6f5893284743 (diff)
parent422ccf4cdb7558cea6c3c92cca3c5ea4ce192f44 (diff)
downloadnextcloud-server-4be0b3f6cce540282c6745d6bf3d2a0fa4ac65b4.tar.gz
nextcloud-server-4be0b3f6cce540282c6745d6bf3d2a0fa4ac65b4.zip
Merge pull request #7844 from owncloud/fix_7803_blizzz
LDAP: create a new instance of Configuration on clone, fixes #7803
-rw-r--r--apps/user_ldap/lib/configuration.php4
-rw-r--r--apps/user_ldap/lib/connection.php2
-rw-r--r--apps/user_ldap/tests/connection.php54
3 files changed, 58 insertions, 2 deletions
diff --git a/apps/user_ldap/lib/configuration.php b/apps/user_ldap/lib/configuration.php
index 612a623e910..d42b1c05820 100644
--- a/apps/user_ldap/lib/configuration.php
+++ b/apps/user_ldap/lib/configuration.php
@@ -119,9 +119,9 @@ class Configuration {
$cta = $this->getConfigTranslationArray();
foreach($config as $inputkey => $val) {
- if(strpos($inputkey, '_') !== false && isset($cta[$inputkey])) {
+ if(strpos($inputkey, '_') !== false && array_key_exists($inputkey, $cta)) {
$key = $cta[$inputkey];
- } elseif(isset($this->config[$inputkey])) {
+ } elseif(array_key_exists($inputkey, $this->config)) {
$key = $inputkey;
} else {
continue;
diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php
index b2075748a3b..08ac4ac626b 100644
--- a/apps/user_ldap/lib/connection.php
+++ b/apps/user_ldap/lib/connection.php
@@ -78,6 +78,8 @@ class Connection extends LDAPUtility {
//a cloned instance inherits the connection resource. It may use it,
//but it may not disconnect it
$this->dontDestruct = true;
+ $this->configuration = new Configuration($this->configPrefix,
+ !is_null($this->configID));
}
public function __get($name) {
diff --git a/apps/user_ldap/tests/connection.php b/apps/user_ldap/tests/connection.php
new file mode 100644
index 00000000000..f51b0c83017
--- /dev/null
+++ b/apps/user_ldap/tests/connection.php
@@ -0,0 +1,54 @@
+<?php
+/**
+* ownCloud
+*
+* @author Arthur Schiwon
+* @copyright 2013 Arthur Schiwon blizzz@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+namespace OCA\user_ldap\tests;
+
+class Test_Connection extends \PHPUnit_Framework_TestCase {
+
+ public function testOriginalAgentUnchangedOnClone() {
+ //background: upon login a bind is done with the user credentials
+ //which is valid for the whole LDAP resource. It needs to be reset
+ //to the agent's credentials
+ $lw = $this->getMock('\OCA\user_ldap\lib\ILDAPWrapper');
+
+ $connection = new \OCA\user_ldap\lib\Connection($lw, '', null);
+ $agent = array(
+ 'ldapAgentName' => 'agent',
+ 'ldapAgentPassword' => '123456',
+ );
+ $connection->setConfiguration($agent);
+
+ $testConnection = clone $connection;
+ $user = array(
+ 'ldapAgentName' => 'user',
+ 'ldapAgentPassword' => 'password',
+ );
+ $testConnection->setConfiguration($user);
+
+ $agentName = $connection->ldapAgentName;
+ $agentPawd = $connection->ldapAgentPassword;
+
+ $this->assertSame($agentName, $agent['ldapAgentName']);
+ $this->assertSame($agentPawd, $agent['ldapAgentPassword']);
+ }
+
+} \ No newline at end of file