aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2014-01-08 18:43:20 +0100
committerVincent Petry <pvince81@owncloud.com>2014-01-08 18:43:20 +0100
commit8eaa39f4e2fb7bb1036aca5727db320de00960e2 (patch)
tree0cac2007800b1101d51eed0bb583a55ba670f642
parentbb443ae937bdbc9f50c352d34abeaa0eaa3fa890 (diff)
downloadnextcloud-server-8eaa39f4e2fb7bb1036aca5727db320de00960e2.tar.gz
nextcloud-server-8eaa39f4e2fb7bb1036aca5727db320de00960e2.zip
Removed special handling of part files in shared storage rename
This fixes the issue introduced by the transfer id which itself wasn't taken into account by the shortcut code for part file in the shared storage class.
-rw-r--r--apps/files_sharing/lib/sharedstorage.php33
-rw-r--r--lib/private/connector/sabre/file.php5
2 files changed, 16 insertions, 22 deletions
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 3116cd717fb..6b4db9763f5 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -293,29 +293,20 @@ class Shared extends \OC\Files\Storage\Common {
}
public function rename($path1, $path2) {
- // Check for partial files
- if (pathinfo($path1, PATHINFO_EXTENSION) === 'part') {
- if ($oldSource = $this->getSourcePath($path1)) {
+ // Renaming/moving is only allowed within shared folders
+ $pos1 = strpos($path1, '/', 1);
+ $pos2 = strpos($path2, '/', 1);
+ if ($pos1 !== false && $pos2 !== false && ($oldSource = $this->getSourcePath($path1))) {
+ $newSource = $this->getSourcePath(dirname($path2)) . '/' . basename($path2);
+ // Within the same folder, we only need UPDATE permissions
+ if (dirname($path1) == dirname($path2) and $this->isUpdatable($path1)) {
list($storage, $oldInternalPath) = \OC\Files\Filesystem::resolvePath($oldSource);
- $newInternalPath = substr($oldInternalPath, 0, -5);
+ list(, $newInternalPath) = \OC\Files\Filesystem::resolvePath($newSource);
return $storage->rename($oldInternalPath, $newInternalPath);
- }
- } else {
- // Renaming/moving is only allowed within shared folders
- $pos1 = strpos($path1, '/', 1);
- $pos2 = strpos($path2, '/', 1);
- if ($pos1 !== false && $pos2 !== false && ($oldSource = $this->getSourcePath($path1))) {
- $newSource = $this->getSourcePath(dirname($path2)) . '/' . basename($path2);
- // Within the same folder, we only need UPDATE permissions
- if (dirname($path1) == dirname($path2) and $this->isUpdatable($path1)) {
- list($storage, $oldInternalPath) = \OC\Files\Filesystem::resolvePath($oldSource);
- list(, $newInternalPath) = \OC\Files\Filesystem::resolvePath($newSource);
- return $storage->rename($oldInternalPath, $newInternalPath);
- // otherwise DELETE and CREATE permissions required
- } elseif ($this->isDeletable($path1) && $this->isCreatable(dirname($path2))) {
- $rootView = new \OC\Files\View('');
- return $rootView->rename($oldSource, $newSource);
- }
+ // otherwise DELETE and CREATE permissions required
+ } elseif ($this->isDeletable($path1) && $this->isCreatable(dirname($path2))) {
+ $rootView = new \OC\Files\View('');
+ return $rootView->rename($oldSource, $newSource);
}
}
return false;
diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php
index 53524ec9e54..c3b59007295 100644
--- a/lib/private/connector/sabre/file.php
+++ b/lib/private/connector/sabre/file.php
@@ -242,7 +242,10 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
$fileExists = $fs->file_exists($targetPath);
if ($renameOkay === false || $fileExists === false) {
\OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
- $fs->unlink($targetPath);
+ // only delete if an error occurred and the target file was already created
+ if ($fileExists) {
+ $fs->unlink($targetPath);
+ }
throw new Sabre_DAV_Exception();
}