ルールセット 0 に ついて sendmail.cf を テスト用に 運用 した test08.cf の 場合は @nanntoka という形も 別に 問題は 無い まあ 当然です が しかしながら このような スタイルは メールの アドレスとしては 適当で 無いようです (まあ 本当の所は わかりませんが)取り敢えず この パターン である場合は 別の 処理を させると云うことに しましょう、前に こういう物 を 取り扱った 事を 思い出して
S0 R@ one R@$+ two R$+@$+ three
”two”となる条件と エラー配信エージェント つまり $#hub の様に $#error として $: として なにか 文字列を 決めておきます
R@$+ two R@$+ $#error $: yu-za-ga-Inaiyo-mazuinnja-naino
のようなものを
S0 R$+ $#hub $@${REMOTE} $:$1
の前に いれておくと 新しくsendmail.cf の テスト用は
$ cat test09.cf V10/Berkeley D{REMOTE}mailhost Mhub, P=[IPC], S=0, R=0, F=mDFMuXa, T=DNS/RFC822/SMTP, A=IPC $h Mlocal, P=/bin/mail, F=lsDFMAw5:/|@rmn, S=10, R=20/40, A=mail -d $u S0 R@$+ $#error $: Missing user name R$+ $#hub $@${REMOTE} $:$1
の様に なります では 試験をしてみましょう
$ /usr/sbin/sendmail -Ctest09.cf -bt Mhub: Warning: first argument in [IPC] mailer must be TCP or FILE ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 0 @nanndeDAMEnan 0 input: @ nanndeDAMEnan 0 returns: $# error $: Missing user name > 0 korenara@OK.nandesuka 0 input: korenara @ OK . nandesuka 0 returns: $# hub $@ mailhost $: korenara @ OK . nandesuka > /quit
うまいこといったので それで ええやん! 良く理解していない にゃんたろ うの 誤解は 以下の 様なものです
作業領域”workspace”の 動きとして 変化する様子について 不都合なパター ン アドレス ”$# error $: Missing user name” が あたえられたらどうなる か? くれぐれも こんな 考え方は する筈は 無いのですが 思い込んで しまっ たので にゃんたろうの 馬鹿さ加減を 提示 します。 戻って sendmail.cf の テスト用として 再度 test08.cf を 使って 試験します アドレ スとして ”$# error $: Missing user name”を 与えます test08.cf の 内容 を 再掲すると
$ cat test08.cf V10/Berkeley D{REMOTE}mailhost Mhub, P=[IPC], S=0, R=0, F=mDFMuXa, T=DNS/RFC822/SMTP, A=IPC $h Mlocal, P=/bin/mail, F=lsDFMAw5:/|@rmn, S=10, R=20/40, A=mail -d $u S0 R$+ $#hub $@${REMOTE} $:$1
です これを 使用して 試験をすると
$ /usr/sbin/sendmail -Ctest08.cf -bt Mhub: Warning: first argument in [IPC] mailer must be TCP or FILE ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 0 $# error $: Missing user name 0 input: $# error $ : Missing user name 0 returns: $# hub $@ mailhost $: $# error $ : Missing user name > /quit
うううーーん なんじゃ???
よくよく 思い出すと ルール が 以下の 様な場合は
S0 R@ one R@$+ two R$+@$+ three
少なくとも 作業領域”workspase”の 内容は ”one”、”two”、”three” の いずれかの 形で 停止 しました つまり 入力の アドレスの パターン が 一 致 すれば そこで その ルールセットに おける 作業領域”workspase”の 内容 は (書き換え)は 終わるのです パターンが 一致 しない場合は 次の 行 とい うか そのルールセットの 次の パターンを 試みる と云うことです。そうして 誤解しているのは
S0 R$+ morethanone
の ルールセットで
> 0 omaehaahoka
0 input: omaehaahoka
Infinite loop in ruleset 0, rule 1
0 returns: morethanone
それを改良して
S0
R$+ $: onlyonetime
のような 形に しました、これと ごっちゃに してしまっているのです、こ の場合は 作業領域”workspase”に $: は 現れ ませんでしたが 今回の 新しい test09.cf の 結果には
> 0 @nanndeDAMEnan
0 input: @ nanndeDAMEnan
0 returns: $# error $: Missing user name
$:が 現れています、 つまり あれや これや ごっちゃに なったと云うことです
ある アドレスパターンが 与えられた場合
Snumber /* 例えば S0 とか S800 とか 実際は 800 のような 数字は 使えないが */ RA DoruleA /* パターンが A ならば 処理して 終わる パターンが 異なれば 次に 任す */ RB DoruleB /* パターンが B ならば 処理して 終わる パターンが 異なれば 次に 任す */ RC DoruleC /* パターンが C ならば 処理して 終わる パターンが 異なれば 次に 任す */
つまり 有るルールセット に 於いて パターンが 一致する ルール が あれ ば それを 処理して そのルールセットは 終わる と云うことです そうして 他 の ルールセットを 処理する と云うことです もし ルールセットの 中のどれも 当てはまらない場合は 作業領域”workspace”の 変化は 無い状態で 次の ルー ルセットに 取り掛かる 次の ルールセットが なければ それにて 完了と いう 事です
このルール (ルールセットの 中の一部)で 無限ループ に 陥る のを 回避 させる 場合 RHS の 前に $: を 導入し たのです
LHS RHS **** ************************* S0 R@$+ $#error $: Missing user name R$+ $#hub $@${REMOTE} $:$1 **** **************************** S0 R$+ $: onlyonetime
まあ懲りるまで繰り返し 間違えば 理解できるでしょう いつか!
にゃんたろう 拝!
2006年10月 4日 (水) 23:13:52 JST 作成