Browse Source

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>
tags/v8.0.0alpha1
Tigran Mkrtchyan 10 years ago
parent
commit
03f422153d
2 changed files with 22 additions and 4 deletions
  1. 11
    2
      lib/private/files/storage/local.php
  2. 11
    2
      lib/private/files/storage/mappedlocal.php

+ 11
- 2
lib/private/files/storage/local.php View File

@@ -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;

+ 11
- 2
lib/private/files/storage/mappedlocal.php View File

@@ -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;

Loading…
Cancel
Save