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 バ ー ジ ョ ン
20020528 以前では、デフォルトではこのフラグは 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)