272 lines
13 KiB
HTML
272 lines
13 KiB
HTML
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
"https://www.w3.org/TR/html4/loose.dtd">
|
|
<html> <head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<link rel='stylesheet' type='text/css' href='postfix-doc.css'>
|
|
<title> Postfix manual - pcre_table(5) </title>
|
|
</head> <body> <pre>
|
|
PCRE_TABLE(5) PCRE_TABLE(5)
|
|
|
|
<b><a name="name">NAME</a></b>
|
|
pcre_table - format of Postfix PCRE tables
|
|
|
|
<b><a name="synopsis">SYNOPSIS</a></b>
|
|
<b>postmap -q "</b><i>string</i><b>" <a href="pcre_table.5.html">pcre</a>:/etc/postfix/</b><i>filename</i>
|
|
|
|
<b>postmap -q - <a href="pcre_table.5.html">pcre</a>:/etc/postfix/</b><i>filename</i> <<i>inputfile</i>
|
|
|
|
<b>postmap -hmq - <a href="pcre_table.5.html">pcre</a>:/etc/postfix/</b><i>filename</i> <<i>inputfile</i>
|
|
|
|
<b>postmap -bmq - <a href="pcre_table.5.html">pcre</a>:/etc/postfix/</b><i>filename</i> <<i>inputfile</i>
|
|
|
|
<b><a name="description">DESCRIPTION</a></b>
|
|
The Postfix mail system uses optional tables for address rewriting,
|
|
mail routing, or access control. These tables are usually in <b>dbm</b> or <b>db</b>
|
|
format.
|
|
|
|
Alternatively, lookup tables can be specified in Perl Compatible Regu-
|
|
lar Expression form. In this case, each input is compared against a
|
|
list of patterns. When a match is found, the corresponding result is
|
|
returned and the search is terminated.
|
|
|
|
To find out what types of lookup tables your Postfix system supports
|
|
use the "<b>postconf -m</b>" command.
|
|
|
|
To test lookup tables, use the "<b>postmap -q</b>" command as described in the
|
|
SYNOPSIS above. Use "<b>postmap -hmq -</b> <<i>file</i>" for <a href="header_checks.5.html">header_checks(5)</a> pat-
|
|
terns, and "<b>postmap -bmq -</b> <<i>file</i>" for <a href="header_checks.5.html">body_checks(5)</a> (Postfix 2.6 and
|
|
later).
|
|
|
|
This driver can be built with the pcre2 library (Postfix 3.7 and
|
|
later), or with the legacy pcre library (all Postfix versions).
|
|
|
|
<b><a name="compatibility">COMPATIBILITY</a></b>
|
|
With Postfix version 2.2 and earlier specify "<b>postmap -fq</b>" to query a
|
|
table that contains case sensitive patterns. Patterns are case insensi-
|
|
tive by default.
|
|
|
|
<b><a name="table_format">TABLE FORMAT</a></b>
|
|
The general form of a PCRE table is:
|
|
|
|
<b>/</b><i>pattern</i><b>/</b><i>flags result</i>
|
|
When <i>pattern</i> matches the input string, use the corresponding
|
|
<i>result</i> value.
|
|
|
|
<b>!/</b><i>pattern</i><b>/</b><i>flags result</i>
|
|
When <i>pattern</i> does <b>not</b> match the input string, use the corre-
|
|
sponding <i>result</i> value.
|
|
|
|
<b>if /</b><i>pattern</i><b>/</b><i>flags</i>
|
|
|
|
<b>endif</b> If the input string matches /<i>pattern</i>/, then match that input
|
|
string against the patterns between <b>if</b> and <b>endif</b>. The <b>if</b>..<b>endif</b>
|
|
can nest.
|
|
|
|
Note: do not prepend whitespace to patterns inside <b>if</b>..<b>endif</b>.
|
|
|
|
This feature is available in Postfix 2.1 and later.
|
|
|
|
<b>if !/</b><i>pattern</i><b>/</b><i>flags</i>
|
|
|
|
<b>endif</b> If the input string does not match /<i>pattern</i>/, then match that
|
|
input string against the patterns between <b>if</b> and <b>endif</b>. The
|
|
<b>if</b>..<b>endif</b> can nest.
|
|
|
|
Note: do not prepend whitespace to patterns inside <b>if</b>..<b>endif</b>.
|
|
|
|
This feature is available in Postfix 2.1 and later.
|
|
|
|
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 logical line.
|
|
|
|
Each pattern is a perl-like regular expression. The expression delim-
|
|
iter can be any non-alphanumeric character, except whitespace or char-
|
|
acters that have special meaning (traditionally 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 controlled by flags, which are
|
|
toggled by appending one or more of the following characters after the
|
|
pattern:
|
|
|
|
<b>i</b> (default: on)
|
|
Toggles the case sensitivity flag. By default, matching is case
|
|
insensitive.
|
|
|
|
<b>m</b> (default: off)
|
|
Toggles the pcre MULTILINE flag. When this flag is on, the <b>^</b> and
|
|
<b>$</b> metacharacters match immediately after and immediately before
|
|
a newline character, respectively, in addition to matching at
|
|
the start and end of the subject string.
|
|
|
|
<b>s</b> (default: on)
|
|
Toggles the pcre DOTALL flag. When this flag is on, the <b>.</b>
|
|
metacharacter matches the newline character. With Postfix ver-
|
|
sions prior to 2.0, the flag is off by default, which is incon-
|
|
venient for multi-line message header matching.
|
|
|
|
<b>x</b> (default: off)
|
|
Toggles the pcre extended flag. When this flag is on, whitespace
|
|
characters in the pattern (other than in a character class) are
|
|
ignored. To include a whitespace character as part of the pat-
|
|
tern, escape it with backslash.
|
|
|
|
Note: do not use <b>#</b><i>comment</i> after patterns.
|
|
|
|
<b>A</b> (default: off)
|
|
Toggles the pcre ANCHORED flag. When this flag is on, the pat-
|
|
tern 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.
|
|
|
|
<b>E</b> (default: off)
|
|
Toggles the pcre DOLLAR_ENDONLY flag. When this flag is on, a <b>$</b>
|
|
metacharacter in the pattern matches only at the end of the sub-
|
|
ject 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 characters). This flag is
|
|
ignored if the pcre MULTILINE flag is set.
|
|
|
|
<b>U</b> (default: off)
|
|
Toggles the pcre UNGREEDY flag. When this flag is on, the pat-
|
|
tern matching engine inverts the "greediness" of the quantifiers
|
|
so that they are not greedy by default, but become greedy if
|
|
followed by "?". This flag can also set by a (?U) modifier
|
|
within the pattern.
|
|
|
|
<b>X</b> (default: off)
|
|
Toggles the pcre EXTRA flag. When this flag is on, any back-
|
|
slash in a pattern that is followed by a letter that has no spe-
|
|
cial meaning causes an error, thus reserving these combinations
|
|
for future expansion.
|
|
|
|
This feature is not supported with PCRE2.
|
|
|
|
<b><a name="search_order">SEARCH ORDER</a></b>
|
|
Patterns are applied in the order as specified in the table, until a
|
|
pattern is found that matches the input string.
|
|
|
|
Each pattern is applied to the entire input 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 par-
|
|
ent network search is done, and <i>user@domain</i> mail addresses are not bro-
|
|
ken up into their <i>user</i> and <i>domain</i> constituent parts, nor is <i>user+foo</i>
|
|
broken up into <i>user</i> and <i>foo</i>.
|
|
|
|
<b><a name="text_substitution">TEXT SUBSTITUTION</a></b>
|
|
Substitution of substrings (text that matches patterns inside "()")
|
|
from the matched expression into the result string is requested with
|
|
$1, $2, etc.; specify $$ to produce a $ character as output. The
|
|
macros in the result string may need to be written as ${n} or $(n) if
|
|
they aren't followed by whitespace. This feature does not support
|
|
pcre2 substring names.
|
|
|
|
Note: since negated patterns (those preceded by <b>!</b>) return a result when
|
|
the expression does not match, substitutions are not available for
|
|
negated patterns.
|
|
|
|
<b><a name="inline_specification">INLINE SPECIFICATION</a></b>
|
|
The contents of a table may be specified in the table name (Postfix 3.7
|
|
and later). The basic syntax is:
|
|
|
|
<a href="postconf.5.html">main.cf</a>:
|
|
<i>parameter</i> <b>= .. <a href="pcre_table.5.html">pcre</a>:{ {</b> <i>rule-1</i> <b>}, {</b> <i>rule-2</i> <b>} .. } ..</b>
|
|
|
|
<a href="master.5.html">master.cf</a>:
|
|
<b>.. -o {</b> <i>parameter</i> <b>= .. <a href="pcre_table.5.html">pcre</a>:{ {</b> <i>rule-1</i> <b>}, {</b> <i>rule-2</i> <b>} .. } .. } ..</b>
|
|
|
|
Postfix recursively expands any <i>$parametername</i> instances in the above
|
|
parameter value, ignores whitespace after '{' and before '}', and
|
|
writes each <i>rule</i> as one text line to an in-memory file:
|
|
|
|
in-memory file:
|
|
rule-1
|
|
rule-2
|
|
..
|
|
|
|
Postfix parses the result as if it is a file in /etc/postfix.
|
|
|
|
<b><a name="inline_specification_caveats">INLINE SPECIFICATION CAVEATS</a></b>
|
|
<b>o</b> When using <i>$parametername</i> inside an inlined pattern, use
|
|
\Q<i>$parametername</i>\E to disable metacharacters such as '.' in the
|
|
<i>$parametername</i> expansion. Otherwise, the pattern may have unex-
|
|
pected matches.
|
|
|
|
<b>o</b> When an inlined rule must contain <b>$</b>, specify <b>$$</b> to keep Postfix
|
|
from trying to do <i>$name</i> expansion as it evaluates a parameter
|
|
value. To check an inline configuration, use the "<b>postconf -x</b>"
|
|
option as shown below:
|
|
|
|
<b>o</b> When a <a href="postconf.5.html">main.cf</a> "<i>parametername = value</i>" setting contains
|
|
an inline <a href="pcre_table.5.html">pcre</a>: table, use the command "<b>postconf -x</b>
|
|
<i>parametername</i>". Verify that there are no "undefined
|
|
parameter" warnings, and that the output has the syntax
|
|
that one would use in a non-inlined Postfix <a href="pcre_table.5.html">pcre</a>: file.
|
|
|
|
<b>o</b> When a <a href="master.5.html">master.cf</a> "<b>-o {</b> <i>parametername = value</i> <b>}</b>" override
|
|
contains an inline <a href="pcre_table.5.html">pcre</a>: table, use the command "<b>postconf</b>
|
|
<b>-Px '*/*/</b><i>parametername</i><b>'</b> ". Verify that there are no
|
|
"undefined parameter" warnings, and that the output has
|
|
the syntax that one would use in a non-inlined Postfix
|
|
<a href="pcre_table.5.html">pcre</a>: file.
|
|
|
|
<b><a name="example_smtpd_access_map">EXAMPLE SMTPD ACCESS MAP</a></b>
|
|
# 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 $1
|
|
|
|
# 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.
|
|
|
|
<b><a name="example_header_filter_map">EXAMPLE HEADER FILTER MAP</a></b>
|
|
/^Subject: make money fast/ REJECT
|
|
/^To: friend@public\.com/ REJECT
|
|
|
|
<b><a name="example_body_filter_map">EXAMPLE BODY FILTER MAP</a></b>
|
|
# First skip over base 64 encoded text to save CPU cycles.
|
|
# Requires PCRE version 3.
|
|
~^[[:alnum:]+/]{60,}$~ OK
|
|
|
|
# Put your own body patterns here.
|
|
|
|
<b><a name="see_also">SEE ALSO</a></b>
|
|
<a href="postmap.1.html">postmap(1)</a>, Postfix lookup table manager
|
|
<a href="postconf.5.html">postconf(5)</a>, configuration parameters
|
|
<a href="regexp_table.5.html">regexp_table(5)</a>, format of POSIX regular expression tables
|
|
|
|
<b><a name="readme_files">README FILES</a></b>
|
|
<a href="DATABASE_README.html">DATABASE_README</a>, Postfix lookup table overview
|
|
|
|
<b>AUTHOR(S)</b>
|
|
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
|
|
|
|
Wietse Venema
|
|
Google, Inc.
|
|
111 8th Avenue
|
|
New York, NY 10011, USA
|
|
|
|
PCRE_TABLE(5)
|
|
</pre> </body> </html>
|