summaryrefslogtreecommitdiffstats
path: root/lib/private/files/storage
diff options
context:
space:
mode:
authorTigran Mkrtchyan <tigran.mkrtchyan@desy.de>2014-07-10 10:54:26 +0200
committerTigran Mkrtchyan <tigran.mkrtchyan@desy.de>2014-07-10 14:58:59 +0200
commit03f422153d70bc175bb6e68d27129deba6cb9875 (patch)
treeb4607b3e67d553a17285e0a64bdd0b3506e22b45 /lib/private/files/storage
parent63fdaacbfcc8dbccca6777d623b6baadbd0ed56b (diff)
downloadnextcloud-server-03f422153d70bc175bb6e68d27129deba6cb9875.tar.gz
nextcloud-server-03f422153d70bc175bb6e68d27129deba6cb9875.zip
files: storage: rename should check parent directories of old and new files
as described by POSIX.1-2008 (see http://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html) Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
Diffstat (limited to 'lib/private/files/storage')
-rw-r--r--lib/private/files/storage/local.php13
-rw-r--r--lib/private/files/storage/mappedlocal.php13
2 files changed, 22 insertions, 4 deletions
diff --git a/lib/private/files/storage/local.php b/lib/private/files/storage/local.php
index e33747bbd52..63570d70cff 100644
--- a/lib/private/files/storage/local.php
+++ b/lib/private/files/storage/local.php
@@ -172,10 +172,19 @@ if (\OC_Util::runningOnWindows()) {
}
public function rename($path1, $path2) {
- if (!$this->isUpdatable($path1)) {
- \OC_Log::write('core', 'unable to rename, file is not writable : ' . $path1, \OC_Log::ERROR);
+ $srcParent = dirname($path1);
+ $dstParent = dirname($path2);
+
+ if (!$this->isUpdatable($srcParent)) {
+ \OC_Log::write('core', 'unable to rename, source directory is not writable : ' . $srcParent, \OC_Log::ERROR);
return false;
}
+
+ if (!$this->isUpdatable($dstParent)) {
+ \OC_Log::write('core', 'unable to rename, destination directory is not writable : ' . $dstParent, \OC_Log::ERROR);
+ return false;
+ }
+
if (!$this->file_exists($path1)) {
\OC_Log::write('core', 'unable to rename, file does not exists : ' . $path1, \OC_Log::ERROR);
return false;
diff --git a/lib/private/files/storage/mappedlocal.php b/lib/private/files/storage/mappedlocal.php
index ea4deaa66e8..6910eef7401 100644
--- a/lib/private/files/storage/mappedlocal.php
+++ b/lib/private/files/storage/mappedlocal.php
@@ -184,10 +184,19 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function rename($path1, $path2) {
- if (!$this->isUpdatable($path1)) {
- \OC_Log::write('core', 'unable to rename, file is not writable : ' . $path1, \OC_Log::ERROR);
+ $srcParent = dirname($path1);
+ $dstParent = dirname($path2);
+
+ if (!$this->isUpdatable($srcParent)) {
+ \OC_Log::write('core', 'unable to rename, source directory is not writable : ' . $srcParent, \OC_Log::ERROR);
return false;
}
+
+ if (!$this->isUpdatable($dstParent)) {
+ \OC_Log::write('core', 'unable to rename, destination directory is not writable : ' . $dstParent, \OC_Log::ERROR);
+ return false;
+ }
+
if (!$this->file_exists($path1)) {
\OC_Log::write('core', 'unable to rename, file does not exists : ' . $path1, \OC_Log::ERROR);
return false;