#!/bin/csh -f ################################## ## あなたの環境に合わせましょう。 ## WORKDIR は作業ディレクトリーです。 ## TCPLOG tcpserver.log のこと。 ## qmail-smtpd tcpserver tcpserver.log は http://www.nishnet.ne.jp/~math/MT/ ## をご覧になってください。 ## メールにて結果を送ることもできますが、最後を見て下さい。 ## virtualdomainについてもbadrcpttoを追加できます。 ## ===> vbadmail.data 名で書かれています。 set DOMAIN=abcd.com ; set WORKDIR=/home/あなた/TCP ; set TCPLOG=/var/log/tcpserver.log ; ################################################################## ## なお、手動でベースとなる「badrcptto.manual」を作ると便利です。 ## ? * を使って柔軟にbadrcpttoを編集することができます。 ## manualには大文字も入れておきますが、badrcptto.localには ## 小文字のみのデータにします。これは一部のエラーのためです。 ## badrcptto=badrcptto.manual+badrcptto.local+vbadmail.data です。 ################################################################## ## 以下は編集の必要無し。######################################### cd $WORKDIR ; if (! -e tcp.log.tmp) then touch $WORKDIR/tcp.log.tmp; endif ## 受信したアドレスを抽出します ## nawk に注意 だとうまくいかなくなった。 #/usr/bin/grep Accept /var/log/tcpserver.log | nawk '{print $5}' | grep $DOMAIN >> $WORKDIR/tcp.log.tmp ; /usr/bin/grep Accept /var/log/tcpserver.log | nawk '{print $6}' | grep $DOMAIN >> $WORKDIR/tcp.log.tmp ; #echo 1; <===エラー箇所のチェックのため ## データをすべて小文字にします cat $WORKDIR/tcp.log.tmp | /usr/bin/tr '[A-Z]' '[a-z]' > $WORKDIR/tcp.log.tmp2 ; cp $WORKDIR/tcp.log.tmp2 $WORKDIR/tcp.log.tmp ; rm $WORKDIR/tcp.log.tmp2 ; #echo 2; ## sort and uniq /usr/bin/sort $WORKDIR/tcp.log.tmp | /usr/bin/uniq > $WORKDIR/tcp.log ; #echo 3; cp $WORKDIR/tcp.log $WORKDIR/tcp.log.tmp ; cat $WORKDIR/tcp.log | cut -f 2 -d : > $WORKDIR/alladdress.tmp ; grep -v "\*" $WORKDIR/alladdress.tmp | grep -v "\?" > $WORKDIR/alladdress ; #echo 4; ## aliasを取り出す。 ls -al /var/qmail/alias | grep qmail- | nawk '{print $9 }' | cut -f 2 -d - > $WORKDIR/alias.data ; #echo 5; touch $WORKDIR/saftyaddress ; #echo 6; foreach person (`cat $WORKDIR/alias.data`) echo $person@$DOMAIN >> $WORKDIR/saftyaddress ; echo $person@mail.$DOMAIN >> $WORKDIR/saftyaddress ; end #echo 7; ## home にあるユーザーを正規のアドレスとして登録 foreach person (`ls /home`) echo $person@$DOMAIN >> $WORKDIR/saftyaddress ; echo $person@mail.$DOMAIN >> $WORKDIR/saftyaddress ; end #echo 8; if(! -e $WORKDIR/SaftyAddressDir) then mkdir $WORKDIR/SaftyAddressDir ; endif #echo 9; foreach person (`cat $WORKDIR/saftyaddress`) touch $WORKDIR/SaftyAddressDir/$person ; end #echo 10; if (! -e $WORKDIR/drvd.badrcptto.local.data1) then touch $WORKDIR/drvd.badrcptto.local.data1 ; endif ## drvd.badrcptto.local.data は増加するデータです。 ## 言わば、badrcpttoを支える影のbadrcpttoデータです。 #echo 11; foreach person (`cat $WORKDIR/alladdress`) if (! -e $WORKDIR/SaftyAddressDir/$person) then echo $person >> $WORKDIR/drvd.badrcptto.local.data ; endif end ## エラーデータの訂正 ## どうしても奇妙なアドレスが入ることがあるので grep "@mail$DOMAIN" $WORKDIR/drvd.badrcptto.local.data > $WORKDIR/badrcptto.tmp; grep "@$DOMAIN" $WORKDIR/drvd.badrcptto.local.data >> $WORKDIR/badrcptto.tmp; cp $WORKDIR/badrcptto.tmp $WORKDIR/drvd.badrcptto.local.data ; rm $WORKDIR/badrcptto.tmp ; #echo 12; sort $WORKDIR/drvd.badrcptto.local.data | uniq > $WORKDIR/drvd.badrcptto.local.data1 ; cp $WORKDIR/drvd.badrcptto.local.data1 $WORKDIR/drvd.badrcptto.local.data ; ########## #echo 13; if (! -e $WORKDIR/badrcptto.manual) then touch $WORKDIR/badrcptto.manual ; endif cp $WORKDIR/badrcptto.manual $WORKDIR/badrcptto ; cat $WORKDIR/drvd.badrcptto.local.data >> $WORKDIR/badrcptto ; ################################################################# ## virtualdomain対応のbadrcpttoを使わないならば無効化してください。 cat $WORKDIR/vbadmail.data >> $WORKDIR/badrcptto ; ################################################################## rm -R $WORKDIR/SaftyAddressDir ; rm $WORKDIR/alias.data ; rm $WORKDIR/drvd.badrcptto.local.data1 ; ################################################### rm $WORKDIR/alladdress ; rm $WORKDIR/alladdress.tmp ; rm $WORKDIR/saftyaddress ; rm $WORKDIR/tcp.log ; rm $WORKDIR/tcp.log.tmp ; ######################### exit;