#++ # NAME # regexp_table 5 # SUMMARY # format of Postfix regular expression tables # SYNOPSIS # regexp:/etc/postfix/filename # DESCRIPTION # The Postfix mail system uses optional tables for address # rewriting or mail routing. These tables are usually in # \fBdbm\fR or \fBdb\fR format. Alternatively, lookup tables # can be specified in POSIX regular expression form. # # To find out what types of lookup tables your Postfix system # supports use the \fBpostconf -m\fR command. # # The general form of a Postfix regular expression table is: # .IP "\fIpattern result\fR" # When \fIpattern\fR matches a search string, use the corresponding # \fIresult\fR. # .IP "blank lines and comments" # Empty lines and whitespace-only lines are ignored, as # are lines whose first non-whitespace character is a `#'. # .IP "multi-line text" # A logical line starts with non-whitespace text. A line that # starts with whitespace continues a logical line. # .IP "\fIpattern1!pattern2 result\fR" # Matches \fIpattern1\fR but not \fIpattern2\fR. # .PP # Each pattern is a regular expression enclosed by a pair of delimiters. # The regular expression syntax is described in \fIre_format\fR(7). # The expression delimiter can be any character, except whitespace # or characters that have special meaning (traditionally the forward # slash is used). The regular expression can contain whitespace. # # By default, matching is case-insensitive, although following # the second slash with an `i' flag will reverse this. Other flags # are `x' (disable extended expression syntax), and `m' (enable # multi-line mode). # # Each pattern is applied to the entire lookup key string. # Depending on the application, that string is an entire client # hostname, an entire client IP address, or an entire mail address. # Thus, no parent domain or parent network search is done, and # \fIuser@domain\fR mail addresses are not broken up into their # \fIuser\fR and \fIdomain\fR constituent parts, nor is \fIuser+foo\fR # broken up into \fIuser\fR and \fIfoo\fR. # # Patterns are applied in the order as specified in the table, until a # pattern is found that matches the search string. # # Substitution of substrings from the matched expression into the result # string is possible using $1, $2, etc.. The macros in the result string # may need to be written as ${n} or $(n) if they aren't followed # by whitespace. # EXAMPLE SMTPD ACCESS MAP # # Disallow sender-specified routing. This is a must if you relay mail # # for other domains. # /[%!@].*[%!@]/ 550 Sender-specified routing rejected # # # Postmaster is OK, that way they can talk to us about how to fix # # their problem. # /^postmaster@/ OK # # # Protect your outgoing majordomo exploders # /^(.*)-outgoing@(.*)$/!/^owner-/ 550 Use ${1}@${2} instead # EXAMPLE HEADER FILTER MAP # # These were once common in junk mail. # /^Subject: make money fast/ REJECT # /^To: friend@public\\.com/ REJECT # SEE ALSO # pcre_table(5) format of PCRE tables # AUTHOR(S) # The regexp table lookup code was originally written by: # LaMont Jones # lamont@hp.com # # That code was based on the PCRE dictionary contributed by: # Andrew McNamara # andrewm@connect.com.au # connect.com.au Pty. Ltd. # Level 3, 213 Miller St # North Sydney, NSW, Australia # # Adopted and adapted by: # Wietse Venema # IBM T.J. Watson Research # P.O. Box 704 # Yorktown Heights, NY 10598, USA #--