2525
2626class QubesWhonixExtension (qubes .ext .Extension ):
2727 '''qubes-core-admin extension for handling Whonix related settings'''
28+ @staticmethod
29+ def set_ws_netvm (app , vm ):
30+ '''Set the default NetVM for a Whonix-Workstation qube.'''
31+ if isinstance (vm , qubes .vm .templatevm .TemplateVM ):
32+ return
33+ template = getattr (vm , 'template' , None )
34+ # look for appropriate whonix-gateway
35+ if (
36+ template is not None
37+ and 'whonix-default-gw' in template .features
38+ ):
39+ netvm = template .features ['whonix-default-gw' ]
40+ else :
41+ netvm = 'sys-whonix'
42+ if netvm in app .domains :
43+ vm .netvm = netvm
44+ else :
45+ # expected netvm does not exists, log an error and set netvm
46+ # to None
47+ vm .log .error ('QubesWhonixExtension: netvm \' %s\' does not '
48+ 'exists' , netvm )
49+ vm .netvm = None
50+
51+ @staticmethod
52+ def set_ws_dispvm (app , vm ):
53+ '''Set the default DispVM for a Whonix-Workstation qube.'''
54+ if isinstance (vm , qubes .vm .templatevm .TemplateVM ):
55+ return
56+ template = getattr (vm , 'template' , None )
57+ # look for appropriate default dispvm
58+ if (
59+ template is not None
60+ and 'whonix-default-dispvm' in template .features
61+ ):
62+ default_dispvm = template .features ['whonix-default-dispvm' ]
63+ elif template is not None :
64+ # example template.name: whonix-ws-14
65+ # example default_dispvm: whonix-ws-14-dvm
66+ default_dispvm = template .name + '-dvm'
67+ else :
68+ # assume whonix-workstation-17-dvm is right
69+ # HARDCODED.
70+ default_dispvm = 'whonix-workstation-17-dvm'
71+
72+ if default_dispvm in app .domains :
73+ vm .default_dispvm = default_dispvm
74+ else :
75+ # expected default dispvm does not exists, log an error and set
76+ # default dispvm to None
77+ vm .log .error ('QubesWhonixExtension: default dispvm\' %s\' does '
78+ 'not exists' , default_dispvm )
79+ vm .default_dispvm = None
80+
2881 @qubes .ext .handler ('domain-add' , system = True )
2982 def on_domain_add (self , app , _event , vm , ** _kwargs ):
3083 '''Handle new AppVM created on whonix-ws/whonix-gw template and
@@ -41,41 +94,21 @@ def on_domain_add(self, app, _event, vm, **_kwargs):
4194 # this is new VM based on whonix-ws, adjust its default settings
4295
4396 vm .tags .add ('anon-vm' )
44-
45- # look for appropriate whonix-gateway
46- if 'whonix-default-gw' in template .features :
47- netvm = template .features ['whonix-default-gw' ]
48- else :
49- netvm = 'sys-whonix'
50- if netvm in app .domains :
51- vm .netvm = netvm
52- else :
53- # expected netvm does not exists, log an error and set netvm
54- # to None
55- vm .log .error ('QubesWhonixExtension: netvm \' %s\' does not '
56- 'exists' , netvm )
57- vm .netvm = None
58-
59- # look for appropriate default dispvm
60- if 'whonix-default-dispvm' in template .features :
61- default_dispvm = template .features ['whonix-default-dispvm' ]
62- else :
63- # example template.name: whonix-ws-14
64- # example default_dispvm: whonix-ws-14-dvm
65- default_dispvm = template .name + '-dvm'
66-
67- if default_dispvm in app .domains :
68- vm .default_dispvm = default_dispvm
69- else :
70- # expected default dispvm does not exists, log an error and set
71- # default dispvm to None
72- vm .log .error ('QubesWhonixExtension: default dispvm\' %s\' does '
73- 'not exists' , default_dispvm )
74- vm .default_dispvm = None
97+ self .set_ws_netvm (app , vm )
98+ self .set_ws_dispvm (app , vm )
7599
76100 if 'gui-events-max-delay' not in vm .features :
77101 vm .features ['gui-events-max-delay' ] = 100
78102
103+ @qubes .ext .handler ('domain-feature-set:whonix-ws' )
104+ def on_whonix_ws_feature_set (self , vm , event , feature , value , oldvalue = None ):
105+ '''Set NetVM and DispVM appropriately on VMs that are newly set as a
106+ Whonix-Workstation VM (mostly useful for configuring StandaloneVMs
107+ '''
108+ if value == '1' :
109+ self .set_ws_netvm (vm .app , vm )
110+ self .set_ws_dispvm (vm .app , vm )
111+
79112 @qubes .ext .handler ('features-request' )
80113 def on_features_request (self , vm , _event , untrusted_features ):
81114 '''Handle whonix-ws/whonix-gw template advertising itself'''
0 commit comments