diff options
author | Pytal <24800714+Pytal@users.noreply.github.com> | 2021-10-05 17:43:47 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-05 17:43:47 -0700 |
commit | c9ef440a1358dca4e38c593b84b96cd1480493f7 (patch) | |
tree | ae70e7cdbe1667dc19efa5c12344cb9f7efe2199 | |
parent | fad7135bc4e4ee73f82f6f42f249619ebeb85865 (diff) | |
parent | abfc24ad993e538afe62fb2d22a911b5f714c669 (diff) | |
download | nextcloud-server-c9ef440a1358dca4e38c593b84b96cd1480493f7.tar.gz nextcloud-server-c9ef440a1358dca4e38c593b84b96cd1480493f7.zip |
Merge pull request #29078 from nextcloud/backport/29058/stable22
-rw-r--r-- | apps/files/lib/Service/OwnershipTransferService.php | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/apps/files/lib/Service/OwnershipTransferService.php b/apps/files/lib/Service/OwnershipTransferService.php index ecb2365ef1b..93a3a188399 100644 --- a/apps/files/lib/Service/OwnershipTransferService.php +++ b/apps/files/lib/Service/OwnershipTransferService.php @@ -43,6 +43,7 @@ use OCP\Files\IHomeStorage; use OCP\Files\InvalidPathException; use OCP\Files\Mount\IMountManager; use OCP\IUser; +use OCP\IUserManager; use OCP\Share\IManager as IShareManager; use OCP\Share\IShare; use Symfony\Component\Console\Helper\ProgressBar; @@ -69,14 +70,19 @@ class OwnershipTransferService { /** @var IUserMountCache */ private $userMountCache; + /** @var IUserManager */ + private $userManager; + public function __construct(IEncryptionManager $manager, IShareManager $shareManager, IMountManager $mountManager, - IUserMountCache $userMountCache) { + IUserMountCache $userMountCache, + IUserManager $userManager) { $this->encryptionManager = $manager; $this->shareManager = $shareManager; $this->mountManager = $mountManager; $this->userMountCache = $userMountCache; + $this->userManager = $userManager; } /** @@ -401,13 +407,20 @@ class OwnershipTransferService { $share->setSharedBy($destinationUid); } + if ($share->getShareType() === IShare::TYPE_USER && + !$this->userManager->userExists($share->getSharedWith())) { + // stray share with deleted user + $output->writeln('<error>Share with id ' . $share->getId() . ' points at deleted user "' . $share->getSharedWith() . '", deleting</error>'); + $this->shareManager->deleteShare($share); + continue; + } else { + // trigger refetching of the node so that the new owner and mountpoint are taken into account + // otherwise the checks on the share update will fail due to the original node not being available in the new user scope + $this->userMountCache->clear(); + $share->setNodeId($share->getNode()->getId()); - // trigger refetching of the node so that the new owner and mountpoint are taken into account - // otherwise the checks on the share update will fail due to the original node not being available in the new user scope - $this->userMountCache->clear(); - $share->setNodeId($share->getNode()->getId()); - - $this->shareManager->updateShare($share); + $this->shareManager->updateShare($share); + } } } catch (\OCP\Files\NotFoundException $e) { $output->writeln('<error>Share with id ' . $share->getId() . ' points at deleted file, skipping</error>'); |