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

マッピングエントリのテンプレート

指定したエントリのパターン比較に失敗した場合は、何の動作も行われず、次のエントリのスキャンへ移行します。比較が成功した場合は、エントリの右側の部分がテンプレートとして使用され、出力文字列が生成されます。このテンプレートによって、入力文字列がテンプレートの指示によって構成された出力文字列に置き換えられます。

テンプレート内のほとんどすべての文字が、そのまま出力文字列として生成されます。ただし、ドル記号 ($) は例外です。

ドル記号の後ろにドル記号、スペース、またはタブが続く場合は、出力文字列にドル記号、スペース、またはタブが生成されます。これらの文字を出力文字列に挿入するには、引用符を付ける必要があります。

ドル記号に数字 n が続いている場合は置換を呼び出します。ドル記号の後ろにアルファベット文字が続くものは「メタキャラクタ」と呼ばれます。メタキャラクタ自体はテンプレートで生成された出力文字列に出現しませんが、特殊な置換や処理で使われます。特殊な置換および標準処理のメタキャラクタの一覧は、表 10–4 を参照してください。その他のメタキャラクタはマッピング特有の用途に制限されています。

テンプレートの照合パターン内に $C$E$L または $R のいずれかのメタキャラクタがある場合、それらはマッピング処理に影響を及ぼし、処理の終了または続行を決定します。つまり、1 つのエントリの出力文字列が別のエントリの入力文字列となるような反復的なマッピングテーブルエントリを設定することができます。テンプレートの照合パターン内に $C$E$L、または $R のどのメタキャラクタも含まれていない場合は、$E (マッピング処理の即時終了) が行われます。

無限ループを避けるために、マッピングテーブル内のパス (文字列が渡されること) の反復回数には制限があります。前回のパスと同じか、それより長いパターンを使用してパスが反復されるたびに、カウンタは 1 増えます。文字列が直前のものより短い場合は、カウンタがゼロにリセットされます。カウンタが 10 に達すると、マッピングの反復要求は受け付けられません。

表 10–4 マッピングテンプレートの置換とメタキャラクタ

置換シーケンス 

置き換える内容 

$n

左から右にゼロから数えて n 番めのワイルドカードのフィールド。

$#...#

シーケンス番号の置換 

$]...[ 

LDAP により URL 検索が行われます。結果として、置換が行われます。 

$|...|

指定されたマッピングテーブルを、与えられた文字列に適用します。 

${...} 

一般データベースの置換。 

$}domain,attribute{

ドメイン単位の属性にアクセスする機能を追加します。domain は該当するドメインであり、attribute はドメインに関連付けられた属性です。このドメインが存在して属性を有している場合、その初期値はマッピングの結果に代入されます。属性かドメインのどちらかが存在しない場合、マッピングエントリは失敗します。

attributes には、ドメイン LDAP 属性か、下記のように定義された特殊な属性を指定できます。

_base_dn_ - ドメインのユーザーエントリのベース DN

_domain_dn_ - ドメインエントリ自体の DN

_domain_name_ - ドメインの名前 (エイリアスではない)

_canonical_name_ - ドメインに関連付けられた標準名

$[...]

サイト提供のルーチンを起動し、結果の置換を行います。 

メタキャラクタ

説明

$C

次のテーブルエントリからマッピング処理を続行し、このエントリの出力文字列をマッピング処理の新しい入力文字列として使用します。 

$E

マッピング処理をただちに終了し、このエントリの出力文字列をマッピング処理の最終結果とします。 

$L

次のテーブルエントリからマッピング処理を続行し、このエントリの出力文字列を新しい入力文字列として使用します。テーブル内のすべてのエントリを照合したら、もう一度最初のテーブルエントリから照合します。後続の照合エントリにメタキャラクタ $C$E または $R がある場合には、それらのエントリが優先されます。

$R

マッピングテーブルの最初のエントリからマッピング処理を続行し、このエントリの出力文字列をマッピング処理の新しい入力文字列として使用します。 

$nA 

現在のアドレスの 0 の位置から左に n 番目の文字を挿入します。n を省略した場合、アドレス全体が挿入されます。 

$nX 

メールホストの 0 から左に n 番目のコンポーネントを挿入します。n を省略した場合、メールホスト全体が挿入されます。 

$?x?

マッピングエントリが x パーセントの割合で成功します。 

$\

後続のテキストを小文字にします。 

$^

後続のテキストを大文字にします。 

$_

後続のテキストを元々の状態で残します。 

$=

後続の置換文字が、LDAP 検索フィルタへの挿入に適した引用の対象となるようにして、その部分を大文字に変換します。 

$:x

指定したフラグが設定されている場合にのみ、一致します。 

$;x

指定したフラグがクリアの場合にのみ、一致します。 

ワイルドカードフィールドの置換 ($n)

ドル記号に数字 n が続いている場合、これは、パターン内の n 番目のワイルドカードに一致するデータで置き換えられます。ワイルドカードには、0 から順に番号が付けられています。たとえば、次のエントリは入力文字列 PSI%A::B に一致し、その結果 b@a.psi.siroe.com という出力文字列を生成します。


PSI$%*::*    $1@$0.psi.siroe.com

また、入力文字列 PSI%1234::USER にも一致するので、出力文字列として USER@1234.psi.siroe.com が生成されます。入力文字列 PSIABC::DEF は、このエントリ内のパターンに一致しないため置換は行われません。つまり、このエントリから出力文字列は生成されません。

テキストの大文字小文字の制御 ($\、$^、$_)

メタキャラクタ $\ は後続のテキストを小文字に変換し、メタキャラクタ $^ は後続のテキストを大文字に変換します。また、メタキャラクタ $_ は、後続のテキストを元の大文字または小文字の状態で残します。たとえば、これらのメタキャラクタは、マッピングを使って大文字または小文字の区別が有効なアドレスを変更する際に役立ちます。

処理制御 ($C、$L、$R、$E)

メタキャラクタ $C$L$R、および $E は、マッピング処理を終了するかどうか、またいつ終了するかなど、マッピング処理に影響を与えます。これらのメタキャラクタには、次の効果があります。

マッピングテーブルのテンプレートは、左から右にスキャンされます。一般データベースの置換やランダム値で制御されるエントリなど、「成功」または「失敗」するエントリに $C$L、または $R のフラグを設定するには、メタキャラクタ $C$L、または $R をエントリの成功または失敗する部分の左側に配置します。これを行わないと、エントリの残りの部分が失敗した場合、フラグが表示されません。

特殊なフラグの確認

マッピングプローブの中には、特殊なフラグセットを持つものがあります。これらは設定可能なフラグであり、それらが存在するかどうかは $: および $; テストの一般的なマッピングテーブル機能を使用して確認されます。$:x はフラグ x が設定されている場合のみ、エントリを一致させます。$:x はフラグ x がクリアの場合にのみ、エントリを一致させます。特定のマッピングテーブルに適用される特殊なフラグについては、各マッピングテーブルの説明を参照してください (表 17–2 の $A、$T、$S、$F、および $D を参照)。

フラグチェックが成功するとエントリが成功して終了するが、フラグチェックが失敗するとマッピング処理を続行する必要があるという場合、エントリはフラグチェックの左側に $C メタキャラクタを配置し、フラグチェックの右側に $E フラグを配置する必要があります。

ランダムに成功または失敗するエントリ ($?x?)

マッピングテーブルのエントリにメタキャラクタ $?x? がある場合は、これによって、x パーセントの割合でエントリが「成功」します。残りの割合でエントリは「失敗」し、マッピングエントリの入力文字列は変更されずにそのまま出力文字列となります(マッピングによっては、エントリが失敗したこととエントリが一致しなかったこととは、必ずしも同義ではない)。x には、成功率を実数で指定します。

たとえば、IP アドレスが 123.45.6.78 であるシステムが、自分のサイトに大量の SMTP 電子メールを送信していて、このメールの量を少し減らしたいとします。この場合、PORT_ACCESS マッピングテーブルを次のように使用できます。たとえば、接続の 25 パーセントのみを許可し、残りの 75 パーセントを拒否するとします。次のマッピングテーブル PORT_ACCESS は、$?25? を使用し、$Y のあるエントリを 25 パーセントの割合で成功させます (すなわち、接続を許可)。エントリが失敗する残りの 75 パーセントの割合では、そのエントリの最初の $C によって MTA は次のエントリからマッピングを続行しますが、接続試行は拒否され、Try again later (あとでもう一度試行してください) という SMTP エラーメッセージが表示されます。


PORT_ACCESS

   TCP|*|25|123.45.6.78|*         $C$?25?$Y
   TCP|*|25|123.45.6.78|*         $N45s$ 4.40$ Try$ again$ later

シーケンス番号の置換 ($#...#)

$#...# 置換は、MTA シーケンスファイルに保存されている値を増やし、その値をテンプレート内に入れます。たとえば、マッピングテーブルを使ってファイル名を生成するときなど、マッピングテーブルの出力に固有の修飾子があることが望ましい場合に、シーケンス番号付きの固有文字列を生成することができます。

次のいずれかの構文を使用できます。


$#seq-file-spec|radix|width|m#

$#seq-file-spec|radix|width#

$#seq-file-spec|radix#

$#seq-file-spec#

必須の引数 seq-file-spec は、既存の MTA シーケンスファイルの完全なファイル指定です。オプションの引数 radix で出力するシーケンス値の基数を、width で出力する桁数を指定します。デフォルトの基数は 10 ですが、-36 ~ 36 の範囲内の基数も使用できます。たとえば、基数 36 では 0 ~ 9、A ~ Z の文字からなる値を使用することができます。デフォルトでは、シーケンス値は自然幅で出力されますが、大きな桁数を指定すると、桁数に合わせるために数値の左側に 0 が追加されます。桁数を明示的に指定する場合は、基数も明示的に指定する必要があります。

オプションの引数 m はモジュラスです。この 4 番目の引数が指定されている場合、挿入される値はファイル mod m から取得されたシーケンス番号です。デフォルトでは、モジュラスの処理を行わないようになっています。

上記にあるように、マッピングで参照される MTA シーケンスファイルはすでに存在するものでなければなりません。MTA シーケンスファイルを作成するには、次のコマンドを使用します。


touch seq-file-spec

または


cat >seq-file-spec

               

マッピングテーブルを使ってアクセスされるシーケンス番号ファイルは、誰でも読み取り可能でないと正常に操作できません。また、このようなシーケンス番号ファイルを使用するには、MTA ユーザーアカウント (imta_tailor ファイルで nobody として設定) を持つことが必要です。

LDAP クエリ URL の置換 $]...[

$]ldap-url[ の形式の置換は、特殊な方法で処理されます。ldap-url は LDAP クエリ URL として解釈され、LDAP クエリの結果が置換されます。ホストとポートが省略された標準の LDAP URL が使用されます。ホストとポートは、代わりに LDAP_HOST オプションと LDAP_PORT オプションで指定されます。LDAP URL は次のように指定する必要があります。

ldap:///dn[?attributes[?scope?filter]]

上記の角括弧 ([]) は、URL のオプションの部分を示します。dn は検索ベースを指定する識別名で、この部分は必須です。URL の attributesscope、および filter の各オプションを指定すると、より細かい情報が返されます。つまり、attributes では、この LDAP クエリに一致する LDAP ディレクトリエントリから返される属性を指定します。scope には、base (デフォルト)、one、または sub のいずれかを指定できます。filter には一致するエントリの特徴を記述します。

特定の LDAP URL 置換シーケンスは、LDAP クエリ URL 内で使用できます。

マッピングテーブルの置換 ($|...|)

$|mapping;argument| 形式の置換は、特殊な方法で処理されます。MTA は、MTA mappings ファイル内の mapping で指定されている補足的なマッピングテーブルを探し、その補足的なマッピングテーブルへの入力文字列として argument を使用します。この補足的なマッピングテーブルは既存のものであり、置換が成功した場合にはその出力文字列に $Y フラグを設定しなければなりません。この補足的なマッピングテーブルが存在しなかったり、または $Y フラグを設定しなかった場合には、補足的なマッピングテーブルの置換は失敗し、元のマッピングエントリも失敗とみなされます。元の入力文字列が出力文字列として使用されます。

マッピングテーブルの置換を行うマッピングテーブルエントリで $C$R、または $L などの処理制御メタキャラクタを使用する場合は、処理制御メタキャラクタをマッピングテーブルテンプレート内のマッピングテーブル置換の左側に配置します。そうしないと、マッピングテーブルの置換が「失敗」したときに、処理制御メタキャラクタが処理されません。

一般検索テーブルまたはデータベース置換 (${...})

${text} 形式の置換は、特殊な方法で処理されます。text 部分は、一般検索テーブルやデータベースにアクセスするための鍵として使われます。データベースは、imsimta crdb ユーティリティーにより生成されます。text がテーブルで一致すると、テーブル内の対応するテンプレートがその文字列に置き換えられます。text がテーブル内のエントリに一致しない場合は、入力文字列がそのまま出力文字列として使用されます。

一般検索テーブルを使用している場合、MTA オプションの use_text_databases の下位ビットを設定する必要があります。つまり、奇数に設定する必要があります。general.txt を変更した場合は、imsimta cnbuild を使用してコンパイルし、imsimta reload を使用して再読み込み可能なデータを再読み込みすることで、MTA 設定にコンパイルする必要があります。

一般データベースを使用している場合、データベースが適切に動作するためには、データベースは誰にでも読み取り可能でなければなりません。

一般テーブルの置換を行うマッピングテーブルエントリで、$C、$R、または $L などの処理制御メタキャラクタを使用する場合は、処理制御メタキャラクタをマッピングテーブルテンプレート内の一般テーブル置換の左側に配置します。そうしないと、一般テーブルの置換が「失敗」したときに、処理制御メタキャラクタが処理されません。

サイト提供ルーチンの置換 ($[...])

$[image,routine,argument] 形式の置換は特殊な方法で処理されます。image、routine、argument の各部分は、カスタマ提供のルーチンを見つけて呼び出すために使用されます。UNIX では、MTA は dlopen および dlsym を使って共有ライブラリ image からルーチン routine をダイナミックにロードし、呼び出します。そのとき、ルーチン routine は、次の引数を伴った関数として呼び出されます。


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

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

サイト提供ルーチンの置換を行うマッピングテーブルエントリで、$C$R、または $L などの処理制御メタキャラクタを使用する場合は、処理制御メタキャラクタをマッピングテーブルテンプレート内のサイト提供ルーチン置換の左側に配置します。そうしないと、マッピングテーブルの置換が「失敗」したときには、処理制御メタキャラクタが処理されません。

サイト提供ルーチンの呼び出し機構によって、MTA のマッピング処理はさまざまな方法で拡張することができます。たとえば、マッピングテーブル PORT_ACCESS または ORIG_SEND_ACCESS 内で、ロード監視サービスへの呼び出しを行い、その結果を使って接続やメッセージを受け入れるかどうかを決定することができます。

image (サイト提供の共有ライブラリイメージ) は、誰でも読み取り可能でなければなりません。

UTF-8 文字列の生成

一般的なマッピングテーブル機能で、Unicode 文字の値から UTF-8 文字列を生成できます。次の形式の Unicode メタキャラクタ列があるとします。

$&A0A0,20,A1A1&

この場合、A0A020 および A1A1 の位置にある文字を含む UTF-8 文字列が生成されます。