summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2014-07-02 21:01:03 +0200
committerVincent Petry <pvince81@owncloud.com>2014-07-02 21:01:03 +0200
commited29e7d1606ae073ab156ab1bf086ddec2b94bb3 (patch)
tree1b7170cfea5291f1b0bd774a73ec45c5f0108392
parentf1f66ff686a6b419fa06c11ecc0797238e45c7e2 (diff)
parentbb935978fa1af1dd304bf2a5aad4d135dfea8268 (diff)
downloadnextcloud-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.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/objectstore/homeobjectstorestorage.php2
-rw-r--r--lib/private/files/storage/home.php2
-rw-r--r--lib/private/files/view.php41
-rw-r--r--lib/public/files/storage.php4
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 {
+
+}