summaryrefslogtreecommitdiffstats
path: root/apps/files_encryption/lib
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2012-04-25 00:10:29 +0200
committerRobin Appelman <icewind@owncloud.com>2012-04-25 00:12:12 +0200
commit5c3ea148197c20b9754a539261d4b0fa1540a3c7 (patch)
tree6e9d21f18ee9de5c7d209e0bdef4fc23df925958 /apps/files_encryption/lib
parentcc2bfd313dd8f3210e136f99606ec01a3168fe2f (diff)
downloadnextcloud-server-5c3ea148197c20b9754a539261d4b0fa1540a3c7.tar.gz
nextcloud-server-5c3ea148197c20b9754a539261d4b0fa1540a3c7.zip
fix mimetypes of encrypted files
Diffstat (limited to 'apps/files_encryption/lib')
-rw-r--r--apps/files_encryption/lib/cryptstream.php15
-rw-r--r--apps/files_encryption/lib/proxy.php17
2 files changed, 7 insertions, 25 deletions
diff --git a/apps/files_encryption/lib/cryptstream.php b/apps/files_encryption/lib/cryptstream.php
index 21fa38e4b59..07a2e523a42 100644
--- a/apps/files_encryption/lib/cryptstream.php
+++ b/apps/files_encryption/lib/cryptstream.php
@@ -33,6 +33,7 @@ class OC_CryptStream{
private $path;
private $readBuffer;//for streams that dont support seeking
private $meta=array();//header/meta for source stream
+ private $count;
public function stream_open($path, $mode, $options, &$opened_path){
$path=str_replace('crypt://','',$path);
@@ -92,16 +93,6 @@ class OC_CryptStream{
$data=substr($block,0,$currentPos%8192).$data;
}
while(strlen($data)>0){
- if(strlen($data)<8192){
- //fetch the current data in that block and append it to the input so we always write entire blocks
- $oldPos=ftell($this->source);
- $encryptedBlock=fread($this->source,8192);
- fseek($this->source,$oldPos);
- if($encryptedBlock){
- $block=OC_Crypt::decrypt($encryptedBlock);
- $data.=substr($block,strlen($data));
- }
- }
$encrypted=OC_Crypt::encrypt(substr($data,0,8192));
fwrite($this->source,$encrypted);
$data=substr($data,8192);
@@ -139,7 +130,9 @@ class OC_CryptStream{
}
public function stream_close(){
- OC_FileCache::put($this->path,array('encrypted'=>true));
+ if($this->meta['mode']!='r' and $this->meta['mode']!='rb'){
+ OC_FileCache::put($this->path,array('encrypted'=>true));
+ }
return fclose($this->source);
}
} \ No newline at end of file
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index e3a106d0d04..d65bcba8bfa 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -27,7 +27,6 @@
class OC_FileProxy_Encryption extends OC_FileProxy{
private static $blackList=null; //mimetypes blacklisted from encryption
- private static $metaData=array(); //metadata cache
private static $enableEncryption=null;
/**
@@ -60,13 +59,8 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
* @return bool
*/
private static function isEncrypted($path){
- if(isset(self::$metaData[$path])){
- $metadata=self::$metaData[$path];
- }else{
- $metadata=OC_FileCache::getCached($path);
- self::$metaData[$path]=$metadata;
- }
- return (bool)$metadata['encrypted'];
+ $metadata=OC_FileCache::getCached($path);
+ return isset($metadata['encrypted']) and (bool)$metadata['encrypted'];
}
public function preFile_put_contents($path,&$data){
@@ -98,12 +92,7 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
//first encrypt the target file so we don't end up with a half encrypted file
OC_Log::write('files_encryption','Decrypting '.$path.' before writing',OC_Log::DEBUG);
$tmp=fopen('php://temp');
- while(!feof($result)){
- $chunk=fread($result,8192);
- if($chunk){
- fwrite($tmp,$chunk);
- }
- }
+ OC_Helper::streamCopy($result,$tmp);
fclose($result);
OC_Filesystem::file_put_contents($path,$tmp);
fclose($tmp);