0
0
Fork 0
mirror of https://github.com/nextcloud/server.git synced 2025-04-18 14:59:15 +00:00

fix: attempt to repair upload folder permissions

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2025-04-01 16:37:06 +02:00
parent a6826eeee5
commit 2c56dfba84
3 changed files with 13 additions and 1 deletions

View file

@ -175,6 +175,7 @@ class RootCollection extends SimpleCollection {
\OC::$server->query(CleanupService::class), \OC::$server->query(CleanupService::class),
$rootFolder, $rootFolder,
$userSession, $userSession,
$logger,
); );
$uploadCollection->disableListing = $disableListing; $uploadCollection->disableListing = $disableListing;

View file

@ -28,6 +28,7 @@ namespace OCA\DAV\Upload;
use OCP\Files\IRootFolder; use OCP\Files\IRootFolder;
use OCP\IUserSession; use OCP\IUserSession;
use Psr\Log\LoggerInterface;
use Sabre\DAVACL\AbstractPrincipalCollection; use Sabre\DAVACL\AbstractPrincipalCollection;
use Sabre\DAVACL\PrincipalBackend; use Sabre\DAVACL\PrincipalBackend;
@ -37,6 +38,7 @@ class RootCollection extends AbstractPrincipalCollection {
private CleanupService $cleanupService, private CleanupService $cleanupService,
private IRootFolder $rootFolder, private IRootFolder $rootFolder,
private IUserSession $userSession, private IUserSession $userSession,
private LoggerInterface $logger,
) { ) {
parent::__construct($principalBackend, $principalPrefix); parent::__construct($principalBackend, $principalPrefix);
} }
@ -45,7 +47,7 @@ class RootCollection extends AbstractPrincipalCollection {
* @inheritdoc * @inheritdoc
*/ */
public function getChildForPrincipal(array $principalInfo): UploadHome { 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);
} }
/** /**

View file

@ -27,10 +27,12 @@ namespace OCA\DAV\Upload;
use OC\Files\View; use OC\Files\View;
use OCA\DAV\Connector\Sabre\Directory; use OCA\DAV\Connector\Sabre\Directory;
use OCP\Constants;
use OCP\Files\Folder; use OCP\Files\Folder;
use OCP\Files\IRootFolder; use OCP\Files\IRootFolder;
use OCP\Files\NotFoundException; use OCP\Files\NotFoundException;
use OCP\IUserSession; use OCP\IUserSession;
use Psr\Log\LoggerInterface;
use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\Exception\Forbidden;
use Sabre\DAV\ICollection; use Sabre\DAV\ICollection;
@ -42,6 +44,7 @@ class UploadHome implements ICollection {
private CleanupService $cleanupService, private CleanupService $cleanupService,
private IRootFolder $rootFolder, private IRootFolder $rootFolder,
private IUserSession $userSession, private IUserSession $userSession,
private LoggerInterface $logger,
) { ) {
} }
@ -109,6 +112,12 @@ class UploadHome implements ICollection {
private function impl(): Directory { private function impl(): Directory {
$folder = $this->getUploadFolder(); $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()); $view = new View($folder->getPath());
return new Directory($view, $folder); return new Directory($view, $folder);
} }