diff options
author | Vincent Petry <pvince81@owncloud.com> | 2014-07-02 21:01:03 +0200 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2014-07-02 21:01:03 +0200 |
commit | ed29e7d1606ae073ab156ab1bf086ddec2b94bb3 (patch) | |
tree | 1b7170cfea5291f1b0bd774a73ec45c5f0108392 | |
parent | f1f66ff686a6b419fa06c11ecc0797238e45c7e2 (diff) | |
parent | bb935978fa1af1dd304bf2a5aad4d135dfea8268 (diff) | |
download | nextcloud-server-ed29e7d1606ae073ab156ab1bf086ddec2b94bb3.tar.gz nextcloud-server-ed29e7d1606ae073ab156ab1bf086ddec2b94bb3.zip |
Merge pull request #9329 from owncloud/sharing_check_target
don't move a share mount point into a different mount point
-rw-r--r-- | apps/files_sharing/lib/external/mount.php | 1 | ||||
-rw-r--r-- | apps/files_sharing/lib/helper.php | 1 | ||||
-rw-r--r-- | apps/files_sharing/lib/sharedmount.php | 10 | ||||
-rw-r--r-- | lib/private/files/objectstore/homeobjectstorestorage.php | 2 | ||||
-rw-r--r-- | lib/private/files/storage/home.php | 2 | ||||
-rw-r--r-- | lib/private/files/view.php | 41 | ||||
-rw-r--r-- | lib/public/files/storage.php | 4 |
7 files changed, 42 insertions, 19 deletions
diff --git a/apps/files_sharing/lib/external/mount.php b/apps/files_sharing/lib/external/mount.php index a42a12f9b9a..e564dded69a 100644 --- a/apps/files_sharing/lib/external/mount.php +++ b/apps/files_sharing/lib/external/mount.php @@ -38,6 +38,7 @@ class Mount extends \OC\Files\Mount\Mount implements MoveableMount { public function moveMount($target) { $result = $this->manager->setMountPoint($this->mountPoint, $target); $this->setMountPoint($target); + return $result; } diff --git a/apps/files_sharing/lib/helper.php b/apps/files_sharing/lib/helper.php index 0b3433576f6..c15b1d48114 100644 --- a/apps/files_sharing/lib/helper.php +++ b/apps/files_sharing/lib/helper.php @@ -236,4 +236,5 @@ class Helper { $result = $appConfig->getValue('files_sharing', 'incoming_server2server_share_enabled', 'yes'); return ($result === 'yes') ? true : false; } + } diff --git a/apps/files_sharing/lib/sharedmount.php b/apps/files_sharing/lib/sharedmount.php index 8d0ecbc6789..f8def2c6a82 100644 --- a/apps/files_sharing/lib/sharedmount.php +++ b/apps/files_sharing/lib/sharedmount.php @@ -8,10 +8,8 @@ namespace OCA\Files_Sharing; -use OC\Files\Filesystem; use OC\Files\Mount\Mount; use OC\Files\Mount\MoveableMount; -use OC\Files\Storage\Shared; /** * Shared mount points can be moved by the user @@ -119,14 +117,6 @@ class SharedMount extends Mount implements MoveableMount { * @return bool */ public function moveMount($target) { - // it shouldn't be possible to move a Shared storage into another one - list($targetStorage,) = Filesystem::resolvePath($target); - if ($targetStorage instanceof Shared) { - \OCP\Util::writeLog('file sharing', - 'It is not allowed to move one mount point into another one', - \OCP\Util::DEBUG); - return false; - } $relTargetPath = $this->stripUserFilesPath($target); $share = $this->storage->getShare(); diff --git a/lib/private/files/objectstore/homeobjectstorestorage.php b/lib/private/files/objectstore/homeobjectstorestorage.php index 26a2788d860..947fc496b20 100644 --- a/lib/private/files/objectstore/homeobjectstorestorage.php +++ b/lib/private/files/objectstore/homeobjectstorestorage.php @@ -22,7 +22,7 @@ namespace OC\Files\ObjectStore; use OC\User\User; -class HomeObjectStoreStorage extends ObjectStoreStorage { +class HomeObjectStoreStorage extends ObjectStoreStorage implements \OCP\Files\IHomeStorage { /** * The home user storage requires a user object to create a unique storage id diff --git a/lib/private/files/storage/home.php b/lib/private/files/storage/home.php index 214deede620..015b1f01885 100644 --- a/lib/private/files/storage/home.php +++ b/lib/private/files/storage/home.php @@ -11,7 +11,7 @@ namespace OC\Files\Storage; /** * Specialized version of Local storage for home directory usage */ -class Home extends Local { +class Home extends Local implements \OCP\Files\IHomeStorage { /** * @var string */ diff --git a/lib/private/files/view.php b/lib/private/files/view.php index ff3cb9ee68b..1a9b0e8d2ae 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -440,13 +440,17 @@ class View { $internalPath1 = $mount->getInternalPath($absolutePath1 . $postFix1); list(, $internalPath2) = Filesystem::resolvePath($absolutePath2 . $postFix2); if ($internalPath1 === '' and $mount instanceof MoveableMount) { - /** - * @var \OC\Files\Mount\Mount | \OC\Files\Mount\MoveableMount $mount - */ - $sourceMountPoint = $mount->getMountPoint(); - $result = $mount->moveMount($absolutePath2); - $manager->moveMount($sourceMountPoint, $mount->getMountPoint()); - \OC_FileProxy::runPostProxies('rename', $absolutePath1, $absolutePath2); + if ($this->isTargetAllowed($absolutePath2)) { + /** + * @var \OC\Files\Mount\Mount | \OC\Files\Mount\MoveableMount $mount + */ + $sourceMountPoint = $mount->getMountPoint(); + $result = $mount->moveMount($absolutePath2); + $manager->moveMount($sourceMountPoint, $mount->getMountPoint()); + \OC_FileProxy::runPostProxies('rename', $absolutePath1, $absolutePath2); + } else { + $result = false; + } } elseif ($mp1 == $mp2) { if ($storage1) { $result = $storage1->rename($internalPath1, $internalPath2); @@ -1185,4 +1189,27 @@ class View { throw new \OCP\Files\InvalidPathException("Path length($pathLen) exceeds max path length($maxLen): $path"); } } + + /** + * check if it is allowed to move a mount point to a given target. + * It is not allowed to move a mount point into a different mount point + * + * @param string $target path + * @return boolean + */ + private function isTargetAllowed($target) { + + $result = false; + + list($targetStorage,) = \OC\Files\Filesystem::resolvePath($target); + if ($targetStorage->instanceOfStorage('\OCP\Files\IHomeStorage')) { + $result = true; + } else { + \OCP\Util::writeLog('files', + 'It is not allowed to move one mount point into another one', + \OCP\Util::DEBUG); + } + + return $result; + } } diff --git a/lib/public/files/storage.php b/lib/public/files/storage.php index 323d20db564..8f8d7852ee4 100644 --- a/lib/public/files/storage.php +++ b/lib/public/files/storage.php @@ -336,3 +336,7 @@ interface Storage { */ public function instanceOfStorage($class); } + +interface IHomeStorage { + +} |