Compare commits

..

10 Commits

Author SHA1 Message Date
Tom Eastep
0aa5cb5086 Allow non-experts to use the user bits in the fw mark
Signed-off-by: Tom Eastep <teastep@shorewall.net>
2015-09-07 11:35:47 -07:00
Tom Eastep
eddd58d459 Move a line of code
Signed-off-by: Tom Eastep <teastep@shorewall.net>
2015-09-06 10:33:09 -07:00
Tom Eastep
1bf13e5fda Provide default for SHOREWALL_SHELL
Signed-off-by: Tom Eastep <teastep@shorewall.net>
2015-09-06 10:29:36 -07:00
Tom Eastep
682a449e7b Correct more Mangle examples
Signed-off-by: Tom Eastep <teastep@shorewall.net>
2015-09-02 13:08:05 -07:00
Tom Eastep
9e98d30c92 Correct handling of log levels with default actions
Signed-off-by: Tom Eastep <teastep@shorewall.net>
2015-09-02 08:55:18 -07:00
Tom Eastep
582755edf4 Unconditionally get inline matches
Signed-off-by: Tom Eastep <teastep@shorewall.net>
2015-09-02 08:03:22 -07:00
Tom Eastep
dea1f853ea Correct progress messages
Signed-off-by: Tom Eastep <teastep@shorewall.net>
2015-09-01 12:42:01 -07:00
Tom Eastep
e15a6f452e Cosmetic changes to first_entry() calls
Signed-off-by: Tom Eastep <teastep@shorewall.net>
2015-08-31 10:54:30 -07:00
Tom Eastep
656eaabce9 Correct a typo
Signed-off-by: Tom Eastep <teastep@shorewall.net>
2015-08-31 09:39:40 -07:00
Tom Eastep
f42dc6def1 Uniform mechanism for inserting conversion comments
Signed-off-by: Tom Eastep <teastep@shorewall.net>
2015-08-30 15:35:05 -07:00
8 changed files with 91 additions and 37 deletions

View File

@@ -4855,7 +4855,7 @@ sub validate_mark( $ ) {
sub verify_small_mark( $ ) { sub verify_small_mark( $ ) {
my $val = validate_mark ( (my $mark) = $_[0] ); my $val = validate_mark ( (my $mark) = $_[0] );
fatal_error "Mark value ($mark) too large" if numeric_value( $mark ) > $globals{TC_MAX}; fatal_error "Mark value ($mark) too large" if numeric_value( $mark ) > $globals{SMALL_MASK};
$val; $val;
} }

View File

@@ -124,6 +124,7 @@ our %EXPORT_TAGS = ( internal => [ qw( create_temp_script
set_shorewall_dir set_shorewall_dir
set_debug set_debug
find_file find_file
find_writable_file
split_list split_list
split_list1 split_list1
split_list2 split_list2
@@ -1869,6 +1870,20 @@ sub find_file($)
"$config_path[0]$filename"; "$config_path[0]$filename";
} }
sub find_writable_file($) {
my ( $filename, $nosearch ) = @_;
return $filename if $filename =~ '/';
for my $directory ( @config_path ) {
next if $directory =~ m|^$globals{SHAREDIR}/configfiles/?$| || $directory =~ m|^$shorewallrc{SHAREDIR}/doc/default-config/?$|;
my $file = "$directory$filename";
return $file if -f $file && -w _;
}
"$config_path[0]$filename";
}
# #
# Split a comma-separated list into a Perl array # Split a comma-separated list into a Perl array
# #
@@ -4807,6 +4822,12 @@ sub conditional_quote( $ ) {
# #
# Update the shorewall[6].conf file. Save the current file with a .bak suffix. # Update the shorewall[6].conf file. Save the current file with a .bak suffix.
# #
sub update_default($$) {
my ( $var, $val ) = @_;
$config{$var} = $val unless defined $config{$var};
}
sub update_config_file( $$ ) { sub update_config_file( $$ ) {
my ( $annotate, $directives ) = @_; my ( $annotate, $directives ) = @_;
@@ -4862,9 +4883,8 @@ sub update_config_file( $$ ) {
} }
} }
$config{USE_DEFAULT_RT} = 'No' unless defined $config{USE_DEFAULT_RT}; update_default( 'USE_DEFAULT_RT', 'No' );
update_default( 'EXPORTMODULES', 'No' );
$config{EXPORTMODULES} = 'No' unless defined $config{EXPORTMODULES};
my $fn; my $fn;
@@ -5358,7 +5378,7 @@ sub convert_to_directives() {
my $dirtest = qr|^$sharedir/+shorewall6?(?:/.*)?$|; my $dirtest = qr|^$sharedir/+shorewall6?(?:/.*)?$|;
progress_message3 "Converting 'FORMAT' and 'COMMENT' lines to compiler directives..."; progress_message3 "Converting 'FORMAT', 'SECTION' and 'COMMENT' lines to compiler directives...";
for my $dir ( @path ) { for my $dir ( @path ) {
unless ( $dir =~ /$dirtest/ ) { unless ( $dir =~ /$dirtest/ ) {
@@ -5393,6 +5413,7 @@ EOF
if ( system( "diff -q $file ${file}.bak > /dev/null" ) ) { if ( system( "diff -q $file ${file}.bak > /dev/null" ) ) {
progress_message3 " File $file updated - old file renamed ${file}.bak"; progress_message3 " File $file updated - old file renamed ${file}.bak";
} elsif ( rename "${file}.bak" , $file ) { } elsif ( rename "${file}.bak" , $file ) {
progress_message " File $file not updated -- no bare 'COMMENT', 'SECTION' or 'FORMAT' lines found";
progress_message " File $file not updated -- no bare 'COMMENT' or 'FORMAT' lines found"; progress_message " File $file not updated -- no bare 'COMMENT' or 'FORMAT' lines found";
} else { } else {
warning message "Unable to rename ${file}.bak to $file:$!"; warning message "Unable to rename ${file}.bak to $file:$!";
@@ -5656,6 +5677,8 @@ sub get_configuration( $$$$$ ) {
fatal_error "LOG_MARTIANS=On is not supported in IPv6" if $config{LOG_MARTIANS} eq 'on'; fatal_error "LOG_MARTIANS=On is not supported in IPv6" if $config{LOG_MARTIANS} eq 'on';
} }
default 'SHOREWALL_SHELL', '/bin/sh';
default 'STARTUP_LOG' , ''; default 'STARTUP_LOG' , '';
if ( $config{STARTUP_LOG} ne '' ) { if ( $config{STARTUP_LOG} ne '' ) {
@@ -5879,6 +5902,10 @@ sub get_configuration( $$$$$ ) {
$globals{USER_MASK} = $globals{USER_BITS} = 0; $globals{USER_MASK} = $globals{USER_BITS} = 0;
} }
$val = $config{PROVIDER_OFFSET};
$globals{SMALL_MASK} = $val ? make_mask( $val ) : $globals{TC_MASK};
if ( supplied ( $val = $config{ZONE2ZONE} ) ) { if ( supplied ( $val = $config{ZONE2ZONE} ) ) {
fatal_error "Invalid ZONE2ZONE value ( $val )" unless $val =~ /^[2-]$/; fatal_error "Invalid ZONE2ZONE value ( $val )" unless $val =~ /^[2-]$/;
} else { } else {

View File

@@ -480,7 +480,7 @@ sub convert_blacklist() {
} }
if ( @rules ) { if ( @rules ) {
my $fn1 = find_file( 'blrules' ); my $fn1 = find_writable_file( 'blrules' );
my $blrules; my $blrules;
my $date = localtime; my $date = localtime;
@@ -701,7 +701,7 @@ sub convert_routestopped() {
my ( $stoppedrules, $fn1 ); my ( $stoppedrules, $fn1 );
if ( -f ( $fn1 = find_file( 'stoppedrules' ) ) ) { if ( -f ( $fn1 = find_writable_file( 'stoppedrules' ) ) ) {
open $stoppedrules, '>>', $fn1 or fatal_error "Unable to open $fn1: $!"; open $stoppedrules, '>>', $fn1 or fatal_error "Unable to open $fn1: $!";
} else { } else {
open $stoppedrules, '>', $fn1 or fatal_error "Unable to open $fn1: $!"; open $stoppedrules, '>', $fn1 or fatal_error "Unable to open $fn1: $!";
@@ -723,12 +723,16 @@ sub convert_routestopped() {
EOF EOF
} }
first_entry(
sub {
my $date = localtime;
progress_message2 "$doing $fn...";
print( $stoppedrules print( $stoppedrules
"#\n" , "#\n" ,
"# Rules generated from routestopped file $fn by Shorewall $globals{VERSION} - $date\n" , "# Rules generated from routestopped file $fn by Shorewall $globals{VERSION} - $date\n" ,
"#\n" ); "#\n" );
}
first_entry "$doing $fn..."; );
while ( read_a_line ( NORMAL_READ ) ) { while ( read_a_line ( NORMAL_READ ) ) {

View File

@@ -80,7 +80,7 @@ sub process_one_masq1( $$$$$$$$$$ )
if ( $interfacelist =~ /^INLINE\((.+)\)$/ ) { if ( $interfacelist =~ /^INLINE\((.+)\)$/ ) {
$interfacelist = $1; $interfacelist = $1;
$inlinematches = get_inline_matches(0); $inlinematches = get_inline_matches(0);
} elsif ( $config{INLINE_MATCHES} ) { } else {
$inlinematches = get_inline_matches(0); $inlinematches = get_inline_matches(0);
} }
# #

View File

@@ -455,13 +455,12 @@ sub process_default_action( $$$$ ) {
} elsif ( ( $targets{$def} || 0 ) == INLINE ) { } elsif ( ( $targets{$def} || 0 ) == INLINE ) {
$default = $def; $default = $def;
$default = "$def($param)" if supplied $param; $default = "$def($param)" if supplied $param;
$default = join( ':', $default, $level ) if $level ne 'none';
} elsif ( $default_option ) { } elsif ( $default_option ) {
fatal_error "Unknown Action ($default) in $policy setting"; fatal_error "Unknown Action ($default) in $policy setting";
} else { } else {
fatal_error "Unknown Default Action ($default)"; fatal_error "Unknown Default Action ($default)";
} }
$default = join( ':', $default, $level ) if $level ne 'none';
} else { } else {
$default = $default_actions{$policy} || 'none'; $default = $default_actions{$policy} || 'none';
} }
@@ -2284,7 +2283,7 @@ sub process_rule ( $$$$$$$$$$$$$$$$$$$$ ) {
if ( $basictarget eq 'INLINE' ) { if ( $basictarget eq 'INLINE' ) {
( $action, $basictarget, $param, $loglevel, $raw_matches ) = handle_inline( FILTER_TABLE, 'filter', $action, $basictarget, $param, $loglevel ); ( $action, $basictarget, $param, $loglevel, $raw_matches ) = handle_inline( FILTER_TABLE, 'filter', $action, $basictarget, $param, $loglevel );
} elsif ( $config{INLINE_MATCHES} ) { } else {
$raw_matches = get_inline_matches(0); $raw_matches = get_inline_matches(0);
} }
# #

View File

@@ -749,7 +749,7 @@ sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$ ) {
if ( $cmd eq 'INLINE' ) { if ( $cmd eq 'INLINE' ) {
( $target, $cmd, $params, $junk, $raw_matches ) = handle_inline( MANGLE_TABLE, 'mangle', $action, $cmd, $params, '' ); ( $target, $cmd, $params, $junk, $raw_matches ) = handle_inline( MANGLE_TABLE, 'mangle', $action, $cmd, $params, '' );
} elsif ( $config{INLINE_MATCHES} ) { } else {
$raw_matches = get_inline_matches(0); $raw_matches = get_inline_matches(0);
} }
@@ -3177,6 +3177,17 @@ sub convert_tos($$) {
} }
if ( my $fn = open_file 'tos' ) { if ( my $fn = open_file 'tos' ) {
first_entry(
sub {
my $date = localtime;
progress_message2 "Converting $fn...";
print( $mangle
"#\n" ,
"# Rules generated from tos file $fn by Shorewall $globals{VERSION} - $date\n" ,
"#\n" );
}
);
while ( read_a_line( NORMAL_READ ) ) { while ( read_a_line( NORMAL_READ ) ) {
$have_tos = 1; $have_tos = 1;
@@ -3243,10 +3254,10 @@ sub convert_tos($$) {
sub open_mangle_for_output() { sub open_mangle_for_output() {
my ( $mangle, $fn1 ); my ( $mangle, $fn1 );
if ( -f ( find_file( 'mangle' ) ) ) { if ( -f ( $fn1 = find_writable_file( 'mangle' ) ) ) {
open( $mangle , '>>', $fn1 = find_file('mangle') ) || fatal_error "Unable to open $fn1:$!"; open( $mangle , '>>', $fn1 ) || fatal_error "Unable to open $fn1:$!";
} else { } else {
open( $mangle , '>', $fn1 = find_file('mangle') ) || fatal_error "Unable to open $fn1:$!"; open( $mangle , '>', $fn1 ) || fatal_error "Unable to open $fn1:$!";
print $mangle <<'EOF'; print $mangle <<'EOF';
# #
# Shorewall version 4 - Mangle File # Shorewall version 4 - Mangle File
@@ -3337,7 +3348,20 @@ sub setup_tc( $ ) {
directive_callback( sub () { print $mangle "$_[1]\n" unless $_[0] eq 'FORMAT'; 0; } ); directive_callback( sub () { print $mangle "$_[1]\n" unless $_[0] eq 'FORMAT'; 0; } );
} }
first_entry "$doing $fn..."; first_entry(
sub {
if ( $convert ) {
my $date = localtime;
progress_message2 "Converting $fn...";
print( $mangle
"#\n" ,
"# Rules generated from tcrules file $fn by Shorewall $globals{VERSION} - $date\n" ,
"#\n" );
} else {
progress_message2 "$doing $fn...";
}
}
);
process_tc_rule, $have_tcrules++ while read_a_line( NORMAL_READ ); process_tc_rule, $have_tcrules++ while read_a_line( NORMAL_READ );

View File

@@ -352,8 +352,8 @@
<para>The following rules are equivalent:</para> <para>The following rules are equivalent:</para>
<programlisting>2:P eth0 - tcp 22 <programlisting>2:P eth0 - tcp 22
INLINE(2):P eth0 - tcp 22 INLINE(MARK(2)):P eth0 - tcp 22
INLINE(2):P eth0 - ; -p tcp INLINE(MARK(2)):P eth0 - ; -p tcp
INLINE eth0 - tcp 22 ; -j MARK --set-mark 2 INLINE eth0 - tcp 22 ; -j MARK --set-mark 2
INLINE eth0 - ; -p tcp -j MARK --set-mark 2 INLINE eth0 - ; -p tcp -j MARK --set-mark 2
</programlisting> </programlisting>
@@ -362,7 +362,7 @@ INLINE eth0 - ; -p tcp -j MARK --set-mark
url="/manpages/shorewall.conf.html">shorewall6.conf(5)</ulink> url="/manpages/shorewall.conf.html">shorewall6.conf(5)</ulink>
then the third rule above can be specified as follows:</para> then the third rule above can be specified as follows:</para>
<programlisting>2:P eth0 - ; -p tcp</programlisting> <programlisting>MARK(2):P eth0 - ; -p tcp</programlisting>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

@@ -347,23 +347,23 @@
specified at the end of the rule. If the target is not one specified at the end of the rule. If the target is not one
known to Shorewall, then it must be defined as a builtin known to Shorewall, then it must be defined as a builtin
action in <ulink action in <ulink
url="/manpages6/shorewall6-actions.html">shorewall6-actions</ulink> url="/manpages/shorewall-actions.html">shorewall-actions</ulink>
(5).</para> (5).</para>
<para>The following rules are equivalent:</para> <para>The following rules are equivalent:</para>
<programlisting>2:P eth0 - tcp 22 <programlisting>2:P eth0 - tcp 22
INLINE(2):P eth0 - tcp 22 INLINE(MARK(2)):P eth0 - tcp 22
INLINE(2):P eth0 - ; -p tcp INLINE(MARK(2)):P eth0 - ; -p tcp
INLINE eth0 - tcp 22 ; -j MARK --set-mark 2 INLINE eth0 - tcp 22 ; -j MARK --set-mark 2
INLINE eth0 - ; -p tcp -j MARK --set-mark 2 INLINE eth0 - ; -p tcp -j MARK --set-mark 2
</programlisting> </programlisting>
<para>If INLINE_MATCHES=Yes in <ulink <para>If INLINE_MATCHES=Yes in <ulink
url="/manpages6/shorewall6.conf.html">shorewall6.conf</ulink>(5) url="/manpages/shorewall.conf.html">shorewall6.conf(5)</ulink>
then the third rule above can be specified as follows:</para> then the third rule above can be specified as follows:</para>
<programlisting>2:P eth0 - ; -p tcp</programlisting> <programlisting>MARK(2):P eth0 - ; -p tcp</programlisting>
</listitem> </listitem>
</varlistentry> </varlistentry>