diff options
author | Vincent Petry <pvince81@owncloud.com> | 2015-03-19 21:55:56 +0100 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2015-03-26 22:32:47 +0100 |
commit | 944b30183759fce2cc34b8aac34930fa946c17ab (patch) | |
tree | 6d1858c93f9661903414e045264c4be9f202a1a5 | |
parent | 29c56fbfb2e30aef448c70ddaea657f024e89c86 (diff) | |
download | nextcloud-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.php | 40 |
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) { |