戻る

3104:rule set 3 <<nest>> & -d21.12

<< nanika@zyuusho >>のパターンにたいして 無力でしたので 何か対 処を する方法が 必要に なるということです。以下の パターンを 考えて

       $* < $* < $* > $* > $*
       ^    ^    ^    ^    ^
       |    |    |    |    |

       $1   $2   $3   $4   $5

            $* < $* > $*
            ^    ^    ^
            |    |    |

            $2   $3   $4

$2 $3 $4 を 抜き出すことが できれば これを 繰り返す事で 最終の

$* < $* > $*

の パターンを得る事が できると 考えて作成すると

R$* < $* < $* > $* > $*     $2<$3>$4

の様になるとということのようです、当然 前処理ですから

S3
R$* <> $*       $n      handle <> error address
                   <------- ここに 挿入 
R$* < $* > $*   $2      basic RFC822 parsing

test13.cf として 以下のように なります

$ cat test13.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
S3
R$* <> $*       $n                              handle <> error address  
R$* < $* < $* > $* > $*         $2 < $3 > $4    de-nest brackets
R$* < $* > $*   $2                              basic RFC822 parsing  

このように なります ほなら 試験しまひょ

-d21.12

今回は 動作を 詳しく見るために デバック オプション -d21.12 を 追加 して 試験を 行います

オプション -d21.12 は 処理ごとに 各ルールを 表示する

test13.cf での 試験 < > の 基本化?

では 入力していって みまひょ

$ /usr/sbin/sendmail -Ctest13.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 <<c>>
3                  input: < < c > >
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
-----rule matches: $2 < $3 > $4
rewritten as: < c >
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
-----rule matches: $2
rewritten as: c
-----trying rule: $* < $* > $*
----- rule fails
3                returns: c
> /quit
$ /usr/sbin/sendmail -Ctest13.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>
> 3 <<c>>
3                  input: < < c > >
3                returns: c
> /quit

なかなか 便利で おじゃるがいかんせん 出力が 増えますが まあ 仕方 おへ ん

test13.cf での 試験 < > の 基本化 追試

もう少し ネストの 多い場合での確認 つまり 処理の 繰り返しを みる

$ /usr/sbin/sendmail -Ctest13.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 <<korehaseiritu>>
3                  input: < < korehaseiritu > >
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
-----rule matches: $2 < $3 > $4
rewritten as: < korehaseiritu >
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
-----rule matches: $2
rewritten as: korehaseiritu
-----trying rule: $* < $* > $*
----- rule fails
3                returns: korehaseiritu
> 3 <koreok<seiritu>iidesu>
3                  input: < koreok < seiritu > iidesu >
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
-----rule matches: $2 < $3 > $4
rewritten as: koreok < seiritu > iidesu
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
-----rule matches: $2
rewritten as: seiritu
-----trying rule: $* < $* > $*
----- rule fails
3                returns: seiritu
> 3 <a<b<koredame>e>f>
3                  input: < a < b < koredame > e > f >
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
-----rule matches: $2 < $3 > $4
rewritten as: a < b < koredame > e
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
-----rule matches: $2
rewritten as: b < koredame
-----trying rule: $* < $* > $*
----- rule fails
3                returns: b < koredame
> 3 <<<<<koremoDaMe>>>>>
3                  input: < < < < < koremoDaMe > > > > >
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
-----rule matches: $2 < $3 > $4
rewritten as: < < < < koremoDaMe >
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
-----rule matches: $2
rewritten as: < < < koremoDaMe
-----trying rule: $* < $* > $*
----- rule fails
3                returns: < < < koremoDaMe
> /quit

まだ 三段熟カレー 五段熟カレー は 販売されていないようです

test14.cf

参考までに

http://www.unix.org.ua/orelly/networking/sendmail/ch29_04.htm
John Halleck designed a clever alternative to the above traditional technique 
that is now included with V8 sendmail:

R$*                     $: < $1 >                       housekeeping <>
R$+ < $* >                 < $2 >                       strip excess on left
R< $* > $+                 < $1 >                       strip excess on right
R<>                     $@ < @ >                        MAIL FROM:<> case
R< $+ >                 $: $1                           remove housekeeping <>
の ものが 提示されています。

真似てみましょう

test14.cf の リスト

以下の様に なると 思う 正解ではないよ!

$ cat test14.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
S3
R$* <> $*       $n                              handle <> error address
R$*     $: < $1 >
R$+ < $* >      < $2 >
R< $* > $+      < $1 >
R< $+ > $: $1

test14.cf の 試験

$ /usr/sbin/sendmail -Ctest14.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 <<<three>>>
3                  input: < < < three > > >
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $*
-----rule matches: $: < $1 >
rewritten as: < < < < three > > > >
-----trying rule: $+ < $* >
-----rule matches: < $2 >
rewritten as: < < < three > > > >
-----trying rule: $+ < $* >
-----rule matches: < $2 >
rewritten as: < < three > > > >
-----trying rule: $+ < $* >
-----rule matches: < $2 >
rewritten as: < three > > > >
-----trying rule: $+ < $* >
----- rule fails
-----trying rule: < $* > $+
-----rule matches: < $1 >
rewritten as: < three >
-----trying rule: < $* > $+
----- rule fails
-----trying rule: < $+ >
-----rule matches: $: $1
rewritten as: three
3                returns: three
> /quit

実際の sendmail は そういうものを クリヤー してまっせ と云うことでしょ う まだ 素人の にゃんたろうは そこまで 気が 回りません 悪魔で そういうも のが 有ると云うことです。

戻る

にゃんたろう 拝!
2006年10月 5日 (木) 21:06:43 JST 作成

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