戻る

3102:rule set 0 & error Delivery Agent

ルールセット 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

の様に なります では 試験をしてみましょう

新しい ルール 0 test09.cf での アドレスの試験

$ /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 作成

Copyright © 2004.-2007. nyantarou All Rights Reserved.