]> source.dussan.org Git - nextcloud-server.git/commitdiff
only check if the key file exists to decide if it is an encrypted file or not.
authorBjoern Schiessle <schiessle@owncloud.com>
Wed, 20 Nov 2013 10:02:22 +0000 (11:02 +0100)
committerBjoern Schiessle <schiessle@owncloud.com>
Wed, 20 Nov 2013 10:02:22 +0000 (11:02 +0100)
This solves problems with external storage which doesn't support fseek

apps/files_encryption/lib/keymanager.php
apps/files_encryption/lib/stream.php
apps/files_encryption/lib/util.php
apps/files_encryption/tests/crypt.php

index 6dadd12a62e8e1a4820acda94655d55369899c3c..3427e8a963ac585a8311194783dd8a25a5c3b8fc 100755 (executable)
@@ -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());
 
index 1738955d1aa9bb5944f851284d7433bd405dcba3..206e3469023beaf6cebdba2a9e66ffcc3a9a6bad 100644 (file)
@@ -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) {
index f9beb9de6701254fce830f91bfecbdd2e9c2fdd4..4f27c2b00fb1811e921279150a2089846fdb3319 100644 (file)
@@ -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);
index 5146613e25214751b3cd24aa50a11cdf44654549..9c32ee06453263f9fac0b679e2ba3b540f6e2624 100755 (executable)
@@ -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