You are currently browsing the archives for the month: March 2008.

March 1, 2008

.forward and procmail

forwardとprocmail関係で少しもめた(?)のでメモ。 “|IFS=’ ‘ && exec /usr/bin/procmail -Yf- || exit 75 #username” “|exec /usr/bin/mailfilter | /usr/bin/procmail -Yf- || exit 75” などなどの違いと意味について。以下、smtpdの中身の議論の際は、postfixのみを想定。 1. IFSって何 IFS = Internal Field Separatorの略 bashなどのシェルでの引数展開の際の参照変数(環境変数?)となる。で、変更するとセキュリティー問題を引き起こす、という警告をどこかのマニュアルで見たような。 2. そもそも||とか&&って何 || : 前のコマンドの終了ステータスが0でない(異常終了)のときに実行 && : 前のコマンドの終了ステータスが0のときに実行 ということで、普通のシェルを実行するときのと同じですな。どちみち、forwardを解釈するlocalは、global/pipe_commandに投げるので、fork/execするだけだったりしますが。場所としてはlocal/deliver_command()関数。 3. exit 75は? posix shellでのexitステータスコード75は、EX_TEMPFAILで、一時エラーを意味する。まぁ、もう一度実行したら成功するかもねぇ~、と、呼び出しもとのコマンドにいう、という感じ。 /usr/include/sysexits.h:#define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */ localでは、投げつけたコマンドからの戻り値などは、global/pipe_commandの最後でPIPE_STAT_*になったものを受け取って判断する、ので、終了ステータスがどう反映されるかは、ここを見る必要がある。 […]

more...