Make cleanup after error explicit

This commit is contained in:
Tom Eastep 2009-08-26 10:34:04 -07:00
parent db803807a7
commit 52dfd5b259

View File

@ -679,6 +679,21 @@ sub warning_message
$| = 0; $| = 0;
} }
sub cleanup() {
#
# Close files first in case we're running under Cygwin
#
close $object if $object;
close $scriptfile if $scriptfile;
close $log if $log;
#
# Unlink temporary files
#
unlink $tempfile if $tempfile;
unlink $scriptfilename if $scriptfilename;
unlink $_ for @tempfiles;
}
# #
# Issue fatal error message and die # Issue fatal error message and die
# #
@ -702,6 +717,7 @@ sub fatal_error {
$log = undef; $log = undef;
} }
cleanup;
confess " ERROR: @_$currentlineinfo" if $debug; confess " ERROR: @_$currentlineinfo" if $debug;
die " ERROR: @_$currentlineinfo\n"; die " ERROR: @_$currentlineinfo\n";
} }
@ -723,6 +739,7 @@ sub fatal_error1 {
$log = undef; $log = undef;
} }
cleanup;
confess " ERROR: @_" if $debug; confess " ERROR: @_" if $debug;
die " ERROR: @_\n"; die " ERROR: @_\n";
} }
@ -1125,7 +1142,7 @@ sub create_temp_object( $$ ) {
( $file, $dir, $suffix ) = fileparse( $objectfile ); ( $file, $dir, $suffix ) = fileparse( $objectfile );
}; };
die if $@; cleanup, die if $@;
fatal_error "$dir is a Symbolic Link" if -l $dir; fatal_error "$dir is a Symbolic Link" if -l $dir;
fatal_error "Directory $dir does not exist" unless -d _; fatal_error "Directory $dir does not exist" unless -d _;
@ -1171,7 +1188,7 @@ sub create_temp_aux_config() {
( $object, $tempfile ) = tempfile ( 'tempfileXXXX' , DIR => $dir ); ( $object, $tempfile ) = tempfile ( 'tempfileXXXX' , DIR => $dir );
}; };
die if $@; cleanup, die if $@;
} }
# #
@ -2440,7 +2457,8 @@ sub get_configuration( $ ) {
default 'ACCEPT_DEFAULT' , 'none'; default 'ACCEPT_DEFAULT' , 'none';
default 'OPTIMIZE' , 0; default 'OPTIMIZE' , 0;
fatal_error 'IPSECFILE=ipsec is not supported by Shorewall ' . $globals{VERSION} unless $config{IPSECFILE} eq 'zones'; fatal_error 'IPSECFILE=ipsec is not supported by Shorewall ' . $globals{VERSION} if $config{IPSECFILE} eq 'ipsec';
fatal_error "Invalid IPSECFILE value ($config{IPSECFILE}" unless $config{IPSECFILE} eq 'zones';
for my $default qw/DROP_DEFAULT REJECT_DEFAULT QUEUE_DEFAULT NFQUEUE_DEFAULT ACCEPT_DEFAULT/ { for my $default qw/DROP_DEFAULT REJECT_DEFAULT QUEUE_DEFAULT NFQUEUE_DEFAULT ACCEPT_DEFAULT/ {
$config{$default} = 'none' if "\L$config{$default}" eq 'none'; $config{$default} = 'none' if "\L$config{$default}" eq 'none';
@ -2450,7 +2468,6 @@ sub get_configuration( $ ) {
fatal_error "Invalid OPTIMIZE value ($val)" unless ( $val eq '0' ) || ( $val eq '1' ); fatal_error "Invalid OPTIMIZE value ($val)" unless ( $val eq '0' ) || ( $val eq '1' );
fatal_error "Invalid IPSECFILE value ($config{IPSECFILE}" unless $config{IPSECFILE} eq 'zones';
$globals{MARKING_CHAIN} = $config{MARK_IN_FORWARD_CHAIN} ? 'tcfor' : 'tcpre'; $globals{MARKING_CHAIN} = $config{MARK_IN_FORWARD_CHAIN} ? 'tcfor' : 'tcpre';
@ -2483,7 +2500,7 @@ sub get_configuration( $ ) {
( $file, $dir, $suffix ) = fileparse( $config{LOCKFILE} ); ( $file, $dir, $suffix ) = fileparse( $config{LOCKFILE} );
}; };
die $@ if $@; cleanup, die $@ if $@;
fatal_error "LOCKFILE=$config{LOCKFILE}: Directory $dir does not exist" unless $export or -d $dir; fatal_error "LOCKFILE=$config{LOCKFILE}: Directory $dir does not exist" unless $export or -d $dir;
} else { } else {
@ -2658,18 +2675,7 @@ sub generate_aux_config() {
} }
END { END {
# cleanup;
# Close files first in case we're running under Cygwin
#
close $object if $object;
close $scriptfile if $scriptfile;
close $log if $log;
#
# Unlink temporary files
#
unlink $tempfile if $tempfile;
unlink $scriptfilename if $scriptfilename;
unlink $_ for @tempfiles;
} }
1; 1;