Skip to content

Commit

Permalink
Merge pull request #2733 from nextcloud/backport/2731/stable26
Browse files Browse the repository at this point in the history
[stable26] don't apply acls when scanning
  • Loading branch information
icewind1991 authored Jan 22, 2024
2 parents c6a0bd8 + c2e5e9b commit bad5adf
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 3 deletions.
31 changes: 28 additions & 3 deletions lib/Mount/GroupFolderStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@
use OC\Files\Cache\Scanner;
use OC\Files\ObjectStore\NoopScanner;
use OC\Files\ObjectStore\ObjectStoreStorage;
use OC\Files\Storage\Wrapper\Jail;
use OC\Files\Storage\Wrapper\Quota;
use OC\Files\Storage\Wrapper\Wrapper;
use OCA\GroupFolders\ACL\ACLStorageWrapper;
use OCP\Files\Cache\ICacheEntry;
use OCP\Files\Storage\IDisableEncryptionStorage;
use OCP\IUser;
Expand Down Expand Up @@ -71,10 +74,32 @@ public function getCache($path = '', $storage = null) {
}

public function getScanner($path = '', $storage = null) {
/** @var \OC\Files\Storage\Storage $storage */
if (!$storage) {
$storage = $this;
// note that we explicitly don't used the passed in storage
// as we want to perform the scan on the underlying filesystem
// without any of the group folder permissions applied

/** @var Wrapper $storage */
$storage = $this->storage;

// we want to scan without ACLs applied
if ($storage->instanceOfStorage(ACLStorageWrapper::class)) {
// sanity check in case the code setting up the wrapper hierarchy is changed without updating this
if (!$this->storage instanceof Jail) {
throw new \Exception("groupfolder storage layout changed unexpectedly");
}

$jailRoot = $this->storage->getUnjailedPath('');
$aclStorage = $this->storage->getUnjailedStorage();

if (!$aclStorage instanceof ACLStorageWrapper) {
throw new \Exception("groupfolder storage layout changed unexpectedly");
}
$storage = new Jail([
'storage' => $aclStorage->getWrapperStorage(),
'root' => $jailRoot,
]);
}

if ($storage->instanceOfStorage(ObjectStoreStorage::class)) {
$storage->scanner = new NoopScanner($storage);
} elseif (!isset($storage->scanner)) {
Expand Down
1 change: 1 addition & 0 deletions tests/stub.phpstub
Original file line number Diff line number Diff line change
Expand Up @@ -932,6 +932,7 @@ namespace OC\Files\Storage\Wrapper{

class Jail extends Wrapper {
public function getUnjailedPath(string $path): string {}
public function getUnjailedStorage(): IStorage {}
}

class Quota extends Wrapper {
Expand Down

0 comments on commit bad5adf

Please sign in to comment.