aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2016-04-22 11:17:36 +0200
committerVincent Petry <pvince81@owncloud.com>2016-04-22 14:29:41 +0200
commit13c01e62cf9cd1d241b447b80fda719fb2df9931 (patch)
tree434e8b2773684e01442067b94528b6cb9fe14d39
parentc26145aab33481dd958277d2b562703a9c2fd90b (diff)
downloadnextcloud-server-13c01e62cf9cd1d241b447b80fda719fb2df9931.tar.gz
nextcloud-server-13c01e62cf9cd1d241b447b80fda719fb2df9931.zip
Mark $usersSetup only if user was found in initMountPoints
initMountPoints is marking a user as successfully initialized too early. If the user was not found an NoUserException was thrown, the second time initMountPoints is called would not rethrow the exception and happily continue. This fix makes sure that we consistently throw NoUserException when initMountPoints is called repeatedly with invalid users.
-rw-r--r--lib/private/files/filesystem.php4
-rw-r--r--tests/lib/files/filesystem.php22
2 files changed, 24 insertions, 2 deletions
diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php
index ec9b537a358..7283c815c97 100644
--- a/lib/private/files/filesystem.php
+++ b/lib/private/files/filesystem.php
@@ -378,8 +378,6 @@ class Filesystem {
if (isset(self::$usersSetup[$user])) {
return;
}
- self::$usersSetup[$user] = true;
-
$root = \OC_User::getHome($user);
$userManager = \OC::$server->getUserManager();
@@ -390,6 +388,8 @@ class Filesystem {
throw new \OC\User\NoUserException('Backends provided no user object for ' . $user);
}
+ self::$usersSetup[$user] = true;
+
$homeStorage = \OC::$server->getConfig()->getSystemValue('objectstore');
if (!empty($homeStorage)) {
// sanity checks
diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php
index 8245af0ace1..b5a3e147259 100644
--- a/tests/lib/files/filesystem.php
+++ b/tests/lib/files/filesystem.php
@@ -342,6 +342,28 @@ class Filesystem extends \Test\TestCase {
}
/**
+ * Tests that an exception is thrown when passed user does not exist.
+ */
+ public function testLocalMountWhenUserDoesNotExistTwice() {
+ $thrown = 0;
+ $userId = $this->getUniqueID('user_');
+
+ try {
+ \OC\Files\Filesystem::initMountPoints($userId);
+ } catch (NoUserException $e) {
+ $thrown++;
+ }
+
+ try {
+ \OC\Files\Filesystem::initMountPoints($userId);
+ } catch (NoUserException $e) {
+ $thrown++;
+ }
+
+ $this->assertEquals(2, $thrown);
+ }
+
+ /**
* Tests that the home storage is used for the user's mount point
*/
public function testHomeMount() {