From 5d69343efa4530341c339ab212ca18827332aff8 Mon Sep 17 00:00:00 2001
From: Robin Appelman <robin@icewind.nl>
Date: Thu, 12 May 2022 14:40:20 +0200
Subject: remove storage wrappers when deleting the user storage

Signed-off-by: Robin Appelman <robin@icewind.nl>
---
 .../Authentication/Listeners/UserDeletedFilesCleanupListener.php  | 8 ++++++++
 1 file changed, 8 insertions(+)

(limited to 'lib/private/Authentication')

diff --git a/lib/private/Authentication/Listeners/UserDeletedFilesCleanupListener.php b/lib/private/Authentication/Listeners/UserDeletedFilesCleanupListener.php
index fa7459e10ff..2fb05159d09 100644
--- a/lib/private/Authentication/Listeners/UserDeletedFilesCleanupListener.php
+++ b/lib/private/Authentication/Listeners/UserDeletedFilesCleanupListener.php
@@ -26,6 +26,7 @@ declare(strict_types=1);
 namespace OC\Authentication\Listeners;
 
 use OC\Files\Cache\Cache;
+use OC\Files\Storage\Wrapper\Wrapper;
 use OCP\EventDispatcher\Event;
 use OCP\EventDispatcher\IEventListener;
 use OCP\Files\Config\IMountProviderCollection;
@@ -56,6 +57,13 @@ class UserDeletedFilesCleanupListener implements IEventListener {
 			if (!$storage) {
 				throw new \Exception("User has no home storage");
 			}
+
+			// remove all wrappers, so we do the delete directly on the home storage bypassing any wrapper
+			while ($storage->instanceOfStorage(Wrapper::class)) {
+				/** @var Wrapper $storage */
+				$storage = $storage->getWrapperStorage();
+			}
+
 			$this->homeStorageCache[$event->getUser()->getUID()] = $storage;
 		}
 		if ($event instanceof UserDeletedEvent) {
-- 
cgit v1.2.3