[Pkg-owncloud-commits] [owncloud] 100/239: Fixed SMB rename function to overwrite target file
David Prévot
taffit at moszumanska.debian.org
Fri Nov 29 01:32:24 UTC 2013
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository owncloud.
commit 1b0c5e57e5e4042ebb4f0e5956330a908645b61a
Author: Vincent Petry <pvince81 at owncloud.com>
Date: Fri Nov 22 18:18:08 2013 +0100
Fixed SMB rename function to overwrite target file
When uploading files through WebDAV, a part file is created and a rename
operation is performed with the expectation that the part file
overwrites an existing file, if any.
This fix makes the SMB external storage delete the target file before
renaming, as smbclient doesn't support overwrite on move/rename.
Fixes #5348
---
apps/files_external/3rdparty/smb4php/smb.php | 16 +++++++++++++++-
apps/files_external/lib/streamwrapper.php | 2 +-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/apps/files_external/3rdparty/smb4php/smb.php b/apps/files_external/3rdparty/smb4php/smb.php
index 9650f80..8763827 100644
--- a/apps/files_external/3rdparty/smb4php/smb.php
+++ b/apps/files_external/3rdparty/smb4php/smb.php
@@ -302,6 +302,7 @@ class smb {
}
function rename ($url_from, $url_to) {
+ $replace = false;
list ($from, $to) = array (smb::parse_url($url_from), smb::parse_url($url_to));
if ($from['host'] <> $to['host'] ||
$from['share'] <> $to['share'] ||
@@ -314,7 +315,20 @@ class smb {
trigger_error('rename(): error in URL', E_USER_ERROR);
}
smb::clearstatcache ($url_from);
- $result = smb::execute ('rename "'.$from['path'].'" "'.$to['path'].'"', $to);
+ $cmd = '';
+ // check if target file exists
+ if (smb::url_stat($url_to)) {
+ // delete target file first
+ $cmd = 'del "' . $to['path'] . '"; ';
+ $replace = true;
+ }
+ $cmd .= 'rename "' . $from['path'] . '" "' . $to['path'] . '"';
+ $result = smb::execute($cmd, $to);
+ if ($replace) {
+ // clear again, else the cache will return the info
+ // from the old file
+ smb::clearstatcache ($url_to);
+ }
return $result !== false;
}
diff --git a/apps/files_external/lib/streamwrapper.php b/apps/files_external/lib/streamwrapper.php
index 23c5f91..4f3dc88 100644
--- a/apps/files_external/lib/streamwrapper.php
+++ b/apps/files_external/lib/streamwrapper.php
@@ -38,7 +38,7 @@ abstract class StreamWrapper extends Common {
}
public function filetype($path) {
- return filetype($this->constructUrl($path));
+ return @filetype($this->constructUrl($path));
}
public function file_exists($path) {
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git
More information about the Pkg-owncloud-commits
mailing list