Make sure that remote shares use the correct uid casing

This commit is contained in:
Joas Schilling 2015-10-05 11:50:36 +02:00
parent 191f1b2d49
commit 13dd62f7b0
3 changed files with 41 additions and 0 deletions

View File

@ -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',

View File

@ -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();

View File

@ -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;
}
}
}
}
}