mirror of
https://gitlab.com/shorewall/code.git
synced 2025-06-20 09:47:51 +02:00
Unified symbol table for shell variables.
Signed-off-by: Tom Eastep <teastep@shorewall.net>
This commit is contained in:
parent
409f5f2aab
commit
314632f1f4
@ -122,6 +122,7 @@ our %EXPORT_TAGS = ( internal => [ qw( create_temp_script
|
|||||||
qt
|
qt
|
||||||
ensure_config_path
|
ensure_config_path
|
||||||
add_param
|
add_param
|
||||||
|
add_symbol
|
||||||
export_params
|
export_params
|
||||||
get_configuration
|
get_configuration
|
||||||
report_capabilities
|
report_capabilities
|
||||||
@ -560,7 +561,10 @@ use constant { PLAIN_READ => 0, # No read_a_line options
|
|||||||
NORMAL_READ => -1 # All options
|
NORMAL_READ => -1 # All options
|
||||||
};
|
};
|
||||||
|
|
||||||
|
my %symbols; # Symbol table for expanding shell variables
|
||||||
|
|
||||||
sub process_shorewallrc($$);
|
sub process_shorewallrc($$);
|
||||||
|
sub add_symbols( \% );
|
||||||
#
|
#
|
||||||
# Rather than initializing globals in an INIT block or during declaration,
|
# Rather than initializing globals in an INIT block or during declaration,
|
||||||
# we initialize them in a function. This is done for two reasons:
|
# we initialize them in a function. This is done for two reasons:
|
||||||
@ -952,6 +956,8 @@ sub initialize( $;$$) {
|
|||||||
SHAREDIR => '/usr/share/',
|
SHAREDIR => '/usr/share/',
|
||||||
CONFDIR => '/etc/',
|
CONFDIR => '/etc/',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
%symbols = %ENV;
|
||||||
#
|
#
|
||||||
# If we are compiling for export, process the shorewallrc from the remote system
|
# If we are compiling for export, process the shorewallrc from the remote system
|
||||||
#
|
#
|
||||||
@ -992,6 +998,8 @@ sub initialize( $;$$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
%shorewallrc1 = %shorewallrc unless $shorewallrc1;
|
%shorewallrc1 = %shorewallrc unless $shorewallrc1;
|
||||||
|
|
||||||
|
add_symbols %shorewallrc1;
|
||||||
}
|
}
|
||||||
|
|
||||||
my @abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
|
my @abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
|
||||||
@ -1927,12 +1935,7 @@ sub evaluate_expression( $$$ ) {
|
|||||||
while ( $expression =~ m( ^(.*?) \$({)? (\d+|[a-zA-Z]\w*) (?(2)}) (.*)$ )x ) {
|
while ( $expression =~ m( ^(.*?) \$({)? (\d+|[a-zA-Z]\w*) (?(2)}) (.*)$ )x ) {
|
||||||
my ( $first, $var, $rest ) = ( $1, $3, $4);
|
my ( $first, $var, $rest ) = ( $1, $3, $4);
|
||||||
|
|
||||||
$val = ( exists $ENV{$var} ? $ENV{$var} :
|
$val = ( exists $symbols{$var} ? $symbols{$var} :
|
||||||
exists $params{$var} ? $params{$var} :
|
|
||||||
exists $config{$var} ? $config{$var} :
|
|
||||||
exists $renamed{$var} ? $config{$renamed{$var}} :
|
|
||||||
exists $shorewallrc1{$var} ? $shorewallrc1{$var} :
|
|
||||||
exists $shorewallrc{$var} ? $shorewallrc{$var} :
|
|
||||||
exists $actparms{$var} ? ( $var ? $actparms{$var} : $actparms{0}->{name} ) :
|
exists $actparms{$var} ? ( $var ? $actparms{$var} : $actparms{0}->{name} ) :
|
||||||
exists $capdesc{$var} ? have_capability( $var ) : 0 );
|
exists $capdesc{$var} ? have_capability( $var ) : 0 );
|
||||||
$val = 0 unless defined $val;
|
$val = 0 unless defined $val;
|
||||||
@ -2554,17 +2557,31 @@ sub expand_variables( \$ ) {
|
|||||||
( length( $var ) == 1 || $var !~ /^0/ ) ) );
|
( length( $var ) == 1 || $var !~ /^0/ ) ) );
|
||||||
fatal_error "Undefined parameter (\$$var)" if ( ! defined $actparms{$var} ) || ( length( $var ) > 1 && $var =~ /^0/ );
|
fatal_error "Undefined parameter (\$$var)" if ( ! defined $actparms{$var} ) || ( length( $var ) > 1 && $var =~ /^0/ );
|
||||||
$val = $var ? $actparms{$var} : $actparms{0}->{name};
|
$val = $var ? $actparms{$var} : $actparms{0}->{name};
|
||||||
} elsif ( exists $params{$var} ) {
|
} elsif ( exists $symbols{$var} ) {
|
||||||
$val = $params{$var};
|
$val = $symbols{$var};
|
||||||
} elsif ( exists $shorewallrc1{$var} ) {
|
|
||||||
$val = $shorewallrc1{$var}
|
|
||||||
} elsif ( exists $shorewallrc{$var} ) {
|
|
||||||
$val = $shorewallrc{$var}
|
|
||||||
} elsif ( exists $actparms{$var} ) {
|
} elsif ( exists $actparms{$var} ) {
|
||||||
$val = $actparms{$var};
|
$val = $actparms{$var};
|
||||||
} else {
|
} else {
|
||||||
fatal_error "Undefined shell variable (\$$var)" unless exists $config{$var};
|
fatal_error "Undefined shell variable (\$$var)" unless exists $config{$var};
|
||||||
$val = $config{$var};
|
}
|
||||||
|
|
||||||
|
$val = '' unless defined $val;
|
||||||
|
$$lineref = join( '', $first , $val , $rest );
|
||||||
|
fatal_error "Variable Expansion Loop" if ++$count > 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub expand_shorewallrc_variables( \$ ) {
|
||||||
|
my ( $lineref, $count ) = ( $_[0], 0 );
|
||||||
|
# $1 $2 $3 - $4
|
||||||
|
while ( $$lineref =~ m( ^(.*?) \$({)? (\d+|[a-zA-Z]\w*) (?(2)}) (.*)$ )x ) {
|
||||||
|
|
||||||
|
my ( $first, $var, $rest ) = ( $1, $3, $4);
|
||||||
|
|
||||||
|
my $val;
|
||||||
|
|
||||||
|
if ( exists $shorewallrc{$var} ) {
|
||||||
|
$val = $shorewallrc{$var}
|
||||||
}
|
}
|
||||||
|
|
||||||
$val = '' unless defined $val;
|
$val = '' unless defined $val;
|
||||||
@ -2716,7 +2733,7 @@ sub process_shorewallrc( $$ ) {
|
|||||||
if ( $currentline =~ /^([a-zA-Z]\w*)=(.*)$/ ) {
|
if ( $currentline =~ /^([a-zA-Z]\w*)=(.*)$/ ) {
|
||||||
my ($var, $val) = ($1, $2);
|
my ($var, $val) = ($1, $2);
|
||||||
$val = $1 if $val =~ /^\"([^\"]*)\"$/;
|
$val = $1 if $val =~ /^\"([^\"]*)\"$/;
|
||||||
expand_variables($val) if supplied $val;
|
expand_shorewallrc_variables($val) if supplied $val;
|
||||||
$shorewallrc{$var} = $val;
|
$shorewallrc{$var} = $val;
|
||||||
} else {
|
} else {
|
||||||
fatal_error "Unrecognized shorewallrc entry";
|
fatal_error "Unrecognized shorewallrc entry";
|
||||||
@ -4329,18 +4346,38 @@ sub get_params() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
add_symbols %params;
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Add an entry to %params and to %compiler_params
|
# Add an entry to %param, %symbols and to %compiler_params
|
||||||
#
|
#
|
||||||
sub add_param( $$ ) {
|
sub add_param( $$ ) {
|
||||||
my ( $param, $value ) = @_;
|
my ( $param, $value ) = @_;
|
||||||
|
|
||||||
$params{$param} = $value;
|
$params{$param} = $value;
|
||||||
|
$symbols{$param} = $value;
|
||||||
$compiler_params{$param} = 1;
|
$compiler_params{$param} = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Add an entry to %symbols
|
||||||
|
#
|
||||||
|
sub add_symbol( $$ ) {
|
||||||
|
$symbols{$_[0]} = $_[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Add symbols from a hash
|
||||||
|
#
|
||||||
|
|
||||||
|
sub add_symbols( \% ) {
|
||||||
|
while ( my ( $var, $val ) = each %{$_[0]} ) {
|
||||||
|
$symbols{$var} = $val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# emit param=value for each param set in the params file
|
# emit param=value for each param set in the params file
|
||||||
#
|
#
|
||||||
@ -4914,8 +4951,13 @@ sub get_configuration( $$$ ) {
|
|||||||
require_capability( 'RECENT_MATCH' , 'MACLIST_TTL' , 's' ) if $config{MACLIST_TTL};
|
require_capability( 'RECENT_MATCH' , 'MACLIST_TTL' , 's' ) if $config{MACLIST_TTL};
|
||||||
require_capability( 'XCONNMARK' , 'HIGH_ROUTE_MARKS=Yes' , 's' ) if $config{PROVIDER_OFFSET} > 0;
|
require_capability( 'XCONNMARK' , 'HIGH_ROUTE_MARKS=Yes' , 's' ) if $config{PROVIDER_OFFSET} > 0;
|
||||||
require_capability( 'MANGLE_ENABLED' , 'Traffic Shaping' , 's' ) if $config{TC_ENABLED};
|
require_capability( 'MANGLE_ENABLED' , 'Traffic Shaping' , 's' ) if $config{TC_ENABLED};
|
||||||
}
|
|
||||||
|
|
||||||
|
add_symbols %config;
|
||||||
|
|
||||||
|
while ( my ($var, $val ) = each %renamed ) {
|
||||||
|
$symbols{$var} = $config{$val};
|
||||||
|
}
|
||||||
|
}
|
||||||
#
|
#
|
||||||
# The values of the options in @propagateconfig are copied to the script file in OPTION=<value> format.
|
# The values of the options in @propagateconfig are copied to the script file in OPTION=<value> format.
|
||||||
#
|
#
|
||||||
|
Loading…
x
Reference in New Issue
Block a user