# PCRE_TABLE(5) PCRE_TABLE(5) # # NAME # pcre_table - format of Postfix PCRE tables # # SYNOPSIS # pcre:/etc/postfix/filename # # postmap -q "string" pcre:/etc/postfix/filename # # postmap -q - pcre:/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 Perl Compatible 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 PCRE table is: # # /pattern/flags result # When pattern matches a search string, use the cor- # responding 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 # # endif Examine the lines between if..endif only if pattern # matches. The if..endif can nest. Do not prepend # whitespace to patterns inside if..endif. # # Each pattern is a perl-like regular expression. The # expression delimiter can be any character, except whites- # pace or characters that have special meaning (tradition- # ally the forward slash is used). The regular expression # can contain whitespace. # # By default, matching is case-insensitive, and newlines are # not treated as special characters. The behavior is con- # trolled by flags, which are toggled by appending one or # more of the following characters after the pattern: # # i (default: on) # Toggles the case sensitivity flag. By default, # matching is case insensitive. # # m (default: off) # Toggles the PCRE_MULTILINE flag. When this flag is # on, the ^ and $ metacharacters match immediately # after and immediately before a newline character, # respectively, in addition to matching at the start # and end of the subject string. # # s (default: on) # Toggles the PCRE_DOTALL flag. When this flag is on, # the . metacharacter matches the newline character. # With Postfix versions prior to 20020528, The flag # is off by default, which is inconvenient for multi- # line message header matching. # # x (default: off) # Toggles the pcre extended flag. When this flag is # on, whitespace in the pattern (other than in a # character class) and characters between a # outside # a character class and the next newline character # are ignored. An escaping backslash can be used to # include a whitespace or # character as part of the # pattern. # # A (default: off) # Toggles the PCRE_ANCHORED flag. When this flag is # on, the pattern is forced to be "anchored", that # is, it is constrained to match only at the start of # the string which is being searched (the "subject # string"). This effect can also be achieved by # appropriate constructs in the pattern itself. # # E (default: off) # Toggles the PCRE_DOLLAR_ENDONLY flag. When this # flag is on, a $ metacharacter in the pattern # matches only at the end of the subject string. # Without this flag, a dollar also matches immedi- # ately before the final character if it is a newline # character (but not before any other newline charac- # ters). This flag is ignored if PCRE_MULTILINE flag # is set. # # U (default: off) # Toggles the ungreedy matching flag. When this flag # is on, the pattern matching engine inverts the # "greediness" of the quantifiers so that they are # not greedy by default, but become greedy if fol- # lowed by "?". This flag can also set by a (?U) # modifier within the pattern. # # X (default: off) # Toggles the PCRE_EXTRA flag. When this flag is on, # any backslash in a pattern that is followed by a # letter that has no special meaning causes an error, # thus reserving these combinations for future expan- # sion. # # 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 the conventional # perl syntax ($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 # # Protect your outgoing majordomo exploders # /^(?!owner-)(.*)-outgoing@(.*)/ 550 Use ${1}@${2} instead # # # Bounce friend@whatever, except when whatever is our domain (you would # # be better just bouncing all friend@ mail - this is just an example). # /^friend@(?!my\.domain)/ 550 Stick this in your pipe $0 # # # A multi-line entry. The text is sent as one line. # # # /^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. # # EXAMPLE HEADER FILTER MAP # /^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. # # Requires PCRE version 3. # ~^[[:alnum:]+/]{60,}$~ OK # # # Put your own body patterns here. # # SEE ALSO # regexp_table(5) format of POSIX regular expression tables # # AUTHOR(S) # The PCRE table lookup code was originally written 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 # # PCRE_TABLE(5)