From 15d95b6977707044fce3420a84f6ebe64d026df8 Mon Sep 17 00:00:00 2001 From: Tom Eastep Date: Sat, 26 Nov 2011 07:48:03 -0800 Subject: [PATCH] Fix SAME target. Signed-off-by: Tom Eastep --- Shorewall/Perl/Shorewall/Providers.pm | 38 ++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/Shorewall/Perl/Shorewall/Providers.pm b/Shorewall/Perl/Shorewall/Providers.pm index f2eb7fbef..77688522a 100644 --- a/Shorewall/Perl/Shorewall/Providers.pm +++ b/Shorewall/Perl/Shorewall/Providers.pm @@ -1406,17 +1406,29 @@ sub handle_stickiness( $ ) { for my $chainref ( $stickyref, $setstickyref ) { if ( $chainref->{name} eq 'sticky' ) { - $rule1 = $_; + $rule1 = {}; + + while ( my ( $key, $value ) = each %$_ ) { + $rule1->{$key} = $value; + } set_rule_target( $rule1, 'MARK', "--set-mark $mark" ); set_rule_option( $rule1, 'recent', "--name $list --update --seconds 300" ); - $rule2 = $_; + $rule2 = {}; + + while ( my ( $key, $value ) = each %$_ ) { + $rule2->{$key} = $value; + } clear_rule_target( $rule2 ); set_rule_option( $rule2, 'mark', "--mark 0/$mask -m recent --name $list --remove" ); } else { - $rule1 = $_; + $rule1 = {}; + + while ( my ( $key, $value ) = each %$_ ) { + $rule1->{$key} = $value; + } clear_rule_target( $rule1 ); set_rule_option( $rule1, 'mark', "--mark $mark\/$mask -m recent --name $list --set" ); @@ -1439,17 +1451,29 @@ sub handle_stickiness( $ ) { for my $chainref ( $stickoref, $setstickoref ) { if ( $chainref->{name} eq 'sticko' ) { - $rule1 = $_; + $rule1 = {}; + + while ( my ( $key, $value ) = each %$_ ) { + $rule1->{$key} = $value; + } set_rule_target( $rule1, 'MARK', "--set-mark $mark" ); - set_rule_option( $rule1, 'recent', " --name $list --rdest --update --seconds 300 -j MARK --set-mark $mark" ); + set_rule_option( $rule1, 'recent', " --name $list --rdest --update --seconds 300" ); - $rule2 = $_; + $rule2 = {}; + + while ( my ( $key, $value ) = each %$_ ) { + $rule2->{$key} = $value; + } clear_rule_target( $rule2 ); set_rule_option ( $rule2, 'mark', "--mark 0\/$mask -m recent --name $list --rdest --remove" ); } else { - $rule1 = $_; + $rule1 = {}; + + while ( my ( $key, $value ) = each %$_ ) { + $rule1->{$key} = $value; + } clear_rule_target( $rule1 ); set_rule_option ( $rule1, 'mark', "--mark $mark -m recent --name $list --rdest --set" );