Convert the Accounting and Actions modules to use the new INCLUDE-aware file read routines

git-svn-id: https://shorewall.svn.sourceforge.net/svnroot/shorewall/trunk@5743 fbd18981-670d-0410-9b5c-8dc0c1a9a2bb
This commit is contained in:
teastep 2007-03-29 15:47:47 +00:00
parent de26cbb9a1
commit 2de234316b
4 changed files with 57 additions and 32 deletions

View File

@ -110,17 +110,15 @@ sub process_accounting_rule( $$$$$$$$ ) {
sub setup_accounting() { sub setup_accounting() {
open ACC, "$ENV{TMP_DIR}/accounting" or fatal_error "Unable to open stripped accounting file: $!"; open_file 'accounting';
while ( $line = <ACC> ) { while ( read_a_line ) {
my ( $action, $chain, $source, $dest, $proto, $ports, $sports, $user ) = split_line 8, 'Accounting File'; my ( $action, $chain, $source, $dest, $proto, $ports, $sports, $user ) = split_line 8, 'Accounting File';
process_accounting_rule $action, $chain, $source, $dest, $proto, $ports, $sports, $user; process_accounting_rule $action, $chain, $source, $dest, $proto, $ports, $sports, $user;
} }
close ACC;
if ( $filter_table->{accounting} ) { if ( $filter_table->{accounting} ) {
for my $chain qw/INPUT FORWARD OUTPUT/ { for my $chain qw/INPUT FORWARD OUTPUT/ {
insert_rule $filter_table->{$chain}, 1, '-j accounting'; insert_rule $filter_table->{$chain}, 1, '-j accounting';

View File

@ -243,11 +243,11 @@ sub process_actions1() {
for my $act ( grep $targets{$_} & ACTION , keys %targets ) { for my $act ( grep $targets{$_} & ACTION , keys %targets ) {
new_action $act; new_action $act;
} }
for my $file ( qw/actions.std actions/ ) {
open_file $file;
for my $file qw/actions.std actions/ { while ( read_a_line ) {
open F, "$ENV{TMP_DIR}/$file" or fatal_error "Unable to open stripped $file file: $!";
while ( $line = <F> ) {
my ( $action ) = split_line 1, 'action file'; my ( $action ) = split_line 1, 'action file';
if ( $action =~ /:/ ) { if ( $action =~ /:/ ) {
@ -274,13 +274,9 @@ sub process_actions1() {
progress_message2 " Pre-processing $actionfile..."; progress_message2 " Pre-processing $actionfile...";
open A, $actionfile or fatal_error "Unable to open $actionfile: $!"; push_open( $actionfile );
while ( $line = <A> ) { while ( read_a_line ) {
chomp $line;
next if $line =~ /^\s*#/;
next if $line =~ /^\s*$/;
$line =~ s/#.*$//;
my ($wholetarget, $source, $dest, $proto, $ports, $sports, $rate, $users ) = split_line 8, 'action file'; my ($wholetarget, $source, $dest, $proto, $ports, $sports, $rate, $users ) = split_line 8, 'action file';
@ -304,13 +300,9 @@ sub process_actions1() {
progress_message " ..Expanding Macro $macrofile..."; progress_message " ..Expanding Macro $macrofile...";
open M, $macrofile or fatal_error "Unable to open $macrofile: $!"; push_open( $macrofile );
while ( $line = <M> ) {
next if $line =~ /^\s*#/;
$line =~ s/#.*$//;
next if $line =~ /^\s*$/;
while ( read_a_line ) {
my ( $mtarget, $msource, $mdest, $mproto, $mports, $msports, $ mrate, $muser ) = split_line 8, 'macro file'; my ( $mtarget, $msource, $mdest, $mproto, $mports, $msports, $ mrate, $muser ) = split_line 8, 'macro file';
$mtarget =~ s/:.*$//; $mtarget =~ s/:.*$//;
@ -324,15 +316,16 @@ sub process_actions1() {
} }
progress_message " ..End Macro"; progress_message " ..End Macro";
close M;
pop_open;
} else { } else {
fatal_error "Invalid TARGET ($target) in rule \"$line\""; fatal_error "Invalid TARGET ($target) in rule \"$line\"";
} }
} }
} }
close A;
pop_open;
} }
close F;
} }
} }

View File

@ -28,7 +28,11 @@ use warnings;
use Shorewall::Common; use Shorewall::Common;
our @ISA = qw(Exporter); our @ISA = qw(Exporter);
our @EXPORT = qw(find_file our @EXPORT = ( qw(find_file
open_file
push_open
pop_open
read_a_line
expand_shell_variables expand_shell_variables
get_configuration get_configuration
require_capability require_capability
@ -40,7 +44,7 @@ our @EXPORT = qw(find_file
%config %config
%env %env
%capabilities ); %capabilities ) );
our @EXPORT_OK = (); our @EXPORT_OK = ();
our @VERSION = 1.00; our @VERSION = 1.00;
@ -283,8 +287,42 @@ sub expand_shell_variables( $ ) {
my @openstack; my @openstack;
my $currentfile; my $currentfile;
#
# Open a file, setting $currentfile.
#
sub open_file( $ ) {
my $fname = find_file $_[0];
fatal_error 'Internal Error in open_file()' if defined $currentfile;
if ( -f $fname ) {
open $currentfile, '<', $fname or fatal_error "Unable to open $fname: $!";
}
}
#
# Allow nested opens
#
my @pushstack;
sub push_open( $ ) {
push @openstack, $currentfile;
my @a = @openstack;
push @pushstack, \@a;
@openstack = ();
$currentfile = undef;
open_file( $_[0] );
}
sub pop_open() {
@openstack = @{pop @pushstack};
$currentfile = pop @openstack;
}
sub read_a_line { sub read_a_line {
while ( 1 ) { while ( $currentfile ) {
while ( $line = <$currentfile> ) { while ( $line = <$currentfile> ) {
next if $line =~ /^\s*#/; next if $line =~ /^\s*#/;
next if $line =~ /^\s*$/; next if $line =~ /^\s*$/;
@ -322,8 +360,6 @@ sub read_a_line {
close $currentfile; close $currentfile;
return 0 unless @openstack;
$currentfile = pop @openstack; $currentfile = pop @openstack;
} }
} }

View File

@ -180,9 +180,9 @@ sub determine_zones()
{ {
my @z; my @z;
open ZONES, "$ENV{TMP_DIR}/zones" or fatal_error "Unable to open stripped zones file: $!"; open_file 'zones';
while ( $line = <ZONES> ) { while ( read_a_line ) {
my @parents; my @parents;
@ -244,8 +244,6 @@ sub determine_zones()
push @z, $zone; push @z, $zone;
} }
close ZONES;
my $pushed = 1; my $pushed = 1;
my %ordered; my %ordered;