summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2018-01-23 10:52:41 +0100
committerGitHub <noreply@github.com>2018-01-23 10:52:41 +0100
commit5c360a41e9ccc9a2cbb8a5d4ef8b09b9d1fa0d5d (patch)
tree2667f17d8926bfb25c373d99dc04ff7803b0ee02 /lib
parentcaccf7a2e95bebab67c533c6db4b1d74e48b59f4 (diff)
parentbcba1a97adff176e503375ef714df8d692f68d49 (diff)
downloadnextcloud-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.php2
-rw-r--r--lib/private/Files/Storage/Home.php5
-rw-r--r--lib/private/Files/Storage/Local.php15
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 . '/';