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 /lib | |
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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/files/view.php | 41 |
1 files changed, 34 insertions, 7 deletions
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; + } } |