aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorprovokateurin <kate@provokateurin.de>2024-09-16 16:00:46 +0200
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2024-09-17 08:47:08 +0000
commitb2ae0d3d0e3a7b355502d5e4812d40daa9a8d8df (patch)
treebe21bdf58396c4fe3d3d892164680eee85e91478
parent24c78783a3066020c090a5290b4e3e0fb3bd1c84 (diff)
downloadnextcloud-server-backport/48094/stable29.tar.gz
nextcloud-server-backport/48094/stable29.zip
fix(Files): Handle getOwner() returning falsebackport/48094/stable29
Signed-off-by: provokateurin <kate@provokateurin.de> [skip ci]
-rw-r--r--apps/dav/lib/Storage/PublicOwnerWrapper.php10
-rw-r--r--apps/files_versions/lib/Versions/LegacyVersionsBackend.php4
-rw-r--r--lib/private/Files/Node/Folder.php2
-rw-r--r--lib/private/Files/Node/Root.php19
-rw-r--r--lib/private/Files/View.php38
-rw-r--r--lib/private/legacy/OC_Helper.php3
6 files changed, 59 insertions, 17 deletions
diff --git a/apps/dav/lib/Storage/PublicOwnerWrapper.php b/apps/dav/lib/Storage/PublicOwnerWrapper.php
index ebb24350e7c..5c461146b97 100644
--- a/apps/dav/lib/Storage/PublicOwnerWrapper.php
+++ b/apps/dav/lib/Storage/PublicOwnerWrapper.php
@@ -29,8 +29,7 @@ use OC\Files\Storage\Wrapper\Wrapper;
class PublicOwnerWrapper extends Wrapper {
- /** @var string */
- private $owner;
+ private string $owner;
/**
* @param array $arguments ['storage' => $storage, 'owner' => $owner]
@@ -45,11 +44,10 @@ class PublicOwnerWrapper extends Wrapper {
public function getOwner($path): string|false {
$owner = parent::getOwner($path);
-
- if ($owner === null || $owner === false) {
- return $this->owner;
+ if ($owner !== false) {
+ return $owner;
}
- return $owner;
+ return $this->owner;
}
}
diff --git a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php
index deb8833c87b..819bc8690a7 100644
--- a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php
+++ b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php
@@ -68,6 +68,10 @@ class LegacyVersionsBackend implements IVersionBackend, IDeletableVersionBackend
if ($storage->instanceOfStorage(SharedStorage::class)) {
$owner = $storage->getOwner('');
+ if ($owner === false) {
+ throw new NotFoundException('No owner for ' . $file->getPath());
+ }
+
$user = $this->userManager->get($owner);
$fileId = $file->getId();
diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php
index 8ff2bb27ee2..6a11e1802c2 100644
--- a/lib/private/Files/Node/Folder.php
+++ b/lib/private/Files/Node/Folder.php
@@ -278,7 +278,7 @@ class Folder extends Node implements \OCP\Files\Folder {
$owner = null;
$ownerId = $storage->getOwner($cacheEntry['internalPath']);
- if (!empty($ownerId)) {
+ if ($ownerId !== false) {
// Cache the user manager (for performance)
if ($this->userManager === null) {
$this->userManager = \OCP\Server::get(IUserManager::class);
diff --git a/lib/private/Files/Node/Root.php b/lib/private/Files/Node/Root.php
index 7c3ff1d2867..8dd57a07e91 100644
--- a/lib/private/Files/Node/Root.php
+++ b/lib/private/Files/Node/Root.php
@@ -53,6 +53,7 @@ use OCP\ICache;
use OCP\ICacheFactory;
use OCP\IUser;
use OCP\IUserManager;
+use OCP\Server;
use Psr\Log\LoggerInterface;
/**
@@ -502,9 +503,23 @@ class Root extends Folder implements IRootFolder {
$pathRelativeToMount = substr($internalPath, strlen($rootInternalPath));
$pathRelativeToMount = ltrim($pathRelativeToMount, '/');
$absolutePath = rtrim($mount->getMountPoint() . $pathRelativeToMount, '/');
+ $storage = $mount->getStorage();
+ if ($storage === null) {
+ return null;
+ }
+ $ownerId = $storage->getOwner($pathRelativeToMount);
+ if ($ownerId !== false) {
+ $owner = Server::get(IUserManager::class)->get($ownerId);
+ } else {
+ $owner = null;
+ }
return $this->createNode($absolutePath, new FileInfo(
- $absolutePath, $mount->getStorage(), $cacheEntry->getPath(), $cacheEntry, $mount,
- \OC::$server->getUserManager()->get($mount->getStorage()->getOwner($pathRelativeToMount))
+ $absolutePath,
+ $storage,
+ $cacheEntry->getPath(),
+ $cacheEntry,
+ $mount,
+ $owner,
));
}, $mountsContainingFile);
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index 861167c536c..39dcff6340a 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -67,6 +67,7 @@ use OCP\Files\Mount\IMountPoint;
use OCP\Files\NotFoundException;
use OCP\Files\ReservedWordException;
use OCP\IUser;
+use OCP\IUserManager;
use OCP\Lock\ILockingProvider;
use OCP\Lock\LockedException;
use OCP\Server;
@@ -1399,7 +1400,7 @@ class View {
$ownerId = $storage->getOwner($internalPath);
$owner = null;
- if ($ownerId !== null && $ownerId !== false) {
+ if ($ownerId !== false) {
// ownerId might be null if files are accessed with an access token without file system access
$owner = $this->getUserObjectForOwner($ownerId);
}
@@ -1485,7 +1486,12 @@ class View {
if ($sharingDisabled) {
$content['permissions'] = $content['permissions'] & ~\OCP\Constants::PERMISSION_SHARE;
}
- $owner = $this->getUserObjectForOwner($storage->getOwner($content['path']));
+ $ownerId = $storage->getOwner($content['path']);
+ if ($ownerId !== false) {
+ $owner = $this->getUserObjectForOwner($ownerId);
+ } else {
+ $owner = null;
+ }
return new FileInfo($path . '/' . $content['name'], $storage, $content['path'], $content, $mount, $owner);
}, $contents);
$files = array_combine($fileNames, $fileInfos);
@@ -1562,7 +1568,12 @@ class View {
$rootEntry['permissions'] = $rootEntry['permissions'] & ~\OCP\Constants::PERMISSION_SHARE;
}
- $owner = $this->getUserObjectForOwner($subStorage->getOwner(''));
+ $ownerId = $subStorage->getOwner('');
+ if ($ownerId !== false) {
+ $owner = $this->getUserObjectForOwner($ownerId);
+ } else {
+ $owner = null;
+ }
$files[$rootEntry->getName()] = new FileInfo($path . '/' . $rootEntry['name'], $subStorage, '', $rootEntry, $mount, $owner);
}
}
@@ -1679,7 +1690,12 @@ class View {
$internalPath = $result['path'];
$path = $mountPoint . $result['path'];
$result['path'] = substr($mountPoint . $result['path'], $rootLength);
- $owner = $userManager->get($storage->getOwner($internalPath));
+ $ownerId = $storage->getOwner($internalPath);
+ if ($ownerId !== false) {
+ $owner = $userManager->get($ownerId);
+ } else {
+ $owner = null;
+ }
$files[] = new FileInfo($path, $storage, $internalPath, $result, $mount, $owner);
}
}
@@ -1698,7 +1714,12 @@ class View {
$internalPath = $result['path'];
$result['path'] = rtrim($relativeMountPoint . $result['path'], '/');
$path = rtrim($mountPoint . $internalPath, '/');
- $owner = $userManager->get($storage->getOwner($internalPath));
+ $ownerId = $storage->getOwner($internalPath);
+ if ($ownerId !== false) {
+ $owner = $userManager->get($ownerId);
+ } else {
+ $owner = null;
+ }
$files[] = new FileInfo($path, $storage, $internalPath, $result, $mount, $owner);
}
}
@@ -1846,7 +1867,12 @@ class View {
$mount = $this->getMount($path);
$storage = $mount->getStorage();
$internalPath = $mount->getInternalPath($this->getAbsolutePath($path));
- $owner = \OC::$server->getUserManager()->get($storage->getOwner($internalPath));
+ $ownerId = $storage->getOwner($internalPath);
+ if ($ownerId !== false) {
+ $owner = Server::get(IUserManager::class)->get($ownerId);
+ } else {
+ $owner = null;
+ }
return new FileInfo(
$this->getAbsolutePath($path),
$storage,
diff --git a/lib/private/legacy/OC_Helper.php b/lib/private/legacy/OC_Helper.php
index 9a12bd50e0e..57736f78b8b 100644
--- a/lib/private/legacy/OC_Helper.php
+++ b/lib/private/legacy/OC_Helper.php
@@ -571,10 +571,9 @@ class OC_Helper {
$relative = 0;
}
- /** @var string $ownerId */
$ownerId = $storage->getOwner($path);
$ownerDisplayName = '';
- if ($ownerId) {
+ if ($ownerId !== false) {
$ownerDisplayName = \OC::$server->getUserManager()->getDisplayName($ownerId) ?? '';
}