[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