Skip to content

Commit

Permalink
Merge pull request #11287 from nextcloud/backport/11041/get_permissio…
Browse files Browse the repository at this point in the history
…n_of_storage_for_shares

[stable14] Get permission of storage for shares
  • Loading branch information
nickvergessen authored Sep 20, 2018
2 parents 2153bcf + 5e13368 commit 9a4ad9c
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 11 deletions.
2 changes: 1 addition & 1 deletion apps/files_sharing/lib/Cache.php
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ protected function formatCacheEntry($entry, $path = null) {
} else {
$entry['path'] = $path;
}
$sharePermissions = $this->storage->getPermissions($path);
$sharePermissions = $this->storage->getPermissions($entry['path']);
if (isset($entry['permissions'])) {
$entry['permissions'] &= $sharePermissions;
} else {
Expand Down
13 changes: 10 additions & 3 deletions apps/files_sharing/lib/SharedStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,8 @@ public function getPermissions($target = '') {
if (!$this->isValid()) {
return 0;
}
$permissions = $this->superShare->getPermissions();
$permissions = parent::getPermissions($target) & $this->superShare->getPermissions();

// part files and the mount point always have delete permissions
if ($target === '' || pathinfo($target, PATHINFO_EXTENSION) === 'part') {
$permissions |= \OCP\Constants::PERMISSION_DELETE;
Expand Down Expand Up @@ -257,11 +258,17 @@ public function fopen($path, $mode) {
case 'xb':
case 'a':
case 'ab':
$creatable = $this->isCreatable($path);
$creatable = $this->isCreatable(dirname($path));
$updatable = $this->isUpdatable($path);
// if neither permissions given, no need to continue
if (!$creatable && !$updatable) {
return false;
if (pathinfo($path, PATHINFO_EXTENSION) === 'part') {
$updatable = $this->isUpdatable(dirname($path));
}

if (!$updatable) {
return false;
}
}

$exists = $this->file_exists($path);
Expand Down
14 changes: 7 additions & 7 deletions apps/files_sharing/tests/PermissionsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -134,14 +134,14 @@ protected function tearDown() {
* Test that the permissions of shared directory are returned correctly
*/
function testGetPermissions() {
$sharedDirPerms = $this->sharedStorage->getPermissions('shareddir');
$sharedDirPerms = $this->sharedStorage->getPermissions('');
$this->assertEquals(31, $sharedDirPerms);
$sharedDirPerms = $this->sharedStorage->getPermissions('shareddir/textfile.txt');
$this->assertEquals(31, $sharedDirPerms);
$sharedDirRestrictedPerms = $this->sharedStorageRestrictedShare->getPermissions('shareddirrestricted');
$this->assertEquals(7, $sharedDirRestrictedPerms);
$sharedDirRestrictedPerms = $this->sharedStorageRestrictedShare->getPermissions('shareddirrestricted/textfile.txt');
$this->assertEquals(7, $sharedDirRestrictedPerms);
$sharedDirPerms = $this->sharedStorage->getPermissions('textfile.txt');
$this->assertEquals(27, $sharedDirPerms);
$sharedDirRestrictedPerms = $this->sharedStorageRestrictedShare->getPermissions('');
$this->assertEquals(15, $sharedDirRestrictedPerms);
$sharedDirRestrictedPerms = $this->sharedStorageRestrictedShare->getPermissions('textfile1.txt');
$this->assertEquals(3, $sharedDirRestrictedPerms);
}

/**
Expand Down

0 comments on commit 9a4ad9c

Please sign in to comment.