From f1d1ab64119c8a803c4ddd2ed62fa6a683b48bae Mon Sep 17 00:00:00 2001 From: Tom Eastep Date: Tue, 7 Mar 2017 10:33:20 -0800 Subject: [PATCH] Implement tcp:!syn in PROTO column Signed-off-by: Tom Eastep --- Shorewall/Perl/Shorewall/Chains.pm | 5 +++-- Shorewall/Perl/Shorewall/IPAddrs.pm | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Shorewall/Perl/Shorewall/Chains.pm b/Shorewall/Perl/Shorewall/Chains.pm index 1f4067533..9de4ed8fd 100644 --- a/Shorewall/Perl/Shorewall/Chains.pm +++ b/Shorewall/Perl/Shorewall/Chains.pm @@ -4556,7 +4556,8 @@ sub do_proto( $$$;$ ) if ( $proto ne '' ) { - my $synonly = ( $proto =~ s/:syn$//i ); + my $synonly = ( $proto =~ s/:(!)?syn$//i ); + my $notsyn = $1; my $invert = ( $proto =~ s/^!// ? '! ' : '' ); my $protonum = resolve_proto $proto; @@ -4574,7 +4575,7 @@ sub do_proto( $$$;$ ) $output = "${invert}-p ${proto} "; } else { fatal_error '":syn" is only allowed with tcp' unless $proto == TCP && ! $invert; - $output = "-p $proto --syn "; + $output = $notsyn ? "-p $proto ! --syn" : "-p $proto --syn "; } fatal_error "SOURCE/DEST PORT(S) not allowed with PROTO !$pname" if $invert && ($ports ne '' || $sports ne ''); diff --git a/Shorewall/Perl/Shorewall/IPAddrs.pm b/Shorewall/Perl/Shorewall/IPAddrs.pm index 0b246411c..4a1cd3932 100644 --- a/Shorewall/Perl/Shorewall/IPAddrs.pm +++ b/Shorewall/Perl/Shorewall/IPAddrs.pm @@ -389,6 +389,8 @@ sub resolve_proto( $ ) { my $proto = $_[0]; my $number; + $proto =~ s/:.*//; + if ( $proto =~ /^\d+$/ || $proto =~ /^0x/ ) { $number = numeric_value ( $proto ); defined $number && $number <= 255 ? $number : undef;