mirror of
https://gitlab.com/shorewall/code.git
synced 2025-06-20 01:37:59 +02:00
Handle nested parens when pushing action parameters.
- Add an optional argument to split_list1 that causes parens to be retained. Signed-off-by: Tom Eastep <teastep@shorewall.net>
This commit is contained in:
parent
0a31d9ba41
commit
5f48e4e531
@ -1660,8 +1660,8 @@ sub split_list( $$;$ ) {
|
|||||||
split /,/, $list;
|
split /,/, $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub split_list1( $$ ) {
|
sub split_list1( $$;$ ) {
|
||||||
my ($list, $type ) = @_;
|
my ($list, $type, $keepparens ) = @_;
|
||||||
|
|
||||||
fatal_error "Invalid $type list ($list)" if $list =~ /^,|,$|,,|!,|,!$/;
|
fatal_error "Invalid $type list ($list)" if $list =~ /^,|,$|,,|!,|,!$/;
|
||||||
|
|
||||||
@ -1674,17 +1674,17 @@ sub split_list1( $$ ) {
|
|||||||
|
|
||||||
if ( ( $count = tr/(/(/ ) > 0 ) {
|
if ( ( $count = tr/(/(/ ) > 0 ) {
|
||||||
fatal_error "Invalid $type list ($list)" if $element || $count > 1;
|
fatal_error "Invalid $type list ($list)" if $element || $count > 1;
|
||||||
s/\(//;
|
s/\(// unless $keepparens;
|
||||||
if ( ( $count = tr/)/)/ ) > 0 ) {
|
if ( ( $count = tr/)/)/ ) > 0 ) {
|
||||||
fatal_error "Invalid $type list ($list)" if $count > 1;
|
fatal_error "Invalid $type list ($list)" if $count > 1;
|
||||||
s/\)//;
|
s/\)// unless $keepparens;
|
||||||
push @list2 , $_;
|
push @list2 , $_;
|
||||||
} else {
|
} else {
|
||||||
$element = $_;
|
$element = $_;
|
||||||
}
|
}
|
||||||
} elsif ( ( $count = tr/)/)/ ) > 0 ) {
|
} elsif ( ( $count = tr/)/)/ ) > 0 ) {
|
||||||
fatal_error "Invalid $type list ($list)" unless $element && $count == 1;
|
fatal_error "Invalid $type list ($list)" unless $element && $count == 1;
|
||||||
s/\)//;
|
s/\)// unless $keepparens;
|
||||||
push @list2, join ',', $element, $_;
|
push @list2, join ',', $element, $_;
|
||||||
$element = '';
|
$element = '';
|
||||||
} elsif ( $element ) {
|
} elsif ( $element ) {
|
||||||
@ -2510,7 +2510,7 @@ sub embedded_perl( $ ) {
|
|||||||
# Push/pop action params
|
# Push/pop action params
|
||||||
#
|
#
|
||||||
sub push_action_params( $$$$ ) {
|
sub push_action_params( $$$$ ) {
|
||||||
my @params = ( undef , split /,/, $_[1] );
|
my @params = ( undef , split_list1( $_[1], 'parameter', 1 ) );
|
||||||
my %oldparams = %actparms;
|
my %oldparams = %actparms;
|
||||||
|
|
||||||
%actparms = ();
|
%actparms = ();
|
||||||
|
@ -1999,7 +1999,7 @@ sub process_rule1 ( $$$$$$$$$$$$$$$$$$ ) {
|
|||||||
return $generated;
|
return $generated;
|
||||||
|
|
||||||
} elsif ( $actiontype & ( ACTION | INLINE ) ) {
|
} elsif ( $actiontype & ( ACTION | INLINE ) ) {
|
||||||
split_list $param, 'Action parameter';
|
split_list1 $param, 'Action parameter';
|
||||||
} elsif ( $actiontype & NFQ ) {
|
} elsif ( $actiontype & NFQ ) {
|
||||||
require_capability( 'NFQUEUE_TARGET', 'NFQUEUE Rules', '' );
|
require_capability( 'NFQUEUE_TARGET', 'NFQUEUE Rules', '' );
|
||||||
my $paramval = $param eq '' ? 0 : numeric_value( $param );
|
my $paramval = $param eq '' ? 0 : numeric_value( $param );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user