summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2014-07-01 13:33:21 +0200
committerBjoern Schiessle <schiessle@owncloud.com>2014-07-01 19:38:55 +0200
commitbb935978fa1af1dd304bf2a5aad4d135dfea8268 (patch)
treef32702ddb9c9ce90afbfef2756f07486f52477d4
parent735eac6c9dbdcae80c46d3f680fbb7e86a2e2432 (diff)
downloadnextcloud-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.php1
-rw-r--r--apps/files_sharing/lib/helper.php1
-rw-r--r--apps/files_sharing/lib/sharedmount.php10
-rw-r--r--lib/private/files/view.php41
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;
+ }
}