backup: drop BackupHeader loading code

It is useless here since backup restore is moved to
qubes-core-admin-client.
This commit is contained in:
Marek Marczykowski-Górecki 2017-07-20 03:04:21 +02:00
parent d4e9120903
commit 9dd0cfe6c5
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724

View File

@ -78,6 +78,7 @@ class BackupHeader(object):
'''Structure describing backup-header file included as the first file in '''Structure describing backup-header file included as the first file in
backup archive backup archive
''' '''
# pylint: disable=too-few-public-methods
header_keys = { header_keys = {
'version': 'version', 'version': 'version',
'encrypted': 'encrypted', 'encrypted': 'encrypted',
@ -91,7 +92,6 @@ class BackupHeader(object):
int_options = ['version'] int_options = ['version']
def __init__(self, def __init__(self,
header_data=None,
version=None, version=None,
encrypted=None, encrypted=None,
compressed=None, compressed=None,
@ -110,67 +110,6 @@ class BackupHeader(object):
self.crypto_algorithm = crypto_algorithm self.crypto_algorithm = crypto_algorithm
self.backup_id = backup_id self.backup_id = backup_id
if header_data is not None:
self.load(header_data)
def load(self, untrusted_header_text):
"""Parse backup header file.
:param untrusted_header_text: header content
:type untrusted_header_text: basestring
.. warning::
This function may be exposed to not yet verified header,
so is security critical.
"""
try:
untrusted_header_text = untrusted_header_text.decode('ascii')
except UnicodeDecodeError:
raise qubes.exc.QubesException(
"Non-ASCII characters in backup header")
for untrusted_line in untrusted_header_text.splitlines():
if untrusted_line.count('=') != 1:
raise qubes.exc.QubesException("Invalid backup header")
key, value = untrusted_line.strip().split('=', 1)
if not _re_alphanum.match(key):
raise qubes.exc.QubesException("Invalid backup header (key)")
if key not in self.header_keys.keys():
# Ignoring unknown option
continue
if not _re_alphanum.match(value):
raise qubes.exc.QubesException("Invalid backup header (value)")
if getattr(self, self.header_keys[key]) is not None:
raise qubes.exc.QubesException(
"Duplicated header line: {}".format(key))
if key in self.bool_options:
value = value.lower() in ["1", "true", "yes"]
elif key in self.int_options:
value = int(value)
setattr(self, self.header_keys[key], value)
self.validate()
def validate(self):
if self.version == 1:
# header not really present
pass
elif self.version in [2, 3, 4]:
expected_attrs = ['version', 'encrypted', 'compressed',
'hmac_algorithm']
if self.encrypted:
expected_attrs += ['crypto_algorithm']
if self.version >= 3 and self.compressed:
expected_attrs += ['compression_filter']
if self.version >= 4:
expected_attrs += ['backup_id']
for key in expected_attrs:
if getattr(self, key) is None:
raise qubes.exc.QubesException(
"Backup header lack '{}' info".format(key))
else:
raise qubes.exc.QubesException(
"Unsupported backup version {}".format(self.version))
def save(self, filename): def save(self, filename):
with open(filename, "w") as f_header: with open(filename, "w") as f_header:
# make sure 'version' is the first key # make sure 'version' is the first key