diff options
author | Vincent Petry <vincent@nextcloud.com> | 2021-10-05 08:19:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-05 08:19:49 +0200 |
commit | ee32c7c3282407c4cc714dc7e00a374781d9ef56 (patch) | |
tree | 24933231eaf83e5f1630633a960292bc750793bb | |
parent | b73cde2396d99310c075374195c02d4a2f352bb3 (diff) | |
parent | fa23a9f720a7612ee337a55768d24d0085aed4f0 (diff) | |
download | nextcloud-server-ee32c7c3282407c4cc714dc7e00a374781d9ef56.tar.gz nextcloud-server-ee32c7c3282407c4cc714dc7e00a374781d9ef56.zip |
Merge pull request #29058 from nextcloud/bugfix/28981/transfer-ownership-deleted-user
Do not transfer shares for deleted users
-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>'); |