don't move a share mount point into a different mount point
This commit is contained in:
parent
735eac6c9d
commit
bb935978fa
4 changed files with 36 additions and 17 deletions
1
apps/files_sharing/lib/external/mount.php
vendored
1
apps/files_sharing/lib/external/mount.php
vendored
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -236,4 +236,5 @@ class Helper {
|
|||
$result = $appConfig->getValue('files_sharing', 'incoming_server2server_share_enabled', 'yes');
|
||||
return ($result === 'yes') ? true : false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue