From 2c56dfba848f84defd3d9b51e7fc73f3edd001b6 Mon Sep 17 00:00:00 2001 From: Robin Appelman <robin@icewind.nl> Date: Tue, 1 Apr 2025 16:37:06 +0200 Subject: [PATCH] fix: attempt to repair upload folder permissions Signed-off-by: Robin Appelman <robin@icewind.nl> --- apps/dav/lib/RootCollection.php | 1 + apps/dav/lib/Upload/RootCollection.php | 4 +++- apps/dav/lib/Upload/UploadHome.php | 9 +++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php index 21a5558ded3..45314fdd532 100644 --- a/apps/dav/lib/RootCollection.php +++ b/apps/dav/lib/RootCollection.php @@ -175,6 +175,7 @@ class RootCollection extends SimpleCollection { \OC::$server->query(CleanupService::class), $rootFolder, $userSession, + $logger, ); $uploadCollection->disableListing = $disableListing; diff --git a/apps/dav/lib/Upload/RootCollection.php b/apps/dav/lib/Upload/RootCollection.php index b4f3d791781..4ffdbe6dcf7 100644 --- a/apps/dav/lib/Upload/RootCollection.php +++ b/apps/dav/lib/Upload/RootCollection.php @@ -28,6 +28,7 @@ namespace OCA\DAV\Upload; use OCP\Files\IRootFolder; use OCP\IUserSession; +use Psr\Log\LoggerInterface; use Sabre\DAVACL\AbstractPrincipalCollection; use Sabre\DAVACL\PrincipalBackend; @@ -37,6 +38,7 @@ class RootCollection extends AbstractPrincipalCollection { private CleanupService $cleanupService, private IRootFolder $rootFolder, private IUserSession $userSession, + private LoggerInterface $logger, ) { parent::__construct($principalBackend, $principalPrefix); } @@ -45,7 +47,7 @@ class RootCollection extends AbstractPrincipalCollection { * @inheritdoc */ public function getChildForPrincipal(array $principalInfo): UploadHome { - return new UploadHome($principalInfo, $this->cleanupService, $this->rootFolder, $this->userSession); + return new UploadHome($principalInfo, $this->cleanupService, $this->rootFolder, $this->userSession, $this->logger); } /** diff --git a/apps/dav/lib/Upload/UploadHome.php b/apps/dav/lib/Upload/UploadHome.php index 367462ae17c..4dc94078e0e 100644 --- a/apps/dav/lib/Upload/UploadHome.php +++ b/apps/dav/lib/Upload/UploadHome.php @@ -27,10 +27,12 @@ namespace OCA\DAV\Upload; use OC\Files\View; use OCA\DAV\Connector\Sabre\Directory; +use OCP\Constants; use OCP\Files\Folder; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; use OCP\IUserSession; +use Psr\Log\LoggerInterface; use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\ICollection; @@ -42,6 +44,7 @@ class UploadHome implements ICollection { private CleanupService $cleanupService, private IRootFolder $rootFolder, private IUserSession $userSession, + private LoggerInterface $logger, ) { } @@ -109,6 +112,12 @@ class UploadHome implements ICollection { private function impl(): Directory { $folder = $this->getUploadFolder(); + if (!$folder->isCreatable()) { + $user = $this->userSession->getUser(); + $this->logger->warning('Upload home not writable for ' . $user->getUID() . ', attempting to fix', ['permissions' => $folder->getPermissions()]); + $cache = $folder->getStorage()->getCache(); + $cache->update($folder->getId(), ['permissions', Constants::PERMISSION_ALL]); + } $view = new View($folder->getPath()); return new Directory($view, $folder); }