[Pkg-owncloud-commits] [owncloud] 273/457: make sure that we always use the correct owner for both source and target

David Prévot taffit at moszumanska.debian.org
Sun Jun 28 20:06:21 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch stable8
in repository owncloud.

commit 7eb2b31e34bf89a2c0fbf8c6d49aa1eed5899681
Author: Bjoern Schiessle <schiessle at owncloud.com>
Date:   Wed Jun 3 11:12:44 2015 +0200

    make sure that we always use the correct owner for both source and target
---
 lib/private/encryption/keys/storage.php | 55 ++++++++++++++-------------------
 tests/lib/encryption/keys/storage.php   | 39 +++++++++++++++++++++++
 2 files changed, 63 insertions(+), 31 deletions(-)

diff --git a/lib/private/encryption/keys/storage.php b/lib/private/encryption/keys/storage.php
index 692633f..fa31785 100644
--- a/lib/private/encryption/keys/storage.php
+++ b/lib/private/encryption/keys/storage.php
@@ -232,22 +232,8 @@ class Storage implements IStorage {
 	 */
 	public function renameKeys($source, $target) {
 
-		list($owner, $source) = $this->util->getUidAndFilename($source);
-		list(, $target) = $this->util->getUidAndFilename($target);
-		$systemWideSource = $this->util->isSystemWideMountPoint($source, $owner);
-		$systemWideTarget = $this->util->isSystemWideMountPoint($target, $owner);
-
-		if ($systemWideSource) {
-			$sourcePath = $this->keys_base_dir . $source . '/';
-		} else {
-			$sourcePath = '/' . $owner . $this->keys_base_dir . $source . '/';
-		}
-
-		if ($systemWideTarget) {
-			$targetPath = $this->keys_base_dir . $target . '/';
-		} else {
-			$targetPath = '/' . $owner . $this->keys_base_dir . $target . '/';
-		}
+		$sourcePath = $this->getPathToKeys($source);
+		$targetPath = $this->getPathToKeys($target);
 
 		if ($this->view->file_exists($sourcePath)) {
 			$this->keySetPreparation(dirname($targetPath));
@@ -259,6 +245,7 @@ class Storage implements IStorage {
 		return false;
 	}
 
+
 	/**
 	 * copy keys if a file was renamed
 	 *
@@ -268,21 +255,8 @@ class Storage implements IStorage {
 	 */
 	public function copyKeys($source, $target) {
 
-		list($owner, $source) = $this->util->getUidAndFilename($source);
-		list(, $target) = $this->util->getUidAndFilename($target);
-		$systemWideTarget = $this->util->isSystemWideMountPoint($target, $owner);
-		$systemWideSource = $this->util->isSystemWideMountPoint($source, $owner);
-
-		if ($systemWideSource) {
-			$sourcePath = $this->keys_base_dir . $source . '/';
-		} else {
-			$sourcePath = '/' . $owner . $this->keys_base_dir . $source . '/';
-		}
-		if ($systemWideTarget) {
-			$targetPath = $this->keys_base_dir . $target . '/';
-		} else {
-			$targetPath = '/' . $owner . $this->keys_base_dir . $target . '/';
-		}
+		$sourcePath = $this->getPathToKeys($source);
+		$targetPath = $this->getPathToKeys($target);
 
 		if ($this->view->file_exists($sourcePath)) {
 			$this->keySetPreparation(dirname($targetPath));
@@ -294,6 +268,25 @@ class Storage implements IStorage {
 	}
 
 	/**
+	 * get system wide path and detect mount points
+	 *
+	 * @param string $path
+	 * @return string
+	 */
+	protected function getPathToKeys($path) {
+		list($owner, $relativePath) = $this->util->getUidAndFilename($path);
+		$systemWideMountPoint = $this->util->isSystemWideMountPoint($relativePath, $owner);
+
+		if ($systemWideMountPoint) {
+			$systemPath = $this->keys_base_dir . $relativePath . '/';
+		} else {
+			$systemPath = '/' . $owner . $this->keys_base_dir . $relativePath . '/';
+		}
+
+		return $systemPath;
+	}
+
+	/**
 	 * Make preparations to filesystem for saving a key file
 	 *
 	 * @param string $path relative to the views root
diff --git a/tests/lib/encryption/keys/storage.php b/tests/lib/encryption/keys/storage.php
index 45cd272..f64e61c 100644
--- a/tests/lib/encryption/keys/storage.php
+++ b/tests/lib/encryption/keys/storage.php
@@ -361,7 +361,46 @@ class StorageTest extends TestCase {
 			array('/user1/files/source.txt', '/user1/files/target.txt', true, false,
 				'/files_encryption/keys/files/source.txt/', '/user1/files_encryption/keys/files/target.txt/'),
 
+			array('/user2/files/source.txt', '/user1/files/target.txt', false, false,
+				'/user2/files_encryption/keys/files/source.txt/', '/user1/files_encryption/keys/files/target.txt/'),
+			array('/user2/files/foo/source.txt', '/user1/files/target.txt', false, false,
+				'/user2/files_encryption/keys/files/foo/source.txt/', '/user1/files_encryption/keys/files/target.txt/'),
+			array('/user2/files/source.txt', '/user1/files/foo/target.txt', false, false,
+				'/user2/files_encryption/keys/files/source.txt/', '/user1/files_encryption/keys/files/foo/target.txt/'),
+			array('/user2/files/source.txt', '/user1/files/foo/target.txt', true, true,
+				'/files_encryption/keys/files/source.txt/', '/files_encryption/keys/files/foo/target.txt/'),
+			array('/user2/files/source.txt', '/user1/files/target.txt', false, true,
+				'/user2/files_encryption/keys/files/source.txt/', '/files_encryption/keys/files/target.txt/'),
+			array('/user2/files/source.txt', '/user1/files/target.txt', true, false,
+				'/files_encryption/keys/files/source.txt/', '/user1/files_encryption/keys/files/target.txt/'),
+		);
+	}
 
+	/**
+	 * @dataProvider dataTestGetPathToKeys
+	 *
+	 * @param string $path
+	 * @param boolean $systemWideMountPoint
+	 * @param string $expected
+	 */
+	public function testGetPathToKeys($path, $systemWideMountPoint, $expected) {
+
+		$this->util->expects($this->any())
+			->method('getUidAndFilename')
+			->will($this->returnCallback(array($this, 'getUidAndFilenameCallback')));
+		$this->util->expects($this->any())
+			->method('isSystemWideMountPoint')
+			->willReturn($systemWideMountPoint);
+
+		$this->assertSame($expected,
+			\Test_Helper::invokePrivate($this->storage, 'getPathToKeys', [$path])
+		);
+	}
+
+	public function dataTestGetPathToKeys() {
+		return array(
+			array('/user1/files/source.txt', false, '/user1/files_encryption/keys/files/source.txt/'),
+			array('/user1/files/source.txt', true, '/files_encryption/keys/files/source.txt/')
 		);
 	}
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list