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: | ||||
|         raise qubes.exc.QubesPropertyValueError(self, prop, value, | ||||
|             '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 | ||||
| 
 | ||||
| 
 | ||||
| @ -764,6 +752,24 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM): | ||||
|             subprocess.check_call(['sudo', 'systemctl', '-q', 'disable', | ||||
|                                    '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') | ||||
|     def on_property_set_name(self, event, name, newvalue, oldvalue=None): | ||||
|         # pylint: disable=unused-argument | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Marek Marczykowski-Górecki
						Marek Marczykowski-Górecki