戻る

3009:rule @ $+ part 01

$+

ルールを検査する方法で パターン が 決まって しまってると 使い難くなり ます
doredore@soredemo.kondo.kuru
areha@sonnnani.tooi.node
jar@asuha.amede.shou
の 様な 物を 対象に する場合 全てに 対応 させる事は 出来ない事は 無いでしょう
Rdoredore@soredemo.kondo.kuru u
Rareha@sonnnani.tooi.node v
Rjar@asuha.amede.shou w
....
の様にすれば 良いのであって 全世界の 物を 書き込んで 行けば いいわけです から、実用とは 思いませんが、ほたら なんらかの 代替手段で もって それを 表す ように せなば なんねい と云うことになります。そこで ”$+”を 使用す る事に なります ”$+”は なんでしょうか ? 1個以上の トークンに マッチ する といわれています、ほたら それは どういうこと 役目を 果たすのでしょ うか ? わからなければ試行錯誤するより手はありません。このような sendmail.cf に 対応するものを 作成してみます

$ cat test06.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=0, R=0, A=mail -d $u

S0
R$+     morethanone

とにかく試験してみましょう

$ /usr/sbin/sendmail -Ctest06.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 omaehaahoka
0                  input: omaehaahoka
Infinite loop in ruleset 0, rule 1
0                returns: morethanone
> 0 uso@dekatameta
0                  input: uso @ dekatameta
Infinite loop in ruleset 0, rule 1
0                returns: morethanone
> /quit

このような ルール設定は 間違って いるようです ”Infinite loop in ruleset 0, rule 1”て 文句を 言 われます が 内容は 置き換わって いるようです。ある意味 当然です 要するに 1個以上のトークンが存在すれば 置き換えるのですから、但し、まともでないので syslog に

# cat syslog 
Oct  2 11:09:10 
tama sendmail[355]: k9228rW6000355: SYSERR(nyanco): Infinite loop in ruleset 0, rule 1

いけません という log が 書き込まれます、では 取り敢えず いけませんと いわれないように しましょう

$:

この記号 ”$:”というのは 意味が 一つに 限定される理由では 有りません 今回は 1回 仕事をしたら それで もう 止める という 機能を もたせた 使用 方法です

$ cat test06.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=0, R=0, A=mail -d $u

S0
R$+     $: onlyonetime

こんどは どうなるでしょう

$ /usr/sbin/sendmail -Ctest06.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 omaehaahoka
0                  input: omaehaahoka
0                returns: onlyonetime
> 0 uso@dekatameta
0                  input: uso @ dekatameta
0                returns: onlyonetime
> /quit

おしかりを 受けなくなった ということは 言えます。 再度 強調 しておきますが 記号 ”$:” というのは 上記の様な 場所 で 使用した場合 1回で 止めとう という 機能 を 発揮すると云うことです。RHS の 冒頭に ”$:”を 使用した場合に "一度だけ書き換えを行う プリフィクス $: " ということです。

S0
R$+     $: onlyonetime
 ^       ^   ^
 |       |   |
LHS      v   RHS
       PreFix : 一度だけ書き換えを行う プリフィクス

今回の場合 作業領域 ”workspace”には 最初1個以上の トークン があれ ば ”morethanone”に 書き換わります そこで これ以上は 書き換えても 同じ 物を 書き換える 作業を 律義に 続けるのが お仕事だと 考えて 何時までも 続けようとします。この時 誰かが ”あかんで”というので エラーで 停止さ せた様です そのときの 作業領域”workspace”の 値が ”morethanone”であっ た と云うことのようです。次に "一度だけ書き換 えを行う プリフィクス$: " を 導入して 無間地獄から 開放した と云うことになりました、さて 目的の ”@” と ”$+”は どうなるのでしょうか?

戻る

にゃんたろう 拝!
2006年10月 2日 (月) 21:18:13 JST 作成

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