前回 sendmail.cf を簡単にまとめてみて、だんだん気分が盛り上がってきましたので、R(ルール)コマンドをいろいろ試して見たくなりました。
そのための準備として、sendmail.mc と sendmail.cf の関係を少し見てみます。
./cf/README によると、sendmail.mc は次のような構成で作ると良いみたいです。
ここで、local macro definitions は、GNU m4 の define() マクロで指定するタイプの設定です。
生成される sendmail.cf は、ここでの標準の sendmail.cf で大体次のようになっていました。
要するに膨大なオプションとルールセットの塊です。大まかな構成はしっかりしていますね。
さて、Rコマンドをテストするために、新たにルールセットを作りました。ここでは、使っていない番号 9 を利用します。こういう場合は、sendmail.mc の中で、LOCAL_RULESETS を使います。
この設定は、REWRITING RULES コメント下のルールセット群の一番下に展開されます。
例えば、
をテストする場合は、sendmail.mc の最後に
を追加します。Rコマンドの lhs と rhs の間はタブ文字です。
この Rコマンドは括弧で囲まれた複数のトークンから括弧をはずすためのつもりです。ここで、
早速テストしてみます。sendmail は、コンパイルしたものを使います。
うまくいきました。ここで、テストしたRコマンドがループとして動作し、複数の括弧( < > )がはずされたことがはっきり理解できます。この手のプログラム言語は、熟語のようなよく使う形式が現れますので、sendmail.cf のその他の Rコマンドを見ているうちになれてくるんじゃないかと思います。
coLinux なので、Rコマンドでルールセット呼び出し(サブルーチン呼び出し)なども気楽に試せます。ただし、外にメールを送る場合は正しく設定する必要があります。
ブログですから、次回もう少し遊んで見たいです。
そのための準備として、sendmail.mc と sendmail.cf の関係を少し見てみます。
./cf/README によると、sendmail.mc は次のような構成で作ると良いみたいです。
VERSIONID OSTYPE DOMAIN FEATURE local macro definitions MAILER LOCAL_CONFIG LOCAL_RULE_* LOCAL_RULESETS
ここで、local macro definitions は、GNU m4 の define() マクロで指定するタイプの設定です。
生成される sendmail.cf は、ここでの標準の sendmail.cf で大体次のようになっていました。
バージョン情報 C , F , D コマンド O コマンド Q コマンド P コマンド T コマンド H コマンド [ REWRITING RULES のコメント ] Scanonify=3 のルールセット Sfinal=4 のルールセット Sparse=0 のルールセット Slocaladdr=5 のルールセット Scheck_ 系のルールセット その他関連ルールセット [ MAIL FILTER DEFINITIONS のコメント ] [ Local and Program Mailer specification のコメント ] SEnvFromL ルールセット SEnvToL ルールセット SHdrFromL ルールセット SHdrToL ルールセット その他関連ルールセット Mlocal と Mprog の設定 [ SMTP Mailer specification のコメント ] SEnvFromSMTP ルールセット SEnvToSMTP ルールセット SHdrFromSMTP ルールセット SHdrToSMTP ルールセット その他関連ルールセット Msmtp とか Mesmtp の設定
要するに膨大なオプションとルールセットの塊です。大まかな構成はしっかりしていますね。
さて、Rコマンドをテストするために、新たにルールセットを作りました。ここでは、使っていない番号 9 を利用します。こういう場合は、sendmail.mc の中で、LOCAL_RULESETS を使います。
この設定は、REWRITING RULES コメント下のルールセット群の一番下に展開されます。
例えば、
R<$+> $1
をテストする場合は、sendmail.mc の最後に
LOCAL_RULESETS Slocal_test=9 # Test of R command R<$+> $1 # R$* $@ RESULT : $1
を追加します。Rコマンドの lhs と rhs の間はタブ文字です。
この Rコマンドは括弧で囲まれた複数のトークンから括弧をはずすためのつもりです。ここで、
rhs の先頭の $@ は、それ以降の内容を出力として、そのルールセットを 終了させます。 つまり、サブルーチンのリターンですね。 配信エージェントを指定する $# も同じ動作 になっていますね。 rhs の先頭の $: は、それ以降の内容を次のルールコマンドの lhs に渡し ます。 Rコマンドのループ抑制です。
早速テストしてみます。sendmail は、コンパイルしたものを使います。
$ ln -s ../../obj.Linux.2.6.11-co-0.6.4.i686/sendmail/sendmail sendmail $ $ sb Build sendmail.cf $ ./sendmail -bt -C./sendmail.cf ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 9 <abc> local_test input: < abc > local_test returns: RESULT : abc > 9 <<<abc>>> local_test input: < < < abc > > > local_test returns: RESULT : abc > /quit $
うまくいきました。ここで、テストしたRコマンドがループとして動作し、複数の括弧( < > )がはずされたことがはっきり理解できます。この手のプログラム言語は、熟語のようなよく使う形式が現れますので、sendmail.cf のその他の Rコマンドを見ているうちになれてくるんじゃないかと思います。
coLinux なので、Rコマンドでルールセット呼び出し(サブルーチン呼び出し)なども気楽に試せます。ただし、外にメールを送る場合は正しく設定する必要があります。
ブログですから、次回もう少し遊んで見たいです。