Skip to content

Commit 700063c

Browse files
author
ldx
committed
Handle real_name of extensions.
1 parent 2bf0827 commit 700063c

1 file changed

Lines changed: 22 additions & 2 deletions

File tree

iptc/ip4tc.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,8 @@ def __init__(self, rule, name=None, match=None, revision=None):
441441
name = match.u.user.name
442442
self._name = name
443443
self._rule = rule
444+
self._alias = None
445+
self._real_name = None
444446

445447
self._xt = xtables(rule.nfproto)
446448

@@ -484,6 +486,8 @@ def _check_alias(self, module, match):
484486
# that's the case, and load that extension as well if necessary. It
485487
# will be used to parse parameters, since the 'real' extension
486488
# probably won't understand them.
489+
if getattr(module, "real_name", None) is not None and module.real_name:
490+
self._real_name = module.real_name
487491
if getattr(module, "alias", None) is not None and module.alias:
488492
self._alias_name = module.alias(match)
489493
alias = self._xt.find_match(self._alias_name)
@@ -526,6 +530,14 @@ def _update_pointers(self):
526530
self._module.m = self._ptr
527531
if self._alias is not None:
528532
self._alias.m = self._ptr
533+
self._update_name()
534+
535+
def _update_name(self):
536+
m = self._ptr[0]
537+
if self._real_name is not None:
538+
m.u.user.name = self._real_name
539+
else:
540+
m.u.user.name = self.name
529541

530542
def reset(self):
531543
"""Reset the match.
@@ -534,7 +546,6 @@ def reset(self):
534546
ct.memset(ct.byref(self._match_buf), 0, self.size)
535547
self._update_pointers()
536548
m = self._ptr[0]
537-
m.u.user.name = self.name
538549
m.u.match_size = self.size
539550
m.u.user.revision = self._revision
540551
if self._module.init:
@@ -633,6 +644,8 @@ def _check_alias(self, module, target):
633644
# that's the case, and load that extension as well if necessary. It
634645
# will be used to parse parameters, since the 'real' extension
635646
# probably won't understand them.
647+
if getattr(module, "real_name", None) is not None and module.real_name:
648+
self._real_name = module.real_name
636649
if getattr(module, "alias", None) is not None and module.alias:
637650
self._alias_name = module.alias(target)
638651
alias = self._xt.find_target(self._alias_name)
@@ -702,14 +715,21 @@ def _update_pointers(self):
702715
self._module.t = self._ptr
703716
if self._alias is not None:
704717
self._alias.t = self._ptr
718+
self._update_name()
719+
720+
def _update_name(self):
721+
m = self._ptr[0]
722+
if self._real_name is not None:
723+
m.u.user.name = self._real_name
724+
else:
725+
m.u.user.name = self.name
705726

706727
def reset(self):
707728
"""Reset the target. Parameters are set to their default values, any
708729
flags are cleared."""
709730
ct.memset(self._target_buf, 0, self.size)
710731
self._update_pointers()
711732
t = self._ptr[0]
712-
t.u.user.name = self.name
713733
t.u.target_size = self.size
714734
t.u.user.revision = self._revision
715735
if self._module.init:

0 commit comments

Comments
 (0)