PCRE_README.html revision 1.1.1.4 1 1.1 tron <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
2 1.1 tron "http://www.w3.org/TR/html4/loose.dtd">
3 1.1 tron
4 1.1 tron <html>
5 1.1 tron
6 1.1 tron <head>
7 1.1 tron
8 1.1 tron <title>Postfix PCRE Support</title>
9 1.1 tron
10 1.1.1.3 christos <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
11 1.1.1.4 christos <link rel='stylesheet' type='text/css' href='postfix-doc.css'>
12 1.1 tron
13 1.1 tron </head>
14 1.1 tron
15 1.1 tron <body>
16 1.1 tron
17 1.1 tron <h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix PCRE Support</h1>
18 1.1 tron
19 1.1 tron <hr>
20 1.1 tron
21 1.1 tron <h2>PCRE (Perl Compatible Regular Expressions) map support</h2>
22 1.1 tron
23 1.1 tron <p> The optional "pcre" map type allows you to specify regular
24 1.1 tron expressions with the PERL style notation such as \s for space and
25 1.1 tron \S for non-space. The main benefit, however, is that pcre lookups
26 1.1 tron are often faster than regexp lookups. This is because the pcre
27 1.1 tron implementation is often more efficient than the POSIX regular
28 1.1 tron expression implementation that you find on many systems. </p>
29 1.1 tron
30 1.1 tron <p> A description of how to use pcre tables, including examples,
31 1.1 tron is given in the <a href="pcre_table.5.html">pcre_table(5)</a> manual page. Information about PCRE
32 1.1 tron itself can be found at <a href="http://www.pcre.org/">http://www.pcre.org/</a>. </p>
33 1.1 tron
34 1.1.1.3 christos <h2>Using Postfix packages with PCRE support</h2>
35 1.1 tron
36 1.1.1.3 christos <p> To use pcre with Debian GNU/Linux's Postfix, or with Fedora or
37 1.1.1.3 christos RHEL Postfix, all you
38 1.1 tron need is to install the postfix-pcre package and you're done. There
39 1.1 tron is no need to recompile Postfix. </p>
40 1.1 tron
41 1.1.1.3 christos <h2>Building Postfix from source with PCRE support</h2>
42 1.1 tron
43 1.1.1.3 christos <p> These instructions assume that you build Postfix from source
44 1.1.1.3 christos code as described in the <a href="INSTALL.html">INSTALL</a> document. </p>
45 1.1 tron
46 1.1.1.3 christos <p> To build Postfix from source with pcre support, you need a pcre
47 1.1.1.3 christos library. Install a vendor package, or download the source code from
48 1.1.1.3 christos locations in <a href="https://www.pcre.org/">https://www.pcre.org/</a> and build that yourself.
49 1.1.1.3 christos
50 1.1.1.3 christos <p> Postfix can build with the pcre2 library or the legacy pcre
51 1.1.1.3 christos library. It's probably easiest to let the Postfix build procedure
52 1.1.1.3 christos pick one. The following commands will first discover if the pcre2
53 1.1.1.3 christos library is installed, and if that is not available, will discover
54 1.1.1.3 christos if the legacy pcre library is installed. </p>
55 1.1.1.3 christos
56 1.1.1.3 christos <blockquote>
57 1.1.1.3 christos <pre>
58 1.1.1.3 christos $ make -f Makefile.init makefiles
59 1.1.1.3 christos $ make
60 1.1.1.3 christos </pre>
61 1.1 tron </blockquote>
62 1.1 tron
63 1.1.1.3 christos <p> To build Postfix explicitly with a pcre2 library (Postfix 3.7
64 1.1.1.3 christos and later): </p>
65 1.1.1.3 christos
66 1.1.1.3 christos <blockquote>
67 1.1.1.3 christos <pre>
68 1.1.1.3 christos $ make -f Makefile.init makefiles \
69 1.1.1.3 christos "CCARGS=-DHAS_PCRE=2 `pcre2-config --cflags`" \
70 1.1.1.3 christos "<a href="PCRE_README.html">AUXLIBS_PCRE</a>=`pcre2-config --libs8`"
71 1.1.1.3 christos $ make
72 1.1.1.3 christos </pre>
73 1.1.1.3 christos </blockquote>
74 1.1 tron
75 1.1.1.3 christos <p> To build Postfix explicitly with a legacy pcre library (all
76 1.1.1.3 christos Postfix versions): </p>
77 1.1 tron
78 1.1 tron <blockquote>
79 1.1 tron <pre>
80 1.1.1.3 christos $ make -f Makefile.init makefiles \
81 1.1.1.3 christos "CCARGS=-DHAS_PCRE=1 `pcre-config --cflags`" \
82 1.1.1.2 christos "<a href="PCRE_README.html">AUXLIBS_PCRE</a>=`pcre-config --libs`"
83 1.1.1.3 christos $ make
84 1.1 tron </pre>
85 1.1 tron </blockquote>
86 1.1 tron
87 1.1.1.2 christos <p> Postfix versions before 3.0 use AUXLIBS instead of <a href="PCRE_README.html">AUXLIBS_PCRE</a>.
88 1.1.1.2 christos With Postfix 3.0 and later, the old AUXLIBS variable still supports
89 1.1.1.2 christos building a statically-loaded PCRE database client, but only the new
90 1.1.1.2 christos <a href="PCRE_README.html">AUXLIBS_PCRE</a> variable supports building a dynamically-loaded or
91 1.1.1.2 christos statically-loaded PCRE database client. </p>
92 1.1 tron
93 1.1 tron <blockquote>
94 1.1.1.2 christos
95 1.1.1.2 christos <p> Failure to use the <a href="PCRE_README.html">AUXLIBS_PCRE</a> variable will defeat the purpose
96 1.1.1.2 christos of dynamic database client loading. Every Postfix executable file
97 1.1.1.2 christos will have PCRE library dependencies. And that was exactly
98 1.1.1.2 christos what dynamic database client loading was meant to avoid. </p>
99 1.1.1.2 christos
100 1.1 tron </blockquote>
101 1.1 tron
102 1.1 tron <h2>Things to know</h2>
103 1.1 tron
104 1.1 tron <ul>
105 1.1 tron
106 1.1 tron <li> <p> When Postfix searches a <a href="pcre_table.5.html">pcre</a>: or <a href="regexp_table.5.html">regexp</a>: lookup table,
107 1.1 tron each pattern is applied to the entire input string. Depending on
108 1.1 tron the application, that string is an entire client hostname, an entire
109 1.1 tron client IP address, or an entire mail address. Thus, no parent domain
110 1.1 tron or parent network search is done, "user@domain" mail addresses are
111 1.1 tron not broken up into their user and domain constituent parts, and
112 1.1 tron "user+foo" is not broken up into user and foo. </p>
113 1.1 tron
114 1.1 tron <li> <p> Regular expression tables such as <a href="pcre_table.5.html">pcre</a>: or <a href="regexp_table.5.html">regexp</a>: are
115 1.1 tron not allowed to do $number substitution in lookup results that can
116 1.1 tron be security sensitive: currently, that restriction applies to the
117 1.1 tron local <a href="aliases.5.html">aliases(5)</a> database or the <a href="virtual.8.html">virtual(8)</a> delivery agent tables.
118 1.1 tron </p>
119 1.1 tron
120 1.1 tron </ul>
121 1.1 tron
122 1.1 tron </body>
123 1.1 tron
124 1.1 tron </html>
125