From 3a36a9de4bcd38a3cef066b4a41adf0c87e87eae Mon Sep 17 00:00:00 2001 From: Tom Eastep Date: Sat, 28 Aug 2010 14:48:47 -0700 Subject: [PATCH] Fix shell-variable creation --- Shorewall/Perl/Shorewall/Zones.pm | 33 +++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/Shorewall/Perl/Shorewall/Zones.pm b/Shorewall/Perl/Shorewall/Zones.pm index 2fe4c983c..cc67bdad9 100644 --- a/Shorewall/Perl/Shorewall/Zones.pm +++ b/Shorewall/Perl/Shorewall/Zones.pm @@ -163,8 +163,10 @@ our %interfaces; our @bport_zones; our %ipsets; our %physical; +our %basemap; our $family; our $have_ipsec; +our $baseseq; use constant { FIREWALL => 1, IP => 2, @@ -217,6 +219,8 @@ sub initialize( $ ) { @bport_zones = (); %ipsets = (); %physical = (); + %basemap = (); + $baseseq = 0; if ( $family == F_IPV4 ) { %validinterfaceoptions = (arp_filter => BINARY_IF_OPTION, @@ -771,11 +775,32 @@ sub is_a_bridge( $ ) { # sub chain_base($) { my $chain = $_[0]; - - $chain =~ s/^@/at_/; - $chain =~ tr/[.\-%@]/_/; + # + # Handle VLANs and wildcards + # $chain =~ s/\+$//; - $chain; + $chain =~ tr/./_/; + + if ( $chain =~ /^[0-9]/ || $chain =~ /[^\w]/ ) { + # + # Not valid variable name + # + if ( $basemap{$_[0]} ) { + # + # We've mapped this name previously + # + $basemap{$_[0]}; + } else { + # + # Must map. Remove all illegal characters + # + $chain =~ s/[^\w]//g; + $chain = join( '' , 'if_', $chain ) unless $chain =~ /^[a-zA-z]/; + $basemap{$_[0]} = join ( '_', $chain, ++$baseseq ); + } + } else { + $chain; + } } #