1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2025-02-06 22:43:48 +00:00

Merge pull request #839 from enkore/issue/791

If BORG_PASSPHRASE is present but wrong, don't prompt for password, f…
This commit is contained in:
TW 2016-04-04 21:47:21 +02:00
commit 515b7454a3

View file

@ -18,6 +18,10 @@
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 @@ def detect(cls, repository, manifest_data):
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