Ryo.F (3896) の日記
Mlocalでハック
先日の話題の続き。
ローカルに配送されるメールの強制(ブラインド)カーボンコピーをとる場合、sendmail.cfに手を加えずに実現する方法として、.forwardを利用する方法を書いた。この別法を二つ。
まず、やはりsendmail.cfに手を加えない方法だが、それは.prodmailrcを利用する方法だ。この方法の利点は、sendmail.cfに手を加えない、と言うこと以外に、外部転送時に、制限ユーザ検査を受けないことにある。例えば、ある一般ユーザfooが、外部アドレスfoo@external.ne.jpへの転送を設定するとしよう。これに制限ユーザであるbarがメールを送る場合を考える。これを、.forwardを使って実現すると、fooのローカルメールボックス(.forward注で\fooを指定していた場合)には配送されるが、制限ユーザ検査によりfoo@external.ne.jpには送れない。なぜなら、
送信者(sender)がbarで、受信者(recipient)がfoo@external.ne.jp
を検査することになるからだ。
一方、.procmailrcで実現した場合、この転送は成功する。この場合、.procmailrcを処理した後に制限ユーザのチェックが行われるため、送信者は、一般ユーザfooになる。
送信者fooで、受信者foo@external.ne.jp
は、制限ユーザ検査で禁止されない。
もう一つの方法は、これはsendmail.cfをハックすることである。ローカルメーラの定義(Mlocal)に変更を加える。ローカルメーラにprocmailを使っている場合、引数は、Mlocal中のA=指定で
procmail -t -Y -a $h -d $u
というような指定なっているはずだ。ここで$hは@以下、$uはローカルユーザ名である。メールアーカイバユーザをmarchとして、これを
procmail -t -Y -a $h -d march $u
の様に、$uの他にメールアーカイバユーザを加えるよう変更する。
ただし、この方法だと、メールのカーボンコピーをしないユーザを選ぶことはできない。rootやメールアーカイバも含め、すべてのローカルユーザに対するメールのカーボンコピーがメールアーカイバのメールに配送される。
ただし、この方法は、sendmail.mcの中では定義できないようだ。メーラのハックは通常、sendmail.mc中のMAILER_DEFINITIONS以下で定義するが、MlocalやMprogは、この方法ではhackできない。従って、sendmail.mcをm4で処理してできるsendmail.cfを手で編集することになる。