Correct IPv6 List Handling

Signed-off-by: Tom Eastep <teastep@shorewall.net>
This commit is contained in:
Tom Eastep 2013-02-11 16:45:03 -08:00
parent b4977db5b2
commit 84c5822c20

View File

@ -6372,8 +6372,13 @@ sub isolate_source_interface( $ ) {
} else { } else {
$iiface = $source; $iiface = $source;
} }
} elsif ( $source =~ /^(.+?):<(.+)>\s*$/ || } else {
$source =~ /^(.+?):\[(.+)\]\s*$/ || $source =~ tr/<>/[]/;
if ( $source =~ /^(.+?):(\[(?:.+)\],\[(?:.+)\])$/ ) {
$iiface = $1;
$inets = $2;
} elsif ( $source =~ /^(.+?):\[(.+)\]\s*$/ ||
$source =~ /^(.+?):(!?\+.+)$/ || $source =~ /^(.+?):(!?\+.+)$/ ||
$source =~ /^(.+?):(!?[&%].+)$/ || $source =~ /^(.+?):(!?[&%].+)$/ ||
$source =~ /^(.+?):(\[.+\]\/(?:\d+))\s*$/ $source =~ /^(.+?):(\[.+\]\/(?:\d+))\s*$/
@ -6381,7 +6386,9 @@ sub isolate_source_interface( $ ) {
$iiface = $1; $iiface = $1;
$inets = $2; $inets = $2;
} elsif ( $source =~ /:/ ) { } elsif ( $source =~ /:/ ) {
if ( $source =~ /^<(.+)>$/ || $source =~ /^\[(.+)\]$/ ) { if ( $source =~ /^\[(?:.+)\],\[(?:.+)\]$/ ){
$inets = $source;
} elsif ( $source =~ /^\[(.+)\]$/ ) {
$inets = $1; $inets = $1;
} else { } else {
$inets = $source; $inets = $source;
@ -6391,6 +6398,7 @@ sub isolate_source_interface( $ ) {
} else { } else {
$iiface = $source; $iiface = $source;
} }
}
( $iiface, $inets ); ( $iiface, $inets );
} }
@ -6482,8 +6490,13 @@ sub isolate_dest_interface( $$$$ ) {
} else { } else {
$diface = $dest; $diface = $dest;
} }
} elsif ( $dest =~ /^(.+?):<(.+)>\s*$/ || } else {
$dest =~ /^(.+?):\[(.+)\]\s*$/ || $dest =~ tr/<>/[]/;
if ( $dest =~ /^(.+?):(\[(?:.+)\],\[(?:.+)\])$/ ) {
$diface = $1;
$dnets = $2;
} elsif ( $dest =~ /^(.+?):\[(.+)\]\s*$/ ||
$dest =~ /^(.+?):(!?\+.+)$/ || $dest =~ /^(.+?):(!?\+.+)$/ ||
$dest =~ /^(.+?):(!?[&%].+)$/ || $dest =~ /^(.+?):(!?[&%].+)$/ ||
$dest =~ /^(.+?):(\[.+\]\/(?:\d+))\s*$/ $dest =~ /^(.+?):(\[.+\]\/(?:\d+))\s*$/
@ -6491,7 +6504,9 @@ sub isolate_dest_interface( $$$$ ) {
$diface = $1; $diface = $1;
$dnets = $2; $dnets = $2;
} elsif ( $dest =~ /:/ ) { } elsif ( $dest =~ /:/ ) {
if ( $dest =~ /^<(.+)>$/ || $dest =~ /^\[(.+)\]$/ ) { if ( $dest =~ /^\[(?:.+)\],\[(?:.+)\]$/ ){
$dnets = $dest;
} elsif ( $dest =~ /^\[(.+)\]$/ ) {
$dnets = $1; $dnets = $1;
} else { } else {
$dnets = $dest; $dnets = $dest;
@ -6501,6 +6516,7 @@ sub isolate_dest_interface( $$$$ ) {
} else { } else {
$diface = $dest; $diface = $dest;
} }
}
( $diface, $dnets, $rule ); ( $diface, $dnets, $rule );
} }