PCRE_TABLE(5) PCRE_TABLE(5) 名前 pcre_table - Postfix PCRE テーブルの書式 書式 postmap -fq "string" pcre:/etc/postfix/filename postmap -fq - pcre:/etc/postfix/filename <inputfile 解説 Postfix メールシステムはアドレスの書き換えやメールのルーティングをする ためのテーブルをオプションで使います。これらのテーブルは通常は dbm また は db 形式です。 代 わりに検索テーブルに Perl 互換正規表現形式で指定することができます。 この場合、それぞれの入力がパターンのリストと比較され、マッチしたもの が 見つかると対応する結果が返されます。 あなたの Postfix システムがサポートしている検索テーブル形式を知るには、 "postconf -m" コマンドを使います。 検索テーブルをテストするには、上の書式に記述したように "postmap -fq" コ マンドを使います。 テーブルの書式 PCRE テーブルの一般的な形式は: /pattern/flags result pattern が入力文字列にマッチすると、対応する result の値を使いま す。 !/pattern/flags result pattern が入力文字列にマッチしなかった場合、対応する result の値 を使います。 if /pattern/flags endif 入力文字列が pattern にマッチしたときのみ、 if と endif の間のパ ターンに対して入力文字列がマッチします。if..endif はネストできま す。 注意: if..endif の内部のパターンの前に空白をつけないでください。 if !/pattern/flags endif 入力文字列が pattern にマッチしなかったときのみ、 if と endif の 間のパターンに対して入力文字列がマッチします。if..endif はネスト できます。 空行とコメント 空行や空白だけの行は無視され、行頭の非空白文字が `#' で始まる 行 も同様です。 複数行テキスト 論理行は非空白字文字で始まります。空白で始まる行は前の論理行を継 続します。 それぞれのパターンは perl ライクな正規表現です。表現のデリミタは空白 や 特 別な意味を持つ文字を除いてどの文字も使えます (伝統的にスラッシュが使 われます)。正規表現は空白を含むことができます。 デフォルトではマッチは大文字・小文字の区別をせず、改行は特別な文字と し て 扱われません。この振る舞いはフラグによって制御され、次の一つまたはそ れ以上をつけることでトグルスイッチが切り替わります: i (デフォルト: on) 大文字・小文字の区別のフラグを切り替えます。デフォルトではマッチ ングは大文字・小文字を区別しません。 m (デフォルト: off) PCRE_MULTILINE フラグを切り替えます。このフラグが on の場合、 ^ および $ メタキャラクタは目的の文字列の最初と最後に加えて、そ れ ぞれ直後および直前の改行文字にマッチします。 s (デフォルト: on) PCRE_DOTALL フラグを切り替えます。このフラグが on の場合、. メ タキャラクタは改行文字にマッチします。Postfixバージョン 2.0よ り 前 では、デフォルトではこのフラグは off であり、複数行のメッセー ジヘッダに対しては不便でした。 x (default: off) pcre 拡張フラグを切り替えます。このフラグが on の場合、パター ン 中 の (文字クラス以外の) 空白、および文字クラスの外の # と改行文 字の間の文字は無視されます。パターンの一部として空白や # 文字 を 含むために、バックスラッシュでエスケープすることができます。 A (デフォルト: off) PCRE_ANCHORED フラグを切り替えます。このフラグが on の場合、パタ ーンの "anchored" が強制されます。つまり、検索される文字列 (" 目 的 の文字列") の最初だけがマッチするように制限されます。この効果 はパターン自身の適切な構成によっても得ることができます。 E (default: off) PCRE_DOLLER_ENDONLY フラグを切り替えます。このフラグが on の場合 、 パターンの $ メタキャラクタは目的の文字列の最後だけにマッチし ます。このフラグがなければ、最後の文字が改行文字の場合、 (他の改 行文字の前ではなく) 最後の改行文字の直前にもマッチします。このフ ラグは PCRE_MULTILINE フラグがセットされていると無視されます。 U (default: off) 非貪欲 (ungreedy) マッチングフラグを切り替えます。このフラ グ が on の場合、パターンマッチングエンジンは定量化の貪欲さを反転し、 その結果デフォルトでは貪欲でないが、"?" が続くと貪欲になります。 このフラグはパターン内で (?U) 修飾子をセットすることもできます。 X (default: off) PCRE_EXTRA フラグを切り替えます。このフラグが on の場合、特別 な 意味のない文字が後に続く、パターン内のバックスラッシュは全てエラ ーにして、将来の拡張のためにこれらの組み合わせを予約します。 検索順序 入力文字列にマッチするパターンが見つかるまで、パターンはテーブルに指 定 された順に適用されます。 そ れぞれのパターンは入力文字列全体に適用されます。場合によって、文字列 はクライアントのホスト名全体であったり、クライアントの IP アドレス全 体 、 もしくはメールアドレス全体になったりします。従って、親ドメインや親ネ ットワーク検索は行なわれませんし、 user@domain メールアドレスは user と domain という構成要素に分割されたり、user+foo が user と foo に分割され ることはありません。 テキスト置換 慣例的な perl 文法 ($1, $2, etc.) を使って、マッチした表現の部分文字 列 を result の文字列で置き換えることも可能です。 result の文字列中のマク ロは、後に空白が続かない場合に ${n} や $(n) を必要とするかも知れませ ん 。 注 意: 否定パターン (! が前につくもの) は表現がマッチしなかった時に結果 を返すため、その否定パターンに対しては置換は使えません。 SMTPD ACCESS マップの例 # 外行きの majordomo 爆発の防止 /^(?!owner-)(.*)-outgoing@(.*)/ 550 Use ${1}@${2} instead # whatever が自ドメインである時以外(全ての friend@ メールをバウンス # する方がよいのですが - これは単なる例です)、friend@whatever を # バウンスする。 /^(friend@(?!my\.domain$).*)$/ 550 Stick this in your pipe $1 # 複数行のエントリ。テキストは1行で送られます。 # /^noddy@my\.domain$/ 550 This user is a funny one. You really don't want to send mail to them as it only makes their head spin. ヘッダフィルタマップの例 /^Subject: make money fast/ REJECT /^To: friend@public\.com/ REJECT 本体フィルタマップの例 # CPU サイクル節約のために、最初に base 64 エンコードされたテキストを # スキップします。 PCRE version 3 が必要です。 ~^[[:alnum:]+/]{60,}$~ OK # ここにあなた自身の body パターンを置いてください。 関連項目 postmap(1), Postfix 検索テーブルマネージャ postconf(5), 設定パラメータ regexp_table(5) POSIX 正規表現テーブルの書式 README ファイル DATABASE_README, Postfix 検索テーブルの概要 作者 PCRE テーブル検索コードは元々次の人によって書かれました: Andrew McNamara andrewm@connect.com.au connect.com.au Pty. Ltd. Level 3, 213 Miller St North Sydney, NSW, Australia 次の人により採用され、適応されました: Wietse Venema IBM T.J. Watson Research P.O. Box 704 Yorktown Heights, NY 10598, USA PCRE_TABLE(5)