From 13dd62f7b040fdd4d638a50ad687d908a09d9bc8 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 5 Oct 2015 11:50:36 +0200 Subject: [PATCH] Make sure that remote shares use the correct uid casing --- apps/files_sharing/api/server2server.php | 1 + lib/base.php | 8 ++++++ lib/private/user/database.php | 32 ++++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/apps/files_sharing/api/server2server.php b/apps/files_sharing/api/server2server.php index a74b329aed..2e0468039b 100644 --- a/apps/files_sharing/api/server2server.php +++ b/apps/files_sharing/api/server2server.php @@ -53,6 +53,7 @@ class Server2Server { return new \OC_OCS_Result(null, 400, 'The mountpoint name contains invalid characters.'); } + // FIXME this should be a method in the user management instead \OCP\Util::writeLog('files_sharing', 'shareWith before, ' . $shareWith, \OCP\Util::DEBUG); \OCP\Util::emitHook( '\OCA\Files_Sharing\API\Server2Server', diff --git a/lib/base.php b/lib/base.php index 12c23f5ce1..5deba7866f 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 081066398c..3969b44607 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; + } + } + } + + } }