瀏覽代碼

Merge remote-tracking branch 'origin/pr/139'

* origin/pr/139:
  Added a safeguard for invalid firewall rules
Marek Marczykowski-Górecki 4 年之前
父節點
當前提交
b1453953f9
共有 2 個文件被更改,包括 14 次插入0 次删除
  1. 11 0
      qubesadmin/tests/tools/qvm_firewall.py
  2. 3 0
      qubesadmin/tools/qvm_firewall.py

+ 11 - 0
qubesadmin/tests/tools/qvm_firewall.py

@@ -96,6 +96,17 @@ class TC_00_RuleAction(qubesadmin.tests.QubesTestCase):
                 qubesadmin.firewall.Rule(
                     None, action='accept', dsthost='127.0.0.1/32'))
 
+    def test_007_none_errors(self):
+        ns = argparse.Namespace()
+        with self.assertRaises(argparse.ArgumentError):
+            self.action(None, ns, ['dsthost=', 'action=accept'])
+        with self.assertRaises(argparse.ArgumentError):
+            self.action(None, ns, ['dsthost=127.0.0.1', 'dstports=',
+                                   'action=accept'])
+        with self.assertRaises(argparse.ArgumentError):
+            self.action(None, ns, ['dsthost=127.0.0.1', 'icmptype=',
+                                   'action=accept'])
+
 
 class TC_10_qvm_firewall(qubesadmin.tests.QubesTestCase):
     def setUp(self):

+ 3 - 0
qubesadmin/tools/qvm_firewall.py

@@ -48,6 +48,9 @@ class RuleAction(argparse.Action):
         allowed_opts = assumed_order + ['specialtarget', 'comment', 'expire']
         kwargs = {}
         for opt in values:
+            if opt[-1] == '=':
+                raise argparse.ArgumentError(
+                    None, 'invalid rule description: {}'.format(opt))
             opt_elements = opt.split('=')
             if len(opt_elements) == 2:
                 key, value = opt_elements