2005年04月29日

procmailの起動方法がみんな変

bogofilterにて週に数通出るUnsure扱いのスパム自動撃退用のレシピがどうにも正常に動かない(しかも悪いことに手動起動だとちゃんと動く(苦笑))ので、設定を洗い直すためにいろいろと調べていたんですが、あちこちのサイトで「.forward」に

"|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 #[ユーザー名]"
と書くべしなどと書いてありました。

「いやいや、うちじゃそんな設定にはしてませんよ」と言うことで、こうやってみようかと思ったんですが、コマンドの意図がよくわからなかったので調べてみることに

まず、出だしのIFSは「内部フィールドセパレータ 」の事で標準入力からの入力文字を区切るための記号を決めるもののようです。
で、通常は「タブ、改行、半角スペース」に設定されているものを、ここでは半角スペースのみにしているようなんですが

  • procmail によって行われるクォートされない変数展開は、常にスペース、タブ、及び改行文字によって分割される; IFS 変数は内部では用いられない。【訳注: Internal Field Separator: 内部フィールドセパレータ。ある文字列を指定した文字毎に分割し、配列変数に格納する際に指定する区切り文字。 sh や bash 等のコマンドライン展開に用いられるが、この環境変数に異常な値を設定すると、セキュリティが脅かされる可能性が指摘されている。】
それ意味無くない?(苦笑)

内部で渡すbogofilterとかでは効いてくるかもしれませんが、いまいちわざわざ設定する意味が良くわかりません。

それから、「procmail -f-」の-fオプションですが

  • -f fromwhom
    fromwhom を送信者(sender)にして、先頭の `From ' 行を再作成する (-f の代わりに、今では使われなくなっているが -r が使用できる)。 fromwhom が `-' 1個だけの場合、procmail は `From ' 行のタイムスタンプの更新のみ行う (これはタイムスタンプが存在する場合である。なければ新たに作成する)。
いや、別にタイムスタンプ要らないし(;´д`)ノ
と言うことで不要

で、次の「|| exit 75 」は

  • 75 (EX_TEMPFAIL)
    一時的な動作エラー。もう一度同じことをやれば成功するかもしれないエラー
ほうほう、これは採用してみようかな。

で、最後の「#[ユーザー名]」ですが、

  • また,複数の人の .forward の内容が全く同一であると,その両者に宛てたメールを処理する際に,古い sendmail では「同一アドレス」と見倣していずれか一方にしか送らない,というバグが存在するため,念のために .forward にはユーザ名をコメントとして入れておくと良い.
いや、うちpostfxだし(;´д`)ノ

っていうか、これってあたかもユーザ名を入れないと正常に動作しないように書いてますが、forwardの内容さえ異なればいいんですから好きな事書いておいて問題無いんですが(笑)
(しかも今時そんな古いsendmailを使っている人がいるとも思えないので実質無駄かと(笑))
と言うわけでこれも不要

結局

"|exec /usr/local/bin/procmail || exit 75"
となりました(笑)

なんかほとんど変わってないなぁ・・・

Posted by Takuchan at 2005年04月29日 17:06 | トラックバック(0)