Merge pull request #6680 from owncloud/core-preventunlinkstorageroot
Prevent deleting storage root
This commit is contained in:
commit
0bc0a60a93
|
@ -336,6 +336,19 @@ class View {
|
|||
}
|
||||
|
||||
public function unlink($path) {
|
||||
if ($path === '' || $path === '/') {
|
||||
// do not allow deleting the root
|
||||
return false;
|
||||
}
|
||||
$postFix = (substr($path, -1, 1) === '/') ? '/' : '';
|
||||
$absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
|
||||
list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix);
|
||||
if (!$internalPath || $internalPath === '' || $internalPath === '/') {
|
||||
// do not allow deleting the storage's root / the mount point
|
||||
// because for some storages it might delete the whole contents
|
||||
// but isn't supposed to work that way
|
||||
return false;
|
||||
}
|
||||
return $this->basicOperation('unlink', $path, array('delete'));
|
||||
}
|
||||
|
||||
|
|
|
@ -306,6 +306,48 @@ class View extends \PHPUnit_Framework_TestCase {
|
|||
$this->assertTrue($rootView->file_exists('anotherfolder/bar.txt'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @medium
|
||||
*/
|
||||
function testUnlink() {
|
||||
$storage1 = $this->getTestStorage();
|
||||
$storage2 = $this->getTestStorage();
|
||||
\OC\Files\Filesystem::mount($storage1, array(), '/');
|
||||
\OC\Files\Filesystem::mount($storage2, array(), '/substorage');
|
||||
|
||||
$rootView = new \OC\Files\View('');
|
||||
$rootView->file_put_contents('/foo.txt', 'asd');
|
||||
$rootView->file_put_contents('/substorage/bar.txt', 'asd');
|
||||
|
||||
$this->assertTrue($rootView->file_exists('foo.txt'));
|
||||
$this->assertTrue($rootView->file_exists('substorage/bar.txt'));
|
||||
|
||||
$this->assertTrue($rootView->unlink('foo.txt'));
|
||||
$this->assertTrue($rootView->unlink('substorage/bar.txt'));
|
||||
|
||||
$this->assertFalse($rootView->file_exists('foo.txt'));
|
||||
$this->assertFalse($rootView->file_exists('substorage/bar.txt'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @medium
|
||||
*/
|
||||
function testUnlinkRootMustFail() {
|
||||
$storage1 = $this->getTestStorage();
|
||||
$storage2 = $this->getTestStorage();
|
||||
\OC\Files\Filesystem::mount($storage1, array(), '/');
|
||||
\OC\Files\Filesystem::mount($storage2, array(), '/substorage');
|
||||
|
||||
$rootView = new \OC\Files\View('');
|
||||
$rootView->file_put_contents('/foo.txt', 'asd');
|
||||
$rootView->file_put_contents('/substorage/bar.txt', 'asd');
|
||||
|
||||
$this->assertFalse($rootView->unlink(''));
|
||||
$this->assertFalse($rootView->unlink('/'));
|
||||
$this->assertFalse($rootView->unlink('substorage'));
|
||||
$this->assertFalse($rootView->unlink('/substorage'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @medium
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue