Add delete_reference() function.

Signed-off-by: Tom Eastep <teastep@shorewall.net>
This commit is contained in:
Tom Eastep 2010-09-19 08:28:29 -07:00
parent 9ba82bec1f
commit 35a686eaa1

View File

@ -604,6 +604,17 @@ sub add_reference ( $$ ) {
$toref->{references}{$fromref->{name}}++; $toref->{references}{$fromref->{name}}++;
} }
#
# Delete a previously added reference
#
sub delete_reference( $$ ) {
my ( $fromref, $to ) = @_;
my $toref = reftype $to ? $to : $chain_table{$fromref->{table}}{$to};
delete $toref->{references}{$fromref->{name}} unless --$toref->{references}{$fromref->{name}} > 0;
}
# #
# Insert a rule into a chain. Arguments are: # Insert a rule into a chain. Arguments are:
# #
@ -612,7 +623,7 @@ sub add_reference ( $$ ) {
# In the first function, the rule number is zero-relative. In the second function, # In the first function, the rule number is zero-relative. In the second function,
# the rule number is one-relative. In the first function, if the rule number is < 0, then # the rule number is one-relative. In the first function, if the rule number is < 0, then
# the rule is a jump to a blacklist chain (blacklst or blackout). The rule will be # the rule is a jump to a blacklist chain (blacklst or blackout). The rule will be
# inserted at the front of the chain and the chain's 'blacklist' member is incremented. # inserted at the front of the chain and the chain's 'blacklist' member incremented.
# #
sub insert_rule1($$$) sub insert_rule1($$$)
{ {
@ -773,7 +784,7 @@ sub copy_rules( $$ ) {
assert( $chainb =~ /^black/ ); assert( $chainb =~ /^black/ );
delete $tableref->{$chainb}{references}{$name1} unless --$tableref->{$chainb}{references}{$name1} > 0; delete_reference $chain1, $chainb;
assert( ! --$chain1->{blacklist} ); assert( ! --$chain1->{blacklist} );
$blacklist1 = 0; $blacklist1 = 0;
@ -3744,7 +3755,7 @@ sub promote_blacklist_rules() {
if ( $copied ) { if ( $copied ) {
shift @{$chain1ref->{rules}}; shift @{$chain1ref->{rules}};
$chain1ref->{blacklist} = 0; $chain1ref->{blacklist} = 0;
delete $chainbref->{references}{$chain1} unless --$chainbref->{references}{$chain1} > 0; delete_reference $chain1ref, $chainbref;
$promoted = 1; $promoted = 1;
} }
} }