#!/usr/bin/perl -w

#####
#
# vacation - Programm zum automatischen beantworten von engehenden eMails
#
# * needs $HOME/.vacation.msg (mailheader and body as text without To:-Line)
# * syntax: $HOME/.forward: |/usr/bin/vacation <loginname>
# * installation: $ touch /var/log/vacation.log; chmod 666 /var/log/vacation.log
# * Copyright: Achim Schmidt, schmidt@waaf.net 2002-06-05 
# * Changes: 2002-06-11: Mail with Precedence bulk isn'treplied any more
#
#####

my ($pat, $user, $homedir, $a, $mail_in, $pat_from1, $pat_from2, $mail_emp, $mail_body, $tmp, $logfile, $sendmail, $pat_bulk);

$logfile = "/var/log/vacation.log";
$sendmail = "/usr/lib/sendmail";


$user = $ARGV[0];


while (<STDIN>) {
    $mail_in .= $_;
}

sub logzeile {
        my ($logfile, $text) = @_;
        my ($se, $mi, $st, $mo, $mt, $ja, $wt, $jt, $sz) = localtime(time);
        $mt+=1; $ja+=1900; $jt+=1;
        $mt = $mt < 10 ? $mt = "0".$mt : $mt;
        $mo = $mo < 10 ? $mo = "0".$mo : $mo;
        $st = $st < 10 ? $st = "0".$st : $st;
        $mi = $mi < 10 ? $mi = "0".$mi : $mi;
        $se = $se < 10 ? $se = "0".$se : $se;
        my ($auszeit) = "$ja-$mt-$mo $st:$mi:$se";
        my ($ruck) = "$auszeit | $text\n";
        open(LOGG1, ">>$logfile");
                print LOGG1 "$ruck";
        close(LOGG1);
}

$pat = "\n$user:(.*):(.*):(.*):(.*):(.*):(.*)";
$pat_from1 = 'From:(.*)\n';
$pat_from2 = 'Return-Path:(.*)\n';
$pat_bulk = 'Precedence: bulk';

if(! $user){ die "syntax: $0 benutzername\n";}


open(DATEI, "</etc/passwd");
        while (<DATEI>) {
            $a .= $_;
        }
close(DATEI);

if($a =~ /$pat/){
        $homedir = $5;

        if($mail_in =~ /$pat_from2/){
                $mail_empf = $1;
        } else {

                if($mail_in =~ /$pat_from1/){
                        $mail_empf = $1;
                }

        }

        if($mail_in =~ /$pat_bulk/){
                logzeile("$logfile", "vacation Loop: '$user' gegen '$mail_empf'!");
                exit 0;
        }

        if(! $mail_empf){
                logzeile("$logfile", ".vacation.msg für '$user' in '$tmp' nicht gefunden!");
                exit 0;
        }

        $tmp = "$homedir/.vacation.msg";
        if( stat($tmp) ){

        open(DATEI2, "<$tmp");
                while (<DATEI2>) {
                    $mail_body .= $_;
                }
        close(DATEI2);


                open(MAIL,"|$sendmail -t") || die;
                        print MAIL "To: $mail_empf\n$mail_body\n";
                close(MAIL);

                logzeile("$logfile", "'$user' -> $mail_empf");

                exit 0;

        } else {
                logzeile("$logfile", ".vacation.msg für '$user' in '$tmp' nicht gefunden!");
                exit 0;
        }

} else {

        logzeile("$logfile", "Benutzer '$user' in '/etc/passwd' nicht gefunden!");
        exit 0;
}
exit 0;
