Skip to content

Commit 06141b2

Browse files
Merge pull request #11041 from nextcloud/fix/noid/get_permission_of_storage_for_shares
Check the permission of the underlying storage
2 parents d8f5549 + a2725c3 commit 06141b2

File tree

3 files changed

+18
-11
lines changed

3 files changed

+18
-11
lines changed

apps/files_sharing/lib/Cache.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ protected function formatCacheEntry($entry, $path = null) {
142142
} else {
143143
$entry['path'] = $path;
144144
}
145-
$sharePermissions = $this->storage->getPermissions($path);
145+
$sharePermissions = $this->storage->getPermissions($entry['path']);
146146
if (isset($entry['permissions'])) {
147147
$entry['permissions'] &= $sharePermissions;
148148
} else {

apps/files_sharing/lib/SharedStorage.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,8 @@ public function getPermissions($target = '') {
195195
if (!$this->isValid()) {
196196
return 0;
197197
}
198-
$permissions = $this->superShare->getPermissions();
198+
$permissions = parent::getPermissions($target) & $this->superShare->getPermissions();
199+
199200
// part files and the mount point always have delete permissions
200201
if ($target === '' || pathinfo($target, PATHINFO_EXTENSION) === 'part') {
201202
$permissions |= \OCP\Constants::PERMISSION_DELETE;
@@ -257,11 +258,17 @@ public function fopen($path, $mode) {
257258
case 'xb':
258259
case 'a':
259260
case 'ab':
260-
$creatable = $this->isCreatable($path);
261+
$creatable = $this->isCreatable(dirname($path));
261262
$updatable = $this->isUpdatable($path);
262263
// if neither permissions given, no need to continue
263264
if (!$creatable && !$updatable) {
264-
return false;
265+
if (pathinfo($path, PATHINFO_EXTENSION) === 'part') {
266+
$updatable = $this->isUpdatable(dirname($path));
267+
}
268+
269+
if (!$updatable) {
270+
return false;
271+
}
265272
}
266273

267274
$exists = $this->file_exists($path);

apps/files_sharing/tests/PermissionsTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,14 @@ protected function tearDown() {
134134
* Test that the permissions of shared directory are returned correctly
135135
*/
136136
function testGetPermissions() {
137-
$sharedDirPerms = $this->sharedStorage->getPermissions('shareddir');
137+
$sharedDirPerms = $this->sharedStorage->getPermissions('');
138138
$this->assertEquals(31, $sharedDirPerms);
139-
$sharedDirPerms = $this->sharedStorage->getPermissions('shareddir/textfile.txt');
140-
$this->assertEquals(31, $sharedDirPerms);
141-
$sharedDirRestrictedPerms = $this->sharedStorageRestrictedShare->getPermissions('shareddirrestricted');
142-
$this->assertEquals(7, $sharedDirRestrictedPerms);
143-
$sharedDirRestrictedPerms = $this->sharedStorageRestrictedShare->getPermissions('shareddirrestricted/textfile.txt');
144-
$this->assertEquals(7, $sharedDirRestrictedPerms);
139+
$sharedDirPerms = $this->sharedStorage->getPermissions('textfile.txt');
140+
$this->assertEquals(27, $sharedDirPerms);
141+
$sharedDirRestrictedPerms = $this->sharedStorageRestrictedShare->getPermissions('');
142+
$this->assertEquals(15, $sharedDirRestrictedPerms);
143+
$sharedDirRestrictedPerms = $this->sharedStorageRestrictedShare->getPermissions('textfile1.txt');
144+
$this->assertEquals(3, $sharedDirRestrictedPerms);
145145
}
146146

147147
/**

0 commit comments

Comments
 (0)