Skip to content

Commit

Permalink
Merge pull request #32690 from nextcloud/bugfix/noid/fix-mountpoint-m…
Browse files Browse the repository at this point in the history
…atching-encryption

Trim mount point before matching in encryption code
  • Loading branch information
blizzz committed Jun 2, 2022
2 parents 01bb642 + b212e8d commit 1d1b9d9
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/private/Encryption/Util.php
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ public function isSystemWideMountPoint($path, $uid) {
$storageService = \OC::$server->get(GlobalStoragesService::class);
$storages = $storageService->getAllStorages();
foreach ($storages as $storage) {
if (strpos($path, '/files/' . $storage->getMountPoint()) === 0) {
if (strpos($path, '/files/' . ltrim($storage->getMountPoint(), '/')) === 0) {
if ($this->isMountPointApplicableToUser($storage, $uid)) {
return true;
}
Expand Down
41 changes: 41 additions & 0 deletions tests/lib/Encryption/UtilTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

use OC\Encryption\Util;
use OC\Files\View;
use OCA\Files_External\Lib\StorageConfig;
use OCA\Files_External\Service\GlobalStoragesService;
use OCP\Encryption\IEncryptionModule;
use OCP\IConfig;
use Test\TestCase;
Expand Down Expand Up @@ -188,4 +190,43 @@ public function dataTestStripPartialFileExtension() {
['/foo/test.txt.ocTransferId7567.part', '/foo/test.txt'],
];
}

public function dataTestIsSystemWideMountPoint() {
return [
[false, 'non-matching mount point name', [], [], '/mp_another'],
[true, 'applicable to all', [], []],
[true, 'applicable to user directly', ['user1'], []],
[true, 'applicable to group directly', [], ['group1']],
[false, 'non-applicable to current user', ['user2'], []],
[false, 'non-applicable to current user\'s group', [], ['group2']],
[true, 'mount point without leading slash', [], [], 'mp'],
];
}

/**
* @dataProvider dataTestIsSystemWideMountPoint
*/
public function testIsSystemWideMountPoint($expectedResult, $expectationText, $applicableUsers, $applicableGroups, $mountPointName = '/mp') {
$this->groupManager->method('isInGroup')
->will($this->returnValueMap([
['user1', 'group1', true], // user is only in group1
['user1', 'group2', false],
]));

$storages = [];

$storageConfig = $this->createMock(StorageConfig::class);
$storageConfig->method('getMountPoint')->willReturn($mountPointName);
$storageConfig->method('getApplicableUsers')->willReturn($applicableUsers);
$storageConfig->method('getApplicableGroups')->willReturn($applicableGroups);
$storages[] = $storageConfig;

$storagesServiceMock = $this->createMock(GlobalStoragesService::class);
$storagesServiceMock->expects($this->atLeastOnce())->method('getAllStorages')
->willReturn($storages);

$this->overwriteService(GlobalStoragesService::class, $storagesServiceMock);

$this->assertEquals($expectedResult, $this->util->isSystemWideMountPoint('/files/mp', 'user1'), 'Test case: ' . $expectationText);
}
}

0 comments on commit 1d1b9d9

Please sign in to comment.