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 |     '''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 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Marek Marczykowski-Górecki
						Marek Marczykowski-Górecki