diff options
author | Vincent Petry <pvince81@owncloud.com> | 2016-06-27 12:14:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-27 12:14:05 +0200 |
commit | 199c8e304c261cd0f32a320c2d8ec6c8ce2a45c6 (patch) | |
tree | 9c29e3242d4ef788eab9d4fcd60b877b0a02ac9a /lib | |
parent | 726961172242d4d529af97a730ef9f57ec746eb2 (diff) | |
parent | 0ad065cb8d7bbc3665140f0b264a8ac74167cfa8 (diff) | |
download | nextcloud-server-199c8e304c261cd0f32a320c2d8ec6c8ce2a45c6.tar.gz nextcloud-server-199c8e304c261cd0f32a320c2d8ec6c8ce2a45c6.zip |
Merge pull request #25250 from owncloud/linkshare-includedeletewithuploadperms
Add explicit delete permission to link shares
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Repair/RepairInvalidShares.php | 23 | ||||
-rw-r--r-- | lib/private/Share20/Manager.php | 7 |
2 files changed, 24 insertions, 6 deletions
diff --git a/lib/private/Repair/RepairInvalidShares.php b/lib/private/Repair/RepairInvalidShares.php index 30f67a1f394..728632486d0 100644 --- a/lib/private/Repair/RepairInvalidShares.php +++ b/lib/private/Repair/RepairInvalidShares.php @@ -72,6 +72,25 @@ class RepairInvalidShares implements IRepairStep { } /** + * In the past link shares with public upload enabled were missing the delete permission. + */ + private function addShareLinkDeletePermission(IOutput $out) { + $oldPerms = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE; + $newPerms = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE; + $builder = $this->connection->getQueryBuilder(); + $builder + ->update('share') + ->set('permissions', $builder->expr()->literal($newPerms)) + ->where($builder->expr()->eq('share_type', $builder->expr()->literal(\OC\Share\Constants::SHARE_TYPE_LINK))) + ->andWhere($builder->expr()->eq('permissions', $builder->expr()->literal($oldPerms))); + + $updatedEntries = $builder->execute(); + if ($updatedEntries > 0) { + $out->info('Fixed link share permissions for ' . $updatedEntries . ' shares'); + } + } + + /** * Remove shares where the parent share does not exist anymore */ private function removeSharesNonExistingParent(IOutput $out) { @@ -113,6 +132,10 @@ class RepairInvalidShares implements IRepairStep { // this situation was only possible before 8.2 $this->removeExpirationDateFromNonLinkShares($out); } + if (version_compare($ocVersionFromBeforeUpdate, '9.1.0.9', '<')) { + // this situation was only possible before 9.1 + $this->addShareLinkDeletePermission($out); + } $this->removeSharesNonExistingParent($out); } diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index e2730f4d5fb..2c08e616f82 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -446,14 +446,9 @@ class Manager implements IManager { throw new \InvalidArgumentException('Link shares can\'t have reshare permissions'); } - // We don't allow deletion on link shares - if ($share->getPermissions() & \OCP\Constants::PERMISSION_DELETE) { - throw new \InvalidArgumentException('Link shares can\'t have delete permissions'); - } - // Check if public upload is allowed if (!$this->shareApiLinkAllowPublicUpload() && - ($share->getPermissions() & (\OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE))) { + ($share->getPermissions() & (\OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE))) { throw new \InvalidArgumentException('Public upload not allowed'); } } |