diff options
author | Bjoern Schiessle <schiessle@owncloud.com> | 2014-07-01 13:33:21 +0200 |
---|---|---|
committer | Bjoern Schiessle <schiessle@owncloud.com> | 2014-07-01 19:38:55 +0200 |
commit | bb935978fa1af1dd304bf2a5aad4d135dfea8268 (patch) | |
tree | f32702ddb9c9ce90afbfef2756f07486f52477d4 | |
parent | 735eac6c9dbdcae80c46d3f680fbb7e86a2e2432 (diff) | |
download | nextcloud-server-bb935978fa1af1dd304bf2a5aad4d135dfea8268.tar.gz nextcloud-server-bb935978fa1af1dd304bf2a5aad4d135dfea8268.zip |
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/view.php | 41 |
4 files changed, 36 insertions, 17 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/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; + } } |