Forwarding succesfully added e saved in XML
This commit is contained in:
parent
0b476df8b5
commit
7f04a0c1c5
@ -286,8 +286,10 @@ class Rule(object):
|
||||
:param kwargs: rule elements
|
||||
'''
|
||||
self._action = None
|
||||
self._forwardtype = None
|
||||
self._proto = None
|
||||
self._dsthost = None
|
||||
self._srcports = None
|
||||
self._dstports = None
|
||||
self._icmptype = None
|
||||
self._specialtarget = None
|
||||
@ -304,8 +306,9 @@ class Rule(object):
|
||||
rule_dict['comment'] = comment
|
||||
rule_dict.update(kwargs)
|
||||
|
||||
rule_elements = ('action', 'proto', 'dsthost', 'dst4', 'dst6',
|
||||
'specialtarget', 'dstports', 'icmptype', 'expire', 'comment')
|
||||
rule_elements = ('action', 'forwardtype', 'proto', 'dsthost', 'dst4',
|
||||
'dst6', 'specialtarget', 'srcports', 'dstports', 'icmptype',
|
||||
'expire', 'comment')
|
||||
for rule_opt in rule_elements:
|
||||
value = rule_dict.pop(rule_opt, None)
|
||||
if value is None:
|
||||
@ -332,6 +335,17 @@ class Rule(object):
|
||||
value = Action(value)
|
||||
self._action = value
|
||||
|
||||
@property
|
||||
def forwardtype(self):
|
||||
'''type of forwarding (internal or external)'''
|
||||
return self._forwardtype
|
||||
|
||||
@forwardtype.setter
|
||||
def forwardtype(self, value):
|
||||
if not isinstance(value, ForwardType):
|
||||
value = ForwardType(value)
|
||||
self._forwardtype = value
|
||||
|
||||
@property
|
||||
def proto(self):
|
||||
'''protocol to match'''
|
||||
@ -358,6 +372,21 @@ class Rule(object):
|
||||
value = DstHost(value)
|
||||
self._dsthost = value
|
||||
|
||||
@property
|
||||
def srcports(self):
|
||||
''''Source port(s) (for forwarding only)'''
|
||||
return self._srcports
|
||||
|
||||
@srcports.setter
|
||||
def srcports(self, value):
|
||||
if value is not None:
|
||||
if self.proto not in ('tcp', 'udp'):
|
||||
raise ValueError(
|
||||
'srcports valid only for \'tcp\' and \'udp\' protocols')
|
||||
if not isinstance(value, DstPorts):
|
||||
value = SrcPorts(value)
|
||||
self._srcports = value
|
||||
|
||||
@property
|
||||
def dstports(self):
|
||||
''''Destination port(s) (for \'tcp\' and \'udp\' protocol only)'''
|
||||
@ -425,8 +454,8 @@ class Rule(object):
|
||||
'''API representation of this rule'''
|
||||
values = []
|
||||
# comment must be the last one
|
||||
for prop in ('action', 'proto', 'dsthost', 'dstports', 'icmptype',
|
||||
'specialtarget', 'expire', 'comment'):
|
||||
for prop in ('action', 'forwardtype', 'proto', 'dsthost', 'srcports',
|
||||
'dstports', 'icmptype', 'specialtarget', 'expire', 'comment'):
|
||||
value = getattr(self, prop)
|
||||
if value is None:
|
||||
continue
|
||||
|
@ -44,7 +44,7 @@ class RuleAction(argparse.Action):
|
||||
if not values:
|
||||
setattr(namespace, self.dest, None)
|
||||
return
|
||||
assumed_order = ['action', 'dsthost', 'proto', 'dstports', 'icmptype']
|
||||
assumed_order = ['action', 'forwardtype', 'dsthost', 'proto', 'srcports', 'dstports', 'icmptype']
|
||||
allowed_opts = assumed_order + ['specialtarget', 'comment', 'expire']
|
||||
kwargs = {}
|
||||
for opt in values:
|
||||
@ -148,8 +148,8 @@ def rules_list_table(vm):
|
||||
:param vm: VM object
|
||||
:return: None
|
||||
'''
|
||||
header = ['NO', 'ACTION', 'FORWARD TYPE', 'HOST', 'PROTOCOL', 'SRCPORT(s)',
|
||||
'PORT(S)', 'SPECIAL TARGET', 'ICMP TYPE', 'EXPIRE', 'COMMENT']
|
||||
header = ['NO', 'ACTION', 'FORWARD TYPE', 'HOST', 'PROTOCOL', 'SRCPORT(S)',
|
||||
'DSTPORT(S)', 'SPECIAL TARGET', 'ICMP TYPE', 'EXPIRE', 'COMMENT']
|
||||
rows = []
|
||||
for (rule, rule_no) in zip(vm.firewall.rules, itertools.count()):
|
||||
row = [x.pretty_value if x is not None else '-' for x in [
|
||||
@ -162,7 +162,7 @@ def rules_list_table(vm):
|
||||
rule.specialtarget,
|
||||
rule.icmptype,
|
||||
rule.expire,
|
||||
rule.comment
|
||||
rule.comment,
|
||||
]]
|
||||
rows.append([str(rule_no)] + row)
|
||||
qubesadmin.tools.print_table([header] + rows)
|
||||
|
Loading…
Reference in New Issue
Block a user