REGEXP_TABLE(5) REGEXP_TABLE(5)
名前
regexp_table - Postfix 正規表現テーブルの書式
書式
postmap -fq "string" regexp:/etc/postfix/filename
postmap -fq - regexp:/etc/postfix/filename <inputfile
解説
Postfix メールシステムはアドレスの書き換えやメールのルーティングをする
ためのテーブルをオプションで使います。これらのテーブルは通常は dbm また
は db 形式です。
代わりに検索テーブルに POSIX 正規表現形式で指定することができます。この
場合、それぞれの入力がパターンのリストと比較され、マッチしたものが見 つ
かると対応する結果が返されます。
あなたの Postfix システムがサポートしている検索テーブル形式を知るには、
"postconf -m" コマンドを使います。
検索テーブルをテストするには、上の書式に記述したように "postmap -fq" コ
マンドを使います。
テーブルの書式
Postfix 正規表現テーブルの一般的な形式は:
/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 はネ
ストできます。
空行とコメント
空行や空白だけの行は無視され、行頭の非空白文字が `#' で始まる 行
も同様です。
複数行テキスト
論理行は非空白字文字で始まります。空白で始まる行は前の論理行を継
続します。
それぞれのパターンはペアのデリミタで括られた POSIX 正規表現です。正規表
現 の文法は 4.4BSD では re_format(7) に、Solaris では regex(5) に、そし
て Linux では regex(7) に記述されています。他のシステムではそれ以外のド
キ ュメント名かもしれません。表現のデリミタは空白や特別な意味を持つ文字
を除いてどの文字も使えます (伝統的にスラッシュが使われます)。正規表現は
空白を含むことができます。
デ フォルトではマッチは大文字・小文字の区別をせず、また改行は特別な文字
として扱われません。この動作はフラグによって制御され、これは一つ以上 の
文字をパターンの後に付けることで切り替わるトグルになっています:
i (デフォルト: on)
大文字・小文字の区別をするかどうかを切り替えます。デフォルトでは
大文字・小文字を区別しません。
x (デフォルト: on)
拡張表現文法フラグを切り替えます。デフォルトでは、拡張表現文法の
サポートは有効です。
m (デフォルト: off)
複数行モードフラグを切り替えます。このフラグが on になっていると
、 ^ および $ メタキャラクタは、それぞれ入力文字列の最初と最後に
加えて、直後および直前の改行文字にマッチします。
テーブル検索順序
入 力文字列にマッチするパターンが見つかるまで、パターンはテーブルに指定
された順に適用されます。
それぞれのパターンは入力文字列全体に適用されます。場合によって、文字 列
は クライアントのホスト名全体であったり、クライアントの IP アドレス全体
、もしくはメールアドレス全体になったりします。従って、親ドメインや親 ネ
ットワーク検索は行なわれませんし、 user@domain メールアドレスは user と
domain という構成要素に分割されたり、user+foo が user と foo に分割され
ることはありません。
テキスト置換
$1, $2, etc. を使って、マッチした表現の部分文字列を result の文字列で置
き換えることも可能です。result の文字列中のマクロは、後に空白が続かない
場合に ${n} や $(n) を必要とするかも知れません。
注 意: 否定パターン (! が前につくもの) は表現がマッチしなかった時に結果
を返すため、その否定パターンに対しては置換は使えません。
SMTPD ACCESS マップの例
# 送信者が指定するルーティングを使えなくします。これは他のドメインに
# メールをリレーするのであれば必須です。
/[%!@].*[%!@]/ 550 Sender-specified routing rejected
# postmaster は OK、こうすることで彼らの問題を直す方法について
# 我々に話すことができます。
/^postmaster@/ OK
# 外行きの majordomo 爆発の防止
if !/^owner-/
/^(.*)-outgoing@(.*)$/ 550 Use ${1}@${2} instead
endif
ヘッダフィルタマップの例
# これらはかつてジャンクメールに共通でした。
/^Subject: make money fast/ REJECT
/^To: friend@public\.com/ REJECT
BODY FILTER MAP の例
# CPU サイクル節約のために、最初に base 64 エンコードされたテキストを
# スキップします。
~^[[:alnum:]+/]{60,}$~ OK
# ここにあなた自身の body パターンを置いてください。
関連項目
postmap(1), Postfix 検索テーブルマネージャ
pcre_table(5) PCRE テーブルの書式
cidr_table(5) CIDR テーブルの書式
README ファイル
DATABASE_README, Postfix 検索テーブルの概要
作者
regexp テーブル検索コードは元々次の人によって書かれました:
LaMont Jones
lamont@hp.com
コードは次の人により貢献された 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
REGEXP_TABLE(5)