diff options
author | Roeland Jago Douma <rullzer@owncloud.com> | 2016-03-30 13:33:16 +0200 |
---|---|---|
committer | Roeland Jago Douma <rullzer@owncloud.com> | 2016-03-30 13:33:16 +0200 |
commit | 9ce5e4b01fcc8bf1805e97e162dd28bba3a7d251 (patch) | |
tree | 15ea95aecc0b12b3b8a56ea45e38d9c05912968b /lib/private/Share20 | |
parent | 0e687993c8afb36876e7d90c229b97b4aaf43b70 (diff) | |
download | nextcloud-server-9ce5e4b01fcc8bf1805e97e162dd28bba3a7d251.tar.gz nextcloud-server-9ce5e4b01fcc8bf1805e97e162dd28bba3a7d251.zip |
Non moveable mount points should always be UPDATE+DELETE shareable
Fixes #23536
The new sharing code is much stricter in checking permissions. However
for non moveable mounts the permissions UPDATE+DELETE are not reported
on the mount point.
This is just a quick fix.
* Updated unit tests
Diffstat (limited to 'lib/private/Share20')
-rw-r--r-- | lib/private/Share20/Manager.php | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index 4737de002cb..1c9d4d82277 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -23,6 +23,7 @@ namespace OC\Share20; +use OC\Files\Mount\MoveableMount; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; use OCP\IUserManager; @@ -215,8 +216,19 @@ class Manager implements IManager { throw new \InvalidArgumentException('A share requires permissions'); } + /* + * Quick fix for #23536 + * Non moveable mount points do not have update and delete permissions + * while we 'most likely' do have that on the storage. + */ + $permissions = $share->getNode()->getPermissions(); + $mount = $share->getNode()->getMountPoint(); + if (!($mount instanceof MoveableMount)) { + $permissions |= \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_UPDATE; + } + // Check that we do not share with more permissions than we have - if ($share->getPermissions() & ~$share->getNode()->getPermissions()) { + if ($share->getPermissions() & ~$permissions) { $message_t = $this->l->t('Cannot increase permissions of %s', [$share->getNode()->getPath()]); throw new GenericShareException($message_t, $message_t, 404); } |