@@ -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