diff options
author | Arthur Schiwon <blizzz@owncloud.com> | 2013-02-06 02:28:09 +0100 |
---|---|---|
committer | Arthur Schiwon <blizzz@owncloud.com> | 2013-02-06 02:28:09 +0100 |
commit | 3cef8f1216a776c1537105cc24facc44e2843a9a (patch) | |
tree | 637483db3f004e8c24dcf11166f0f6f94f092071 /apps/user_ldap/user_ldap.php | |
parent | a721f7d59f4851bf13b6387e1f6d19fa3175d61b (diff) | |
download | nextcloud-server-3cef8f1216a776c1537105cc24facc44e2843a9a.tar.gz nextcloud-server-3cef8f1216a776c1537105cc24facc44e2843a9a.zip |
LDAP: do not store user home as it destroys configurability. always fetch it. use of cache is save however, it is cleared when settings are saved
Diffstat (limited to 'apps/user_ldap/user_ldap.php')
-rw-r--r-- | apps/user_ldap/user_ldap.php | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 6aa8cd9b83c..540b22c7dc9 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; } |