]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix mimetypes of encrypted files
authorRobin Appelman <icewind@owncloud.com>
Tue, 24 Apr 2012 22:10:29 +0000 (00:10 +0200)
committerRobin Appelman <icewind@owncloud.com>
Tue, 24 Apr 2012 22:12:12 +0000 (00:12 +0200)
apps/files_encryption/lib/cryptstream.php
apps/files_encryption/lib/proxy.php

index 21fa38e4b5989699cac69deabac9feaf41d9c89c..07a2e523a4292f080ef895cc2ca3e169595f074f 100644 (file)
@@ -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
index e3a106d0d04ac67aef8bbe7619a5e82440fe21ca..d65bcba8bfa1dc80056921b14d46a9ed43a073dd 100644 (file)
@@ -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);