summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2015-02-23 13:49:23 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2015-02-25 10:30:47 +0100
commitb3de86d851e04c73c67c1ca6522455130c8f6c53 (patch)
tree089ab84395263d959d0278af7371b0ac6d02807c
parent432d7be8cc66da0de1e174522333e5b5dd004c91 (diff)
downloadnextcloud-server-b3de86d851e04c73c67c1ca6522455130c8f6c53.tar.gz
nextcloud-server-b3de86d851e04c73c67c1ca6522455130c8f6c53.zip
Remove locks plugin.
Reasoning: - a WebDAV server is not required to implement locking support - WebDAV Locking is know to break the sync algorithm - the current lock implementation is known to be broken (locks are not moved if a file is moved, locks on shared files don't work)
-rw-r--r--apps/files/appinfo/remote.php2
-rw-r--r--apps/files_sharing/publicwebdav.php2
-rw-r--r--lib/private/connector/sabre/locks.php171
3 files changed, 0 insertions, 175 deletions
diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php
index e4a105b6d28..dbab3256b98 100644
--- a/apps/files/appinfo/remote.php
+++ b/apps/files/appinfo/remote.php
@@ -28,7 +28,6 @@
*/
// Backends
$authBackend = new \OC\Connector\Sabre\Auth();
-$lockBackend = new \OC\Connector\Sabre\Locks();
// Fire up server
$objectTree = new \OC\Connector\Sabre\ObjectTree();
@@ -40,7 +39,6 @@ $server->setBaseUri($baseuri);
// Load plugins
$defaults = new OC_Defaults();
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName()));
-$server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend));
// FIXME: The following line is a workaround for legacy components relying on being able to send a GET to /
$server->addPlugin(new \OC\Connector\Sabre\DummyGetResponsePlugin());
$server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree));
diff --git a/apps/files_sharing/publicwebdav.php b/apps/files_sharing/publicwebdav.php
index abed58b5ee2..e96dabbdd3f 100644
--- a/apps/files_sharing/publicwebdav.php
+++ b/apps/files_sharing/publicwebdav.php
@@ -34,7 +34,6 @@ OC_Util::obEnd();
// Backends
$authBackend = new OCA\Files_Sharing\Connector\PublicAuth(\OC::$server->getConfig());
-$lockBackend = new \OC\Connector\Sabre\Locks();
// Fire up server
$objectTree = new \OC\Connector\Sabre\ObjectTree();
@@ -46,7 +45,6 @@ $server->setBaseUri($baseuri);
// Load plugins
$defaults = new OC_Defaults();
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName()));
-$server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend));
$server->addPlugin(new \Sabre\DAV\Browser\Plugin(false)); // Show something in the Browser, but no upload
$server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree));
$server->addPlugin(new \OC\Connector\Sabre\MaintenancePlugin());
diff --git a/lib/private/connector/sabre/locks.php b/lib/private/connector/sabre/locks.php
deleted file mode 100644
index a212c9597c4..00000000000
--- a/lib/private/connector/sabre/locks.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-
-namespace OC\Connector\Sabre;
-
-
-class Locks extends \Sabre\DAV\Locks\Backend\AbstractBackend {
-
- /**
- * Returns a list of \Sabre\DAV\Locks_LockInfo objects
- *
- * This method should return all the locks for a particular uri, including
- * locks that might be set on a parent uri.
- *
- * If returnChildLocks is set to true, this method should also look for
- * any locks in the subtree of the uri for locks.
- *
- * @param string $uri
- * @param bool $returnChildLocks
- * @return array
- */
- public function getLocks($uri, $returnChildLocks) {
-
- // NOTE: the following 10 lines or so could be easily replaced by
- // pure sql. MySQL's non-standard string concatination prevents us
- // from doing this though.
- // NOTE: SQLite requires time() to be inserted directly. That's ugly
- // but otherwise reading locks from SQLite Databases will return
- // nothing
- $query = 'SELECT * FROM `*PREFIX*locks`'
- .' WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND (( `uri` = ?)';
- if (\OC_Config::getValue( "dbtype") === 'oci') {
- //FIXME oracle hack: need to explicitly cast CLOB to CHAR for comparison
- $query = 'SELECT * FROM `*PREFIX*locks`'
- .' WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND (( to_char(`uri`) = ?)';
- }
- $params = array(\OC_User::getUser(), $uri);
-
- // We need to check locks for every part in the uri.
- $uriParts = explode('/', $uri);
-
- // We already covered the last part of the uri
- array_pop($uriParts);
-
- $currentPath='';
-
- foreach($uriParts as $part) {
-
- if ($currentPath) $currentPath.='/';
- $currentPath.=$part;
- //FIXME oracle hack: need to explicitly cast CLOB to CHAR for comparison
- if (\OC_Config::getValue( "dbtype") === 'oci') {
- $query.=' OR (`depth` != 0 AND to_char(`uri`) = ?)';
- } else {
- $query.=' OR (`depth` != 0 AND `uri` = ?)';
- }
- $params[] = $currentPath;
-
- }
-
- if ($returnChildLocks) {
-
- //FIXME oracle hack: need to explicitly cast CLOB to CHAR for comparison
- if (\OC_Config::getValue( "dbtype") === 'oci') {
- $query.=' OR (to_char(`uri`) LIKE ?)';
- } else {
- $query.=' OR (`uri` LIKE ?)';
- }
- $params[] = $uri . '/%';
-
- }
- $query.=')';
-
- $result = \OC_DB::executeAudited( $query, $params );
-
- $lockList = array();
- while( $row = $result->fetchRow()) {
-
- $lockInfo = new \Sabre\DAV\Locks\LockInfo();
- $lockInfo->owner = $row['owner'];
- $lockInfo->token = $row['token'];
- $lockInfo->timeout = $row['timeout'];
- $lockInfo->created = $row['created'];
- $lockInfo->scope = $row['scope'];
- $lockInfo->depth = $row['depth'];
- $lockInfo->uri = $row['uri'];
- $lockList[] = $lockInfo;
-
- }
-
- return $lockList;
-
- }
-
- /**
- * Locks a uri
- *
- * @param string $uri
- * @param \Sabre\DAV\Locks\LockInfo $lockInfo
- * @return bool
- */
- public function lock($uri, \Sabre\DAV\Locks\LockInfo $lockInfo) {
-
- // We're making the lock timeout 5 minutes
- $lockInfo->timeout = 300;
- $lockInfo->created = time();
- $lockInfo->uri = $uri;
-
- $locks = $this->getLocks($uri, false);
- $exists = false;
- foreach($locks as $lock) {
- if ($lock->token == $lockInfo->token) {
- $exists = true;
- break;
- }
- }
-
- if ($exists) {
- $sql = 'UPDATE `*PREFIX*locks`'
- .' SET `owner` = ?, `timeout` = ?, `scope` = ?, `depth` = ?, `uri` = ?, `created` = ?'
- .' WHERE `userid` = ? AND `token` = ?';
- $result = \OC_DB::executeAudited( $sql, array(
- $lockInfo->owner,
- $lockInfo->timeout,
- $lockInfo->scope,
- $lockInfo->depth,
- $uri,
- $lockInfo->created,
- \OC_User::getUser(),
- $lockInfo->token)
- );
- } else {
- $sql = 'INSERT INTO `*PREFIX*locks`'
- .' (`userid`,`owner`,`timeout`,`scope`,`depth`,`uri`,`created`,`token`)'
- .' VALUES (?,?,?,?,?,?,?,?)';
- $result = \OC_DB::executeAudited( $sql, array(
- \OC_User::getUser(),
- $lockInfo->owner,
- $lockInfo->timeout,
- $lockInfo->scope,
- $lockInfo->depth,
- $uri,
- $lockInfo->created,
- $lockInfo->token)
- );
- }
-
- return true;
-
- }
-
- /**
- * Removes a lock from a uri
- *
- * @param string $uri
- * @param \Sabre\DAV\Locks\LockInfo $lockInfo
- * @return bool
- */
- public function unlock($uri, \Sabre\DAV\Locks\LockInfo $lockInfo) {
-
- $sql = 'DELETE FROM `*PREFIX*locks` WHERE `userid` = ? AND `uri` = ? AND `token` = ?';
- if (\OC_Config::getValue( "dbtype") === 'oci') {
- //FIXME oracle hack: need to explicitly cast CLOB to CHAR for comparison
- $sql = 'DELETE FROM `*PREFIX*locks` WHERE `userid` = ? AND to_char(`uri`) = ? AND `token` = ?';
- }
- $result = \OC_DB::executeAudited( $sql, array(\OC_User::getUser(), $uri, $lockInfo->token));
-
- return $result === 1;
-
- }
-
-}