summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2018-08-16 20:39:51 +0200
committerRobin Appelman <robin@icewind.nl>2018-08-27 16:25:49 +0200
commite3b9e9e57c9aab9175b381048597d0a92abcd118 (patch)
treeb8b3548e015e1fd2002d4663dce440d9b033160f /lib
parent110650ff588513df559c5d96b0451d88fc866fc5 (diff)
downloadnextcloud-server-e3b9e9e57c9aab9175b381048597d0a92abcd118.tar.gz
nextcloud-server-e3b9e9e57c9aab9175b381048597d0a92abcd118.zip
tokens can't be valid local user names
this saves searching for shares on non-public link dav requests Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Files/View.php20
-rw-r--r--lib/private/Share20/Manager.php4
2 files changed, 13 insertions, 11 deletions
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index 73219635e89..cd1219fd77e 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -1431,16 +1431,21 @@ class View {
$contents = $cache->getFolderContentsById($folderId); //TODO: mimetype_filter
$sharingDisabled = \OCP\Util::isSharingDisabledForUser();
+
+ $fileNames = array_map(function(ICacheEntry $content) {
+ return $content->getName();
+ }, $contents);
/**
- * @var \OC\Files\FileInfo[] $files
+ * @var \OC\Files\FileInfo[] $fileInfos
*/
- $files = array_map(function (ICacheEntry $content) use ($path, $storage, $mount, $sharingDisabled) {
+ $fileInfos = array_map(function (ICacheEntry $content) use ($path, $storage, $mount, $sharingDisabled) {
if ($sharingDisabled) {
$content['permissions'] = $content['permissions'] & ~\OCP\Constants::PERMISSION_SHARE;
}
$owner = $this->getUserObjectForOwner($storage->getOwner($content['path']));
return new FileInfo($path . '/' . $content['name'], $storage, $content['path'], $content, $mount, $owner);
}, $contents);
+ $files = array_combine($fileNames, $fileInfos);
//add a folder for any mountpoint in this directory and add the sizes of other mountpoints to the folders
$mounts = Filesystem::getMountManager()->findIn($path);
@@ -1495,13 +1500,6 @@ class View {
$rootEntry['permissions'] = $permissions & (\OCP\Constants::PERMISSION_ALL - (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE));
}
- //remove any existing entry with the same name
- foreach ($files as $i => $file) {
- if ($file['name'] === $rootEntry['name']) {
- unset($files[$i]);
- break;
- }
- }
$rootEntry['path'] = substr(Filesystem::normalizePath($path . '/' . $rootEntry['name']), strlen($user) + 2); // full path without /$user/
// if sharing was disabled for the user we remove the share permissions
@@ -1510,7 +1508,7 @@ class View {
}
$owner = $this->getUserObjectForOwner($subStorage->getOwner(''));
- $files[] = new FileInfo($path . '/' . $rootEntry['name'], $subStorage, '', $rootEntry, $mount, $owner);
+ $files[$rootEntry->getName()] = new FileInfo($path . '/' . $rootEntry['name'], $subStorage, '', $rootEntry, $mount, $owner);
}
}
}
@@ -1526,7 +1524,7 @@ class View {
});
}
- return $files;
+ return array_values($files);
} else {
return [];
}
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index b8131425b4a..69a3d749a99 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -1165,6 +1165,10 @@ class Manager implements IManager {
* @throws ShareNotFound
*/
public function getShareByToken($token) {
+ // tokens can't be valid local user names
+ if ($this->userManager->userExists($token)) {
+ throw new ShareNotFound();
+ }
$share = null;
try {
if($this->shareApiAllowLinks()) {