Settings window: do not crash when there is no firewall rule
When all firewall rules are removed, qubes-vm-settings crashed trying to check if the last rule accepts or drops all packages. It is now verifies that there is a last rule. Also, it is now properly verified that the last rule accept or drops all packages. Associated stack trace: ---- line: last_rule = reversed_rules.pop(0) func: get_firewall_conf line no.: 227 file: /usr/lib/python3.5/site-packages/qubesmanager/firewall.py ---- line: conf = self.get_firewall_conf(vm) func: set_vm line no.: 308 file: /usr/lib/python3.5/site-packages/qubesmanager/firewall.py ---- line: model.set_vm(vm) func: __init__ line no.: 111 file: /usr/lib/python3.5/site-packages/qubesmanager/settings.py ---- line: settings_window = VMSettingsWindow(vm, qapp, args.tab) func: main line no.: 1133 file: /usr/lib/python3.5/site-packages/qubesmanager/settings.py ---- line: load_entry_point('qubesmanager==4.0.17', 'console_scripts', 'qubes-vm-settings')() func: <module> line no.: 9 file: /usr/bin/qubes-vm-settings
This commit is contained in:
parent
3ec089f827
commit
031ad02ff6
@ -223,23 +223,24 @@ class QubesFirewallRulesModel(QtCore.QAbstractItemModel):
|
|||||||
allow_icmp = False
|
allow_icmp = False
|
||||||
common_action = None
|
common_action = None
|
||||||
|
|
||||||
reversed_rules = list(reversed(vm.firewall.rules))
|
reversed_rules = reversed(vm.firewall.rules)
|
||||||
last_rule = reversed_rules.pop(0)
|
last_rule = next(reversed_rules, None)
|
||||||
|
|
||||||
|
if last_rule is None:
|
||||||
|
raise FirewallModifiedOutsideError('At least one rule must exist.')
|
||||||
|
|
||||||
if last_rule == qubesadmin.firewall.Rule('action=accept') \
|
if last_rule == qubesadmin.firewall.Rule('action=accept') \
|
||||||
or last_rule == qubesadmin.firewall.Rule('action=drop'):
|
or last_rule == qubesadmin.firewall.Rule('action=drop'):
|
||||||
common_action = last_rule.action
|
common_action = last_rule.action
|
||||||
else:
|
else:
|
||||||
FirewallModifiedOutsideError('Last rule must be either '
|
raise FirewallModifiedOutsideError('Last rule must be either '
|
||||||
'drop all or accept all.')
|
'drop all or accept all.')
|
||||||
|
|
||||||
dns_rule = qubesadmin.firewall.Rule(None,
|
dns_rule = qubesadmin.firewall.Rule(None,
|
||||||
action='accept', specialtarget='dns')
|
action='accept', specialtarget='dns')
|
||||||
icmp_rule = qubesadmin.firewall.Rule(None,
|
icmp_rule = qubesadmin.firewall.Rule(None,
|
||||||
action='accept', proto='icmp')
|
action='accept', proto='icmp')
|
||||||
while reversed_rules:
|
for rule in reversed_rules:
|
||||||
rule = reversed_rules.pop(0)
|
|
||||||
|
|
||||||
if rule == dns_rule:
|
if rule == dns_rule:
|
||||||
allow_dns = True
|
allow_dns = True
|
||||||
continue
|
continue
|
||||||
|
Loading…
Reference in New Issue
Block a user