Преглед на файлове

Merge pull request #839 from enkore/issue/791

If BORG_PASSPHRASE is present but wrong, don't prompt for password, f…
TW преди 9 години
родител
ревизия
515b7454a3
променени са 1 файла, в които са добавени 16 реда и са изтрити 6 реда
  1. 16 6
      borg/key.py

+ 16 - 6
borg/key.py

@@ -18,6 +18,10 @@ import msgpack
 PREFIX = b'\0' * 8
 
 
+class PassphraseWrong(Error):
+    """passphrase supplied in BORG_PASSPHRASE is incorrect"""
+
+
 class PasswordRetriesExceeded(Error):
     """exceeded the maximum password retries"""
 
@@ -284,13 +288,19 @@ class KeyfileKeyBase(AESKeyBase):
         key = cls(repository)
         target = key.find_key()
         prompt = 'Enter passphrase for key %s: ' % target
-        passphrase = Passphrase.env_passphrase(default='')
-        for retry in range(1, 4):
-            if key.load(target, passphrase):
-                break
-            passphrase = Passphrase.getpass(prompt)
+        passphrase = Passphrase.env_passphrase()
+        if passphrase is None:
+            passphrase = Passphrase()
+            if not key.load(target, passphrase):
+                for retry in range(0, 3):
+                    passphrase = Passphrase.getpass(prompt)
+                    if key.load(target, passphrase):
+                        break
+                else:
+                    raise PasswordRetriesExceeded
         else:
-            raise PasswordRetriesExceeded
+            if not key.load(target, passphrase):
+                raise PassphraseWrong
         num_blocks = num_aes_blocks(len(manifest_data) - 41)
         key.init_ciphers(PREFIX + long_to_bytes(key.extract_nonce(manifest_data) + num_blocks))
         return key