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;
}
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
#
@ -702,6 +717,7 @@ sub fatal_error {
$log = undef;
}
cleanup;
confess " ERROR: @_$currentlineinfo" if $debug;
die " ERROR: @_$currentlineinfo\n";
}
@ -723,6 +739,7 @@ sub fatal_error1 {
$log = undef;
}
cleanup;
confess " ERROR: @_" if $debug;
die " ERROR: @_\n";
}
@ -1125,7 +1142,7 @@ sub create_temp_object( $$ ) {
( $file, $dir, $suffix ) = fileparse( $objectfile );
};
die if $@;
cleanup, die if $@;
fatal_error "$dir is a Symbolic Link" if -l $dir;
fatal_error "Directory $dir does not exist" unless -d _;
@ -1171,7 +1188,7 @@ sub create_temp_aux_config() {
( $object, $tempfile ) = tempfile ( 'tempfileXXXX' , DIR => $dir );
};
die if $@;
cleanup, die if $@;
}
#
@ -2440,7 +2457,8 @@ sub get_configuration( $ ) {
default 'ACCEPT_DEFAULT' , 'none';
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/ {
$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 IPSECFILE value ($config{IPSECFILE}" unless $config{IPSECFILE} eq 'zones';
$globals{MARKING_CHAIN} = $config{MARK_IN_FORWARD_CHAIN} ? 'tcfor' : 'tcpre';
@ -2483,7 +2500,7 @@ sub get_configuration( $ ) {
( $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;
} else {
@ -2658,18 +2675,7 @@ sub generate_aux_config() {
}
END {
#
# 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;
cleanup;
}
1;