diff options
Diffstat (limited to 'lib/filesystem.php')
-rw-r--r-- | lib/filesystem.php | 134 |
1 files changed, 70 insertions, 64 deletions
diff --git a/lib/filesystem.php b/lib/filesystem.php index 3b6772c9849..4635f8b4f30 100644 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -35,10 +35,10 @@ * post_create(path) * delete(path, &run) * post_delete(path) - * rename(oldpath,newpath, &run) - * post_rename(oldpath,newpath) - * copy(oldpath,newpath, &run) (if the newpath doesn't exists yes, copy, create and write will be emited in that order) - * post_rename(oldpath,newpath) + * rename(oldpath, newpath, &run) + * post_rename(oldpath, newpath) + * copy(oldpath, newpath, &run) (if the newpath doesn't exists yes, copy, create and write will be emited in that order) + * post_rename(oldpath, newpath) * * the &run parameter can be set to false to prevent the operation from occuring */ @@ -209,48 +209,48 @@ class OC_Filesystem{ } static private function loadSystemMountPoints($user) { - if(is_file(OC::$SERVERROOT.'/config/mount.php')) {
- $mountConfig=include OC::$SERVERROOT.'/config/mount.php';
- if(isset($mountConfig['global'])) {
- foreach($mountConfig['global'] as $mountPoint=>$options) {
- self::mount($options['class'], $options['options'], $mountPoint);
- }
- }
-
- if(isset($mountConfig['group'])) {
- foreach($mountConfig['group'] as $group=>$mounts) {
- if(OC_Group::inGroup($user, $group)) {
- foreach($mounts as $mountPoint=>$options) {
- $mountPoint=self::setUserVars($mountPoint, $user);
- foreach($options as &$option) {
- $option=self::setUserVars($option, $user);
- }
- self::mount($options['class'], $options['options'], $mountPoint);
- }
- }
- }
- }
-
- if(isset($mountConfig['user'])) {
- foreach($mountConfig['user'] as $user=>$mounts) {
- if($user==='all' or strtolower($user)===strtolower($user)) {
- foreach($mounts as $mountPoint=>$options) {
- $mountPoint=self::setUserVars($mountPoint, $user);
- foreach($options as &$option) {
- $option=self::setUserVars($option, $user);
- }
- self::mount($options['class'], $options['options'], $mountPoint);
- }
- }
- }
- }
-
- $mtime=filemtime(OC::$SERVERROOT.'/config/mount.php');
- $previousMTime=OC_Appconfig::getValue('files','mountconfigmtime',0);
- if($mtime>$previousMTime) {//mount config has changed, filecache needs to be updated
- OC_FileCache::triggerUpdate();
- OC_Appconfig::setValue('files', 'mountconfigmtime', $mtime);
- }
+ if(is_file(OC::$SERVERROOT.'/config/mount.php')) { + $mountConfig=include OC::$SERVERROOT.'/config/mount.php'; + if(isset($mountConfig['global'])) { + foreach($mountConfig['global'] as $mountPoint=>$options) { + self::mount($options['class'], $options['options'], $mountPoint); + } + } + + if(isset($mountConfig['group'])) { + foreach($mountConfig['group'] as $group=>$mounts) { + if(OC_Group::inGroup($user, $group)) { + foreach($mounts as $mountPoint=>$options) { + $mountPoint=self::setUserVars($mountPoint, $user); + foreach($options as &$option) { + $option=self::setUserVars($option, $user); + } + self::mount($options['class'], $options['options'], $mountPoint); + } + } + } + } + + if(isset($mountConfig['user'])) { + foreach($mountConfig['user'] as $user=>$mounts) { + if($user==='all' or strtolower($user)===strtolower($user)) { + foreach($mounts as $mountPoint=>$options) { + $mountPoint=self::setUserVars($mountPoint, $user); + foreach($options as &$option) { + $option=self::setUserVars($option, $user); + } + self::mount($options['class'], $options['options'], $mountPoint); + } + } + } + } + + $mtime=filemtime(OC::$SERVERROOT.'/config/mount.php'); + $previousMTime=OC_Appconfig::getValue('files', 'mountconfigmtime', 0); + if($mtime>$previousMTime) {//mount config has changed, filecache needs to be updated + OC_FileCache::triggerUpdate(); + OC_Appconfig::setValue('files', 'mountconfigmtime', $mtime); + } } } @@ -303,7 +303,7 @@ class OC_Filesystem{ * @param array arguments * @return OC_Filestorage */ - static private function createStorage($class,$arguments) { + static private function createStorage($class, $arguments) { if(class_exists($class)) { try { return new $class($arguments); @@ -312,7 +312,7 @@ class OC_Filesystem{ return false; } }else{ - OC_Log::write('core','storage backend '.$class.' not found',OC_Log::ERROR); + OC_Log::write('core', 'storage backend '.$class.' not found', OC_Log::ERROR); return false; } } @@ -349,14 +349,14 @@ class OC_Filesystem{ * @param OC_Filestorage storage * @param string mountpoint */ - static public function mount($class,$arguments,$mountpoint) { + static public function mount($class, $arguments, $mountpoint) { if($mountpoint[0]!='/') { $mountpoint='/'.$mountpoint; } if(substr($mountpoint, -1)!=='/') { $mountpoint=$mountpoint.'/'; } - self::$mounts[$mountpoint]=array('class'=>$class,'arguments'=>$arguments); + self::$mounts[$mountpoint]=array('class'=>$class, 'arguments'=>$arguments); } /** @@ -396,12 +396,16 @@ class OC_Filesystem{ * @return bool */ static public function isValidPath($path) { + $path = self::normalizePath($path); if(!$path || $path[0]!=='/') { $path='/'.$path; } if(strstr($path, '/../') || strrchr($path, '/') === '/..' ) { return false; } + if(self::isFileBlacklisted($path)) { + return false; + } return true; } @@ -411,20 +415,22 @@ class OC_Filesystem{ * @param array $data from hook */ static public function isBlacklisted($data) { - $blacklist = array('.htaccess'); if (isset($data['path'])) { $path = $data['path']; } else if (isset($data['newpath'])) { $path = $data['newpath']; } if (isset($path)) { - $filename = strtolower(basename($path)); - if (in_array($filename, $blacklist)) { - $data['run'] = false; - } + $data['run'] = !self::isFileBlacklisted($path); } } + static public function isFileBlacklisted($path) { + $blacklist = array('.htaccess'); + $filename = strtolower(basename($path)); + return in_array($filename, $blacklist); + } + /** * following functions are equivilent to their php buildin equivilents for arguments/return values. */ @@ -500,32 +506,32 @@ class OC_Filesystem{ static public function file_get_contents($path) { return self::$defaultInstance->file_get_contents($path); } - static public function file_put_contents($path,$data) { + static public function file_put_contents($path, $data) { return self::$defaultInstance->file_put_contents($path, $data); } static public function unlink($path) { return self::$defaultInstance->unlink($path); } - static public function rename($path1,$path2) { + static public function rename($path1, $path2) { return self::$defaultInstance->rename($path1, $path2); } - static public function copy($path1,$path2) { + static public function copy($path1, $path2) { return self::$defaultInstance->copy($path1, $path2); } - static public function fopen($path,$mode) { + static public function fopen($path, $mode) { return self::$defaultInstance->fopen($path, $mode); } static public function toTmpFile($path) { return self::$defaultInstance->toTmpFile($path); } - static public function fromTmpFile($tmpFile,$path) { + static public function fromTmpFile($tmpFile, $path) { return self::$defaultInstance->fromTmpFile($tmpFile, $path); } static public function getMimeType($path) { return self::$defaultInstance->getMimeType($path); } - static public function hash($type,$path, $raw = false) { + static public function hash($type, $path, $raw = false) { return self::$defaultInstance->hash($type, $path, $raw); } @@ -542,7 +548,7 @@ class OC_Filesystem{ * @param int $time * @return bool */ - static public function hasUpdated($path,$time) { + static public function hasUpdated($path, $time) { return self::$defaultInstance->hasUpdated($path, $time); } @@ -569,7 +575,7 @@ class OC_Filesystem{ * @param bool $stripTrailingSlash * @return string */ - public static function normalizePath($path,$stripTrailingSlash=true) { + public static function normalizePath($path, $stripTrailingSlash=true) { if($path=='') { return '/'; } @@ -584,7 +590,7 @@ class OC_Filesystem{ $path=substr($path, 0, -1); } //remove duplicate slashes - while(strpos($path,'//')!==false) { + while(strpos($path, '//')!==false) { $path=str_replace('//', '/', $path); } //normalize unicode if possible |