diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2015-02-23 13:49:23 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2015-02-25 10:30:47 +0100 |
commit | b3de86d851e04c73c67c1ca6522455130c8f6c53 (patch) | |
tree | 089ab84395263d959d0278af7371b0ac6d02807c /lib/private/connector | |
parent | 432d7be8cc66da0de1e174522333e5b5dd004c91 (diff) | |
download | nextcloud-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)
Diffstat (limited to 'lib/private/connector')
-rw-r--r-- | lib/private/connector/sabre/locks.php | 171 |
1 files changed, 0 insertions, 171 deletions
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; - - } - -} |