summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2017-02-08 18:18:38 +0100
committerJoas Schilling <coding@schilljs.com>2017-04-25 17:25:03 +0200
commit1c40a0520403f84ec72b5925d9218c54987dc37b (patch)
treed998e9c0fa2bdc3506d62c99b4988d07e1968ec7 /apps/dav/lib
parent8ef25a7628d44465d4777686227407f9a2067700 (diff)
downloadnextcloud-server-1c40a0520403f84ec72b5925d9218c54987dc37b.tar.gz
nextcloud-server-1c40a0520403f84ec72b5925d9218c54987dc37b.zip
Restrict proppatch to the proper nodes
Need to fetch the node earlier because cancelling from within the handler is not possible. Well, it is but it prevents other node types using the same property names to run because the failure marks the property with status 403.
Diffstat (limited to 'apps/dav/lib')
-rw-r--r--apps/dav/lib/Connector/Sabre/FilesPlugin.php17
-rw-r--r--apps/dav/lib/Connector/Sabre/TagsPlugin.php17
-rw-r--r--apps/dav/lib/SystemTag/SystemTagPlugin.php12
3 files changed, 20 insertions, 26 deletions
diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php
index 5a08e37a153..1b1f43df9ea 100644
--- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php
@@ -386,25 +386,22 @@ class FilesPlugin extends ServerPlugin {
* @return void
*/
public function handleUpdateProperties($path, PropPatch $propPatch) {
- $propPatch->handle(self::LASTMODIFIED_PROPERTYNAME, function($time) use ($path) {
+ $node = $this->tree->getNodeForPath($path);
+ if (!($node instanceof \OCA\DAV\Connector\Sabre\Node)) {
+ return;
+ }
+
+ $propPatch->handle(self::LASTMODIFIED_PROPERTYNAME, function($time) use ($node) {
if (empty($time)) {
return false;
}
- $node = $this->tree->getNodeForPath($path);
- if (is_null($node)) {
- return 404;
- }
$node->touch($time);
return true;
});
- $propPatch->handle(self::GETETAG_PROPERTYNAME, function($etag) use ($path) {
+ $propPatch->handle(self::GETETAG_PROPERTYNAME, function($etag) use ($node) {
if (empty($etag)) {
return false;
}
- $node = $this->tree->getNodeForPath($path);
- if (is_null($node)) {
- return 404;
- }
if ($node->setEtag($etag) !== -1) {
return true;
}
diff --git a/apps/dav/lib/Connector/Sabre/TagsPlugin.php b/apps/dav/lib/Connector/Sabre/TagsPlugin.php
index 59e4ab4546d..490501a0011 100644
--- a/apps/dav/lib/Connector/Sabre/TagsPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/TagsPlugin.php
@@ -267,20 +267,17 @@ class TagsPlugin extends \Sabre\DAV\ServerPlugin
* @return void
*/
public function handleUpdateProperties($path, PropPatch $propPatch) {
- $propPatch->handle(self::TAGS_PROPERTYNAME, function($tagList) use ($path) {
- $node = $this->tree->getNodeForPath($path);
- if (is_null($node)) {
- return 404;
- }
+ $node = $this->tree->getNodeForPath($path);
+ if (!($node instanceof \OCA\DAV\Connector\Sabre\Node)) {
+ return;
+ }
+
+ $propPatch->handle(self::TAGS_PROPERTYNAME, function($tagList) use ($node) {
$this->updateTags($node->getId(), $tagList->getTags());
return true;
});
- $propPatch->handle(self::FAVORITE_PROPERTYNAME, function($favState) use ($path) {
- $node = $this->tree->getNodeForPath($path);
- if (is_null($node)) {
- return 404;
- }
+ $propPatch->handle(self::FAVORITE_PROPERTYNAME, function($favState) use ($node) {
if ((int)$favState === 1 || $favState === 'true') {
$this->getTagger()->tagAs($node->getId(), self::TAG_FAVORITE);
} else {
diff --git a/apps/dav/lib/SystemTag/SystemTagPlugin.php b/apps/dav/lib/SystemTag/SystemTagPlugin.php
index d76bf2e689b..98c730906c6 100644
--- a/apps/dav/lib/SystemTag/SystemTagPlugin.php
+++ b/apps/dav/lib/SystemTag/SystemTagPlugin.php
@@ -268,17 +268,17 @@ class SystemTagPlugin extends \Sabre\DAV\ServerPlugin {
* @return void
*/
public function handleUpdateProperties($path, PropPatch $propPatch) {
+ $node = $this->server->tree->getNodeForPath($path);
+ if (!($node instanceof SystemTagNode)) {
+ return;
+ }
+
$propPatch->handle([
self::DISPLAYNAME_PROPERTYNAME,
self::USERVISIBLE_PROPERTYNAME,
self::USERASSIGNABLE_PROPERTYNAME,
self::GROUPS_PROPERTYNAME,
- ], function($props) use ($path) {
- $node = $this->server->tree->getNodeForPath($path);
- if (!($node instanceof SystemTagNode)) {
- return;
- }
-
+ ], function($props) use ($node) {
$tag = $node->getSystemTag();
$name = $tag->getName();
$userVisible = $tag->isUserVisible();