vm: move kernel presence validation to event handler
Setter is called also on qubes.xml load, so missing kernel breaks qubes.xml parsing - for example qubesd startup to fix that property.
This commit is contained in:
		
							parent
							
								
									4241b39b94
								
							
						
					
					
						commit
						3ddc052af3
					
				| @ -103,18 +103,6 @@ def _setter_kernel(self, prop, value): | |||||||
|     if '/' in value: |     if '/' in value: | ||||||
|         raise qubes.exc.QubesPropertyValueError(self, prop, value, |         raise qubes.exc.QubesPropertyValueError(self, prop, value, | ||||||
|             'Kernel name cannot contain \'/\'') |             'Kernel name cannot contain \'/\'') | ||||||
|     dirname = os.path.join( |  | ||||||
|         qubes.config.system_path['qubes_base_dir'], |  | ||||||
|         qubes.config.system_path['qubes_kernels_base_dir'], |  | ||||||
|         value) |  | ||||||
|     if not os.path.exists(dirname): |  | ||||||
|         raise qubes.exc.QubesPropertyValueError(self, prop, value, |  | ||||||
|             'Kernel {!r} not installed'.format(value)) |  | ||||||
|     for filename in ('vmlinuz', 'initramfs'): |  | ||||||
|         if not os.path.exists(os.path.join(dirname, filename)): |  | ||||||
|             raise qubes.exc.QubesPropertyValueError(self, prop, value, |  | ||||||
|                 'Kernel {!r} not properly installed: missing {!r} file'.format( |  | ||||||
|                     value, filename)) |  | ||||||
|     return value |     return value | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -764,6 +752,24 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM): | |||||||
|             subprocess.check_call(['sudo', 'systemctl', '-q', 'disable', |             subprocess.check_call(['sudo', 'systemctl', '-q', 'disable', | ||||||
|                                    'qubes-vm@{}.service'.format(oldvalue)]) |                                    'qubes-vm@{}.service'.format(oldvalue)]) | ||||||
| 
 | 
 | ||||||
|  |     @qubes.events.handler('property-pre-set:kernel') | ||||||
|  |     def on_property_pre_set_kernel(self, event, name, newvalue, oldvalue=None): | ||||||
|  |         # pylint: disable=unused-argument | ||||||
|  |         dirname = os.path.join( | ||||||
|  |             qubes.config.system_path['qubes_base_dir'], | ||||||
|  |             qubes.config.system_path['qubes_kernels_base_dir'], | ||||||
|  |             newvalue) | ||||||
|  |         if not os.path.exists(dirname): | ||||||
|  |             raise qubes.exc.QubesPropertyValueError(self, | ||||||
|  |                 self.property_get_def(name), newvalue, | ||||||
|  |                 'Kernel {!r} not installed'.format(newvalue)) | ||||||
|  |         for filename in ('vmlinuz', 'initramfs'): | ||||||
|  |             if not os.path.exists(os.path.join(dirname, filename)): | ||||||
|  |                 raise qubes.exc.QubesPropertyValueError(self, | ||||||
|  |                     self.property_get_def(name), newvalue, | ||||||
|  |                     'Kernel {!r} not properly installed: ' | ||||||
|  |                     'missing {!r} file'.format(newvalue, filename)) | ||||||
|  | 
 | ||||||
|     @qubes.events.handler('property-set:name') |     @qubes.events.handler('property-set:name') | ||||||
|     def on_property_set_name(self, event, name, newvalue, oldvalue=None): |     def on_property_set_name(self, event, name, newvalue, oldvalue=None): | ||||||
|         # pylint: disable=unused-argument |         # pylint: disable=unused-argument | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Marek Marczykowski-Górecki
						Marek Marczykowski-Górecki