backup: drop BackupHeader loading code
It is useless here since backup restore is moved to qubes-core-admin-client.
This commit is contained in:
		
							parent
							
								
									d4e9120903
								
							
						
					
					
						commit
						9dd0cfe6c5
					
				@ -78,6 +78,7 @@ class BackupHeader(object):
 | 
			
		||||
    '''Structure describing backup-header file included as the first file in
 | 
			
		||||
    backup archive
 | 
			
		||||
    '''
 | 
			
		||||
    # pylint: disable=too-few-public-methods
 | 
			
		||||
    header_keys = {
 | 
			
		||||
        'version': 'version',
 | 
			
		||||
        'encrypted': 'encrypted',
 | 
			
		||||
@ -91,7 +92,6 @@ class BackupHeader(object):
 | 
			
		||||
    int_options = ['version']
 | 
			
		||||
 | 
			
		||||
    def __init__(self,
 | 
			
		||||
            header_data=None,
 | 
			
		||||
            version=None,
 | 
			
		||||
            encrypted=None,
 | 
			
		||||
            compressed=None,
 | 
			
		||||
@ -110,67 +110,6 @@ class BackupHeader(object):
 | 
			
		||||
        self.crypto_algorithm = crypto_algorithm
 | 
			
		||||
        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):
 | 
			
		||||
        with open(filename, "w") as f_header:
 | 
			
		||||
            # make sure 'version' is the first key
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user