summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap
diff options
context:
space:
mode:
authorFrank Karlitschek <frank@owncloud.org>2013-02-11 02:20:03 -0800
committerFrank Karlitschek <frank@owncloud.org>2013-02-11 02:20:03 -0800
commit764409117a88ac0e73f81ceb71f6b96b522b6225 (patch)
tree9b1011d13f98acc6cfe397c98ef7d04173f0e181 /apps/user_ldap
parent04146f2059e2d038177db544ea9f37a124f0781e (diff)
parent1c94ec71eff884238e2269407cca5ee3d02f8a63 (diff)
downloadnextcloud-server-764409117a88ac0e73f81ceb71f6b96b522b6225.tar.gz
nextcloud-server-764409117a88ac0e73f81ceb71f6b96b522b6225.zip
Merge pull request #1493 from owncloud/fix_ldap_stored_homedir
Fix ldap stored homedir
Diffstat (limited to 'apps/user_ldap')
-rw-r--r--apps/user_ldap/appinfo/update.php6
-rw-r--r--apps/user_ldap/appinfo/version2
-rw-r--r--apps/user_ldap/lib/connection.php7
-rw-r--r--apps/user_ldap/user_ldap.php47
4 files changed, 34 insertions, 28 deletions
diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php
index f9681e38e68..bc32d4ef4cc 100644
--- a/apps/user_ldap/appinfo/update.php
+++ b/apps/user_ldap/appinfo/update.php
@@ -87,4 +87,8 @@ if(!isset($connector)) {
}
//it is required, that connections do have ldap_configuration_active setting stored in the database
$connector->getConfiguration();
-$connector->saveConfiguration(); \ No newline at end of file
+$connector->saveConfiguration();
+
+// we don't save it anymore, was a well-meant bad idea. Clean up database.
+$query = OC_DB::prepare('DELETE FROM `*PREFIX*preferences` WHERE `appid` = ? AND `configkey` = ?');
+$query->execute(array('user_ldap' , 'homedir'));
diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version
index 705e30728e0..e4d93c8d610 100644
--- a/apps/user_ldap/appinfo/version
+++ b/apps/user_ldap/appinfo/version
@@ -1 +1 @@
-0.3.9.0 \ No newline at end of file
+0.3.9.4 \ No newline at end of file
diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php
index f92779b1cad..933f2f42074 100644
--- a/apps/user_ldap/lib/connection.php
+++ b/apps/user_ldap/lib/connection.php
@@ -294,6 +294,11 @@ class Connection {
$params = $this->getConfigTranslationArray();
foreach($config as $parameter => $value) {
+ if(($parameter == 'homeFolderNamingRule'
+ || $params[$parameter] == 'homeFolderNamingRule')
+ && !empty($value)) {
+ $value = 'attr:'.$value;
+ }
if(isset($this->config[$parameter])) {
$this->config[$parameter] = $value;
if(is_array($setParameters)) {
@@ -324,7 +329,7 @@ class Connection {
$value = base64_encode($value);
break;
case 'homeFolderNamingRule':
- $value = empty($value) ? 'opt:username' : 'attr:'.$value;
+ $value = empty($value) ? 'opt:username' : $value;
break;
case 'ldapBase':
case 'ldapBaseUsers':
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index 6aa8cd9b83c..0962756228c 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -171,40 +171,37 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
}
/**
- * @brief determine the user's home directory
- * @param string $uid the owncloud username
+ * @brief get the user's home directory
+ * @param string $uid the username
* @return boolean
*/
- private function determineHomeDir($uid) {
+ public function getHome($uid) {
+ $cacheKey = 'getHome'.$uid;
+ if($this->connection->isCached($cacheKey)) {
+ return $this->connection->getFromCache($cacheKey);
+ }
if(strpos($this->connection->homeFolderNamingRule, 'attr:') === 0) {
$attr = substr($this->connection->homeFolderNamingRule, strlen('attr:'));
$homedir = $this->readAttribute($this->username2dn($uid), $attr);
- if($homedir) {
- $homedir = \OCP\Config::getSystemValue( "datadirectory", \OC::$SERVERROOT."/data" ) . '/' . $homedir[0];
- \OCP\Config::setUserValue($uid, 'user_ldap', 'homedir', $homedir);
+ if($homedir && isset($homedir[0])) {
+ $path = $homedir[0];
+ //if attribute's value is an absolute path take this, otherwise append it to data dir
+ //check for / at the beginning or pattern c:\ resp. c:/
+ if(
+ '/' == $path[0]
+ || (3 < strlen($path) && ctype_alpha($path[0]) && $path[1] == ':' && ('\\' == $path[2] || '/' == $path[2]))
+ ) {
+ $homedir = $path;
+ } else {
+ $homedir = \OCP\Config::getSystemValue('datadirectory', \OC::$SERVERROOT.'/data' ) . '/' . $homedir[0];
+ }
+ $this->connection->writeToCache($cacheKey, $homedir);
return $homedir;
}
}
- //fallback and default: username
- $homedir = \OCP\Config::getSystemValue( "datadirectory", \OC::$SERVERROOT."/data" ) . '/' . $uid;
- \OCP\Config::setUserValue($uid, 'user_ldap', 'homedir', $homedir);
- return $homedir;
- }
-
- /**
- * @brief get the user's home directory
- * @param string $uid the username
- * @return boolean
- */
- public function getHome($uid) {
- if($this->userExists($uid)) {
- $homedir = \OCP\Config::getUserValue($uid, 'user_ldap', 'homedir', false);
- if(!$homedir) {
- $homedir = $this->determineHomeDir($uid);
- }
- return $homedir;
- }
+ //false will apply default behaviour as defined and done by OC_User
+ $this->connection->writeToCache($cacheKey, false);
return false;
}