1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2025-02-21 13:47:16 +00:00

KeyfileKeyBase: add create=False param to save method

If we create a new repo (and a new keyfile key, create=True),
there must not already exist a keyfile at the path/filename
where we want to write the new one.

In other use cases (e.g. if we overwrite a keyfile due
to the user changing their passphrase, create=False),
of course overwriting at the same path/fname is desired.
This commit is contained in:
Thomas Waldmann 2022-02-04 19:18:15 +01:00
parent 9f311abd79
commit d299b8bc9c

View file

@ -684,7 +684,7 @@ def create(cls, repository, args):
logger.info('Keep this key safe. Your data will be inaccessible without it.')
return key
def save(self, target, passphrase):
def save(self, target, passphrase, create=False):
raise NotImplementedError
def get_new_target(self, args):
@ -767,7 +767,12 @@ def load(self, target, passphrase):
self.target = target
return success
def save(self, target, passphrase):
def save(self, target, passphrase, create=False):
if create and os.path.isfile(target):
# if a new keyfile key repository is created, ensure that an existing keyfile of another
# keyfile key repo is not accidentally overwritten by careless use of the BORG_KEY_FILE env var.
# see issue #6036
raise Error('Aborting because key in "%s" already exists.' % target)
key_data = self._save(passphrase)
with SaveFile(target) as fd:
fd.write('%s %s\n' % (self.FILE_ID, bin_to_hex(self.repository_id)))
@ -807,7 +812,7 @@ def load(self, target, passphrase):
self.target = target
return success
def save(self, target, passphrase):
def save(self, target, passphrase, create=False):
self.logically_encrypted = passphrase != ''
key_data = self._save(passphrase)
key_data = key_data.encode('utf-8') # remote repo: msgpack issue #99, giving bytes
@ -845,8 +850,8 @@ def load(self, target, passphrase):
self.logically_encrypted = False
return success
def save(self, target, passphrase):
super().save(target, passphrase)
def save(self, target, passphrase, create=False):
super().save(target, passphrase, create=create)
self.logically_encrypted = False
def init_ciphers(self, manifest_data=None):