Sync usage with man page.
[netbsd-mini2440.git] / external / ibm-public / postfix / dist / man / man5 / mysql_table.5
blob39baf6aa53b10de10cd8ee36bb7f49116e8ca836
1 .\"     $NetBSD$
2 .\"
3 .TH MYSQL_TABLE 5 
4 .ad
5 .fi
6 .SH NAME
7 mysql_table
8 \-
9 Postfix MySQL client configuration
10 .SH "SYNOPSIS"
11 .na
12 .nf
13 \fBpostmap -q "\fIstring\fB" mysql:/etc/postfix/filename\fR
15 \fBpostmap -q - mysql:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
16 .SH DESCRIPTION
17 .ad
18 .fi
19 The Postfix mail system uses optional tables for address
20 rewriting or mail routing. These tables are usually in
21 \fBdbm\fR or \fBdb\fR format.
23 Alternatively, lookup tables can be specified as MySQL databases.
24 In order to use MySQL lookups, define a MySQL source as a lookup
25 table in main.cf, for example:
26 .nf
27     alias_maps = mysql:/etc/mysql-aliases.cf
28 .fi
30 The file /etc/postfix/mysql-aliases.cf has the same format as
31 the Postfix main.cf file, and can specify the parameters
32 described below.
33 .SH "BACKWARDS COMPATIBILITY"
34 .na
35 .nf
36 .ad
37 .fi
38 For compatibility with other Postfix lookup tables, MySQL
39 parameters can also be defined in main.cf.  In order to do that,
40 specify as MySQL source a name that doesn't begin with a slash
41 or a dot.  The MySQL parameters will then be accessible as the
42 name you've given the source in its definition, an underscore,
43 and the name of the parameter.  For example, if the map is
44 specified as "mysql:\fImysqlname\fR", the parameter "hosts"
45 below would be defined in main.cf as "\fImysqlname\fR_hosts".
47 Note: with this form, the passwords for the MySQL sources are
48 written in main.cf, which is normally world-readable.  Support
49 for this form will be removed in a future Postfix version.
51 Postfix 2.2 has enhanced query interfaces for MySQL and PostgreSQL;
52 these include features previously available only in the Postfix
53 LDAP client. In the new interface the SQL query is specified via
54 a single \fBquery\fR parameter (described in more detail below).
55 When the new \fBquery\fR parameter is not specified in the map
56 definition, Postfix reverts to the old interface, with the SQL
57 query constructed from the \fBselect_field\fR, \fBtable\fR,
58 \fBwhere_field\fR and \fBadditional_conditions\fR parameters.
59 The old interface will be gradually phased out. To migrate to
60 the new interface set:
62 .nf
63     \fBquery\fR = SELECT [\fIselect_field\fR]
64         FROM [\fItable\fR]
65         WHERE [\fIwhere_field\fR] = '%s'
66             [\fIadditional_conditions\fR]
67 .fi
69 Insert the value, not the name, of each legacy parameter. Note
70 that the \fBadditional_conditions\fR parameter is optional
71 and if not empty, will always start with \fBAND\fR.
72 .SH "LIST MEMBERSHIP"
73 .na
74 .nf
75 .ad
76 .fi
77 When using SQL to store lists such as $mynetworks,
78 $mydestination, $relay_domains, $local_recipient_maps,
79 etc., it is important to understand that the table must
80 store each list member as a separate key. The table lookup
81 verifies the *existence* of the key. See "Postfix lists
82 versus tables" in the DATABASE_README document for a
83 discussion.
85 Do NOT create tables that return the full list of domains
86 in $mydestination or $relay_domains etc., or IP addresses
87 in $mynetworks.
89 DO create tables with each matching item as a key and with
90 an arbitrary value. With SQL databases it is not uncommon to
91 return the key itself or a constant value.
92 .SH "MYSQL PARAMETERS"
93 .na
94 .nf
95 .ad
96 .fi
97 .IP "\fBhosts\fR"
98 The hosts that Postfix will try to connect to and query from.
99 Specify \fIunix:\fR for UNIX domain sockets, \fIinet:\fR for TCP
100 connections (default).  Example:
102     hosts = host1.some.domain host2.some.domain
103     hosts = unix:/file/name
106 The hosts are tried in random order, with all connections over
107 UNIX domain sockets being tried before those over TCP.  The
108 connections are automatically closed after being idle for about
109 1 minute, and are re-opened as necessary. Postfix versions 2.0
110 and earlier do not randomize the host order.
112 NOTE: if you specify localhost as a hostname (even if you
113 prefix it with \fIinet:\fR), MySQL will connect to the default
114 UNIX domain socket.  In order to instruct MySQL to connect to
115 localhost over TCP you have to specify
117     hosts = 127.0.0.1
119 .IP "\fBuser, password\fR"
120 The user name and password to log into the mysql server.
121 Example:
123     user = someone
124     password = some_password
126 .IP "\fBdbname\fR"
127 The database name on the servers. Example:
129     dbname = customer_database
131 .IP "\fBquery\fR"
132 The SQL query template used to search the database, where \fB%s\fR
133 is a substitute for the address Postfix is trying to resolve,
134 e.g.
136     query = SELECT replacement FROM aliases WHERE mailbox = '%s'
139 This parameter supports the following '%' expansions:
141 .IP "\fB\fB%%\fR\fR"
142 This is replaced by a literal '%' character.
143 .IP "\fB\fB%s\fR\fR"
144 This is replaced by the input key.
145 SQL quoting is used to make sure that the input key does not
146 add unexpected metacharacters.
147 .IP "\fB\fB%u\fR\fR"
148 When the input key is an address of the form user@domain, \fB%u\fR
149 is replaced by the SQL quoted local part of the address.
150 Otherwise, \fB%u\fR is replaced by the entire search string.
151 If the localpart is empty, the query is suppressed and returns
152 no results.
153 .IP "\fB\fB%d\fR\fR"
154 When the input key is an address of the form user@domain, \fB%d\fR
155 is replaced by the SQL quoted domain part of the address.
156 Otherwise, the query is suppressed and returns no results.
157 .IP "\fB\fB%[SUD]\fR\fR"
158 The upper-case equivalents of the above expansions behave in the
159 \fBquery\fR parameter identically to their lower-case counter-parts.
160 With the \fBresult_format\fR parameter (see below), they expand the
161 input key rather than the result value.
162 .IP "\fB\fB%[1-9]\fR\fR"
163 The patterns %1, %2, ... %9 are replaced by the corresponding
164 most significant component of the input key's domain. If the
165 input key is \fIuser@mail.example.com\fR, then %1 is \fBcom\fR,
166 %2 is \fBexample\fR and %3 is \fBmail\fR. If the input key is
167 unqualified or does not have enough domain components to satisfy
168 all the specified patterns, the query is suppressed and returns
169 no results.
172 The \fBdomain\fR parameter described below limits the input
173 keys to addresses in matching domains. When the \fBdomain\fR
174 parameter is non-empty, SQL queries for unqualified addresses
175 or addresses in non-matching domains are suppressed
176 and return no results.
178 This parameter is available with Postfix 2.2. In prior releases
179 the SQL query was built from the separate parameters:
180 \fBselect_field\fR, \fBtable\fR, \fBwhere_field\fR and
181 \fBadditional_conditions\fR. The mapping from the old parameters
182 to the equivalent query is:
185     SELECT [\fBselect_field\fR]
186     FROM [\fBtable\fR]
187     WHERE [\fBwhere_field\fR] = '%s'
188           [\fBadditional_conditions\fR]
191 The '%s' in the \fBWHERE\fR clause expands to the escaped search string.
192 With Postfix 2.2 these legacy parameters are used if the \fBquery\fR
193 parameter is not specified.
195 NOTE: DO NOT put quotes around the query parameter.
196 .IP "\fBresult_format (default: \fB%s\fR)\fR"
197 Format template applied to result attributes. Most commonly used
198 to append (or prepend) text to the result. This parameter supports
199 the following '%' expansions:
201 .IP "\fB\fB%%\fR\fR"
202 This is replaced by a literal '%' character.
203 .IP "\fB\fB%s\fR\fR"
204 This is replaced by the value of the result attribute. When
205 result is empty it is skipped.
206 .IP "\fB%u\fR
207 When the result attribute value is an address of the form
208 user@domain, \fB%u\fR is replaced by the local part of the
209 address. When the result has an empty localpart it is skipped.
210 .IP "\fB\fB%d\fR\fR"
211 When a result attribute value is an address of the form
212 user@domain, \fB%d\fR is replaced by the domain part of
213 the attribute value. When the result is unqualified it
214 is skipped.
215 .IP "\fB\fB%[SUD1-9]\fR\fB"
216 The upper-case and decimal digit expansions interpolate
217 the parts of the input key rather than the result. Their
218 behavior is identical to that described with \fBquery\fR,
219 and in fact because the input key is known in advance, queries
220 whose key does not contain all the information specified in
221 the result template are suppressed and return no results.
224 For example, using "result_format = smtp:[%s]" allows one
225 to use a mailHost attribute as the basis of a transport(5)
226 table. After applying the result format, multiple values
227 are concatenated as comma separated strings. The expansion_limit
228 and parameter explained below allows one to restrict the number
229 of values in the result, which is especially useful for maps that
230 must return at most one value.
232 The default value \fB%s\fR specifies that each result value should
233 be used as is.
235 This parameter is available with Postfix 2.2 and later.
237 NOTE: DO NOT put quotes around the result format!
238 .IP "\fBdomain (default: no domain list)\fR"
239 This is a list of domain names, paths to files, or
240 dictionaries. When specified, only fully qualified search
241 keys with a *non-empty* localpart and a matching domain
242 are eligible for lookup: 'user' lookups, bare domain lookups
243 and "@domain" lookups are not performed. This can significantly
244 reduce the query load on the MySQL server.
246     domain = postfix.org, hash:/etc/postfix/searchdomains
249 It is best not to use SQL to store the domains eligible
250 for SQL lookups.
252 This parameter is available with Postfix 2.2 and later.
254 NOTE: DO NOT define this parameter for local(8) aliases,
255 because the input keys are always unqualified.
256 .IP "\fBexpansion_limit (default: 0)\fR"
257 A limit on the total number of result elements returned
258 (as a comma separated list) by a lookup against the map.
259 A setting of zero disables the limit. Lookups fail with a
260 temporary error if the limit is exceeded.  Setting the
261 limit to 1 ensures that lookups do not return multiple
262 values.
263 .SH "OBSOLETE QUERY INTERFACE"
268 This section describes an interface that is deprecated as
269 of Postfix 2.2. It is replaced by the more general \fBquery\fR
270 interface described above.  If the \fBquery\fR parameter
271 is defined, the legacy parameters described here ignored.
272 Please migrate to the new interface as the legacy interface
273 may be removed in a future release.
275 The following parameters can be used to fill in a
276 SELECT template statement of the form:
279     SELECT [\fBselect_field\fR]
280     FROM [\fBtable\fR]
281     WHERE [\fBwhere_field\fR] = '%s'
282           [\fBadditional_conditions\fR]
285 The specifier %s is replaced by the search string, and is
286 escaped so if it contains single quotes or other odd characters,
287 it will not cause a parse error, or worse, a security problem.
288 .IP "\fBselect_field\fR"
289 The SQL "select" parameter. Example:
291     \fBselect_field\fR = forw_addr
293 .IP "\fBtable\fR"
294 The SQL "select .. from" table name. Example:
296     \fBtable\fR = mxaliases
298 .IP "\fBwhere_field\fR
299 The SQL "select .. where" parameter. Example:
301     \fBwhere_field\fR = alias
303 .IP "\fBadditional_conditions\fR
304 Additional conditions to the SQL query. Example:
306     \fBadditional_conditions\fR = AND status = 'paid'
308 .SH "SEE ALSO"
311 postmap(1), Postfix lookup table maintenance
312 postconf(5), configuration parameters
313 ldap_table(5), LDAP lookup tables
314 pgsql_table(5), PostgreSQL lookup tables
315 .SH "README FILES"
320 Use "\fBpostconf readme_directory\fR" or
321 "\fBpostconf html_directory\fR" to locate this information.
324 DATABASE_README, Postfix lookup table overview
325 MYSQL_README, Postfix MYSQL client guide
326 .SH "LICENSE"
331 The Secure Mailer license must be distributed with this software.
332 .SH "HISTORY"
335 MySQL support was introduced with Postfix version 1.0.
336 .SH "AUTHOR(S)"
339 Original implementation by:
340 Scott Cotton, Joshua Marcus
341 IC Group, Inc.
343 Further enhancements by:
344 Liviu Daia
345 Institute of Mathematics of the Romanian Academy
346 P.O. BOX 1-764
347 RO-014700 Bucharest, ROMANIA