📄 00000001.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: is (天啦~~~~), 信区: Linux <BR>标 题: MAILShell.pl <BR>发信站: BBS 水木清华站 (Sun Apr 11 09:29:00 1999) <BR> <BR>#!/usr/bin/perl <BR> <BR>$GPG="/usr/bin/gpg"; <BR>$BASE="/root/MS"; <BR>$SENDMAIL="/usr/sbin/sendmail"; <BR>$passphrase="TTTTTTT"; <BR>$From="MAIL-COMMANDER\<A HREF="mailto:@aha.isee.za.net";">@aha.isee.za.net";</A> <BR>$LocalUser="MAIL-COMMANDER"; <BR>$sigs{"Yu Xin"}="8FF51D498C67273D68BBD3E1760DCC1279184EC1"; <BR> <BR> <BR># Read Key ID from gpg's result <BR>sub GetSIG() <BR>{ <BR> my($input,$sig); <BR> open(in,"<".$_[0]); <BR> <BR> while($input=<in>) <BR> { <BR> chop($input); <BR> <BR> if($input=~/^\[GNUPG:\]\sVALIDSIG\s[1234567890ABCDEF]*$/) <BR> { <BR> ($sig)=$input=~/^\[GNUPG:\]\sVALIDSIG\s([1234567890ABCDEF]*)$/; <BR> return $sig; <BR> } <BR> } <BR> return "NONE"; <BR>} <BR> <BR># Decrypt Mail <BR># id.orig gnupg source file <BR># id.status gnupg running status <BR># id.output gnupg output <BR>sub DecryptMail() <BR>{ <BR> my($id)=$_[0]; <BR> my($cmds); <BR> my($returncode); <BR> <BR> $id=$BASE."/".$id; <BR> # Create GnuPG command line <BR> $cmds="|".$GPG." --batch --passphrase-fd 0 --status-fd 1" <BR> ." --yes --output ".$id.".output --decrypt ".$id.".orig > ". <BR> $id.".status 2> /dev/null"; <BR> <BR> # input passphrase <BR> open(out,$cmds); <BR> print out $passphrase; <BR> close(out); <BR> <BR> # check exit code <BR> $returncode=$?>>8; <BR> if($returncode!=0) <BR> { <BR> unlink($id.".output"); <BR> unlink($id.".orig"); <BR> unlink($id.".status"); <BR> } <BR> return $returncode; <BR>} <BR> <BR># Create proc id <BR> <BR>$curtime=time(); <BR>$id=sprintf("%010d.%05d",$curtime,$$); <BR>$ReplyTo="me\<A HREF="mailto:@isee.za.net";">@isee.za.net";</A> <BR>$tmp=$BASE."/".$id; <BR> <BR># Read mail from stdin and save in temp file <BR>$orig=$tmp.".orig"; <BR> <BR>open(out,">".$orig); <BR>$status=0; <BR>while($input=<STDIN>) <BR>{ <BR> print out $input; <BR> <BR> # Get mail from address <BR> if($input=~/Reply-To:/ && status==0) <BR> { <BR> chop($input); <BR> ($ReplyTo)=$input=~/^Reply-To:\s*(.+)/; <BR> $status=1; <BR> } <BR>} <BR>close(out); <BR> <BR> <BR># Call DecryptMail <BR>$exitcode=&DecryptMail($id); <BR> <BR>if($exitcode!=0) <BR>{ <BR> exit 0; <BR>} <BR> <BR>$sig=&GetSIG($tmp.".status"); <BR> <BR>$status=0; <BR>foreach $i (keys(%sigs)) <BR>{ <BR> if($sigs{$i} eq $sig) <BR> { <BR> $status=1; <BR> $user=$i; <BR> last; <BR> } <BR>} <BR> <BR>if($status==0) <BR>{ <BR> unlink($orig); <BR> exit 0; <BR>} <BR> <BR>$script=$tmp.".output"; <BR>chmod(0700,$script); <BR> <BR>system($script." > ".$tmp.".stdout"." 2> ".$tmp.".stderr"); <BR> <BR>open(out,">".$tmp.".reply"); <BR>print out "### Start #################################################\n\n"; <BR>print out " ID : $id\n"; <BR>print out " Reply-To : $ReplyTo\n"; <BR>print out " User : $user\n"; <BR>print out " SIG : $sigs{$user}\n"; <BR>print out "\n"; <BR> <BR>print out "\n### Script #################################################\n\n"; <BR>open(in,"<".$script); <BR>while($input=<in>) <BR>{ <BR> print out $input; <BR>} <BR>close(in); <BR> <BR>print out "\n### STDOUT #################################################\n\n"; <BR>open(in,"<".$tmp.".stdout"); <BR>while($input=<in>) <BR>{ <BR> print out $input; <BR>} <BR>close(in); <BR> <BR>print out "\n### STDERR #################################################\n\n"; <BR>open(in,"<".$tmp.".stderr"); <BR>while($input=<in>) <BR>{ <BR> print out $input; <BR>} <BR>close(in); <BR>print out "\n### END ####################################################\n"; <BR>close(out); <BR> <BR>#Encrypt and sign out mail <BR>$cmd="|".$GPG." --batch -a -e -u \"".$LocalUser. <BR> "\" -s --yes --passphrase 0 --output ". <BR> $tmp.".sendout -r \"".$user."\" ". <BR> $tmp.".reply >/dev/null 2>/dev/null"; <BR> <BR>print $cmd,"\n"; <BR>open(out,$cmd); <BR>print out $passphrase; <BR>close(out); <BR> <BR>$cmd="|".$SENDMAIL." -t -f".$From; <BR>open(out,$cmd); <BR>print out "From: $From\n"; <BR>print out "To: $ReplyTo\n"; <BR>print out "Subject: [$id] Result\n"; <BR>print out "Reply-To: $ReplyTo\n\n"; <BR> <BR>open(in,"<".$tmp.".sendout"); <BR>while($input=<in>) <BR>{ <BR> print out $input; <BR>} <BR>close(out); <BR>close(in); <BR> <BR># clean file <BR> <BR>unlink($tmp.".orig"); <BR>unlink($tmp.".output"); <BR>unlink($tmp.".status"); <BR>unlink($tmp.".stdout"); <BR>unlink($tmp.".stderr"); <BR>#unlink($tmp.".reply"); <BR>#unlink($tmp.".sendout"); <BR>exit 0 <BR> <BR>-- <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.119.79.80] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -