[Pkg-owncloud-commits] [owncloud] 92/111: only check if the key file exists to decide if it is an encrypted file or not. This solves problems with external storage which doesn't support fseek

David Prévot taffit at moszumanska.debian.org
Wed Nov 20 21:38:46 UTC 2013


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

taffit pushed a commit to branch master
in repository owncloud.

commit 0c24c7c4203071542d1f1acc447bb6c6b18148db
Author: Bjoern Schiessle <schiessle at owncloud.com>
Date:   Wed Nov 20 11:02:22 2013 +0100

    only check if the key file exists to decide if it is an encrypted file or not.
    This solves problems with external storage which doesn't support fseek
---
 apps/files_encryption/lib/keymanager.php |    3 +--
 apps/files_encryption/lib/stream.php     |    2 +-
 apps/files_encryption/lib/util.php       |   23 ++++++++---------------
 apps/files_encryption/tests/crypt.php    |   14 +++++++-------
 4 files changed, 17 insertions(+), 25 deletions(-)

diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php
index 6dadd12..3427e8a 100755
--- a/apps/files_encryption/lib/keymanager.php
+++ b/apps/files_encryption/lib/keymanager.php
@@ -172,14 +172,13 @@ class Keymanager {
 	/**
 	 * @brief retrieve keyfile for an encrypted file
 	 * @param \OC_FilesystemView $view
-	 * @param $userId
 	 * @param $filePath
 	 * @internal param \OCA\Encryption\file $string name
 	 * @return string file key or false
 	 * @note The keyfile returned is asymmetrically encrypted. Decryption
 	 * of the keyfile must be performed by client code
 	 */
-	public static function getFileKey(\OC_FilesystemView $view, $userId, $filePath) {
+	public static function getFileKey(\OC_FilesystemView $view, $filePath) {
 
 		$util = new Util($view, \OCP\User::getUser());
 
diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php
index 1738955..206e346 100644
--- a/apps/files_encryption/lib/stream.php
+++ b/apps/files_encryption/lib/stream.php
@@ -250,7 +250,7 @@ class Stream {
 
 		// Fetch and decrypt keyfile
 		// Fetch existing keyfile
-		$this->encKeyfile = Keymanager::getFileKey($this->rootView, $this->userId, $this->relPath);
+		$this->encKeyfile = Keymanager::getFileKey($this->rootView, $this->relPath);
 
 		// If a keyfile already exists
 		if ($this->encKeyfile) {
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index f9beb9d..4f27c2b 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -367,7 +367,7 @@ class Util {
 							// scanning every file like this
 							// will eat server resources :(
 							if (
-								Keymanager::getFileKey($this->view, $this->userId, $relPath)
+								Keymanager::getFileKey($this->view, $relPath)
 								&& $isEncryptedPath
 							) {
 
@@ -472,22 +472,15 @@ class Util {
 	 */
 	public function isEncryptedPath($path) {
 
-		// Disable encryption proxy so data retrieved is in its
-		// original form
-		$proxyStatus = \OC_FileProxy::$enabled;
-		\OC_FileProxy::$enabled = false;
+		$relPath = Helper::stripUserFilesPath($path);
 
-		// we only need 24 byte from the last chunk
-		$data = '';
-		$handle = $this->view->fopen($path, 'r');
-		if (is_resource($handle) && !fseek($handle, -24, SEEK_END)) {
-			$data = fgets($handle);
-		}
+		$fileKey = Keymanager::getFileKey($this->view, $relPath);
 
-		// re-enable proxy
-		\OC_FileProxy::$enabled = $proxyStatus;
+		if ($fileKey === false) {
+			return false;
+		}
 
-		return Crypt::isCatfileContent($data);
+		return true;
 
 	}
 
@@ -1059,7 +1052,7 @@ class Util {
 	private function decryptKeyfile($filePath, $privateKey) {
 
 		// Get the encrypted keyfile
-		$encKeyfile = Keymanager::getFileKey($this->view, $this->userId, $filePath);
+		$encKeyfile = Keymanager::getFileKey($this->view, $filePath);
 
 		// The file has a shareKey and must use it for decryption
 		$shareKey = Keymanager::getShareKey($this->view, $this->userId, $filePath);
diff --git a/apps/files_encryption/tests/crypt.php b/apps/files_encryption/tests/crypt.php
index 5146613..9c32ee0 100755
--- a/apps/files_encryption/tests/crypt.php
+++ b/apps/files_encryption/tests/crypt.php
@@ -176,7 +176,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
 		$this->assertNotEquals($this->dataShort, $retreivedCryptedFile);
 
 		// Get the encrypted keyfile
-		$encKeyfile = Encryption\Keymanager::getFileKey($this->view, $this->userId, $filename);
+		$encKeyfile = Encryption\Keymanager::getFileKey($this->view, $filename);
 
 		// Attempt to fetch the user's shareKey
 		$shareKey = Encryption\Keymanager::getShareKey($this->view, $this->userId, $filename);
@@ -244,13 +244,13 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
 		$i = 0;
 		while ($i < count($r)-1) {
 			$e[] = $r[$i] . $r[$i+1];
-			$i = $i + 2; 
+			$i = $i + 2;
 		}
 
 		//print_r($e);
 
 		// Get the encrypted keyfile
-		$encKeyfile = Encryption\Keymanager::getFileKey($this->view, $this->userId, $filename);
+		$encKeyfile = Encryption\Keymanager::getFileKey($this->view, $filename);
 
 		// Attempt to fetch the user's shareKey
 		$shareKey = Encryption\Keymanager::getShareKey($this->view, $this->userId, $filename);
@@ -387,7 +387,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
 	 * @brief test decryption using legacy blowfish method
 	 */
 	function testLegacyDecryptShort() {
-		
+
 		$crypted = $this->legacyEncrypt($this->dataShort, $this->pass);
 
 		$decrypted = Encryption\Crypt::legacyBlockDecrypt($crypted, $this->pass);
@@ -401,7 +401,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
 	 * @brief test decryption using legacy blowfish method
 	 */
 	function testLegacyDecryptLong() {
-		
+
 		$crypted = $this->legacyEncrypt($this->dataLong, $this->pass);
 
 		$decrypted = Encryption\Crypt::legacyBlockDecrypt($crypted, $this->pass);
@@ -653,8 +653,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
 		// tear down
 		$view->unlink($filename);
 	}
-	
-	
+
+
 	/**
 	 * @brief encryption using legacy blowfish method
 	 * @param $data string data to encrypt

-- 
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