From e5a107cc455122edf729b61ee249c35caedda02f Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Tue, 8 Mar 2016 11:23:20 +0100 Subject: [PATCH] Fix share mounting recursion --- apps/files_sharing/lib/sharedstorage.php | 2 ++ lib/private/files/config/usermountcache.php | 9 +++++++-- lib/private/util.php | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index 600599d717..6998f94698 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -85,6 +85,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage { } private function isValid() { + $this->init(); return ($this->sourceRootInfo->getPermissions() & Constants::PERMISSION_SHARE) === Constants::PERMISSION_SHARE; } @@ -566,6 +567,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage { } public function getCache($path = '', $storage = null) { + $this->init(); if (!$storage) { $storage = $this; } diff --git a/lib/private/files/config/usermountcache.php b/lib/private/files/config/usermountcache.php index 58e7e9d156..78b1997278 100644 --- a/lib/private/files/config/usermountcache.php +++ b/lib/private/files/config/usermountcache.php @@ -24,6 +24,7 @@ namespace OC\Files\Config; use Doctrine\DBAL\Exception\UniqueConstraintViolationException; use OC\Files\Filesystem; +use OCA\Files_Sharing\SharedMount; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\Files\Config\ICachedMountInfo; use OCP\Files\Config\IUserMountCache; @@ -75,12 +76,16 @@ class UserMountCache implements IUserMountCache { public function registerMounts(IUser $user, array $mounts) { // filter out non-proper storages coming from unit tests $mounts = array_filter($mounts, function (IMountPoint $mount) { - return $mount->getStorage() && $mount->getStorage()->getCache(); + return $mount instanceof SharedMount || $mount->getStorage() && $mount->getStorage()->getCache(); }); /** @var ICachedMountInfo[] $newMounts */ $newMounts = array_map(function (IMountPoint $mount) use ($user) { $storage = $mount->getStorage(); - $rootId = (int)$storage->getCache()->getId(''); + if ($storage->instanceOfStorage('\OC\Files\Storage\Shared')) { + $rootId = (int)$storage->getShare()['file_source']; + } else { + $rootId = (int)$storage->getCache()->getId(''); + } $storageId = (int)$storage->getStorageCache()->getNumericId(); // filter out any storages which aren't scanned yet since we aren't interested in files from those storages (yet) if ($rootId === -1) { diff --git a/lib/private/util.php b/lib/private/util.php index 6884e55c24..f6191b96aa 100644 --- a/lib/private/util.php +++ b/lib/private/util.php @@ -165,7 +165,7 @@ class OC_Util { // install storage availability wrapper, before most other wrappers \OC\Files\Filesystem::addStorageWrapper('oc_availability', function ($mountPoint, $storage) { - if (!$storage->isLocal()) { + if (!$storage->instanceOfStorage('\OC\Files\Storage\Shared') && !$storage->isLocal()) { return new \OC\Files\Storage\Wrapper\Availability(['storage' => $storage]); } return $storage;