summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2015-04-29 10:44:25 +0200
committerMorris Jobke <hey@morrisjobke.de>2015-04-29 10:44:25 +0200
commit7df7a3b3602cd3a733c79255cee95ce324f729fa (patch)
tree9ed5cd1811db2340963c5587b2f6f5fbd715429f
parent6ebb021359007b2c138c5dc4f9a7b2d3cb783948 (diff)
parent02269b6464844696f4d33067f04640953dd6ec32 (diff)
downloadnextcloud-server-7df7a3b3602cd3a733c79255cee95ce324f729fa.tar.gz
nextcloud-server-7df7a3b3602cd3a733c79255cee95ce324f729fa.zip
Merge pull request #15906 from rullzer/fix_15777
Password set via OCS API should not be double escaped
-rw-r--r--lib/private/share/share.php2
-rw-r--r--tests/lib/share/share.php46
2 files changed, 47 insertions, 1 deletions
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index 617eeeb9d90..0991fa0f38a 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -1220,7 +1220,7 @@ class Share extends Constants {
$qb->update('`*PREFIX*share`')
->set('`share_with`', ':pass')
->where('`id` = :shareId')
- ->setParameter(':pass', is_null($password) ? 'NULL' : $qb->expr()->literal(\OC::$server->getHasher()->hash($password)))
+ ->setParameter(':pass', is_null($password) ? 'NULL' : \OC::$server->getHasher()->hash($password))
->setParameter(':shareId', $shareId);
$qb->execute();
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index 124ad450e2e..cda895a437d 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -1158,6 +1158,52 @@ class Test_Share extends \Test\TestCase {
\OC\Share\Share::setPassword($userSession, $connection, $config, 1, 'pass');
}
+ public function testPasswords() {
+ $pass = 'secret';
+
+ $this->shareUserTestFileAsLink();
+
+ $userSession = \OC::$server->getUserSession();
+ $connection = \OC::$server->getDatabaseConnection();
+ $config = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ // Find the share ID in the db
+ $qb = $connection->createQueryBuilder();
+ $qb->select('`id`')
+ ->from('`*PREFIX*share`')
+ ->where('`item_type` = :type')
+ ->andWhere('`item_source` = :source')
+ ->andWhere('`uid_owner` = :owner')
+ ->andWhere('`share_type` = :share_type')
+ ->setParameter('type', 'test')
+ ->setParameter('source', 'test.txt')
+ ->setParameter('owner', $this->user1)
+ ->setParameter('share_type', \OCP\Share::SHARE_TYPE_LINK);
+
+ $res = $qb->execute()->fetchAll();
+ $this->assertCount(1, $res);
+ $id = $res[0]['id'];
+
+ // Set password on share
+ $res = \OC\Share\Share::setPassword($userSession, $connection, $config, $id, $pass);
+ $this->assertTrue($res);
+
+ // Fetch the hash from the database
+ $qb = $connection->createQueryBuilder();
+ $qb->select('`share_with`')
+ ->from('`*PREFIX*share`')
+ ->where('`id` = :id')
+ ->setParameter('id', $id);
+ $hash = $qb->execute()->fetch()['share_with'];
+
+ $hasher = \OC::$server->getHasher();
+
+ // Verify hash
+ $this->assertTrue($hasher->verify($pass, $hash));
+ }
+
/**
* Test setting a password when everything is fine
*/