diff options
author | Morris Jobke <hey@morrisjobke.de> | 2018-01-23 10:52:41 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-23 10:52:41 +0100 |
commit | 5c360a41e9ccc9a2cbb8a5d4ef8b09b9d1fa0d5d (patch) | |
tree | 2667f17d8926bfb25c373d99dc04ff7803b0ee02 /lib | |
parent | caccf7a2e95bebab67c533c6db4b1d74e48b59f4 (diff) | |
parent | bcba1a97adff176e503375ef714df8d692f68d49 (diff) | |
download | nextcloud-server-5c360a41e9ccc9a2cbb8a5d4ef8b09b9d1fa0d5d.tar.gz nextcloud-server-5c360a41e9ccc9a2cbb8a5d4ef8b09b9d1fa0d5d.zip |
Merge pull request #7858 from nextcloud/fix-local-storage
Use fallback path if data dir is not available for Storage/Local.php
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Files/Mount/MountPoint.php | 2 | ||||
-rw-r--r-- | lib/private/Files/Storage/Home.php | 5 | ||||
-rw-r--r-- | lib/private/Files/Storage/Local.php | 15 |
3 files changed, 15 insertions, 7 deletions
diff --git a/lib/private/Files/Mount/MountPoint.php b/lib/private/Files/Mount/MountPoint.php index bff1f2e3f0c..26150de2bd1 100644 --- a/lib/private/Files/Mount/MountPoint.php +++ b/lib/private/Files/Mount/MountPoint.php @@ -152,7 +152,7 @@ class MountPoint implements IMountPoint { // the root storage could not be initialized, show the user! throw new \Exception('The root storage could not be initialized. Please contact your local administrator.', $exception->getCode(), $exception); } else { - \OCP\Util::writeLog('core', $exception->getMessage(), \OCP\Util::ERROR); + \OC::$server->getLogger()->logException($exception, ['level' => \OCP\Util::ERROR]); } return; } diff --git a/lib/private/Files/Storage/Home.php b/lib/private/Files/Storage/Home.php index 57b32349324..d2a979c3020 100644 --- a/lib/private/Files/Storage/Home.php +++ b/lib/private/Files/Storage/Home.php @@ -25,6 +25,7 @@ */ namespace OC\Files\Storage; + use OC\Files\Cache\HomePropagator; /** @@ -43,6 +44,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage { /** * Construct a Home storage instance + * * @param array $arguments array with "user" containing the * storage owner */ @@ -51,7 +53,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage { $datadir = $this->user->getHome(); $this->id = 'home::' . $this->user->getUID(); - parent::__construct(array('datadir' => $datadir)); + parent::__construct(['datadir' => $datadir]); } public function getId() { @@ -90,6 +92,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage { /** * Returns the owner of this home storage + * * @return \OC\User\User owner of this home storage */ public function getUser() { diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php index ba9b15ce931..a0e20f4cba1 100644 --- a/lib/private/Files/Storage/Local.php +++ b/lib/private/Files/Storage/Local.php @@ -59,12 +59,13 @@ class Local extends \OC\Files\Storage\Common { if (!isset($arguments['datadir']) || !is_string($arguments['datadir'])) { throw new \InvalidArgumentException('No data directory set for local storage'); } - $this->datadir = $arguments['datadir']; + $this->datadir = str_replace('//', '/', $arguments['datadir']); // some crazy code uses a local storage on root... if ($this->datadir === '/') { $this->realDataDir = $this->datadir; } else { - $this->realDataDir = rtrim(realpath($this->datadir), '/') . '/'; + $realPath = realpath($this->datadir) ?: $this->datadir; + $this->realDataDir = rtrim($realPath, '/') . '/'; } if (substr($this->datadir, -1) !== '/') { $this->datadir .= '/'; @@ -361,14 +362,18 @@ class Local extends \OC\Files\Storage\Common { */ public function getSourcePath($path) { $fullPath = $this->datadir . $path; - if ($this->allowSymlinks || $path === '') { + $currentPath = $path; + if ($this->allowSymlinks || $currentPath === '') { return $fullPath; } $pathToResolve = $fullPath; $realPath = realpath($pathToResolve); while ($realPath === false) { // for non existing files check the parent directory - $pathToResolve = dirname($pathToResolve); - $realPath = realpath($pathToResolve); + $currentPath = dirname($currentPath); + if ($currentPath === '' || $currentPath === '.') { + return $fullPath; + } + $realPath = realpath($this->datadir . $currentPath); } if ($realPath) { $realPath = $realPath . '/'; |