diff options
author | Robin Appelman <robin@icewind.nl> | 2025-05-12 13:17:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-12 13:17:02 +0200 |
commit | e6bdfcd8eda4ffbf4cc4b056326bd20220518b56 (patch) | |
tree | 631c4d4096e8976321b2c9805c1db5a51fadb010 /lib/private | |
parent | ff1dfc6bd0f997c4cf541389759439d0ea521762 (diff) | |
parent | cd75876c1e1c31c84486bae5114656a367940981 (diff) | |
download | nextcloud-server-e6bdfcd8eda4ffbf4cc4b056326bd20220518b56.tar.gz nextcloud-server-e6bdfcd8eda4ffbf4cc4b056326bd20220518b56.zip |
Merge pull request #52665 from nextcloud/mountpoint-mkdir-quota
fix: create mountpoint folder even if the user has a quota of 0
Diffstat (limited to 'lib/private')
-rw-r--r-- | lib/private/Files/Storage/Wrapper/Quota.php | 8 | ||||
-rw-r--r-- | lib/private/Files/View.php | 11 |
2 files changed, 19 insertions, 0 deletions
diff --git a/lib/private/Files/Storage/Wrapper/Quota.php b/lib/private/Files/Storage/Wrapper/Quota.php index 3be77ba1b37..35a265f8c8e 100644 --- a/lib/private/Files/Storage/Wrapper/Quota.php +++ b/lib/private/Files/Storage/Wrapper/Quota.php @@ -21,6 +21,7 @@ class Quota extends Wrapper { protected string $sizeRoot; private SystemConfig $config; private bool $quotaIncludeExternalStorage; + private bool $enabled = true; /** * @param array $parameters @@ -46,6 +47,9 @@ class Quota extends Wrapper { } private function hasQuota(): bool { + if (!$this->enabled) { + return false; + } return $this->getQuota() !== FileInfo::SPACE_UNLIMITED; } @@ -197,4 +201,8 @@ class Quota extends Wrapper { return parent::touch($path, $mtime); } + + public function enableQuota(bool $enabled): void { + $this->enabled = $enabled; + } } diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php index f17ced1611b..e49043355e8 100644 --- a/lib/private/Files/View.php +++ b/lib/private/Files/View.php @@ -10,6 +10,7 @@ namespace OC\Files; use Icewind\Streams\CallbackWrapper; use OC\Files\Mount\MoveableMount; use OC\Files\Storage\Storage; +use OC\Files\Storage\Wrapper\Quota; use OC\Share\Share; use OC\User\LazyUser; use OC\User\Manager as UserManager; @@ -1578,12 +1579,22 @@ class View { // Create parent folders if the mountpoint is inside a subfolder that doesn't exist yet if (!isset($files[$entryName])) { try { + [$storage, ] = $this->resolvePath($path . '/' . $entryName); + // make sure we can create the mountpoint folder, even if the user has a quota of 0 + if ($storage->instanceOfStorage(Quota::class)) { + $storage->enableQuota(false); + } + if ($this->mkdir($path . '/' . $entryName) !== false) { $info = $this->getFileInfo($path . '/' . $entryName); if ($info !== false) { $files[$entryName] = $info; } } + + if ($storage->instanceOfStorage(Quota::class)) { + $storage->enableQuota(true); + } } catch (\Exception $e) { // Creating the parent folder might not be possible, for example due to a lack of permissions. $this->logger->debug('Failed to create non-existent parent', ['exception' => $e, 'path' => $path . '/' . $entryName]); |