summaryrefslogtreecommitdiffstats
path: root/lib/private/files
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/files')
-rw-r--r--lib/private/files/storage/storage.php279
-rw-r--r--lib/private/files/view.php15
2 files changed, 11 insertions, 283 deletions
diff --git a/lib/private/files/storage/storage.php b/lib/private/files/storage/storage.php
index b673bb9a32d..5be90f24756 100644
--- a/lib/private/files/storage/storage.php
+++ b/lib/private/files/storage/storage.php
@@ -14,278 +14,6 @@ namespace OC\Files\Storage;
* All paths passed to the storage are relative to the storage and should NOT have a leading slash.
*/
interface Storage extends \OCP\Files\Storage {
- /**
- * $parameters is a free form array with the configuration options needed to construct the storage
- *
- * @param array $parameters
- */
- public function __construct($parameters);
-
- /**
- * Get the identifier for the storage,
- * the returned id should be the same for every storage object that is created with the same parameters
- * and two storage objects with the same id should refer to two storages that display the same files.
- *
- * @return string
- */
- public function getId();
-
- /**
- * see http://php.net/manual/en/function.mkdir.php
- *
- * @param string $path
- * @return bool
- */
- public function mkdir($path);
-
- /**
- * see http://php.net/manual/en/function.rmdir.php
- *
- * @param string $path
- * @return bool
- */
- public function rmdir($path);
-
- /**
- * see http://php.net/manual/en/function.opendir.php
- *
- * @param string $path
- * @return resource
- */
- public function opendir($path);
-
- /**
- * see http://php.net/manual/en/function.is_dir.php
- *
- * @param string $path
- * @return bool
- */
- public function is_dir($path);
-
- /**
- * see http://php.net/manual/en/function.is_file.php
- *
- * @param string $path
- * @return bool
- */
- public function is_file($path);
-
- /**
- * see http://php.net/manual/en/function.stat.php
- * only the following keys are required in the result: size and mtime
- *
- * @param string $path
- * @return array
- */
- public function stat($path);
-
- /**
- * see http://php.net/manual/en/function.filetype.php
- *
- * @param string $path
- * @return bool
- */
- public function filetype($path);
-
- /**
- * see http://php.net/manual/en/function.filesize.php
- * The result for filesize when called on a folder is required to be 0
- *
- * @param string $path
- * @return int
- */
- public function filesize($path);
-
- /**
- * check if a file can be created in $path
- *
- * @param string $path
- * @return bool
- */
- public function isCreatable($path);
-
- /**
- * check if a file can be read
- *
- * @param string $path
- * @return bool
- */
- public function isReadable($path);
-
- /**
- * check if a file can be written to
- *
- * @param string $path
- * @return bool
- */
- public function isUpdatable($path);
-
- /**
- * check if a file can be deleted
- *
- * @param string $path
- * @return bool
- */
- public function isDeletable($path);
-
- /**
- * check if a file can be shared
- *
- * @param string $path
- * @return bool
- */
- public function isSharable($path);
-
- /**
- * get the full permissions of a path.
- * Should return a combination of the PERMISSION_ constants defined in lib/public/constants.php
- *
- * @param string $path
- * @return int
- */
- public function getPermissions($path);
-
- /**
- * see http://php.net/manual/en/function.file_exists.php
- *
- * @param string $path
- * @return bool
- */
- public function file_exists($path);
-
- /**
- * see http://php.net/manual/en/function.filemtime.php
- *
- * @param string $path
- * @return int
- */
- public function filemtime($path);
-
- /**
- * see http://php.net/manual/en/function.file_get_contents.php
- *
- * @param string $path
- * @return string
- */
- public function file_get_contents($path);
-
- /**
- * see http://php.net/manual/en/function.file_put_contents.php
- *
- * @param string $path
- * @param string $data
- * @return bool
- */
- public function file_put_contents($path, $data);
-
- /**
- * see http://php.net/manual/en/function.unlink.php
- *
- * @param string $path
- * @return bool
- */
- public function unlink($path);
-
- /**
- * see http://php.net/manual/en/function.rename.php
- *
- * @param string $path1
- * @param string $path2
- * @return bool
- */
- public function rename($path1, $path2);
-
- /**
- * see http://php.net/manual/en/function.copy.php
- *
- * @param string $path1
- * @param string $path2
- * @return bool
- */
- public function copy($path1, $path2);
-
- /**
- * see http://php.net/manual/en/function.fopen.php
- *
- * @param string $path
- * @param string $mode
- * @return resource
- */
- public function fopen($path, $mode);
-
- /**
- * get the mimetype for a file or folder
- * The mimetype for a folder is required to be "httpd/unix-directory"
- *
- * @param string $path
- * @return string
- */
- public function getMimeType($path);
-
- /**
- * see http://php.net/manual/en/function.hash.php
- *
- * @param string $type
- * @param string $path
- * @param bool $raw
- * @return string
- */
- public function hash($type, $path, $raw = false);
-
- /**
- * see http://php.net/manual/en/function.free_space.php
- *
- * @param string $path
- * @return int
- */
- public function free_space($path);
-
- /**
- * search for occurrences of $query in file names
- *
- * @param string $query
- * @return array
- */
- public function search($query);
-
- /**
- * see http://php.net/manual/en/function.touch.php
- * If the backend does not support the operation, false should be returned
- *
- * @param string $path
- * @param int $mtime
- * @return bool
- */
- public function touch($path, $mtime = null);
-
- /**
- * get the path to a local version of the file.
- * The local version of the file can be temporary and doesn't have to be persistent across requests
- *
- * @param string $path
- * @return string
- */
- public function getLocalFile($path);
-
- /**
- * get the path to a local version of the folder.
- * The local version of the folder can be temporary and doesn't have to be persistent across requests
- *
- * @param string $path
- * @return string
- */
- public function getLocalFolder($path);
- /**
- * check if a file or folder has been updated since $time
- *
- * @param string $path
- * @param int $time
- * @return bool
- *
- * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed.
- * returning true for other changes in the folder is optional
- */
- public function hasUpdated($path, $time);
/**
* get a cache instance for the storage
@@ -333,11 +61,4 @@ interface Storage extends \OCP\Files\Storage {
*/
public function getStorageCache();
- /**
- * get the ETag for a file or folder
- *
- * @param string $path
- * @return string
- */
- public function getETag($path);
}
diff --git a/lib/private/files/view.php b/lib/private/files/view.php
index aa08a5f7cc9..c0b9f0fc9c8 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -110,7 +110,9 @@ class View {
* @return array consisting of the storage and the internal path
*/
public function resolvePath($path) {
- return Filesystem::resolvePath($this->getAbsolutePath($path));
+ $a = $this->getAbsolutePath($path);
+ $p = Filesystem::normalizePath($a);
+ return Filesystem::resolvePath($p);
}
/**
@@ -324,7 +326,8 @@ class View {
return false;
}
} else {
- return $this->basicOperation('file_put_contents', $path, array('create', 'write'), $data);
+ $hooks = ($this->file_exists($path)) ? array('write') : array('create', 'write');
+ return $this->basicOperation('file_put_contents', $path, $hooks, $data);
}
}
@@ -709,7 +712,10 @@ class View {
return false;
}
$defaultRoot = Filesystem::getRoot();
- return (strlen($this->fakeRoot) >= strlen($defaultRoot)) && (substr($this->fakeRoot, 0, strlen($defaultRoot)) === $defaultRoot);
+ if($this->fakeRoot === $defaultRoot){
+ return true;
+ }
+ return (strlen($this->fakeRoot) > strlen($defaultRoot)) && (substr($this->fakeRoot, 0, strlen($defaultRoot) + 1) === $defaultRoot . '/');
}
private function runHooks($hooks, $path, $post = false) {
@@ -898,7 +904,8 @@ class View {
$permissions = $subStorage->getPermissions($rootEntry['path']);
$subPermissionsCache->set($rootEntry['fileid'], $user, $permissions);
}
- $rootEntry['permissions'] = $permissions;
+ // do not allow renaming/deleting the mount point
+ $rootEntry['permissions'] = $permissions & (\OCP\PERMISSION_ALL - (\OCP\PERMISSION_UPDATE | \OCP\PERMISSION_DELETE));
//remove any existing entry with the same name
foreach ($files as $i => $file) {