<< 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 は 処理ごとに 各ルールを 表示する
では 入力していって みまひょ
$ /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
なかなか 便利で おじゃるがいかんせん 出力が 増えますが まあ 仕方 おへ ん
もう少し ネストの 多い場合での確認 つまり 処理の 繰り返しを みる
$ /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
まだ 三段熟カレー 五段熟カレー は 販売されていないようです
参考までに
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 <>
の ものが 提示されています。
真似てみましょう
以下の様に なると 思う 正解ではないよ!
$ 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
$ /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 作成