diff options
author | Bjoern Schiessle <schiessle@owncloud.com> | 2013-11-20 14:02:22 +0400 |
---|---|---|
committer | Bjoern Schiessle <schiessle@owncloud.com> | 2013-11-20 14:02:22 +0400 |
commit | 0c24c7c4203071542d1f1acc447bb6c6b18148db (patch) | |
tree | 14ddd6b250c938dba8d68a0697f957e308338c15 /apps/files_encryption/lib | |
parent | 8bc339413ba2221fea9447f91ae093f3f1cf2ab4 (diff) |
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
Diffstat (limited to 'apps/files_encryption/lib')
-rwxr-xr-x | apps/files_encryption/lib/keymanager.php | 3 | ||||
-rw-r--r-- | apps/files_encryption/lib/stream.php | 2 | ||||
-rw-r--r-- | apps/files_encryption/lib/util.php | 23 |
3 files changed, 10 insertions, 18 deletions
diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php index 6dadd12a62e..3427e8a963a 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 1738955d1aa..206e3469023 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 f9beb9de670..4f27c2b00fb 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); |