#!/usr/bin/perl -w
#
# if_sndr_from.pl - $BI==q$-H/?.<T%"%I%l%9(B,
#                   $B$*$h$SK\J8Fb$N(B ``From:'' $B$N8e$m$N%"%I%l%9$,(B,
#                   $B0z?t$GM?$($i$l$?%"%I%l%9(B, $B$^$?$O%I%a%$%s(B
#                   $B$KEy$7$$$+H=CG$9$k(B.
#
# Copyright (C) 2003/11/07 Morikawa Yasuhiro <morikawa@ep.sci.hokudai.ac.jp>
#
#
# $B"#(B $B=q<0(B
#
#      ifsndr.pl  $B%"%I%l%9(B or $B%I%a%$%s(B [$B%"%I%l%9(B or $B%I%a%$%s(B...]
#
#
# $B"#(B $B@bL@(B
#
#      .qmail $B$+$i8F$S=P$5$l$?$P$"$$(B, $BI==q$-H/?.<T%"%I%l%9$O(B
#      $B4D6-JQ?t(B SENDER $B$GEO$5$l$k(B (qmail-command(8)).
#      $B$3$l$,0z?t$GM?$($i$l$?(B 1 $B$D0J>e$N%"%I%l%9$N$I$l$+$H(B
#      $BEy$7$1$l$P(B 0 $B$G=*N;$7(B, $B$I$l$H$bEy$7$/$J$1$l$P(B 100 $B$G=*N;$9$k(B.
#      $B%"%I%l%9Hf3S$N:]$K$O!$BgJ8;z>.J8;z$O6hJL$5$l$J$$(B.
#
#      $B$?$@$7(B, $BAw$i$l$FMh$k%a!<%k$KI,$:4D6-JQ?t(B SENDER $B$,;XDj(B
#      $B$5$l$F$$$k$H$O8B$i$J$$(B. $B$=$N>l9g$r9M$((B,
#      $BK\J8Cf$N(B From: $B9T$K=q$+$l$k%"%I%l%9$b(B,
#      $B0z?t$GM?$($i$l$?%"%I%l%9$HEy$7$$$+%A%'%C%/$9$k(B.
#
#      $B$J$*(B, $B0z?t$K!V(B@$B!WJ8;z$,F~$C$F$$$J$$>l9g(B, $B$=$l$O%I%a%$%s$H(B
#      $B8+$J$5$l$k(B. $B$3$N>l9g(B, $B0z?t$HAw?.<T%"%I%l%9$NFb$N(B
#      $B%I%a%$%s$H$,Hf3S$5$l(B, $BEy$7$1$l$P(B 0 $B$G=*N;$7(B,
#      $B$I$l$H$bEy$7$/$J$1$l$P(B 100 $B$G=*N;$9$k(B.
#      $B%I%a%$%sHf3S$N:]$K$O!$BgJ8;z>.J8;z$O6hJL$5$l$J$$(B.
#
#      $B%"%I%l%9$H%I%a%$%s$NF1;~;XDj$b2DG=$G$"$k(B.
#
#      $B"((B $BM>CL$@$,(B, $B4D6-JQ?t(B SENDER $B$O(B, $BBgDq$N%a!<%i!<$N>l9g$O(B,
#         From $B9T$K=q$+$l$k$Y$-Aw?.<T$N%"%I%l%9$,=q$+$l$k(B.
#         $B$7$+$7(B, sendmail $B%3%^%s%IEy$GD>@\Aw$i$l$k>l9g$O(B,
#         $B$=$N%7%9%F%`$,;}$D!V%I%a%$%sL>!W$rM?$($FMh$k$3$H$,$"$k(B.
#         ($BNc$($P(B, ep.sci.hokudai.ac.jp $B%I%a%$%s$r;}$D%^%7%s$+$i(B
#          $B%a!<%k$rAw$k$H(B, SENDER $B$K$O$=$N%I%a%$%s$,Aw$i$l$FMh$k(B).
#
#
# $B"#(B dot-qmail $B$NNc(B 1
#      ($BFCDj$NAw?.<T$N%a!<%k$r(B``$B<u$1<h$j$?$$(B''$B>l9g(B)
#
#      |/var/qmail/bin/condredirect hoge-allow /xxx/if_sndr_from.pl xxx@yyy.zzz xxxx.yyyy
#
#      $B$3$NNc$G$O!$I==q$-H/?.<T%"%I%l%9$*$h$S(B``From:''$B$N8e$K(B
#      $B=q$+$l$?%"%I%l%9$,(B xxx@yyy.zzz $B$"$k$$$O(B xxxx.yyyy $B%I%a%$%s(B
#      $B$@$C$?>l9g(B, hoge-allow $B$KE>Aw$5$l$k(B.
#
#      $BI==q$-H/?.<T%"%I%l%9$*$h$S(B``From:''$B$N8e$K=q$+$l$?(B
#      $B%"%I%l%9$,(B xxx@yyy.zzz $B$G$J$+$C$?$j(B, xxxx.yyyy $B%I%a%$%s$G(B
#      $B$J$+$C$?$P$"$$(B, $BG[Aw$5$l$J$$(B.
#
#      $B$3$l$O(B, $BFCDj$NAw?.<T$N%a!<%k$N$_$r5vMF$7$?$$>l9g$NJ}K!$G$"$k(B.
#
#      condredirect(1), qmail-command(8) $B$r;2>H$;$h!%(B
#
#
# $B"#(B dot-qmail $B$NNc(B 2
#      ($BFCDj$NAw?.<T$N%a!<%k$r(B``$BJL$N%"%I%l%9$XAw$k(B''$B>l9g(B)
#
#      |/var/qmail/bin/condredirect hoge-deny /xxx/if_sndr_from.pl xxx@yyy.zzz xxxx.yyyy
#      &hogehoge@xxxxx.zz
#
#      $B$3$NNc$G$O!$I==q$-H/?.<T%"%I%l%9$*$h$S(B``From:''$B$N8e$K(B
#      $B=q$+$l$?%"%I%l%9$,(B xxx@yyy.zzz $B$"$k$$$O(B xxxx@yyyy.zzzz $B%I%a%$%s(B
#      $B$@$C$?$P$"$$(B, hoge-deny $B$KE>Aw$5$l$k(B.
#
#      $BI==q$-H/?.<T%"%I%l%9$*$h$S(B``From:''$B$N8e$K=q$+$l$?(B
#      $B%"%I%l%9$,(B xxx@yyy.zzz $B$G$J$+$C$?$j(B, xxxx.yyyy $B%I%a%$%s$G(B
#      $B$J$+$C$?>l9g(B, $B<!$N9T$NG[AwL?Na$,FI$^$l(B,
#      $B%a!<%k$O(B hogehoge@xxxxx.zz $B$XE>Aw$5$l$k(B.
#
#      $B$3$l$O(B, $BFCDj$NAw?.<T$N%a!<%k$N$_$rGS=|$7$?$$>l9g$NJ}K!$G$"$k(B.
#      $B$=$N>l9g(B, hoge-deny $B$O$=$N$?$a$N%"%+%&%s%H$H$$$&$3$H$K$J$k(B.
#
#      condredirect(1), qmail-command(8) $B$r;2>H$;$h!%(B
#
#
# $B"#(B $B<U0U(B
#
#      $B$3$N%W%m%0%i%`$O(B Kyoma TAKAHASHI $B$5$s$K$h$j:n$i$l$?(B
#      ifsndr.pl <http://www.kyoma.net/tech/qmail/dot-qmail/ifsndr.html>
#      $B$r;29M$K:n@.$7$?$b$N$G$"$k(B.
#
#

#
# strict - $B0BA4$G$O$J$$%3%s%9%H%i%/%H$r@)8B$9$k(B Perl $B%W%i%0%^(B
#
use strict ;

#
# $B0z?t$r(B @denylist $B$X(B
#
my (@denylist) = @ARGV ;

#
# SENDER $B%"%I%l%9$r(B @senderev $B$X(B
#
my @senderev = ($ENV{'SENDER'}) ;

#
# SENDER $B%"%I%l%9$K2C$((B,
# $BK\J8Fb$N(B From: $B9T$N8e$m$r<h$j=P$7(B,
# @senderev $B$K2C$($k(B.
#
while (<STDIN>) {
    # $B:G8e$N2~9T$r:o=|(B
    chomp ($_);
    #
    # $B9TF,$K(B from: ($BBgJ8;z(B, $B>.J8;zN>J}2D(B) $B$,$D$$$F$$$k(B
    # $B9T$N(B, from:($B%9%Z!<%9(B) $B$h$j8e$m$NJ8;zNs$r<h$j=P$7(B,
    # @senderev $BG[Ns$N8e$m$K2C$($k(B.
    #
    if ($_ =~ /^from:\s*(\S+)/i) {
	push(@senderev, $1) ;
    }
    print;         # $_ $B$r$=$N$^$^(B print
    print "\n";    # chomp $B$G<h$j=|$$$?2~9T$rI|5"(B
}
print <STDIN>;     # $BI8=`F~NO$KJ8;zNs$rJV$9(B

#
# @senderev $B$NCf?H$r>.J8;z$K(B.
#
my $send;
my @senderev_lowcase;
foreach $send (@senderev) {
    $send =~ tr/A-Z/a-z/ ;       # $B>.J8;z$K(B
    push(@senderev_lowcase, $send) ;
}
@senderev = @senderev_lowcase;


#
# @senderev $B$N$I$l$+$,(B @denylist $B$N$I$l$+$H%R%C%H$9$k$+%A%'%C%/(B
#      1. $B%R%C%H$7$?$i%3!<%I(B 0 $B$rJV$9(B
#      2. $B%R%C%H$7$J$+$C$?$i%3!<%I(B 100 $B$rJV$9(B
#
my $add ;
my @domain ;
foreach $add (@denylist) {
    $add =~ tr/A-Z/a-z/ ;       # $B>.J8;z$K(B
    #
    # $add (@denylist $B$N(B1$B$D(B) $BFb$K!V(B@$B!W$,L5$$>l9g$O(B,
    # $B%I%a%$%sIt$r%A%'%C%/$9$k$h$&$K$9$k(B.
    #
    if ($add !~ /@/){
	foreach $send (@senderev) {
	    @domain = split(/@/, $send, 2);
	    if ( $add eq $domain[1] ) {
	        exit 0 ;
	    }
	}
    } else {
	#
	# $B!V(B@$B!W$,$"$k(B, $B$D$^$j%a!<%k%"%I%l%9$G$"$k>l9g(B,
	# $B%"%I%l%9A4BN$r$r%A%'%C%/$9$k$h$&$K$9$k(B.
	#
	foreach $send (@senderev) {
	    if ( $add eq $send ) {
		exit 0 ;
	    }
	}
    }
}
exit 100 ;
