Randomphrase.pl
- !/usr/bin/perl -w
use strict; use Sys::Syslog qw(:DEFAULT setlogsock);
sub PipeHandler {
syslog('mail|err',"Error: Mailer Pipe interrupted");
}
my $UID=4000;
my $ENV_FROM="";
my $FROM="fortune\@example.de";
my $RANDTXT=`/usr/games/fortune`;
my $INFOTEXT="Subject: Verdict of the minute is...
From: $FROM
$RANDTXT
"; my $MAILBIN = "/usr/sbin/sendmail"; my @MAILOPTS = ("-oi", "-tr", "$ENV_FROM"); my $SELF = "randomphrase.pl";
my $EX_TEMPFAIL = 75; my $EX_UNAVAILABLE = 69; my $EX_OK = 0; my $sender; my $euid = $>;
$SIG{PIPE} = \&PipeHandler,
setlogsock('unix'); openlog($SELF, 'ndelay,pid', 'user');
- Umgebung prüfen
if ( $euid != $UID ) {
syslog('mail|err',"Fehler: ungültige UID: $>"); exit($EX_TEMPFAIL);
} if ( @ARGV != 1 ) {
syslog('mail|err',"Fehler: ungültiger Aufruf (Argument erwartet)"); exit($EX_TEMPFAIL);
} else {
$sender = $ARGV[0]; if ( $sender =~ /([\w\-.%]+\@[\w.-]+)/ ) { $sender = $1; } else { syslog('mail|err', "Fehler: Illegale Senderadresse"); exit($EX_UNAVAILABLE); }
}
if (! -x $MAILBIN ) {
syslog('mail|err', "Fehler: $MAILBIN nicht gefunden oder nicht ausführbar"); exit($EX_TEMPFAIL);
}
if ( $sender eq "" || $sender =~ /here_you_can_define_an_exception\@/ ) {
exit($EX_OK);
}
- Precedence Header (?)
while (<STDIN>) {
last if (/^$/); exit ($EX_OK) if (/^precedence:\s+(bulk|list|junk)/i);
}
my $pid = open(MAIL, "|-") || exec("$MAILBIN", @MAILOPTS);
- Antwort senden
print MAIL "To: $sender\n"; print MAIL "$INFOTEXT";
if ( ! close(MAIL) ) {
syslog('mail|err',"Fehler: Konnte $MAILBIN nicht aufrufen: %m"); exit($EX_UNAVAILABLE);
}
syslog('mail|info', "Sent reply to $sender"); system("sudo /usr/local/bin/deliver_mail.sh"); sleep 3; exit($EX_OK);