1<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" 2 "http://www.w3.org/TR/html4/loose.dtd"> 3<html> <head> 4<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> 5<title> Postfix manual - regexp_table(5) </title> 6</head> <body> <pre> 7REGEXP_TABLE(5) REGEXP_TABLE(5) 8 9<b>NAME</b> 10 regexp_table - format of Postfix regular expression tables 11 12<b>SYNOPSIS</b> 13 <b>postmap -q "</b><i>string</i><b>" <a href="regexp_table.5.html">regexp</a>:/etc/postfix/</b><i>filename</i> 14 15 <b>postmap -q - <a href="regexp_table.5.html">regexp</a>:/etc/postfix/</b><i>filename</i> <<i>inputfile</i> 16 17<b>DESCRIPTION</b> 18 The Postfix mail system uses optional tables for address 19 rewriting, mail routing, or access control. These tables 20 are usually in <b>dbm</b> or <b>db</b> format. 21 22 Alternatively, lookup tables can be specified in POSIX 23 regular expression form. In this case, each input is com- 24 pared against a list of patterns. When a match is found, 25 the corresponding result is returned and the search is 26 terminated. 27 28 To find out what types of lookup tables your Postfix sys- 29 tem supports use the "<b>postconf -m</b>" command. 30 31 To test lookup tables, use the "<b>postmap -q</b>" command as 32 described in the SYNOPSIS above. 33 34<b>COMPATIBILITY</b> 35 With Postfix version 2.2 and earlier specify "<b>postmap -fq</b>" 36 to query a table that contains case sensitive patterns. 37 Patterns are case insensitive by default. 38 39<b>TABLE FORMAT</b> 40 The general form of a Postfix regular expression table is: 41 42 <b>/</b><i>pattern</i><b>/</b><i>flags result</i> 43 When <i>pattern</i> matches the input string, use the cor- 44 responding <i>result</i> value. 45 46 <b>!/</b><i>pattern</i><b>/</b><i>flags result</i> 47 When <i>pattern</i> does <b>not</b> match the input string, use 48 the corresponding <i>result</i> value. 49 50 <b>if /</b><i>pattern</i><b>/</b><i>flags</i> 51 52 <b>endif</b> Match the input string against the patterns between 53 <b>if</b> and <b>endif</b>, if and only if that same input string 54 also matches <i>pattern</i>. The <b>if</b>..<b>endif</b> can nest. 55 56 Note: do not prepend whitespace to patterns inside 57 <b>if</b>..<b>endif</b>. 58 59 This feature is available in Postfix 2.1 and later. 60 61 <b>if !/</b><i>pattern</i><b>/</b><i>flags</i> 62 63 <b>endif</b> Match the input string against the patterns between 64 <b>if</b> and <b>endif</b>, if and only if that same input string 65 does <b>not</b> match <i>pattern</i>. The <b>if</b>..<b>endif</b> can nest. 66 67 Note: do not prepend whitespace to patterns inside 68 <b>if</b>..<b>endif</b>. 69 70 This feature is available in Postfix 2.1 and later. 71 72 blank lines and comments 73 Empty lines and whitespace-only lines are ignored, 74 as are lines whose first non-whitespace character 75 is a `#'. 76 77 multi-line text 78 A logical line starts with non-whitespace text. A 79 line that starts with whitespace continues a logi- 80 cal line. 81 82 Each pattern is a POSIX regular expression enclosed by a 83 pair of delimiters. The regular expression syntax is docu- 84 mented in <b>re_format</b>(7) with 4.4BSD, in <b>regex</b>(5) with 85 Solaris, and in <b>regex</b>(7) with Linux. Other systems may use 86 other document names. 87 88 The expression delimiter can be any non-alphanumerical 89 character, except whitespace or characters that have spe- 90 cial meaning (traditionally the forward slash is used). 91 The regular expression can contain whitespace. 92 93 By default, matching is case-insensitive, and newlines are 94 not treated as special characters. The behavior is con- 95 trolled by flags, which are toggled by appending one or 96 more of the following characters after the pattern: 97 98 <b>i</b> (default: on) 99 Toggles the case sensitivity flag. By default, 100 matching is case insensitive. 101 102 <b>m</b> (default: off) 103 Toggle the multi-line mode flag. When this flag is 104 on, the <b>^</b> and <b>$</b> metacharacters match immediately 105 after and immediately before a newline character, 106 respectively, in addition to matching at the start 107 and end of the input string. 108 109 <b>x</b> (default: on) 110 Toggles the extended expression syntax flag. By 111 default, support for extended expression syntax is 112 enabled. 113 114<b>TABLE SEARCH ORDER</b> 115 Patterns are applied in the order as specified in the ta- 116 ble, until a pattern is found that matches the input 117 string. 118 119 Each pattern is applied to the entire input string. 120 Depending on the application, that string is an entire 121 client hostname, an entire client IP address, or an entire 122 mail address. Thus, no parent domain or parent network 123 search is done, and <i>user@domain</i> mail addresses are not 124 broken up into their <i>user</i> and <i>domain</i> constituent parts, 125 nor is <i>user+foo</i> broken up into <i>user</i> and <i>foo</i>. 126 127<b>TEXT SUBSTITUTION</b> 128 Substitution of substrings from the matched expression 129 into the result string is possible using $1, $2, etc.; 130 specify $$ to produce a $ character as output. The macros 131 in the result string may need to be written as ${n} or 132 $(n) if they aren't followed by whitespace. 133 134 Note: since negated patterns (those preceded by <b>!</b>) return 135 a result when the expression does not match, substitutions 136 are not available for negated patterns. 137 138<b>EXAMPLE SMTPD ACCESS MAP</b> 139 # Disallow sender-specified routing. This is a must if you relay mail 140 # for other domains. 141 /[%!@].*[%!@]/ 550 Sender-specified routing rejected 142 143 # Postmaster is OK, that way they can talk to us about how to fix 144 # their problem. 145 /^postmaster@/ OK 146 147 # Protect your outgoing majordomo exploders 148 if !/^owner-/ 149 /^(.*)-outgoing@(.*)$/ 550 Use ${1}@${2} instead 150 endif 151 152<b>EXAMPLE HEADER FILTER MAP</b> 153 # These were once common in junk mail. 154 /^Subject: make money fast/ REJECT 155 /^To: friend@public\.com/ REJECT 156 157<b>EXAMPLE BODY FILTER MAP</b> 158 # First skip over base 64 encoded text to save CPU cycles. 159 ~^[[:alnum:]+/]{60,}$~ OK 160 161 # Put your own body patterns here. 162 163<b>SEE ALSO</b> 164 <a href="postmap.1.html">postmap(1)</a>, Postfix lookup table manager 165 <a href="pcre_table.5.html">pcre_table(5)</a>, format of PCRE tables 166 <a href="cidr_table.5.html">cidr_table(5)</a>, format of CIDR tables 167 168<b>README FILES</b> 169 <a href="DATABASE_README.html">DATABASE_README</a>, Postfix lookup table overview 170 171<b>AUTHOR(S)</b> 172 The regexp table lookup code was originally written by: 173 LaMont Jones 174 lamont@hp.com 175 176 That code was based on the PCRE dictionary contributed by: 177 Andrew McNamara 178 andrewm@connect.com.au 179 connect.com.au Pty. Ltd. 180 Level 3, 213 Miller St 181 North Sydney, NSW, Australia 182 183 Adopted and adapted by: 184 Wietse Venema 185 IBM T.J. Watson Research 186 P.O. Box 704 187 Yorktown Heights, NY 10598, USA 188 189 REGEXP_TABLE(5) 190</pre> </body> </html> 191