From 5ca3b795fc476c062f1d4bb1d9c64e2b25b882f5 Mon Sep 17 00:00:00 2001 From: Tom Eastep Date: Fri, 1 Mar 2013 16:44:49 -0800 Subject: [PATCH] Correct IPv6 REDIRECT Signed-off-by: Tom Eastep --- Shorewall/Perl/Shorewall/Rules.pm | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Shorewall/Perl/Shorewall/Rules.pm b/Shorewall/Perl/Shorewall/Rules.pm index 669547778..8b9417bd1 100644 --- a/Shorewall/Perl/Shorewall/Rules.pm +++ b/Shorewall/Perl/Shorewall/Rules.pm @@ -2192,11 +2192,23 @@ sub process_rule ( $$$$$$$$$$$$$$$$$$$ ) { REDIRECT => sub () { my $z = $actiontype & NATONLY ? '' : firewall_zone; if ( $dest eq '-' ) { - $dest = ( $inchain ) ? '' : join( '', $z, '::' , $ports =~ /[:,]/ ? '' : $ports ); + if ( $family == F_IPV4 ) { + $dest = ( $inchain ) ? '' : join( '', $z, '::' , $ports =~ /[:,]/ ? '' : $ports ); + } else { + $dest = ( $inchain ) ? '' : join( '', $z, ':[]:' , $ports =~ /[:,]/ ? '' : $ports ); + } } elsif ( $inchain ) { - $dest = ":$dest"; + if ( $family == F_IPV4 ) { + $dest = ":$dest"; + } else { + $dest = "[]:$dest"; + } } else { - $dest = join( '', $z, '::', $dest ) unless $dest =~ /^[^\d].*:/; + if ( $family == F_IPV4 ) { + $dest = join( '', $z, '::', $dest ) unless $dest =~ /^[^\d].*:/; + } else { + $dest = join( '', $z, ':[]:', $dest ) unless $dest =~ /^[^\d].*:/; + } } } ,