aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2025-04-01 16:37:06 +0200
committerRobin Appelman <robin@icewind.nl>2025-04-03 15:51:04 +0200
commit57cba2a3e4e79054895d13289f9be51e95368a1d (patch)
treed953bac4f0012f9e52a59d9d545aecc6ad88fa17
parent807958448385880938cf5ce15a9dae65c3da29c8 (diff)
downloadnextcloud-server-uploadfolder-rework-autofix.tar.gz
nextcloud-server-uploadfolder-rework-autofix.zip
fix: attempt to repair upload folder permissionsuploadfolder-rework-autofix
Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r--apps/dav/lib/RootCollection.php1
-rw-r--r--apps/dav/lib/Upload/RootCollection.php4
-rw-r--r--apps/dav/lib/Upload/UploadHome.php9
3 files changed, 13 insertions, 1 deletions
diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php
index b2b34b26980..c8a47cd984f 100644
--- a/apps/dav/lib/RootCollection.php
+++ b/apps/dav/lib/RootCollection.php
@@ -160,6 +160,7 @@ class RootCollection extends SimpleCollection {
Server::get(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 9ea2592702b..5b33d07d77a 100644
--- a/apps/dav/lib/Upload/RootCollection.php
+++ b/apps/dav/lib/Upload/RootCollection.php
@@ -11,6 +11,7 @@ namespace OCA\DAV\Upload;
use OCP\Files\IRootFolder;
use OCP\IUserSession;
+use Psr\Log\LoggerInterface;
use Sabre\DAVACL\AbstractPrincipalCollection;
use Sabre\DAVACL\PrincipalBackend;
@@ -22,6 +23,7 @@ class RootCollection extends AbstractPrincipalCollection {
private CleanupService $cleanupService,
private IRootFolder $rootFolder,
private IUserSession $userSession,
+ private LoggerInterface $logger,
) {
parent::__construct($principalBackend, $principalPrefix);
}
@@ -30,7 +32,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 a6551d4d079..d38e3953720 100644
--- a/apps/dav/lib/Upload/UploadHome.php
+++ b/apps/dav/lib/Upload/UploadHome.php
@@ -9,10 +9,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;
@@ -24,6 +26,7 @@ class UploadHome implements ICollection {
private readonly CleanupService $cleanupService,
private readonly IRootFolder $rootFolder,
private readonly IUserSession $userSession,
+ private readonly LoggerInterface $logger,
) {
}
@@ -91,6 +94,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);
}