summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2015-03-19 21:55:56 +0100
committerVincent Petry <pvince81@owncloud.com>2015-03-26 22:32:47 +0100
commit944b30183759fce2cc34b8aac34930fa946c17ab (patch)
tree6d1858c93f9661903414e045264c4be9f202a1a5
parent29c56fbfb2e30aef448c70ddaea657f024e89c86 (diff)
downloadnextcloud-server-944b30183759fce2cc34b8aac34930fa946c17ab.tar.gz
nextcloud-server-944b30183759fce2cc34b8aac34930fa946c17ab.zip
Rename must be possible with update-only permission
and this as long as the rename is done within the same folder.
-rw-r--r--apps/files_sharing/lib/sharedstorage.php40
1 files changed, 23 insertions, 17 deletions
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 2e8eac31fcf..dc8b3a2b72c 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -293,28 +293,34 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
// we need the paths relative to data/user/files
$relPath1 = $this->getMountPoint() . '/' . $path1;
$relPath2 = $this->getMountPoint() . '/' . $path2;
+ $pathinfo = pathinfo($relPath1);
+ $isPartFile = (isset($pathinfo['extension']) && $pathinfo['extension'] === 'part');
$targetExists = $this->file_exists($path2);
-
- // check for update permissions on the share
- if (($targetExists && $this->isUpdatable('')) || (!$targetExists && $this->isCreatable(''))) {
-
- $pathinfo = pathinfo($relPath1);
- // for part files we need to ask for the owner and path from the parent directory because
- // the file cache doesn't return any results for part files
- if (isset($pathinfo['extension']) && $pathinfo['extension'] === 'part') {
- list($user1, $path1) = \OCA\Files_Sharing\Helper::getUidAndFilename($pathinfo['dirname']);
- $path1 = $path1 . '/' . $pathinfo['basename'];
- } else {
- list($user1, $path1) = \OCA\Files_Sharing\Helper::getUidAndFilename($relPath1);
+ $sameFolder = (dirname($relPath1) === dirname($relPath2));
+ if ($targetExists || ($sameFolder && !$isPartFile)) {
+ // note that renaming a share mount point is always allowed
+ if (!$this->isUpdatable('')) {
+ return false;
+ }
+ } else {
+ if (!$this->isCreatable('')) {
+ return false;
}
- $targetFilename = basename($relPath2);
- list($user2, $path2) = \OCA\Files_Sharing\Helper::getUidAndFilename(dirname($relPath2));
- $rootView = new \OC\Files\View('');
- return $rootView->rename('/' . $user1 . '/files/' . $path1, '/' . $user2 . '/files/' . $path2 . '/' . $targetFilename);
}
- return false;
+ // for part files we need to ask for the owner and path from the parent directory because
+ // the file cache doesn't return any results for part files
+ if ($isPartFile) {
+ list($user1, $path1) = \OCA\Files_Sharing\Helper::getUidAndFilename($pathinfo['dirname']);
+ $path1 = $path1 . '/' . $pathinfo['basename'];
+ } else {
+ list($user1, $path1) = \OCA\Files_Sharing\Helper::getUidAndFilename($relPath1);
+ }
+ $targetFilename = basename($relPath2);
+ list($user2, $path2) = \OCA\Files_Sharing\Helper::getUidAndFilename(dirname($relPath2));
+ $rootView = new \OC\Files\View('');
+ return $rootView->rename('/' . $user1 . '/files/' . $path1, '/' . $user2 . '/files/' . $path2 . '/' . $targetFilename);
}
public function copy($path1, $path2) {