aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_encryption/lib
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2013-11-26 00:03:54 +0100
committerBjoern Schiessle <schiessle@owncloud.com>2013-11-26 00:03:54 +0100
commit46dff0677d3eff1aa4da94865e82698229dd71e0 (patch)
tree91b96385b6a5725592bf68169f9d862b007bf14c /apps/files_encryption/lib
parentacf74b24f24e1c2ea9e454a1c09f6bcf404f6627 (diff)
parent5310a5924b18849c85b482819c350d72a6d0c67c (diff)
downloadnextcloud-server-46dff0677d3eff1aa4da94865e82698229dd71e0.tar.gz
nextcloud-server-46dff0677d3eff1aa4da94865e82698229dd71e0.zip
Merge branch 'master' into calc_version_size
Diffstat (limited to 'apps/files_encryption/lib')
-rwxr-xr-xapps/files_encryption/lib/keymanager.php3
-rw-r--r--apps/files_encryption/lib/proxy.php3
-rw-r--r--apps/files_encryption/lib/stream.php5
-rw-r--r--apps/files_encryption/lib/util.php29
4 files changed, 22 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/proxy.php b/apps/files_encryption/lib/proxy.php
index 54c3b9caa15..a8c74bd9dd4 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -349,7 +349,10 @@ class Proxy extends \OC_FileProxy {
$fileInfo = false;
// get file info from database/cache if not .part file
if (!Helper::isPartialFilePath($path)) {
+ $proxyState = \OC_FileProxy::$enabled;
+ \OC_FileProxy::$enabled = false;
$fileInfo = $view->getFileInfo($path);
+ \OC_FileProxy::$enabled = $proxyState;
}
// if file is encrypted return real file size
diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php
index 1738955d1aa..1186a5f1d8d 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) {
@@ -491,7 +491,8 @@ class Stream {
if (
$this->meta['mode'] !== 'r' &&
$this->meta['mode'] !== 'rb' &&
- $this->size > 0
+ $this->size > 0 &&
+ $this->unencryptedSize > 0
) {
// only write keyfiles if it was a new file
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index 1af5e56e10b..b208a808bac 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -84,6 +84,8 @@ class Util {
$this->privateKeyPath =
'/owncloud_private_key/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key
$this->isPublic = true;
+ // make sure that the owners home is mounted
+ \OC\Files\Filesystem::initMountPoints($GLOBALS['fileOwner']);
}
} else {
@@ -99,6 +101,8 @@ class Util {
$this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key
$this->privateKeyPath =
$this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key
+ // make sure that the owners home is mounted
+ \OC\Files\Filesystem::initMountPoints($this->userId);
}
}
@@ -363,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
) {
@@ -468,22 +472,19 @@ 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::getPathToRealFile($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);
+ if ($relPath === false) {
+ $relPath = Helper::stripUserFilesPath($path);
}
- // re-enable proxy
- \OC_FileProxy::$enabled = $proxyStatus;
+ $fileKey = Keymanager::getFileKey($this->view, $relPath);
- return Crypt::isCatfileContent($data);
+ if ($fileKey === false) {
+ return false;
+ }
+
+ return true;
}
@@ -1055,7 +1056,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);