freebsd-dev/gnu/libexec/uucp/contrib/uureroute
1993-08-05 18:28:27 +00:00

92 lines
2.1 KiB
Perl
Executable File

#!/usr/local/bin/perl
eval ' exec /usr/local/bin/perl $0 "$@" '
if $running_under_some_shell;
# From a script by <Bill.Campbell@celestial.com>
# Newsgroups: comp.sources.misc
# Subject: v28i073: uureroute - Reroute HDB queued mail, Part01/01
# Date: 26 Feb 92 02:28:37 GMT
#
# This is a Honey DanBer specific routine written in perl to reroute all
# mail queued up for a specific host. It needs to be run as "root" since
# uucp will not allow itself to remove others requests.
#
# Revision *** 92/21/09: Francois Pinard <pinard@iro.umontreal.ca>
# 1. adapted for Taylor UUCP
#
# Revision 1.3 91/10/08 09:01:21 src
# 1. Rewritten in perl
# 2. Add -v option for debugging.
#
# Revision 1.2 91/10/07 23:57:42 root
# 1. Fix mail program path.
# 2. Truncate directory name to 7 characters
($progname = $0) =~ s!.*/!!; # save this very early
$USAGE = "
# Reroute uucp mail
#
# Usage: $progname [-v] host [host...]
#
# Options Argument Description
# -v Verbose (doesn't execute /bin/sh)
#
";
$UUSTAT = "/usr/local/bin/uustat";
$SHELL = "/bin/sh";
$SMAIL = "/bin/smail";
sub usage
{
die join ("\n", @_) . "\n$USAGE\n";
}
do "getopts.pl";
&usage ("Invalid Option") unless do Getopts ("vV");
$verbose = ($opt_v ? '-v' : ());
$suffix = ($verbose ? '' : $$);
&usage ("No system specified") if $#ARGV < 0;
if (!$verbose)
{
open (SHELL, "| $SHELL");
select SHELL;
}
while ($system = shift)
{
$sysprefix = substr ($system, 0, 7);
$directory = "/usr/spool/uucp/$sysprefix";
open (UUSTAT, "$UUSTAT -s $system -c rmail |");
print "set -ex\n";
while (<UUSTAT>)
{
($jobid, ) = split;
($cfile) = substr ($jobid, length ($jobid) - 5);
$cfilename = "$directory/C./C.$cfile";
open (CFILE, $cfilename) || die "Cannot open $cfilename\n";
$_ = <CFILE>;
close CFILE;
if (/^E D\.(....) [^ ]+ [^ ]+ -CR D\.\1 0666 [^ ]+ 0 rmail (.*)/)
{
$datafile = "$directory/D./D.$1";
$address = $2;
}
else
{
print STDERR;
die "Cannot parse previous line from $cfilename\n";
}
print "$SMAIL -R $system!$address < $datafile && $UUSTAT -k $jobid\n";
}
close UUSTAT;
}
close SHELL unless $verbose;
exit 0;