Sun Java System Messaging Server 6 2005Q4 管理ガイド

カスタマ指定ルーチンの置換: $[...]

$[image,routine,argument] 形式の置換シーケンスは、カスタマ指定ルーチンを検索して呼び出すのに使用します。UNIX では、MTA は dlopen および dlsym を使って、指定されたルーチンを共有ライブラリイメージからダイナミックにロードし、呼び出します。そのとき、そのルーチンは次の引数を伴った関数として呼び出されます。

status := routine (argument, arglength, result, reslength)

argument および result は、252 バイトの文字列バッファーです。UNIX では、argument および result は、文字列へのポインタ (たとえば、C 言語での char* のように) として渡されます。arglength および reslength は、参照によって渡される符号付きの long 型整数です。入力時に argument には書き換えルールテンプレートからの引数文字列が含まれ、arglength にはその文字列の長さが含まれます。値を返すときには、result に結果文字列が入り、reslength にその長さが入ります。次にこの結果文字列は書き換えルールテンプレートで “$[image,routine,argument]” に置換されます。routine は、書き換えルールが失敗した場合には 0 を返し、成功した場合には -1 を返します。

このメカニズムによって、書き換えプロセスの複雑な展開が可能になります。たとえば、あるタイプのネームサービスに対して呼び出しを実行し、その結果を使ってアドレスを変化させることができます。次の書き換えルールを使って、ホスト siroe.com に対して前方を探すアドレス (例: To: アドレス) のディレクトリサービス検索が次のように実行されることがあります。$F を指定すると、この書き換えルールを前方を探すアドレスだけに使用することができます。詳細は、「方向および位置に固有の書き換えルール ($B、$E、$F、$R)」を参照してください。

siroe.com $F$[LOOKUP_IMAGE,LOOKUP,$U]

jdoe@siroe.com という前方を探すアドレスがこのルールに一致すると、メモリ内に LOOKUP_IMAGE (UNIX の共有ライブラリ) がロードされ、argument パラメータとして jdoe を使って LOOKUP ルーチンが呼び出されます。その後、LOOKUP ルーチンは、John.Doe%eng.siroe.com などの別のアドレスを result パラメータに入れ、書き換えルールが適用されたことを示す値 (-1) を返します。結果文字列にパーセント記号 (「繰り返し書き換えテンプレート: A%B」を参照) が使用されていると、アドレスを書き換えるものとして John.Doe@eng.siroe.com を使った書き換えプロセスが再開されます。

UNIX システムでは、サイト提供の共有ライブラリイメージはだれでも読み取り可能でなければなりません。