]> source.dussan.org Git - nextcloud-server.git/commitdiff
make sure that we always have a owner 5630/head
authorBjoern Schiessle <bjoern@schiessle.org>
Mon, 17 Jul 2017 11:13:27 +0000 (13:13 +0200)
committerBjoern Schiessle <bjoern@schiessle.org>
Thu, 20 Jul 2017 09:43:39 +0000 (11:43 +0200)
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
apps/encryption/lib/Crypto/Encryption.php

index a1965dd1a2af167682dbdc8d204feb6585625c39..650cb73d7d20dfa99bd11d7690d80c7830d916ed 100644 (file)
@@ -60,7 +60,7 @@ class Encryption implements IEncryptionModule {
        /** @var string */
        private $user;
 
-       /** @var  string */
+       /** @var  array */
        private $owner;
 
        /** @var string */
@@ -139,6 +139,7 @@ class Encryption implements IEncryptionModule {
                $this->decryptAll = $decryptAll;
                $this->logger = $logger;
                $this->l = $il10n;
+               $this->owner = [];
                $this->useMasterPassword = $util->isMasterKeyEnabled();
        }
 
@@ -177,7 +178,6 @@ class Encryption implements IEncryptionModule {
                $this->path = $this->getPathToRealFile($path);
                $this->accessList = $accessList;
                $this->user = $user;
-               $this->owner = $this->util->getOwner($path);
                $this->isWriteOperation = false;
                $this->writeCache = '';
 
@@ -284,7 +284,7 @@ class Encryption implements IEncryptionModule {
                                }
                        }
 
-                       $publicKeys = $this->keyManager->addSystemKeys($this->accessList, $publicKeys, $this->owner);
+                       $publicKeys = $this->keyManager->addSystemKeys($this->accessList, $publicKeys, $this->getOwner($path));
                        $encryptedKeyfiles = $this->crypt->multiKeyEncrypt($this->fileKey, $publicKeys);
                        $this->keyManager->setAllFileKeys($this->path, $encryptedKeyfiles);
                }
@@ -413,7 +413,7 @@ class Encryption implements IEncryptionModule {
                                }
                        }
 
-                       $publicKeys = $this->keyManager->addSystemKeys($accessList, $publicKeys, $this->owner);
+                       $publicKeys = $this->keyManager->addSystemKeys($accessList, $publicKeys, $this->getOwner($path));
 
                        $encryptedFileKey = $this->crypt->multiKeyEncrypt($fileKey, $publicKeys);
 
@@ -562,6 +562,19 @@ class Encryption implements IEncryptionModule {
                return $path;
        }
 
+       /**
+        * get owner of a file
+        *
+        * @param string $path
+        * @return string
+        */
+       protected function getOwner($path) {
+               if (!isset($this->owner[$path])) {
+                       $this->owner[$path] = $this->util->getOwner($path);
+               }
+               return $this->owner[$path];
+       }
+
        /**
         * Check if the module is ready to be used by that specific user.
         * In case a module is not ready - because e.g. key pairs have not been generated