戻る

3107:rule set 1 & S= ::part02

名前だけ

jhonn pochi tama の 形で watasi@koko 等で 無い場合

$@

test15.cf (sendmail.cf として 試験用に作成したもの)にたいして プリフィックス $@ を 追記しましょう

$ cat test15.cf 
V10/Berkeley
D{REMOTE}mailhost
D{HUB}nanigasi.fake
Mhub,   P=[IPC], S=Hubset, 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
S3
R$* <> $*       $n                              handle <> error address
R$* < $* < $* > $* > $*         $2 < $3 > $4    de-nest brackets
R$* < $* > $*   $2                              basic RFC822 parsing
SHubset
R$-     $@ $1@${HUB}

これで 最低限の 試験を行います

$ /usr/sbin/sendmail -Ctest15.cf -d21.12 -bt
Mhub: Warning: first argument in [IPC] mailer must be TCP or FILE
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,Hubset pochi
3                  input: pochi
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
----- rule fails
3                returns: pochi
Hubset             input: pochi
-----trying rule: $-
-----rule matches: $@ $1 @ nanigasi . fake
rewritten as: pochi @ nanigasi . fake
Hubset           returns: pochi @ nanigasi . fake
> /quit

取り敢えず いけていると云うことに しておきましょう ここで 終わらずに 続けて tama@nanigasi を 試験すると 目的の ものは 得られなかった

 3,Hubset tama@nanigasi
3                  input: tama @ nanigasi
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
----- rule fails
3                returns: tama @ nanigasi
Hubset             input: tama @ nanigasi
-----trying rule: $-
----- rule fails
Hubset           returns: tama @ nanigasi
> /quit
ここまでは 一応 出来ていました

名前と他のもの

jhonn pochi tama の 形 と watasi@koko 等も 扱えるようにする。少し補 足すると 現在 D{HUB}nanigasi.fake 計算機の名前 nanigasi ドメインfake と してますが (この表現は 正確とは言い難いが)もう少しありそうで なさそうな 名前に 変更しましょう つまり nyanco.kingdom.of.cat の ようなものに 変更します それは test16.cf の 様に なり ます。

$ cat test16.cf 
V10/Berkeley
D{REMOTE}mailhost
D{HUB}nyanco.kingdom.of.cat
Mhub,   P=[IPC], S=Hubset, 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
S3
R$* <> $*       $n                              handle <> error address
R$* < $* < $* > $* > $*         $2 < $3 > $4    de-nest brackets
R$* < $* > $*   $2                              basic RFC822 parsing
SHubset
R$-     $@ $1@${HUB}

試験結果の 抜粋

$ /usr/sbin/sendmail -Ctest16.cf -d21.12 -bt
Mhub: Warning: first argument in [IPC] mailer must be TCP or FILE
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,Hubset tama
...
rewritten as: tama @ nyanco . kingdom . of . cat
Hubset           returns: tama @ nyanco . kingdom . of . cat
> 3,Hubset pochi@nyanco
...
-----trying rule: $-
----- rule fails
Hubset           returns: pochi @ nyanco
> /quit

さて pochi@nyanco を 処理する手だてを 考えましょう その前に オプション -d0.1 を 使用して 内部の ものを 確認しておきましょう

$ /usr/sbin/sendmail -Ctest16.cf -d0.1 -bt < /dev/null
Version 8.12.11
 Compiled with: DNSMAP LOG MATCHGECOS MIME7TO8 MIME8TO7 NAMED_BIND
                NETINET NETUNIX NEWDB PIPELINING SCANF USERDB XDEBUG
Mhub: Warning: first argument in [IPC] mailer must be TCP or FILE

============ SYSTEM IDENTITY (after readcf) ============
      (short domain name) $w = nyanco
  (canonical domain name) $j = nyanco.kingdom.of.cat
         (subdomain name) $m = kingdom.of.cat
              (node name) $k = nyanco
========================================================

ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> /quit

pochi@nyanco を 処理するために $+ 持ってくる変わりに $w を 使用しようと いうことです。あるものは使えばいいのでしょうが どれだけ有るのでしょうか? わかりません おいおいです では その機能を 追加しましょう

R$-     $@ $1@${HUB}

参考にして まず 1個 次に @ の文字 次に$w を 並べれば pochi@nyanco に 対 応出来ると 考えて また プリフィックス $@ も 同様に 追記すれば

R$-@$w     $@ $1@${HUB}

を 追記します。さすれば

$ cat test17.cf 
V10/Berkeley
D{REMOTE}mailhost
D{HUB}nyanco.kingdom.of.cat
Mhub,   P=[IPC], S=Hubset, 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
S3
R$* <> $*       $n                              handle <> error address
R$* < $* < $* > $* > $*         $2 < $3 > $4    de-nest brackets
R$* < $* > $*   $2                              basic RFC822 parsing
SHubset
R$-     $@ $1@${HUB}
R$-@$w  $@ $1@${HUB}

試験

ほたら 試験してみましょう

$ /usr/sbin/sendmail -Ctest17.cf -d21.12 -bt
Mhub: Warning: first argument in [IPC] mailer must be TCP or FILE
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
/*   Test of pochi Only User name                        */
> 3,Hubset pochi
3                  input: pochi    /* rule set 3 Begin    */
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
----- rule fails
3                returns: pochi    /* rule set 3 not apply    */

Hubset             input: pochi   /* rule set Hubset Begin    */
-----trying rule: $-              /*  cf R$-     $@ $1@${HUB}  */
-----rule matches: $@ $1 @ nyanco . kingdom . of . cat
rewritten as: pochi @ nyanco . kingdom . of . cat     
Hubset           returns: pochi @ nyanco . kingdom . of . cat
/* End rule set Hubset  & Return  */ 
/* Do not apply  Next rule  effect of $@  So get worksoace value as upper  */


/* Test of  pochi@nyanco   User@LOCAL  (short domain name)   */
> 3,Hubset pochi@nyanco
3                  input: pochi @ nyanco    /* rule set 3 Begin    */
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
----- rule fails
3                returns: pochi @ nyanco    /* rule set 3 not apply    */

Hubset             input: pochi @ nyanco   /* rule set Hubset Begin    */
-----trying rule: $-
----- rule fails                /* Non matches cf R$-     $@ $1@${HUB} */
-----trying rule: $- @ nyanco   /*  cf R$-@$w  $@ $1@${HUB}            */
-----rule matches: $@ $1 @ nyanco . kingdom . of . cat
rewritten as: pochi @ nyanco . kingdom . of . cat
Hubset           returns: pochi @ nyanco . kingdom . of . cat
/* End rule set Hubset  & Return  */ 
/* Do not apply  Next rule  effect of $@  So get worksoace value as upper  */
/* In this case Next rule not Exist                                        */


/* Test of  pochi@nyanco.kingdom.of.cat   User@FQDN  (canonical domain name) */
> 3,Hubset pochi@nyanco.kingdom.of.cat     
3                  input: pochi @ nyanco . kingdom . of . cat  /* rule set 3 Begin    */
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
----- rule fails
3                returns: pochi @ nyanco . kingdom . of . cat   /* rule set 3 not apply    */


Hubset             input: pochi @ nyanco . kingdom . of . cat   /* rule set Hubset Begin    */
-----trying rule: $-
----- rule fails
-----trying rule: $- @ nyanco
----- rule fails
Hubset           returns: pochi @ nyanco . kingdom . of . cat  /* rule set Hubset not apply */
> /quit

御覧の様に なる

この3様の 入力にたいしては ルールセット 3 については 適用される事は 無かった
ルールセット Hubset については 
pochi の 場合 R$-     $@ $1@${HUB} が適用されて $@ の 効果で 終わりになり
              その 結果 は 
Hubset           returns: pochi @ nyanco . kingdom . of . cat

pochi@nyanco の 場合 R$-@$w  $@ $1@${HUB}が適用されて $@ の 効果で 終わりになり
              その 結果 は
Hubset           returns: pochi @ nyanco . kingdom . of . cat


pochi@nyanco.kingdom.of.cat の 場合 は ルールセット Hubset の 適用するものは 無い
Hubset           returns: pochi @ nyanco . kingdom . of . cat

いずれの場合も 作業領域”workspace”の 最終の 中身の結果は 同じに なり ます。

へびあし

nyanco . kingdom . of . cat のようなものは きっと 存在しないでしょう 自分自身の プライベート ネットワーク のみであれば 現在の 如く 作成は 可 能ですが

おおおおーーーーい !! ルール 1 は 未だか 四段目ですな!

戻る

にゃんたろう 拝!
2006年10月 6日 (金) 22:54:36 JST 作成

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