Randomphrase.pl

From Linuxwiki
Revision as of 18:01, 25 March 2023 by Sunflower (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
#!/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);