#! /usr/bin/perl -w require "pklib.pl"; $SIG{INT} = \&cleanup; $SIG{TERM} = \&cleanup; my @keys = qw(buncha keys go here); my $lock = create_lock(@keys); $pd = init_state(); fw_log_on(); while (1) { scan_in($lock); if ( $pd->{'unlocked'} ) { ( poke_fw() ) && ( allow_host() ) && ( launch_sshd() ); if ($pd->{'poked'}) { unpoke_fw(); unallow_host(); } ( $pd->{'src'}, $pd->{'unlocked'}, $pd->{'src_ip'} ) = ''; } } sub cleanup { my $signame = shift; print "caught SIG$signame, cleaning up.\n"; ( $pd->{'logging'} ) && logdown(); ( $pd->{'poked'} ) && unpoke_fw(); ( $pd->{'h_allow'} ) && unallow_host(); ($tail) && kill 'TERM' => $tail; die "Cleaned up and bailing.\n"; }