From 13dd62f7b040fdd4d638a50ad687d908a09d9bc8 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 5 Oct 2015 11:50:36 +0200 Subject: Make sure that remote shares use the correct uid casing --- lib/base.php | 8 ++++++++ lib/private/user/database.php | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) (limited to 'lib') diff --git a/lib/base.php b/lib/base.php index 12c23f5ce1b..5deba7866f3 100644 --- a/lib/base.php +++ b/lib/base.php @@ -608,6 +608,14 @@ class OC { OC_User::useBackend(new OC_User_Database()); OC_Group::useBackend(new OC_Group_Database()); + // Subscribe to the hook + \OCP\Util::connectHook( + '\OCA\Files_Sharing\API\Server2Server', + 'preLoginNameUsedAsUserName', + '\OC_User_Database', + 'preLoginNameUsedAsUserName' + ); + //setup extra user backends if (!self::checkUpgrade(false)) { OC_User::setupBackends(); diff --git a/lib/private/user/database.php b/lib/private/user/database.php index 081066398c0..3969b446071 100644 --- a/lib/private/user/database.php +++ b/lib/private/user/database.php @@ -294,6 +294,20 @@ class OC_User_Database extends OC_User_Backend implements \OCP\IUserBackend { return $result->fetchOne(); } + /** + * returns the username for the given login name in the correct casing + * + * @param string $loginName + * @return string|false + */ + public function loginName2UserName($loginName) { + if ($this->userExists($loginName)) { + return $this->cache[$loginName]['uid']; + } + + return false; + } + /** * Backend name to be shown in user management * @return string the name of the backend to be shown @@ -302,4 +316,22 @@ class OC_User_Database extends OC_User_Backend implements \OCP\IUserBackend { return 'Database'; } + public static function preLoginNameUsedAsUserName($param) { + if(!isset($param['uid'])) { + throw new \Exception('key uid is expected to be set in $param'); + } + + $backends = \OC::$server->getUserManager()->getBackends(); + foreach ($backends as $backend) { + if ($backend instanceof \OC_User_Database) { + /** @var \OC_User_Database $backend */ + $uid = $backend->loginName2UserName($param['uid']); + if ($uid !== false) { + $param['uid'] = $uid; + return; + } + } + } + + } } -- cgit v1.2.3