# REGEXP_TABLE(5) REGEXP_TABLE(5) # # NAME # regexp_table - format of Postfix regular expression tables # # SYNOPSIS # regexp:/etc/postfix/filename # # postmap -q "string" regexp:/etc/postfix/filename # # postmap -q - regexp:/etc/postfix/filename <inputfile # # DESCRIPTION # The Postfix mail system uses optional tables for address # rewriting or mail routing. These tables are usually in dbm # or db format. Alternatively, lookup tables can be speci- # fied in POSIX regular expression form. # # To find out what types of lookup tables your Postfix sys- # tem supports use the postconf -m command. # # To test lookup tables, use the postmap command as # described in the SYNOPSIS above. # # The general form of a Postfix regular expression table is: # # /pattern/flags result # # !/pattern/flags result # When pattern matches (does not match) a search # string, use the corresponding result value. # # blank lines and comments # Empty lines and whitespace-only lines are ignored, # as are lines whose first non-whitespace character # is a `#'. # # multi-line text # A logical line starts with non-whitespace text. A # line that starts with whitespace continues a logi- # cal line. # # if /pattern/flags # # if !/pattern/flags # # endif Examine the lines between if..endif only if pattern # matches (does not match). The if..endif can nest. # Do not prepend whitespace to patterns inside # if..endif. # # Each pattern is a regular expression enclosed by a pair of # delimiters. The regular expression syntax is described in # re_format(7). The expression delimiter can be any charac- # ter, 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 follow- # ing the second slash with an `i' flag will reverse this. # Other flags are `x' (disable extended expression syntax), # and `m' (enable multi-line mode, that is, treat newline # characters as special). # # 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 user@domain mail addresses are not # broken up into their user and domain constituent parts, # nor is user+foo broken up into user and foo. # # 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 # if !/^owner-/ # /^(.*)-outgoing@(.*)$/ 550 Use ${1}@${2} instead # endif # # EXAMPLE HEADER FILTER MAP # # These were once common in junk mail. # /^Subject: make money fast/ REJECT # /^To: friend@public\.com/ REJECT # # EXAMPLE BODY FILTER MAP # # First skip over base 64 encoded text to save CPU cycles. # ~^[[:alnum:]+/]{60,}$~ OK # # # Put your own body patterns here. # # 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 # # REGEXP_TABLE(5)