Ensure version numbers all updated
[exim.git] / doc / doc-docbook / spec.xfpt
CommitLineData
0eb8eedd 1. $Cambridge: exim/doc/doc-docbook/spec.xfpt,v 1.69 2009/11/16 19:15:36 nm4 Exp $
9b371988
PH
2.
3. /////////////////////////////////////////////////////////////////////////////
4. This is the primary source of the Exim Manual. It is an xfpt document that is
5. converted into DocBook XML for subsequent conversion into printing and online
6. formats. The markup used herein is "standard" xfpt markup, with some extras.
7. The markup is summarized in a file called Markup.txt.
595028e4
PH
8.
9. WARNING: When you use the .new macro, make sure it appears *before* any
10. adjacent index items; otherwise you get an empty "paragraph" which causes
11. unwanted vertical space.
9b371988
PH
12. /////////////////////////////////////////////////////////////////////////////
13
14.include stdflags
15.include stdmacs
9b371988
PH
16
17. /////////////////////////////////////////////////////////////////////////////
33393583 18. This outputs the standard DocBook boilerplate.
9b371988
PH
19. /////////////////////////////////////////////////////////////////////////////
20
33393583 21.docbook
3cb1b51e
PH
22
23. /////////////////////////////////////////////////////////////////////////////
24. These lines are processing instructions for the Simple DocBook Processor that
f89d2485
PH
25. Philip Hazel has developed as a less cumbersome way of making PostScript and
26. PDFs than using xmlto and fop. They will be ignored by all other XML
27. processors.
3cb1b51e
PH
28. /////////////////////////////////////////////////////////////////////////////
29
30.literal xml
31<?sdop
f89d2485
PH
32 foot_right_recto="&chaptertitle; (&chapternumber;)"
33 foot_right_verso="&chaptertitle; (&chapternumber;)"
3cb1b51e 34 toc_chapter_blanks="yes,yes"
595028e4 35 table_warn_overflow="overprint"
3cb1b51e
PH
36?>
37.literal off
9b371988 38
33393583
PH
39. /////////////////////////////////////////////////////////////////////////////
40. This generate the outermost <book> element that wraps then entire document.
41. /////////////////////////////////////////////////////////////////////////////
42
43.book
44
45. /////////////////////////////////////////////////////////////////////////////
46. These definitions set some parameters and save some typing. Remember that
47. the <bookinfo> element must also be updated for each new edition.
48. /////////////////////////////////////////////////////////////////////////////
49
210f147e 50.set previousversion "4.69"
7c6d71af 51.set version "4.71"
f89d2485 52
33393583 53.set ACL "access control lists (ACLs)"
f89d2485 54.set I "&nbsp;&nbsp;&nbsp;&nbsp;"
33393583 55
9b371988
PH
56
57. /////////////////////////////////////////////////////////////////////////////
58. Additional xfpt markup used by this document, over and above the default
59. provided in the xfpt library.
60. /////////////////////////////////////////////////////////////////////////////
61
62. --- Override the &$ flag to automatically insert a $ with the variable name
63
64.flag &$ $& "<varname>$" "</varname>"
65
66. --- Short flags for daggers in option headings. They will always be inside
67. --- an italic string, but we want the daggers to be roman.
68
69.flag &!! "</emphasis>&dagger;<emphasis>"
70.flag &!? "</emphasis>&Dagger;<emphasis>"
71
72. --- A macro for an Exim option definition heading, generating a one-line
0a4e3112
PH
73. --- table with four columns. For cases when the option name is given with
74. --- a space, so that it can be split, a fifth argument is used for the
75. --- index entry.
9b371988
PH
76
77.macro option
0a4e3112
PH
78.arg 5
79.oindex "&%$5%&"
80.endarg
81.arg -5
3cb1b51e 82.oindex "&%$1%&"
0a4e3112 83.endarg
f89d2485 84.itable all 0 0 4 8* left 6* center 6* center 6* right
9b371988
PH
85.row "&%$1%&" "Use: &'$2'&" "Type: &'$3'&" "Default: &'$4'&"
86.endtable
87.endmacro
88
89. --- A macro for the common 2-column tables. The width of the first column
90. --- is suitable for the many tables at the start of the main options chapter;
91. --- the small number of other 2-column tables override it.
92
db9452a9 93.macro table2 196pt 254pt
9b371988
PH
94.itable none 0 0 2 $1 left $2 left
95.endmacro
96
f89d2485
PH
97. --- A macro that generates .row, but puts &I; at the start of the first
98. --- argument, thus indenting it. Assume a minimum of two arguments, and
99. --- allow up to four arguments, which is as many as we'll ever need.
100
101.macro irow
102.arg 4
103.row "&I;$1" "$2" "$3" "$4"
104.endarg
105.arg -4
106.arg 3
107.row "&I;$1" "$2" "$3"
108.endarg
109.arg -3
110.row "&I;$1" "$2"
111.endarg
112.endarg
113.endmacro
114
115. --- Macros for option, variable, and concept index entries. For a "range"
116. --- style of entry, use .scindex for the start and .ecindex for the end. The
117. --- first argument of .scindex and the only argument of .ecindex must be the
118. --- ID that ties them together.
9b371988
PH
119
120.macro cindex
121&<indexterm role="concept">&
122&<primary>&$1&</primary>&
123.arg 2
124&<secondary>&$2&</secondary>&
125.endarg
126&</indexterm>&
127.endmacro
128
4f578862
PH
129.macro scindex
130&<indexterm role="concept" id="$1" class="startofrange">&
131&<primary>&$2&</primary>&
132.arg 3
133&<secondary>&$3&</secondary>&
134.endarg
135&</indexterm>&
136.endmacro
137
138.macro ecindex
139&<indexterm role="concept" startref="$1" class="endofrange"/>&
140.endmacro
141
9b371988
PH
142.macro oindex
143&<indexterm role="option">&
144&<primary>&$1&</primary>&
145.arg 2
146&<secondary>&$2&</secondary>&
147.endarg
148&</indexterm>&
149.endmacro
150
f89d2485
PH
151.macro vindex
152&<indexterm role="variable">&
153&<primary>&$1&</primary>&
154.arg 2
155&<secondary>&$2&</secondary>&
156.endarg
157&</indexterm>&
158.endmacro
159
9b371988 160.macro index
f89d2485 161.echo "** Don't use .index; use .cindex or .oindex or .vindex"
9b371988
PH
162.endmacro
163. ////////////////////////////////////////////////////////////////////////////
164
165
166. ////////////////////////////////////////////////////////////////////////////
167. The <bookinfo> element is removed from the XML before processing for Ascii
168. output formats.
169. ////////////////////////////////////////////////////////////////////////////
170
171.literal xml
172<bookinfo>
173<title>Specification of the Exim Mail Transfer Agent</title>
174<titleabbrev>The Exim MTA</titleabbrev>
7b4c60eb
NM
175<date>5 November 2009</date>
176<author><firstname>Exim</firstname><surname>Maintainers</surname></author>
177<authorinitials>EM</authorinitials>
9b371988 178<revhistory><revision>
7c6d71af 179 <revnumber>4.71</revnumber>
7b4c60eb
NM
180 <date>5 November 2009</date>
181 <authorinitials>EM</authorinitials>
9b371988 182</revision></revhistory>
68950195 183<copyright><year>2009</year><holder>University of Cambridge</holder></copyright>
9b371988
PH
184</bookinfo>
185.literal off
186
187
188. /////////////////////////////////////////////////////////////////////////////
189. This chunk of literal XML implements index entries of the form "x, see y" and
190. "x, see also y". However, the DocBook DTD doesn't allow <indexterm> entries
191. at the top level, so we have to put the .chapter directive first.
192. /////////////////////////////////////////////////////////////////////////////
193
f89d2485 194.chapter "Introduction" "CHID1"
9b371988
PH
195.literal xml
196
f89d2485 197<indexterm role="variable">
168e428f
PH
198 <primary>$1, $2, etc.</primary>
199 <see><emphasis>numerical variables</emphasis></see>
200</indexterm>
201<indexterm role="concept">
202 <primary>address</primary>
203 <secondary>rewriting</secondary>
204 <see><emphasis>rewriting</emphasis></see>
205</indexterm>
068aaea8
PH
206<indexterm role="concept">
207 <primary>Bounce Address Tag Validation</primary>
208 <see><emphasis>BATV</emphasis></see>
209</indexterm>
210<indexterm role="concept">
211 <primary>Client SMTP Authorization</primary>
212 <see><emphasis>CSA</emphasis></see>
213</indexterm>
168e428f
PH
214<indexterm role="concept">
215 <primary>CR character</primary>
216 <see><emphasis>carriage return</emphasis></see>
217</indexterm>
218<indexterm role="concept">
219 <primary>CRL</primary>
220 <see><emphasis>certificate revocation list</emphasis></see>
221</indexterm>
222<indexterm role="concept">
223 <primary>delivery</primary>
224 <secondary>failure report</secondary>
225 <see><emphasis>bounce message</emphasis></see>
226</indexterm>
227<indexterm role="concept">
228 <primary>dialup</primary>
229 <see><emphasis>intermittently connected hosts</emphasis></see>
230</indexterm>
231<indexterm role="concept">
232 <primary>exiscan</primary>
233 <see><emphasis>content scanning</emphasis></see>
234</indexterm>
235<indexterm role="concept">
236 <primary>failover</primary>
237 <see><emphasis>fallback</emphasis></see>
238</indexterm>
239<indexterm role="concept">
240 <primary>fallover</primary>
241 <see><emphasis>fallback</emphasis></see>
242</indexterm>
243<indexterm role="concept">
244 <primary>filter</primary>
245 <secondary>Sieve</secondary>
246 <see><emphasis>Sieve filter</emphasis></see>
247</indexterm>
248<indexterm role="concept">
249 <primary>ident</primary>
250 <see><emphasis>RFC 1413</emphasis></see>
251</indexterm>
252<indexterm role="concept">
253 <primary>LF character</primary>
254 <see><emphasis>linefeed</emphasis></see>
255</indexterm>
256<indexterm role="concept">
257 <primary>maximum</primary>
595028e4 258 <seealso><emphasis>limit</emphasis></seealso>
168e428f 259</indexterm>
068aaea8
PH
260<indexterm role="concept">
261 <primary>monitor</primary>
262 <see><emphasis>Exim monitor</emphasis></see>
263</indexterm>
168e428f
PH
264<indexterm role="concept">
265 <primary>no_<emphasis>xxx</emphasis></primary>
266 <see>entry for xxx</see>
267</indexterm>
268<indexterm role="concept">
269 <primary>NUL</primary>
270 <see><emphasis>binary zero</emphasis></see>
271</indexterm>
272<indexterm role="concept">
273 <primary>passwd file</primary>
274 <see><emphasis>/etc/passwd</emphasis></see>
275</indexterm>
276<indexterm role="concept">
277 <primary>process id</primary>
278 <see><emphasis>pid</emphasis></see>
279</indexterm>
280<indexterm role="concept">
281 <primary>RBL</primary>
282 <see><emphasis>DNS list</emphasis></see>
283</indexterm>
284<indexterm role="concept">
285 <primary>redirection</primary>
286 <see><emphasis>address redirection</emphasis></see>
287</indexterm>
288<indexterm role="concept">
289 <primary>return path</primary>
290 <seealso><emphasis>envelope sender</emphasis></seealso>
291</indexterm>
292<indexterm role="concept">
293 <primary>scanning</primary>
294 <see><emphasis>content scanning</emphasis></see>
295</indexterm>
296<indexterm role="concept">
297 <primary>SSL</primary>
298 <see><emphasis>TLS</emphasis></see>
299</indexterm>
300<indexterm role="concept">
301 <primary>string</primary>
302 <secondary>expansion</secondary>
303 <see><emphasis>expansion</emphasis></see>
304</indexterm>
305<indexterm role="concept">
306 <primary>top bit</primary>
307 <see><emphasis>8-bit characters</emphasis></see>
308</indexterm>
309<indexterm role="concept">
310 <primary>variables</primary>
311 <see><emphasis>expansion, variables</emphasis></see>
312</indexterm>
313<indexterm role="concept">
314 <primary>zero, binary</primary>
315 <see><emphasis>binary zero</emphasis></see>
316</indexterm>
9b371988
PH
317
318.literal off
168e428f
PH
319
320
9b371988
PH
321. /////////////////////////////////////////////////////////////////////////////
322. This is the real start of the first chapter. See the comment above as to why
323. we can't have the .chapter line here.
324. chapter "Introduction"
325. /////////////////////////////////////////////////////////////////////////////
168e428f
PH
326
327Exim is a mail transfer agent (MTA) for hosts that are running Unix or
328Unix-like operating systems. It was designed on the assumption that it would be
329run on hosts that are permanently connected to the Internet. However, it can be
330used on intermittently connected hosts with suitable configuration adjustments.
331
332Configuration files currently exist for the following operating systems: AIX,
068aaea8
PH
333BSD/OS (aka BSDI), Darwin (Mac OS X), DGUX, Dragonfly, FreeBSD, GNU/Hurd,
334GNU/Linux, HI-OSF (Hitachi), HI-UX, HP-UX, IRIX, MIPS RISCOS, NetBSD, OpenBSD,
335OpenUNIX, QNX, SCO, SCO SVR4.2 (aka UNIX-SV), Solaris (aka SunOS5), SunOS4,
336Tru64-Unix (formerly Digital UNIX, formerly DEC-OSF1), Ultrix, and Unixware.
337Some of these operating systems are no longer current and cannot easily be
338tested, so the configuration files may no longer work in practice.
168e428f
PH
339
340There are also configuration files for compiling Exim in the Cygwin environment
341that can be installed on systems running Windows. However, this document does
342not contain any information about running Exim in the Cygwin environment.
343
344The terms and conditions for the use and distribution of Exim are contained in
9b371988
PH
345the file &_NOTICE_&. Exim is distributed under the terms of the GNU General
346Public Licence, a copy of which may be found in the file &_LICENCE_&.
168e428f
PH
347
348The use, supply or promotion of Exim for the purpose of sending bulk,
349unsolicited electronic mail is incompatible with the basic aims of the program,
350which revolve around the free provision of a service that enhances the quality
351of personal communications. The author of Exim regards indiscriminate
352mass-mailing as an antisocial, irresponsible abuse of the Internet.
353
354Exim owes a great deal to Smail 3 and its author, Ron Karr. Without the
355experience of running and working on the Smail 3 code, I could never have
356contemplated starting to write a new MTA. Many of the ideas and user interfaces
357were originally taken from Smail 3, though the actual code of Exim is entirely
358new, and has developed far beyond the initial concept.
359
360Many people, both in Cambridge and around the world, have contributed to the
361development and the testing of Exim, and to porting it to various operating
362systems. I am grateful to them all. The distribution now contains a file called
9b371988 363&_ACKNOWLEDGMENTS_&, in which I have started recording the names of
168e428f
PH
364contributors.
365
366
f89d2485 367.section "Exim documentation" "SECID1"
800d5176
TF
368. Keep this example change bar when updating the documentation!
369.new
9b371988
PH
370.cindex "documentation"
371This edition of the Exim specification applies to version &version; of Exim.
372Substantive changes from the &previousversion; edition are marked in some
168e428f
PH
373renditions of the document; this paragraph is so marked if the rendition is
374capable of showing a change indicator.
800d5176 375.wen
168e428f
PH
376
377This document is very much a reference manual; it is not a tutorial. The reader
378is expected to have some familiarity with the SMTP mail transfer protocol and
379with general Unix system administration. Although there are some discussions
380and examples in places, the information is mostly organized in a way that makes
381it easy to look up, rather than in a natural order for sequential reading.
382Furthermore, the manual aims to cover every aspect of Exim in detail, including
383a number of rarely-used, special-purpose features that are unlikely to be of
384very wide interest.
385
9b371988
PH
386.cindex "books about Exim"
387An &"easier"& discussion of Exim which provides more in-depth explanatory,
388introductory, and tutorial material can be found in a book entitled &'The Exim
595028e4 389SMTP Mail Server'& (second edition, 2007), published by UIT Cambridge
9b371988 390(&url(http://www.uit.co.uk/exim-book/)).
168e428f
PH
391
392This book also contains a chapter that gives a general introduction to SMTP and
393Internet mail. Inevitably, however, the book is unlikely to be fully up-to-date
394with the latest release of Exim. (Note that the earlier book about Exim,
395published by O'Reilly, covers Exim 3, and many things have changed in Exim 4.)
396
9b371988 397.cindex "Debian" "information sources"
068aaea8
PH
398If you are using a Debian distribution of Exim, you will find information about
399Debian-specific features in the file
f89d2485 400&_/usr/share/doc/exim4-base/README.Debian_&.
9b371988 401The command &(man update-exim.conf)& is another source of Debian-specific
068aaea8
PH
402information.
403
9b371988
PH
404.cindex "&_doc/NewStuff_&"
405.cindex "&_doc/ChangeLog_&"
406.cindex "change log"
168e428f
PH
407As the program develops, there may be features in newer versions that have not
408yet made it into this document, which is updated only when the most significant
409digit of the fractional part of the version number changes. Specifications of
410new features that are not yet in this manual are placed in the file
9b371988 411&_doc/NewStuff_& in the Exim distribution.
168e428f 412
9b371988 413Some features may be classified as &"experimental"&. These may change
168e428f
PH
414incompatibly while they are developing, or even be withdrawn. For this reason,
415they are not documented in this manual. Information about experimental features
9b371988 416can be found in the file &_doc/experimental.txt_&.
168e428f
PH
417
418All changes to the program (whether new features, bug fixes, or other kinds of
9b371988 419change) are noted briefly in the file called &_doc/ChangeLog_&.
168e428f 420
9b371988
PH
421.cindex "&_doc/spec.txt_&"
422This specification itself is available as an ASCII file in &_doc/spec.txt_& so
423that it can easily be searched with a text editor. Other files in the &_doc_&
168e428f
PH
424directory are:
425
9b371988
PH
426.table2 100pt
427.row &_OptionLists.txt_& "list of all options in alphabetical order"
428.row &_dbm.discuss.txt_& "discussion about DBM libraries"
429.row &_exim.8_& "a man page of Exim's command line options"
430.row &_experimental.txt_& "documentation of experimental features"
431.row &_filter.txt_& "specification of the filter language"
9b371988
PH
432.row &_Exim3.upgrade_& "upgrade notes from release 2 to release 3"
433.row &_Exim4.upgrade_& "upgrade notes from release 3 to release 4"
434.endtable
168e428f
PH
435
436The main specification and the specification of the filtering language are also
437available in other formats (HTML, PostScript, PDF, and Texinfo). Section
9b371988 438&<<SECTavail>>& below tells you how to get hold of these.
168e428f
PH
439
440
441
f89d2485 442.section "FTP and web sites" "SECID2"
9b371988
PH
443.cindex "web site"
444.cindex "FTP site"
068aaea8 445The primary site for Exim source distributions is currently the University of
9b371988
PH
446Cambridge's FTP site, whose contents are described in &'Where to find the Exim
447distribution'& below. In addition, there is a web site and an FTP site at
448&%exim.org%&. These are now also hosted at the University of Cambridge. The
449&%exim.org%& site was previously hosted for a number of years by Energis
450Squared, formerly Planet Online Ltd, whose support I gratefully acknowledge.
451
452.cindex "wiki"
453.cindex "FAQ"
168e428f 454As well as Exim distribution tar files, the Exim web site contains a number of
f89d2485 455differently formatted versions of the documentation. A recent addition to the
7d0ab55c 456online information is the Exim wiki (&url(http://wiki.exim.org)),
f89d2485
PH
457which contains what used to be a separate FAQ, as well as various other
458examples, tips, and know-how that have been contributed by Exim users.
459
460.cindex Bugzilla
7d0ab55c 461An Exim Bugzilla exists at &url(http://bugs.exim.org). You can use
f89d2485
PH
462this to report bugs, and also to add items to the wish list. Please search
463first to check that you are not duplicating a previous entry.
168e428f
PH
464
465
466
f89d2485 467.section "Mailing lists" "SECID3"
9b371988 468.cindex "mailing lists" "for Exim users"
f89d2485 469The following Exim mailing lists exist:
168e428f 470
9b371988 471.table2 140pt
f89d2485
PH
472.row &'exim-users@exim.org'& "General discussion list"
473.row &'exim-dev@exim.org'& "Discussion of bugs, enhancements, etc."
474.row &'exim-announce@exim.org'& "Moderated, low volume announcements list"
475.row &'exim-future@exim.org'& "Discussion of long-term development"
9b371988 476.endtable
168e428f
PH
477
478You can subscribe to these lists, change your existing subscriptions, and view
9b371988
PH
479or search the archives via the mailing lists link on the Exim home page.
480.cindex "Debian" "mailing list for"
4f578862 481If you are using a Debian distribution of Exim, you may wish to subscribe to
db9452a9
PH
482the Debian-specific mailing list &'pkg-exim4-users@lists.alioth.debian.org'&
483via this web page:
484.display
485&url(http://lists.alioth.debian.org/mailman/listinfo/pkg-exim4-users)
486.endd
487Please ask Debian-specific questions on this list and not on the general Exim
488lists.
9b371988 489
f89d2485 490.section "Exim training" "SECID4"
9b371988 491.cindex "training courses"
595028e4
PH
492Training courses in Cambridge (UK) used to be run annually by the author of
493Exim, before he retired. At the time of writing, there are no plans to run
494further Exim courses in Cambridge. However, if that changes, relevant
495information will be posted at &url(http://www-tus.csx.cam.ac.uk/courses/exim/).
168e428f 496
f89d2485 497.section "Bug reports" "SECID5"
9b371988
PH
498.cindex "bug reports"
499.cindex "reporting bugs"
7d0ab55c
TF
500Reports of obvious bugs can be emailed to &'bugs@exim.org'& or reported
501via the Bugzilla (&url(http://bugs.exim.org)). However, if you are unsure
595028e4
PH
502whether some behaviour is a bug or not, the best thing to do is to post a
503message to the &'exim-dev'& mailing list and have it discussed.
168e428f
PH
504
505
506
9b371988
PH
507.section "Where to find the Exim distribution" "SECTavail"
508.cindex "FTP site"
509.cindex "distribution" "ftp site"
168e428f 510The master ftp site for the Exim distribution is
9b371988
PH
511.display
512&*ftp://ftp.csx.cam.ac.uk/pub/software/email/exim*&
513.endd
168e428f 514This is mirrored by
9b371988
PH
515.display
516&*ftp://ftp.exim.org/pub/exim*&
517.endd
518The file references that follow are relative to the &_exim_& directories at
519these sites. There are now quite a number of independent mirror sites around
520the world. Those that I know about are listed in the file called &_Mirrors_&.
521
522Within the &_exim_& directory there are subdirectories called &_exim3_& (for
523previous Exim 3 distributions), &_exim4_& (for the latest Exim 4
524distributions), and &_Testing_& for testing versions. In the &_exim4_&
168e428f 525subdirectory, the current release can always be found in files called
9b371988
PH
526.display
527&_exim-n.nn.tar.gz_&
528&_exim-n.nn.tar.bz2_&
529.endd
530where &'n.nn'& is the highest such version number in the directory. The two
168e428f 531files contain identical data; the only difference is the type of compression.
9b371988 532The &_.bz2_& file is usually a lot smaller than the &_.gz_& file.
168e428f 533
9b371988
PH
534.cindex "distribution" "signing details"
535.cindex "distribution" "public key"
536.cindex "public key for signed distribution"
210f147e 537The distributions are currently signed with Nigel Metheringham's GPG key. The
168e428f 538corresponding public key is available from a number of keyservers, and there is
210f147e 539also a copy in the file &_nigel-pubkey.asc_&. The signatures for the tar bundles are
168e428f 540in:
9b371988 541.display
210f147e
NM
542&_exim-n.nn.tar.gz.asc_&
543&_exim-n.nn.tar.bz2.asc_&
9b371988 544.endd
168e428f 545For each released version, the log of changes is made separately available in a
9b371988 546separate file in the directory &_ChangeLogs_& so that it is possible to
168e428f
PH
547find out what has changed without having to download the entire distribution.
548
9b371988 549.cindex "documentation" "available formats"
168e428f
PH
550The main distribution contains ASCII versions of this specification and other
551documentation; other formats of the documents are available in separate files
9b371988
PH
552inside the &_exim4_& directory of the FTP site:
553.display
554&_exim-html-n.nn.tar.gz_&
555&_exim-pdf-n.nn.tar.gz_&
556&_exim-postscript-n.nn.tar.gz_&
557&_exim-texinfo-n.nn.tar.gz_&
558.endd
559These tar files contain only the &_doc_& directory, not the complete
560distribution, and are also available in &_.bz2_& as well as &_.gz_& forms.
168e428f 561
168e428f 562
f89d2485 563.section "Limitations" "SECID6"
9b371988
PH
564.ilist
565.cindex "limitations of Exim"
566.cindex "bang paths" "not handled by Exim"
567Exim is designed for use as an Internet MTA, and therefore handles addresses in
568RFC 2822 domain format only. It cannot handle UUCP &"bang paths"&, though
569simple two-component bang paths can be converted by a straightforward rewriting
570configuration. This restriction does not prevent Exim from being interfaced to
571UUCP as a transport mechanism, provided that domain addresses are used.
572.next
573.cindex "domainless addresses"
574.cindex "address" "without domain"
168e428f
PH
575Exim insists that every address it handles has a domain attached. For incoming
576local messages, domainless addresses are automatically qualified with a
577configured domain value. Configuration options specify from which remote
578systems unqualified addresses are acceptable. These are then qualified on
579arrival.
9b371988
PH
580.next
581.cindex "transport" "external"
582.cindex "external transports"
583The only external transport mechanisms that are currently implemented are SMTP
584and LMTP over a TCP/IP network (including support for IPv6). However, a pipe
168e428f 585transport is available, and there are facilities for writing messages to files
9b371988
PH
586and pipes, optionally in &'batched SMTP'& format; these facilities can be used
587to send messages to other transport mechanisms such as UUCP, provided they can
588handle domain-style addresses. Batched SMTP input is also catered for.
589.next
590Exim is not designed for storing mail for dial-in hosts. When the volumes of
591such mail are large, it is better to get the messages &"delivered"& into files
168e428f
PH
592(that is, off Exim's queue) and subsequently passed on to the dial-in hosts by
593other means.
9b371988
PH
594.next
595Although Exim does have basic facilities for scanning incoming messages, these
168e428f
PH
596are not comprehensive enough to do full virus or spam scanning. Such operations
597are best carried out using additional specialized software packages. If you
598compile Exim with the content-scanning extension, straightforward interfaces to
599a number of common scanners are provided.
9b371988 600.endlist
168e428f
PH
601
602
f89d2485 603.section "Run time configuration" "SECID7"
168e428f
PH
604Exim's run time configuration is held in a single text file that is divided
605into a number of sections. The entries in this file consist of keywords and
606values, in the style of Smail 3 configuration files. A default configuration
607file which is suitable for simple online installations is provided in the
9b371988 608distribution, and is described in chapter &<<CHAPdefconfil>>& below.
168e428f
PH
609
610
f89d2485 611.section "Calling interface" "SECID8"
9b371988 612.cindex "Sendmail compatibility" "command line interface"
168e428f 613Like many MTAs, Exim has adopted the Sendmail command line interface so that it
9b371988
PH
614can be a straight replacement for &_/usr/lib/sendmail_& or
615&_/usr/sbin/sendmail_& when sending mail, but you do not need to know anything
168e428f
PH
616about Sendmail in order to run Exim. For actions other than sending messages,
617Sendmail-compatible options also exist, but those that produce output (for
9b371988 618example, &%-bp%&, which lists the messages on the queue) do so in Exim's own
168e428f 619format. There are also some additional options that are compatible with Smail
9b371988 6203, and some further options that are new to Exim. Chapter &<<CHAPcommandline>>&
168e428f
PH
621documents all Exim's command line options. This information is automatically
622made into the man page that forms part of the Exim distribution.
623
624Control of messages on the queue can be done via certain privileged command
9b371988
PH
625line options. There is also an optional monitor program called &'eximon'&,
626which displays current information in an X window, and which contains a menu
168e428f
PH
627interface to Exim's command line administration options.
628
629
630
f89d2485 631.section "Terminology" "SECID9"
9b371988
PH
632.cindex "terminology definitions"
633.cindex "body of message" "definition of"
634The &'body'& of a message is the actual data that the sender wants to transmit.
635It is the last part of a message, and is separated from the &'header'& (see
168e428f
PH
636below) by a blank line.
637
9b371988 638.cindex "bounce message" "definition of"
168e428f 639When a message cannot be delivered, it is normally returned to the sender in a
9b371988
PH
640delivery failure message or a &"non-delivery report"& (NDR). The term
641&'bounce'& is commonly used for this action, and the error reports are often
642called &'bounce messages'&. This is a convenient shorthand for &"delivery
643failure error report"&. Such messages have an empty sender address in the
644message's &'envelope'& (see below) to ensure that they cannot themselves give
645rise to further bounce messages.
646
647The term &'default'& appears frequently in this manual. It is used to qualify a
168e428f
PH
648value which is used in the absence of any setting in the configuration. It may
649also qualify an action which is taken unless a configuration setting specifies
650otherwise.
651
9b371988 652The term &'defer'& is used when the delivery of a message to a specific
168e428f 653destination cannot immediately take place for some reason (a remote host may be
9b371988 654down, or a user's local mailbox may be full). Such deliveries are &'deferred'&
168e428f
PH
655until a later time.
656
9b371988
PH
657The word &'domain'& is sometimes used to mean all but the first component of a
658host's name. It is &'not'& used in that sense here, where it normally refers to
659the part of an email address following the @ sign.
168e428f 660
f89d2485 661.cindex "envelope, definition of"
9b371988
PH
662.cindex "sender" "definition of"
663A message in transit has an associated &'envelope'&, as well as a header and a
168e428f
PH
664body. The envelope contains a sender address (to which bounce messages should
665be delivered), and any number of recipient addresses. References to the
666sender or the recipients of a message usually mean the addresses in the
667envelope. An MTA uses these addresses for delivery, and for returning bounce
668messages, not the addresses that appear in the header lines.
669
f89d2485 670.cindex "message" "header, definition of"
9b371988
PH
671.cindex "header section" "definition of"
672The &'header'& of a message is the first part of a message's text, consisting
673of a number of lines, each of which has a name such as &'From:'&, &'To:'&,
674&'Subject:'&, etc. Long header lines can be split over several text lines by
168e428f
PH
675indenting the continuations. The header is separated from the body by a blank
676line.
677
9b371988
PH
678.cindex "local part" "definition of"
679.cindex "domain" "definition of"
680The term &'local part'&, which is taken from RFC 2822, is used to refer to that
168e428f 681part of an email address that precedes the @ sign. The part that follows the
9b371988 682@ sign is called the &'domain'& or &'mail domain'&.
168e428f 683
9b371988 684.cindex "local delivery" "definition of"
f89d2485 685.cindex "remote delivery, definition of"
9b371988 686The terms &'local delivery'& and &'remote delivery'& are used to distinguish
168e428f 687delivery to a file or a pipe on the local host from delivery by SMTP over
068aaea8 688TCP/IP to another host. As far as Exim is concerned, all hosts other than the
9b371988 689host it is running on are &'remote'&.
168e428f 690
9b371988
PH
691.cindex "return path" "definition of"
692&'Return path'& is another name that is used for the sender address in a
168e428f
PH
693message's envelope.
694
9b371988
PH
695.cindex "queue" "definition of"
696The term &'queue'& is used to refer to the set of messages awaiting delivery,
168e428f
PH
697because this term is in widespread use in the context of MTAs. However, in
698Exim's case the reality is more like a pool than a queue, because there is
699normally no ordering of waiting messages.
700
9b371988
PH
701.cindex "queue runner" "definition of"
702The term &'queue runner'& is used to describe a process that scans the queue
168e428f 703and attempts to deliver those messages whose retry times have come. This term
9b371988 704is used by other MTAs, and also relates to the command &%runq%&, but in Exim
168e428f
PH
705the waiting messages are normally processed in an unpredictable order.
706
9b371988
PH
707.cindex "spool directory" "definition of"
708The term &'spool directory'& is used for a directory in which Exim keeps the
709messages on its queue &-- that is, those that it is in the process of
168e428f 710delivering. This should not be confused with the directory in which local
9b371988
PH
711mailboxes are stored, which is called a &"spool directory"& by some people. In
712the Exim documentation, &"spool"& is always used in the first sense.
168e428f
PH
713
714
715
716
717
718
9b371988
PH
719. ////////////////////////////////////////////////////////////////////////////
720. ////////////////////////////////////////////////////////////////////////////
168e428f 721
f89d2485 722.chapter "Incorporated code" "CHID2"
9b371988
PH
723.cindex "incorporated code"
724.cindex "regular expressions" "library"
725.cindex "PCRE"
168e428f
PH
726A number of pieces of external code are included in the Exim distribution.
727
9b371988 728.ilist
71e1673f 729.new
210f147e
NM
730Regular expressions are supported in the main Exim program and in the
731Exim monitor using the freely-distributable PCRE library, copyright
40df1be3
TF
732&copy; University of Cambridge. The source to PCRE is no longer shipped with
733Exim, so you will need to use the version of PCRE shipped with your system,
734or obtain and install the full version of the library from
f89d2485 735&url(ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre).
71e1673f 736.wen
9b371988 737.next
f89d2485 738.cindex "cdb" "acknowledgment"
168e428f
PH
739Support for the cdb (Constant DataBase) lookup method is provided by code
740contributed by Nigel Metheringham of (at the time he contributed it) Planet
9b371988
PH
741Online Ltd. The implementation is completely contained within the code of Exim.
742It does not link against an external cdb library. The code contains the
743following statements:
744
745.blockquote
746Copyright &copy; 1998 Nigel Metheringham, Planet Online Ltd
747
168e428f
PH
748This program is free software; you can redistribute it and/or modify it under
749the terms of the GNU General Public License as published by the Free Software
750Foundation; either version 2 of the License, or (at your option) any later
751version.
168e428f
PH
752This code implements Dan Bernstein's Constant DataBase (cdb) spec. Information,
753the spec and sample code for cdb can be obtained from
f89d2485
PH
754&url(http://www.pobox.com/~djb/cdb.html). This implementation borrows
755some code from Dan Bernstein's implementation (which has no license
756restrictions applied to it).
9b371988
PH
757.endblockquote
758.next
759.cindex "SPA authentication"
760.cindex "Samba project"
761.cindex "Microsoft Secure Password Authentication"
762Client support for Microsoft's &'Secure Password Authentication'& is provided
168e428f
PH
763by code contributed by Marc Prud'hommeaux. Server support was contributed by
764Tom Kistner. This includes code taken from the Samba project, which is released
765under the Gnu GPL.
9b371988
PH
766.next
767.cindex "Cyrus"
768.cindex "&'pwcheck'& daemon"
769.cindex "&'pwauthd'& daemon"
770Support for calling the Cyrus &'pwcheck'& and &'saslauthd'& daemons is provided
168e428f
PH
771by code taken from the Cyrus-SASL library and adapted by Alexander S.
772Sabourenkov. The permission notice appears below, in accordance with the
773conditions expressed therein.
9b371988
PH
774
775.blockquote
776Copyright &copy; 2001 Carnegie Mellon University. All rights reserved.
777
168e428f
PH
778Redistribution and use in source and binary forms, with or without
779modification, are permitted provided that the following conditions
780are met:
168e428f 781
9b371988
PH
782.olist
783Redistributions of source code must retain the above copyright
784notice, this list of conditions and the following disclaimer.
785.next
786Redistributions in binary form must reproduce the above copyright
168e428f
PH
787notice, this list of conditions and the following disclaimer in
788the documentation and/or other materials provided with the
789distribution.
9b371988
PH
790.next
791The name &"Carnegie Mellon University"& must not be used to
168e428f
PH
792endorse or promote products derived from this software without
793prior written permission. For permission or any other legal
794details, please contact
9b371988 795.display
068aaea8
PH
796 Office of Technology Transfer
797 Carnegie Mellon University
798 5000 Forbes Avenue
799 Pittsburgh, PA 15213-3890
800 (412) 268-4387, fax: (412) 268-7395
801 tech-transfer@andrew.cmu.edu
9b371988
PH
802.endd
803.next
804Redistributions of any form whatsoever must retain the following
168e428f 805acknowledgment:
9b371988
PH
806
807&"This product includes software developed by Computing Services
808at Carnegie Mellon University (&url(http://www.cmu.edu/computing/)."&
809
168e428f
PH
810CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
811THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
812AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
813FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
814WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
815AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
816OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
9b371988
PH
817.endlist
818.endblockquote
168e428f 819
9b371988 820.next
f89d2485 821.cindex "Exim monitor" "acknowledgment"
9b371988
PH
822.cindex "X-windows"
823.cindex "Athena"
168e428f
PH
824The Exim Monitor program, which is an X-Window application, includes
825modified versions of the Athena StripChart and TextPop widgets.
826This code is copyright by DEC and MIT, and their permission notice appears
827below, in accordance with the conditions expressed therein.
9b371988
PH
828
829.blockquote
168e428f
PH
830Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts,
831and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
9b371988 832
168e428f 833All Rights Reserved
9b371988 834
168e428f
PH
835Permission to use, copy, modify, and distribute this software and its
836documentation for any purpose and without fee is hereby granted,
837provided that the above copyright notice appear in all copies and that
838both that copyright notice and this permission notice appear in
839supporting documentation, and that the names of Digital or MIT not be
840used in advertising or publicity pertaining to distribution of the
841software without specific, written prior permission.
9b371988 842
168e428f
PH
843DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
844ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
845DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
846ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
847WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
848ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
849SOFTWARE.
9b371988 850.endblockquote
168e428f 851
9b371988
PH
852.next
853Many people have contributed code fragments, some large, some small, that were
168e428f 854not covered by any specific licence requirements. It is assumed that the
f89d2485 855contributors are happy to see their code incorporated into Exim under the GPL.
9b371988 856.endlist
168e428f
PH
857
858
859
860
861
9b371988
PH
862. ////////////////////////////////////////////////////////////////////////////
863. ////////////////////////////////////////////////////////////////////////////
168e428f 864
f89d2485 865.chapter "How Exim receives and delivers mail" "CHID11" &&&
9b371988 866 "Receiving and delivering mail"
168e428f
PH
867
868
f89d2485 869.section "Overall philosophy" "SECID10"
9b371988 870.cindex "design philosophy"
168e428f
PH
871Exim is designed to work efficiently on systems that are permanently connected
872to the Internet and are handling a general mix of mail. In such circumstances,
873most messages can be delivered immediately. Consequently, Exim does not
874maintain independent queues of messages for specific domains or hosts, though
875it does try to send several messages in a single SMTP connection after a host
876has been down, and it also maintains per-host retry information.
877
878
f89d2485 879.section "Policy control" "SECID11"
9b371988 880.cindex "policy control" "overview"
168e428f
PH
881Policy controls are now an important feature of MTAs that are connected to the
882Internet. Perhaps their most important job is to stop MTAs being abused as
9b371988
PH
883&"open relays"& by misguided individuals who send out vast amounts of
884unsolicited junk, and want to disguise its source. Exim provides flexible
885facilities for specifying policy controls on incoming mail:
168e428f 886
9b371988
PH
887.ilist
888.cindex "&ACL;" "introduction"
168e428f 889Exim 4 (unlike previous versions of Exim) implements policy controls on
9b371988 890incoming mail by means of &'Access Control Lists'& (ACLs). Each list is a
168e428f
PH
891series of statements that may either grant or deny access. ACLs can be used at
892several places in the SMTP dialogue while receiving a message from a remote
9b371988
PH
893host. However, the most common places are after each RCPT command, and at the
894very end of the message. The sysadmin can specify conditions for accepting or
895rejecting individual recipients or the entire message, respectively, at these
896two points (see chapter &<<CHAPACL>>&). Denial of access results in an SMTP
168e428f 897error code.
9b371988
PH
898.next
899An ACL is also available for locally generated, non-SMTP messages. In this
168e428f 900case, the only available actions are to accept or deny the entire message.
9b371988
PH
901.next
902When Exim is compiled with the content-scanning extension, facilities are
168e428f
PH
903provided in the ACL mechanism for passing the message to external virus and/or
904spam scanning software. The result of such a scan is passed back to the ACL,
905which can then use it to decide what to do with the message.
9b371988
PH
906.next
907When a message has been received, either from a remote host or from the local
f89d2485 908host, but before the final acknowledgment has been sent, a locally supplied C
9b371988
PH
909function called &[local_scan()]& can be run to inspect the message and decide
910whether to accept it or not (see chapter &<<CHAPlocalscan>>&). If the message
911is accepted, the list of recipients can be modified by the function.
912.next
913Using the &[local_scan()]& mechanism is another way of calling external scanner
914software. The &%SA-Exim%& add-on package works this way. It does not require
915Exim to be compiled with the content-scanning extension.
916.next
917After a message has been accepted, a further checking mechanism is available in
918the form of the &'system filter'& (see chapter &<<CHAPsystemfilter>>&). This
919runs at the start of every delivery process.
920.endlist
921
922
923
f89d2485 924.section "User filters" "SECID12"
9b371988
PH
925.cindex "filter" "introduction"
926.cindex "Sieve filter"
168e428f 927In a conventional Exim configuration, users are able to run private filters by
9b371988
PH
928setting up appropriate &_.forward_& files in their home directories. See
929chapter &<<CHAPredirect>>& (about the &(redirect)& router) for the
930configuration needed to support this, and the separate document entitled
931&'Exim's interfaces to mail filtering'& for user details. Two different kinds
932of filtering are available:
933
934.ilist
935Sieve filters are written in the standard filtering language that is defined
168e428f 936by RFC 3028.
9b371988
PH
937.next
938Exim filters are written in a syntax that is unique to Exim, but which is more
168e428f 939powerful than Sieve, which it pre-dates.
9b371988 940.endlist
168e428f
PH
941
942User filters are run as part of the routing process, described below.
943
944
945
9b371988
PH
946.section "Message identification" "SECTmessiden"
947.cindex "message ids" "details of format"
948.cindex "format" "of message id"
949.cindex "id of message"
950.cindex "base62"
951.cindex "base36"
952.cindex "Darwin"
953.cindex "Cygwin"
954Every message handled by Exim is given a &'message id'& which is sixteen
168e428f 955characters long. It is divided into three parts, separated by hyphens, for
9b371988 956example &`16VDhn-0001bo-D3`&. Each part is a sequence of letters and digits,
168e428f
PH
957normally encoding numbers in base 62. However, in the Darwin operating
958system (Mac OS X) and when Exim is compiled to run under Cygwin, base 36
959(avoiding the use of lower case letters) is used instead, because the message
960id is used to construct file names, and the names of files in those systems are
068aaea8 961not always case-sensitive.
168e428f 962
9b371988 963.cindex "pid (process id)" "re-use of"
168e428f
PH
964The detail of the contents of the message id have changed as Exim has evolved.
965Earlier versions relied on the operating system not re-using a process id (pid)
966within one second. On modern operating systems, this assumption can no longer
967be made, so the algorithm had to be changed. To retain backward compatibility,
968the format of the message id was retained, which is why the following rules are
969somewhat eccentric:
970
9b371988
PH
971.ilist
972The first six characters of the message id are the time at which the message
168e428f
PH
973started to be received, to a granularity of one second. That is, this field
974contains the number of seconds since the start of the epoch (the normal Unix
975way of representing the date and time of day).
9b371988
PH
976.next
977After the first hyphen, the next six characters are the id of the process that
168e428f 978received the message.
9b371988
PH
979.next
980There are two different possibilities for the final two characters:
981.olist
0a4e3112 982.oindex "&%localhost_number%&"
9b371988 983If &%localhost_number%& is not set, this value is the fractional part of the
168e428f
PH
984time of reception, normally in units of 1/2000 of a second, but for systems
985that must use base 36 instead of base 62 (because of case-insensitive file
986systems), the units are 1/1000 of a second.
9b371988
PH
987.next
988If &%localhost_number%& is set, it is multiplied by 200 (100) and added to
168e428f
PH
989the fractional part of the time, which in this case is in units of 1/200
990(1/100) of a second.
9b371988
PH
991.endlist
992.endlist
168e428f
PH
993
994After a message has been received, Exim waits for the clock to tick at the
995appropriate resolution before proceeding, so that if another message is
996received by the same process, or by another process with the same (re-used)
997pid, it is guaranteed that the time will be different. In most cases, the clock
998will already have ticked while the message was being received.
999
1000
f89d2485 1001.section "Receiving mail" "SECID13"
9b371988
PH
1002.cindex "receiving mail"
1003.cindex "message" "reception"
068aaea8
PH
1004The only way Exim can receive mail from another host is using SMTP over
1005TCP/IP, in which case the sender and recipient addresses are transferred using
168e428f
PH
1006SMTP commands. However, from a locally running process (such as a user's MUA),
1007there are several possibilities:
1008
9b371988
PH
1009.ilist
1010If the process runs Exim with the &%-bm%& option, the message is read
168e428f 1011non-interactively (usually via a pipe), with the recipients taken from the
9b371988
PH
1012command line, or from the body of the message if &%-t%& is also used.
1013.next
1014If the process runs Exim with the &%-bS%& option, the message is also read
168e428f
PH
1015non-interactively, but in this case the recipients are listed at the start of
1016the message in a series of SMTP RCPT commands, terminated by a DATA
9b371988 1017command. This is so-called &"batch SMTP"& format,
168e428f
PH
1018but it isn't really SMTP. The SMTP commands are just another way of passing
1019envelope addresses in a non-interactive submission.
9b371988
PH
1020.next
1021If the process runs Exim with the &%-bs%& option, the message is read
168e428f
PH
1022interactively, using the SMTP protocol. A two-way pipe is normally used for
1023passing data between the local process and the Exim process.
9b371988 1024This is &"real"& SMTP and is handled in the same way as SMTP over TCP/IP. For
168e428f 1025example, the ACLs for SMTP commands are used for this form of submission.
9b371988
PH
1026.next
1027A local process may also make a TCP/IP call to the host's loopback address
168e428f
PH
1028(127.0.0.1) or any other of its IP addresses. When receiving messages, Exim
1029does not treat the loopback address specially. It treats all such connections
1030in the same way as connections from other hosts.
9b371988 1031.endlist
168e428f
PH
1032
1033
f89d2485 1034.cindex "message sender, constructed by Exim"
9b371988 1035.cindex "sender" "constructed by Exim"
168e428f
PH
1036In the three cases that do not involve TCP/IP, the sender address is
1037constructed from the login name of the user that called Exim and a default
9b371988 1038qualification domain (which can be set by the &%qualify_domain%& configuration
168e428f
PH
1039option). For local or batch SMTP, a sender address that is passed using the
1040SMTP MAIL command is ignored. However, the system administrator may allow
9b371988 1041certain users (&"trusted users"&) to specify a different sender address
168e428f 1042unconditionally, or all users to specify certain forms of different sender
9b371988
PH
1043address. The &%-f%& option or the SMTP MAIL command is used to specify these
1044different addresses. See section &<<SECTtrustedadmin>>& for details of trusted
1045users, and the &%untrusted_set_sender%& option for a way of allowing untrusted
168e428f
PH
1046users to change sender addresses.
1047
1048Messages received by either of the non-interactive mechanisms are subject to
1049checking by the non-SMTP ACL, if one is defined. Messages received using SMTP
1050(either over TCP/IP, or interacting with a local process) can be checked by a
1051number of ACLs that operate at different times during the SMTP session. Either
1052individual recipients, or the entire message, can be rejected if local policy
9b371988
PH
1053requirements are not met. The &[local_scan()]& function (see chapter
1054&<<CHAPlocalscan>>&) is run for all incoming messages.
168e428f
PH
1055
1056Exim can be configured not to start a delivery process when a message is
1057received; this can be unconditional, or depend on the number of incoming SMTP
1058connections or the system load. In these situations, new messages wait on the
1059queue until a queue runner process picks them up. However, in standard
1060configurations under normal conditions, delivery is started as soon as a
1061message is received.
1062
1063
1064
1065
1066
f89d2485 1067.section "Handling an incoming message" "SECID14"
9b371988
PH
1068.cindex "spool directory" "files that hold a message"
1069.cindex "file" "how a message is held"
168e428f
PH
1070When Exim accepts a message, it writes two files in its spool directory. The
1071first contains the envelope information, the current status of the message, and
1072the header lines, and the second contains the body of the message. The names of
9b371988
PH
1073the two spool files consist of the message id, followed by &`-H`& for the
1074file containing the envelope and header, and &`-D`& for the data file.
168e428f 1075
9b371988 1076.cindex "spool directory" "&_input_& sub-directory"
168e428f 1077By default all these message files are held in a single directory called
9b371988 1078&_input_& inside the general Exim spool directory. Some operating systems do
c0712871 1079not perform very well if the number of files in a directory gets large; to
9b371988 1080improve performance in such cases, the &%split_spool_directory%& option can be
168e428f 1081used. This causes Exim to split up the input files into 62 sub-directories
db9452a9 1082whose names are single letters or digits. When this is done, the queue is
c0712871
PH
1083processed one sub-directory at a time instead of all at once, which can improve
1084overall performance even when there are not enough files in each directory to
db9452a9 1085affect file system performance.
168e428f
PH
1086
1087The envelope information consists of the address of the message's sender and
1088the addresses of the recipients. This information is entirely separate from
1089any addresses contained in the header lines. The status of the message includes
1090a list of recipients who have already received the message. The format of the
9b371988 1091first spool file is described in chapter &<<CHAPspool>>&.
168e428f 1092
9b371988 1093.cindex "rewriting" "addresses"
168e428f 1094Address rewriting that is specified in the rewrite section of the configuration
9b371988 1095(see chapter &<<CHAPrewrite>>&) is done once and for all on incoming addresses,
168e428f
PH
1096both in the header lines and the envelope, at the time the message is accepted.
1097If during the course of delivery additional addresses are generated (for
1098example, via aliasing), these new addresses are rewritten as soon as they are
1099generated. At the time a message is actually delivered (transported) further
1100rewriting can take place; because this is a transport option, it can be
1101different for different forms of delivery. It is also possible to specify the
1102addition or removal of certain header lines at the time the message is
9b371988
PH
1103delivered (see chapters &<<CHAProutergeneric>>& and
1104&<<CHAPtransportgeneric>>&).
168e428f
PH
1105
1106
1107
f89d2485 1108.section "Life of a message" "SECID15"
9b371988
PH
1109.cindex "message" "life of"
1110.cindex "message" "frozen"
168e428f
PH
1111A message remains in the spool directory until it is completely delivered to
1112its recipients or to an error address, or until it is deleted by an
1113administrator or by the user who originally created it. In cases when delivery
9b371988
PH
1114cannot proceed &-- for example, when a message can neither be delivered to its
1115recipients nor returned to its sender, the message is marked &"frozen"& on the
168e428f
PH
1116spool, and no more deliveries are attempted.
1117
9b371988
PH
1118.cindex "frozen messages" "thawing"
1119.cindex "message" "thawing frozen"
1120An administrator can &"thaw"& such messages when the problem has been
1121corrected, and can also freeze individual messages by hand if necessary. In
1122addition, an administrator can force a delivery error, causing a bounce message
1123to be sent.
1124
0a4e3112
PH
1125.oindex "&%timeout_frozen_after%&"
1126.oindex "&%ignore_bounce_errors_after%&"
9b371988
PH
1127There are options called &%ignore_bounce_errors_after%& and
1128&%timeout_frozen_after%&, which discard frozen messages after a certain time.
068aaea8 1129The first applies only to frozen bounces, the second to any frozen messages.
168e428f 1130
9b371988
PH
1131.cindex "message" "log file for"
1132.cindex "log" "file for each message"
168e428f 1133While Exim is working on a message, it writes information about each delivery
068aaea8 1134attempt to its main log file. This includes successful, unsuccessful, and
9b371988
PH
1135delayed deliveries for each recipient (see chapter &<<CHAPlog>>&). The log
1136lines are also written to a separate &'message log'& file for each message.
1137These logs are solely for the benefit of the administrator, and are normally
1138deleted along with the spool files when processing of a message is complete.
168e428f 1139The use of individual message logs can be disabled by setting
9b371988
PH
1140&%no_message_logs%&; this might give an improvement in performance on very busy
1141systems.
168e428f 1142
9b371988
PH
1143.cindex "journal file"
1144.cindex "file" "journal"
168e428f
PH
1145All the information Exim itself needs to set up a delivery is kept in the first
1146spool file, along with the header lines. When a successful delivery occurs, the
1147address is immediately written at the end of a journal file, whose name is the
9b371988
PH
1148message id followed by &`-J`&. At the end of a delivery run, if there are some
1149addresses left to be tried again later, the first spool file (the &`-H`& file)
168e428f
PH
1150is updated to indicate which these are, and the journal file is then deleted.
1151Updating the spool file is done by writing a new file and renaming it, to
1152minimize the possibility of data loss.
1153
1154Should the system or the program crash after a successful delivery but before
1155the spool file has been updated, the journal is left lying around. The next
1156time Exim attempts to deliver the message, it reads the journal file and
1157updates the spool file before proceeding. This minimizes the chances of double
1158deliveries caused by crashes.
1159
1160
1161
9b371988
PH
1162.section "Processing an address for delivery" "SECTprocaddress"
1163.cindex "drivers" "definition of"
1164.cindex "router" "definition of"
1165.cindex "transport" "definition of"
1166The main delivery processing elements of Exim are called &'routers'& and
1167&'transports'&, and collectively these are known as &'drivers'&. Code for a
168e428f
PH
1168number of them is provided in the source distribution, and compile-time options
1169specify which ones are included in the binary. Run time options specify which
1170ones are actually used for delivering messages.
1171
9b371988
PH
1172.cindex "drivers" "instance definition"
1173Each driver that is specified in the run time configuration is an &'instance'&
168e428f 1174of that particular driver type. Multiple instances are allowed; for example,
9b371988 1175you can set up several different &(smtp)& transports, each with different
168e428f
PH
1176option values that might specify different ports or different timeouts. Each
1177instance has its own identifying name. In what follows we will normally use the
1178instance name when discussing one particular instance (that is, one specific
1179configuration of the driver), and the generic driver name when discussing
1180the driver's features in general.
1181
9b371988 1182A &'router'& is a driver that operates on an address, either determining how
068aaea8 1183its delivery should happen, by assigning it to a specific transport, or
168e428f
PH
1184converting the address into one or more new addresses (for example, via an
1185alias file). A router may also explicitly choose to fail an address, causing it
1186to be bounced.
1187
9b371988
PH
1188A &'transport'& is a driver that transmits a copy of the message from Exim's
1189spool to some destination. There are two kinds of transport: for a &'local'&
168e428f 1190transport, the destination is a file or a pipe on the local host, whereas for a
9b371988 1191&'remote'& transport the destination is some other host. A message is passed
168e428f
PH
1192to a specific transport as a result of successful routing. If a message has
1193several recipients, it may be passed to a number of different transports.
1194
9b371988 1195.cindex "preconditions" "definition of"
168e428f
PH
1196An address is processed by passing it to each configured router instance in
1197turn, subject to certain preconditions, until a router accepts the address or
1198specifies that it should be bounced. We will describe this process in more
068aaea8
PH
1199detail shortly. First, as a simple example, we consider how each recipient
1200address in a message is processed in a small configuration of three routers.
168e428f 1201
068aaea8 1202To make this a more concrete example, it is described in terms of some actual
168e428f
PH
1203routers, but remember, this is only an example. You can configure Exim's
1204routers in many different ways, and there may be any number of routers in a
1205configuration.
1206
1207The first router that is specified in a configuration is often one that handles
1208addresses in domains that are not recognized specially by the local host. These
1209are typically addresses for arbitrary domains on the Internet. A precondition
1210is set up which looks for the special domains known to the host (for example,
9b371988 1211its own domain name), and the router is run for addresses that do &'not'&
168e428f
PH
1212match. Typically, this is a router that looks up domains in the DNS in order to
1213find the hosts to which this address routes. If it succeeds, the address is
068aaea8 1214assigned to a suitable SMTP transport; if it does not succeed, the router is
168e428f
PH
1215configured to fail the address.
1216
068aaea8 1217The second router is reached only when the domain is recognized as one that
9b371988 1218&"belongs"& to the local host. This router does redirection &-- also known as
068aaea8
PH
1219aliasing and forwarding. When it generates one or more new addresses from the
1220original, each of them is routed independently from the start. Otherwise, the
1221router may cause an address to fail, or it may simply decline to handle the
1222address, in which case the address is passed to the next router.
168e428f
PH
1223
1224The final router in many configurations is one that checks to see if the
1225address belongs to a local mailbox. The precondition may involve a check to
1226see if the local part is the name of a login account, or it may look up the
1227local part in a file or a database. If its preconditions are not met, or if
1228the router declines, we have reached the end of the routers. When this happens,
1229the address is bounced.
1230
1231
1232
f89d2485 1233.section "Processing an address for verification" "SECID16"
9b371988
PH
1234.cindex "router" "for verification"
1235.cindex "verifying address" "overview"
168e428f 1236As well as being used to decide how to deliver to an address, Exim's routers
9b371988 1237are also used for &'address verification'&. Verification can be requested as
168e428f 1238one of the checks to be performed in an ACL for incoming messages, on both
9b371988
PH
1239sender and recipient addresses, and it can be tested using the &%-bv%& and
1240&%-bvs%& command line options.
168e428f 1241
9b371988 1242When an address is being verified, the routers are run in &"verify mode"&. This
168e428f
PH
1243does not affect the way the routers work, but it is a state that can be
1244detected. By this means, a router can be skipped or made to behave differently
1245when verifying. A common example is a configuration in which the first router
1246sends all messages to a message-scanning program, unless they have been
1247previously scanned. Thus, the first router accepts all addresses without any
9b371988 1248checking, making it useless for verifying. Normally, the &%no_verify%& option
168e428f
PH
1249would be set for such a router, causing it to be skipped in verify mode.
1250
1251
1252
1253
9b371988
PH
1254.section "Running an individual router" "SECTrunindrou"
1255.cindex "router" "running details"
1256.cindex "preconditions" "checking"
1257.cindex "router" "result of running"
168e428f
PH
1258As explained in the example above, a number of preconditions are checked before
1259running a router. If any are not met, the router is skipped, and the address is
9b371988 1260passed to the next router. When all the preconditions on a router &'are'& met,
168e428f
PH
1261the router is run. What happens next depends on the outcome, which is one of
1262the following:
1263
9b371988
PH
1264.ilist
1265&'accept'&: The router accepts the address, and either assigns it to a
1266transport, or generates one or more &"child"& addresses. Processing the
1267original address ceases,
0a4e3112 1268.oindex "&%unseen%&"
9b371988 1269unless the &%unseen%& option is set on the router. This option
168e428f 1270can be used to set up multiple deliveries with different routing (for example,
9b371988
PH
1271for keeping archive copies of messages). When &%unseen%& is set, the address is
1272passed to the next router. Normally, however, an &'accept'& return marks the
168e428f 1273end of routing.
9b371988 1274
068aaea8
PH
1275Any child addresses generated by the router are processed independently,
1276starting with the first router by default. It is possible to change this by
9b371988
PH
1277setting the &%redirect_router%& option to specify which router to start at for
1278child addresses. Unlike &%pass_router%& (see below) the router specified by
1279&%redirect_router%& may be anywhere in the router configuration.
1280.next
1281&'pass'&: The router recognizes the address, but cannot handle it itself. It
168e428f
PH
1282requests that the address be passed to another router. By default the address
1283is passed to the next router, but this can be changed by setting the
9b371988 1284&%pass_router%& option. However, (unlike &%redirect_router%&) the named router
168e428f 1285must be below the current router (to avoid loops).
9b371988
PH
1286.next
1287&'decline'&: The router declines to accept the address because it does not
168e428f 1288recognize it at all. By default, the address is passed to the next router, but
9b371988
PH
1289this can be prevented by setting the &%no_more%& option. When &%no_more%& is
1290set, all the remaining routers are skipped. In effect, &%no_more%& converts
1291&'decline'& into &'fail'&.
1292.next
1293&'fail'&: The router determines that the address should fail, and queues it for
168e428f 1294the generation of a bounce message. There is no further processing of the
9b371988
PH
1295original address unless &%unseen%& is set on the router.
1296.next
1297&'defer'&: The router cannot handle the address at the present time. (A
068aaea8
PH
1298database may be offline, or a DNS lookup may have timed out.) No further
1299processing of the address happens in this delivery attempt. It is tried again
1300next time the message is considered for delivery.
9b371988
PH
1301.next
1302&'error'&: There is some error in the router (for example, a syntax error in
168e428f 1303its configuration). The action is as for defer.
9b371988 1304.endlist
168e428f
PH
1305
1306If an address reaches the end of the routers without having been accepted by
068aaea8 1307any of them, it is bounced as unrouteable. The default error message in this
9b371988
PH
1308situation is &"unrouteable address"&, but you can set your own message by
1309making use of the &%cannot_route_message%& option. This can be set for any
1310router; the value from the last router that &"saw"& the address is used.
168e428f
PH
1311
1312Sometimes while routing you want to fail a delivery when some conditions are
1313met but others are not, instead of passing the address on for further routing.
1314You can do this by having a second router that explicitly fails the delivery
9b371988 1315when the relevant conditions are met. The &(redirect)& router has a &"fail"&
168e428f
PH
1316facility for this purpose.
1317
1318
f89d2485 1319.section "Duplicate addresses" "SECID17"
9b371988 1320.cindex "case of local parts"
f89d2485 1321.cindex "address duplicate, discarding"
db9452a9 1322.cindex "duplicate addresses"
068aaea8
PH
1323Once routing is complete, Exim scans the addresses that are assigned to local
1324and remote transports, and discards any duplicates that it finds. During this
3cb1b51e 1325check, local parts are treated as case-sensitive. This happens only when
db9452a9 1326actually delivering a message; when testing routers with &%-bt%&, all the
3cb1b51e 1327routed addresses are shown.
db9452a9 1328
068aaea8 1329
168e428f 1330
9b371988 1331.section "Router preconditions" "SECTrouprecon"
f89d2485 1332.cindex "router" "preconditions, order of processing"
9b371988 1333.cindex "preconditions" "order of processing"
168e428f
PH
1334The preconditions that are tested for each router are listed below, in the
1335order in which they are tested. The individual configuration options are
9b371988 1336described in more detail in chapter &<<CHAProutergeneric>>&.
168e428f 1337
9b371988
PH
1338.ilist
1339The &%local_part_prefix%& and &%local_part_suffix%& options can specify that
168e428f
PH
1340the local parts handled by the router may or must have certain prefixes and/or
1341suffixes. If a mandatory affix (prefix or suffix) is not present, the router is
1342skipped. These conditions are tested first. When an affix is present, it is
1343removed from the local part before further processing, including the evaluation
1344of any other conditions.
9b371988
PH
1345.next
1346Routers can be designated for use only when not verifying an address, that is,
168e428f 1347only when routing it for delivery (or testing its delivery routing). If the
9b371988 1348&%verify%& option is set false, the router is skipped when Exim is verifying an
168e428f 1349address.
9b371988
PH
1350Setting the &%verify%& option actually sets two options, &%verify_sender%& and
1351&%verify_recipient%&, which independently control the use of the router for
168e428f
PH
1352sender and recipient verification. You can set these options directly if
1353you want a router to be used for only one type of verification.
9b371988
PH
1354.next
1355If the &%address_test%& option is set false, the router is skipped when Exim is
1356run with the &%-bt%& option to test an address routing. This can be helpful
1357when the first router sends all new messages to a scanner of some sort; it
1358makes it possible to use &%-bt%& to test subsequent delivery routing without
1359having to simulate the effect of the scanner.
1360.next
1361Routers can be designated for use only when verifying an address, as
1362opposed to routing it for delivery. The &%verify_only%& option controls this.
1363.next
1364Individual routers can be explicitly skipped when running the routers to
1365check an address given in the SMTP EXPN command (see the &%expn%& option).
1366.next
1367If the &%domains%& option is set, the domain of the address must be in the set
068aaea8 1368of domains that it defines.
9b371988 1369.next
f89d2485
PH
1370.vindex "&$local_part_prefix$&"
1371.vindex "&$local_part$&"
1372.vindex "&$local_part_suffix$&"
9b371988
PH
1373If the &%local_parts%& option is set, the local part of the address must be in
1374the set of local parts that it defines. If &%local_part_prefix%& or
1375&%local_part_suffix%& is in use, the prefix or suffix is removed from the local
168e428f 1376part before this check. If you want to do precondition tests on local parts
9b371988
PH
1377that include affixes, you can do so by using a &%condition%& option (see below)
1378that uses the variables &$local_part$&, &$local_part_prefix$&, and
1379&$local_part_suffix$& as necessary.
1380.next
f89d2485
PH
1381.vindex "&$local_user_uid$&"
1382.vindex "&$local_user_gid$&"
1383.vindex "&$home$&"
9b371988 1384If the &%check_local_user%& option is set, the local part must be the name of
068aaea8 1385an account on the local host. If this check succeeds, the uid and gid of the
9b371988
PH
1386local user are placed in &$local_user_uid$& and &$local_user_gid$& and the
1387user's home directory is placed in &$home$&; these values can be used in the
1388remaining preconditions.
1389.next
1390If the &%router_home_directory%& option is set, it is expanded at this point,
1391because it overrides the value of &$home$&. If this expansion were left till
1392later, the value of &$home$& as set by &%check_local_user%& would be used in
1393subsequent tests. Having two different values of &$home$& in the same router
168e428f 1394could lead to confusion.
9b371988
PH
1395.next
1396If the &%senders%& option is set, the envelope sender address must be in the
1397set of addresses that it defines.
1398.next
1399If the &%require_files%& option is set, the existence or non-existence of
168e428f 1400specified files is tested.
9b371988
PH
1401.next
1402.cindex "customizing" "precondition"
1403If the &%condition%& option is set, it is evaluated and tested. This option
1404uses an expanded string to allow you to set up your own custom preconditions.
1405Expanded strings are described in chapter &<<CHAPexpand>>&.
1406.endlist
168e428f 1407
168e428f 1408
9b371988
PH
1409Note that &%require_files%& comes near the end of the list, so you cannot use
1410it to check for the existence of a file in which to lookup up a domain, local
168e428f 1411part, or sender. However, as these options are all expanded, you can use the
9b371988
PH
1412&%exists%& expansion condition to make such tests within each condition. The
1413&%require_files%& option is intended for checking files that the router may be
168e428f 1414going to use internally, or which are needed by a specific transport (for
9b371988 1415example, &_.procmailrc_&).
168e428f
PH
1416
1417
1418
f89d2485 1419.section "Delivery in detail" "SECID18"
9b371988 1420.cindex "delivery" "in detail"
168e428f
PH
1421When a message is to be delivered, the sequence of events is as follows:
1422
9b371988
PH
1423.ilist
1424If a system-wide filter file is specified, the message is passed to it. The
168e428f
PH
1425filter may add recipients to the message, replace the recipients, discard the
1426message, cause a new message to be generated, or cause the message delivery to
1427fail. The format of the system filter file is the same as for Exim user filter
9b371988
PH
1428files, described in the separate document entitled &'Exim's interfaces to mail
1429filtering'&.
1430.cindex "Sieve filter" "not available for system filter"
1431(&*Note*&: Sieve cannot be used for system filter files.)
1432
1433Some additional features are available in system filters &-- see chapter
1434&<<CHAPsystemfilter>>& for details. Note that a message is passed to the system
168e428f
PH
1435filter only once per delivery attempt, however many recipients it has. However,
1436if there are several delivery attempts because one or more addresses could not
1437be immediately delivered, the system filter is run each time. The filter
9b371988 1438condition &%first_delivery%& can be used to detect the first run of the system
168e428f 1439filter.
9b371988
PH
1440.next
1441Each recipient address is offered to each configured router in turn, subject to
1442its preconditions, until one is able to handle it. If no router can handle the
1443address, that is, if they all decline, the address is failed. Because routers
1444can be targeted at particular domains, several locally handled domains can be
1445processed entirely independently of each other.
1446.next
1447.cindex "routing" "loops in"
1448.cindex "loop" "while routing"
1449A router that accepts an address may assign it to a local or a remote
1450transport. However, the transport is not run at this time. Instead, the address
1451is placed on a list for the particular transport, which will be run later.
068aaea8
PH
1452Alternatively, the router may generate one or more new addresses (typically
1453from alias, forward, or filter files). New addresses are fed back into this
1454process from the top, but in order to avoid loops, a router ignores any address
1455which has an identically-named ancestor that was processed by itself.
9b371988
PH
1456.next
1457When all the routing has been done, addresses that have been successfully
168e428f
PH
1458handled are passed to their assigned transports. When local transports are
1459doing real local deliveries, they handle only one address at a time, but if a
1460local transport is being used as a pseudo-remote transport (for example, to
1461collect batched SMTP messages for transmission by some other means) multiple
1462addresses can be handled. Remote transports can always handle more than one
1463address at a time, but can be configured not to do so, or to restrict multiple
1464addresses to the same domain.
9b371988
PH
1465.next
1466Each local delivery to a file or a pipe runs in a separate process under a
168e428f
PH
1467non-privileged uid, and these deliveries are run one at a time. Remote
1468deliveries also run in separate processes, normally under a uid that is private
9b371988 1469to Exim (&"the Exim user"&), but in this case, several remote deliveries can be
168e428f 1470run in parallel. The maximum number of simultaneous remote deliveries for any
9b371988 1471one message is set by the &%remote_max_parallel%& option.
168e428f
PH
1472The order in which deliveries are done is not defined, except that all local
1473deliveries happen before any remote deliveries.
9b371988
PH
1474.next
1475.cindex "queue runner"
168e428f
PH
1476When it encounters a local delivery during a queue run, Exim checks its retry
1477database to see if there has been a previous temporary delivery failure for the
1478address before running the local transport. If there was a previous failure,
1479Exim does not attempt a new delivery until the retry time for the address is
1480reached. However, this happens only for delivery attempts that are part of a
1481queue run. Local deliveries are always attempted when delivery immediately
1482follows message reception, even if retry times are set for them. This makes for
1483better behaviour if one particular message is causing problems (for example,
1484causing quota overflow, or provoking an error in a filter file).
9b371988
PH
1485.next
1486.cindex "delivery" "retry in remote transports"
168e428f
PH
1487Remote transports do their own retry handling, since an address may be
1488deliverable to one of a number of hosts, each of which may have a different
1489retry time. If there have been previous temporary failures and no host has
1490reached its retry time, no delivery is attempted, whether in a queue run or
9b371988
PH
1491not. See chapter &<<CHAPretry>>& for details of retry strategies.
1492.next
1493If there were any permanent errors, a bounce message is returned to an
168e428f
PH
1494appropriate address (the sender in the common case), with details of the error
1495for each failing address. Exim can be configured to send copies of bounce
1496messages to other addresses.
9b371988
PH
1497.next
1498.cindex "delivery" "deferral"
168e428f
PH
1499If one or more addresses suffered a temporary failure, the message is left on
1500the queue, to be tried again later. Delivery of these addresses is said to be
9b371988
PH
1501&'deferred'&.
1502.next
1503When all the recipient addresses have either been delivered or bounced,
168e428f
PH
1504handling of the message is complete. The spool files and message log are
1505deleted, though the message log can optionally be preserved if required.
9b371988 1506.endlist
168e428f
PH
1507
1508
1509
1510
f89d2485 1511.section "Retry mechanism" "SECID19"
9b371988
PH
1512.cindex "delivery" "retry mechanism"
1513.cindex "retry" "description of mechanism"
1514.cindex "queue runner"
168e428f
PH
1515Exim's mechanism for retrying messages that fail to get delivered at the first
1516attempt is the queue runner process. You must either run an Exim daemon that
9b371988
PH
1517uses the &%-q%& option with a time interval to start queue runners at regular
1518intervals, or use some other means (such as &'cron'&) to start them. If you do
168e428f
PH
1519not arrange for queue runners to be run, messages that fail temporarily at the
1520first attempt will remain on your queue for ever. A queue runner process works
068aaea8 1521its way through the queue, one message at a time, trying each delivery that has
168e428f
PH
1522passed its retry time.
1523You can run several queue runners at once.
1524
1525Exim uses a set of configured rules to determine when next to retry the failing
9b371988
PH
1526address (see chapter &<<CHAPretry>>&). These rules also specify when Exim
1527should give up trying to deliver to the address, at which point it generates a
1528bounce message. If no retry rules are set for a particular host, address, and
1529error combination, no retries are attempted, and temporary errors are treated
1530as permanent.
168e428f
PH
1531
1532
1533
f89d2485 1534.section "Temporary delivery failure" "SECID20"
9b371988 1535.cindex "delivery" "temporary failure"
168e428f
PH
1536There are many reasons why a message may not be immediately deliverable to a
1537particular address. Failure to connect to a remote machine (because it, or the
1538connection to it, is down) is one of the most common. Temporary failures may be
1539detected during routing as well as during the transport stage of delivery.
1540Local deliveries may be delayed if NFS files are unavailable, or if a mailbox
1541is on a file system where the user is over quota. Exim can be configured to
1542impose its own quotas on local mailboxes; where system quotas are set they will
1543also apply.
1544
1545If a host is unreachable for a period of time, a number of messages may be
1546waiting for it by the time it recovers, and sending them in a single SMTP
1547connection is clearly beneficial. Whenever a delivery to a remote host is
1548deferred,
1549
9b371988 1550.cindex "hints database"
168e428f
PH
1551Exim makes a note in its hints database, and whenever a successful
1552SMTP delivery has happened, it looks to see if any other messages are waiting
1553for the same host. If any are found, they are sent over the same SMTP
1554connection, subject to a configuration limit as to the maximum number in any
1555one connection.
1556
1557
1558
1559
f89d2485 1560.section "Permanent delivery failure" "SECID21"
9b371988
PH
1561.cindex "delivery" "permanent failure"
1562.cindex "bounce message" "when generated"
168e428f
PH
1563When a message cannot be delivered to some or all of its intended recipients, a
1564bounce message is generated. Temporary delivery failures turn into permanent
1565errors when their timeout expires. All the addresses that fail in a given
1566delivery attempt are listed in a single message. If the original message has
1567many recipients, it is possible for some addresses to fail in one delivery
1568attempt and others to fail subsequently, giving rise to more than one bounce
1569message. The wording of bounce messages can be customized by the administrator.
9b371988 1570See chapter &<<CHAPemsgcust>>& for details.
168e428f 1571
9b371988
PH
1572.cindex "&'X-Failed-Recipients:'& header line"
1573Bounce messages contain an &'X-Failed-Recipients:'& header line that lists the
168e428f
PH
1574failed addresses, for the benefit of programs that try to analyse such messages
1575automatically.
1576
9b371988 1577.cindex "bounce message" "recipient of"
168e428f
PH
1578A bounce message is normally sent to the sender of the original message, as
1579obtained from the message's envelope. For incoming SMTP messages, this is the
9b371988
PH
1580address given in the MAIL command. However, when an address is expanded via a
1581forward or alias file, an alternative address can be specified for delivery
1582failures of the generated addresses. For a mailing list expansion (see section
1583&<<SECTmailinglists>>&) it is common to direct bounce messages to the manager
1584of the list.
168e428f
PH
1585
1586
1587
f89d2485 1588.section "Failures to deliver bounce messages" "SECID22"
9b371988 1589.cindex "bounce message" "failure to deliver"
168e428f
PH
1590If a bounce message (either locally generated or received from a remote host)
1591itself suffers a permanent delivery failure, the message is left on the queue,
1592but it is frozen, awaiting the attention of an administrator. There are options
068aaea8 1593that can be used to make Exim discard such failed messages, or to keep them
9b371988
PH
1594for only a short time (see &%timeout_frozen_after%& and
1595&%ignore_bounce_errors_after%&).
168e428f
PH
1596
1597
1598
1599
1600
9b371988
PH
1601. ////////////////////////////////////////////////////////////////////////////
1602. ////////////////////////////////////////////////////////////////////////////
168e428f 1603
f89d2485 1604.chapter "Building and installing Exim" "CHID3"
4f578862 1605.scindex IIDbuex "building Exim"
168e428f 1606
f89d2485
PH
1607.section "Unpacking" "SECID23"
1608Exim is distributed as a gzipped or bzipped tar file which, when unpacked,
168e428f 1609creates a directory with the name of the current release (for example,
9b371988
PH
1610&_exim-&version;_&) into which the following files are placed:
1611
1612.table2 140pt
f89d2485
PH
1613.irow &_ACKNOWLEDGMENTS_& "contains some acknowledgments"
1614.irow &_CHANGES_& "contains a reference to where changes are &&&
1615 documented"
1616.irow &_LICENCE_& "the GNU General Public Licence"
1617.irow &_Makefile_& "top-level make file"
1618.irow &_NOTICE_& "conditions for the use of Exim"
1619.irow &_README_& "list of files, directories and simple build &&&
1620 instructions"
9b371988
PH
1621.endtable
1622
1623Other files whose names begin with &_README_& may also be present. The
168e428f
PH
1624following subdirectories are created:
1625
9b371988 1626.table2 140pt
f89d2485
PH
1627.irow &_Local_& "an empty directory for local configuration files"
1628.irow &_OS_& "OS-specific files"
1629.irow &_doc_& "documentation files"
1630.irow &_exim_monitor_& "source files for the Exim monitor"
1631.irow &_scripts_& "scripts used in the build process"
1632.irow &_src_& "remaining source files"
1633.irow &_util_& "independent utilities"
9b371988
PH
1634.endtable
1635
1636The main utility programs are contained in the &_src_& directory, and are built
1637with the Exim binary. The &_util_& directory contains a few optional scripts
168e428f
PH
1638that may be useful to some sites.
1639
1640
f89d2485 1641.section "Multiple machine architectures and operating systems" "SECID24"
9b371988 1642.cindex "building Exim" "multiple OS/architectures"
168e428f
PH
1643The building process for Exim is arranged to make it easy to build binaries for
1644a number of different architectures and operating systems from the same set of
9b371988
PH
1645source files. Compilation does not take place in the &_src_& directory.
1646Instead, a &'build directory'& is created for each architecture and operating
1647system.
1648.cindex "symbolic link" "to build directory"
168e428f 1649Symbolic links to the sources are installed in this directory, which is where
9b371988
PH
1650the actual building takes place. In most cases, Exim can discover the machine
1651architecture and operating system for itself, but the defaults can be
1652overridden if necessary.
168e428f 1653
168e428f 1654
8473d4ee 1655.section "PCRE library" "SECTpcre"
210f147e
NM
1656.cindex "PCRE library"
1657Exim no longer has an embedded PCRE library as the vast majority of
1658modern systems include PCRE as a system library, although you may need
1659to install the PCRE or PCRE development package for your operating
1660system. If your system has a normal PCRE installation the Exim build
1661process will need no further configuration. If the library or the
1662headers are in an unusual location you will need to set the PCRE_LIBS
1663and INCLUDE directives appropriately. If your operating system has no
1664PCRE support then you will need to obtain and build the current PCRE
1665from &url(ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/).
1666
9b371988
PH
1667.section "DBM libraries" "SECTdb"
1668.cindex "DBM libraries" "discussion of"
1669.cindex "hints database" "DBM files used for"
168e428f
PH
1670Even if you do not use any DBM files in your configuration, Exim still needs a
1671DBM library in order to operate, because it uses indexed files for its hints
1672databases. Unfortunately, there are a number of DBM libraries in existence, and
1673different operating systems often have different ones installed.
1674
9b371988 1675.cindex "Solaris" "DBM library for"
f89d2485
PH
1676.cindex "IRIX, DBM library for"
1677.cindex "BSD, DBM library for"
1678.cindex "Linux, DBM library for"
168e428f
PH
1679If you are using Solaris, IRIX, one of the modern BSD systems, or a modern
1680Linux distribution, the DBM configuration should happen automatically, and you
1681may be able to ignore this section. Otherwise, you may have to learn more than
1682you would like about DBM libraries from what follows.
1683
9b371988 1684.cindex "&'ndbm'& DBM library"
168e428f 1685Licensed versions of Unix normally contain a library of DBM functions operating
9b371988 1686via the &'ndbm'& interface, and this is what Exim expects by default. Free
168e428f
PH
1687versions of Unix seem to vary in what they contain as standard. In particular,
1688some early versions of Linux have no default DBM library, and different
1689distributors have chosen to bundle different libraries with their packaged
f89d2485 1690versions. However, the more recent releases seem to have standardized on the
168e428f
PH
1691Berkeley DB library.
1692
1693Different DBM libraries have different conventions for naming the files they
9b371988 1694use. When a program opens a file called &_dbmfile_&, there are several
168e428f
PH
1695possibilities:
1696
9b371988
PH
1697.olist
1698A traditional &'ndbm'& implementation, such as that supplied as part of
1699Solaris, operates on two files called &_dbmfile.dir_& and &_dbmfile.pag_&.
1700.next
1701.cindex "&'gdbm'& DBM library"
1702The GNU library, &'gdbm'&, operates on a single file. If used via its &'ndbm'&
168e428f 1703compatibility interface it makes two different hard links to it with names
9b371988 1704&_dbmfile.dir_& and &_dbmfile.pag_&, but if used via its native interface, the
168e428f 1705file name is used unmodified.
9b371988
PH
1706.next
1707.cindex "Berkeley DB library"
1708The Berkeley DB package, if called via its &'ndbm'& compatibility interface,
1709operates on a single file called &_dbmfile.db_&, but otherwise looks to the
1710programmer exactly the same as the traditional &'ndbm'& implementation.
1711.next
1712If the Berkeley package is used in its native mode, it operates on a single
1713file called &_dbmfile_&; the programmer's interface is somewhat different to
1714the traditional &'ndbm'& interface.
1715.next
1716To complicate things further, there are several very different versions of the
168e428f 1717Berkeley DB package. Version 1.85 was stable for a very long time, releases
9b371988
PH
17182.&'x'& and 3.&'x'& were current for a while, but the latest versions are now
1719numbered 4.&'x'&. Maintenance of some of the earlier releases has ceased. All
168e428f 1720versions of Berkeley DB can be obtained from
9b371988
PH
1721&url(http://www.sleepycat.com/).
1722.next
1723.cindex "&'tdb'& DBM library"
1724Yet another DBM library, called &'tdb'&, is available from
1725&url(http://download.sourceforge.net/tdb). It has its own interface, and also
1726operates on a single file.
1727.endlist
1728
1729.cindex "USE_DB"
1730.cindex "DBM libraries" "configuration for building"
168e428f
PH
1731Exim and its utilities can be compiled to use any of these interfaces. In order
1732to use any version of the Berkeley DB package in native mode, you must set
1733USE_DB in an appropriate configuration file (typically
9b371988
PH
1734&_Local/Makefile_&). For example:
1735.code
1736USE_DB=yes
1737.endd
168e428f
PH
1738Similarly, for gdbm you set USE_GDBM, and for tdb you set USE_TDB. An
1739error is diagnosed if you set more than one of these.
1740
1741At the lowest level, the build-time configuration sets none of these options,
1742thereby assuming an interface of type (1). However, some operating system
1743configuration files (for example, those for the BSD operating systems and
1744Linux) assume type (4) by setting USE_DB as their default, and the
1745configuration files for Cygwin set USE_GDBM. Anything you set in
9b371988 1746&_Local/Makefile_&, however, overrides these system defaults.
168e428f
PH
1747
1748As well as setting USE_DB, USE_GDBM, or USE_TDB, it may also be
1749necessary to set DBMLIB, to cause inclusion of the appropriate library, as
1750in one of these lines:
9b371988
PH
1751.code
1752DBMLIB = -ldb
1753DBMLIB = -ltdb
1754.endd
168e428f
PH
1755Settings like that will work if the DBM library is installed in the standard
1756place. Sometimes it is not, and the library's header file may also not be in
1757the default path. You may need to set INCLUDE to specify where the header
1758file is, and to specify the path to the library more fully in DBMLIB, as in
1759this example:
9b371988
PH
1760.code
1761INCLUDE=-I/usr/local/include/db-4.1
1762DBMLIB=/usr/local/lib/db-4.1/libdb.a
1763.endd
168e428f 1764There is further detailed discussion about the various DBM libraries in the
9b371988 1765file &_doc/dbm.discuss.txt_& in the Exim distribution.
168e428f
PH
1766
1767
1768
f89d2485 1769.section "Pre-building configuration" "SECID25"
9b371988
PH
1770.cindex "building Exim" "pre-building configuration"
1771.cindex "configuration for building Exim"
1772.cindex "&_Local/Makefile_&"
1773.cindex "&_src/EDITME_&"
168e428f
PH
1774Before building Exim, a local configuration file that specifies options
1775independent of any operating system has to be created with the name
9b371988
PH
1776&_Local/Makefile_&. A template for this file is supplied as the file
1777&_src/EDITME_&, and it contains full descriptions of all the option settings
168e428f
PH
1778therein. These descriptions are therefore not repeated here. If you are
1779building Exim for the first time, the simplest thing to do is to copy
9b371988 1780&_src/EDITME_& to &_Local/Makefile_&, then read it and edit it appropriately.
168e428f
PH
1781
1782There are three settings that you must supply, because Exim will not build
1783without them. They are the location of the run time configuration file
1784(CONFIGURE_FILE), the directory in which Exim binaries will be installed
1785(BIN_DIRECTORY), and the identity of the Exim user (EXIM_USER and
1786maybe EXIM_GROUP as well). The value of CONFIGURE_FILE can in fact be
1787a colon-separated list of file names; Exim uses the first of them that exists.
1788
1789There are a few other parameters that can be specified either at build time or
1790at run time, to enable the same binary to be used on a number of different
1791machines. However, if the locations of Exim's spool directory and log file
1792directory (if not within the spool directory) are fixed, it is recommended that
9b371988 1793you specify them in &_Local/Makefile_& instead of at run time, so that errors
168e428f
PH
1794detected early in Exim's execution (such as a malformed configuration file) can
1795be logged.
1796
9b371988 1797.cindex "content scanning" "specifying at build time"
068aaea8 1798Exim's interfaces for calling virus and spam scanning software directly from
168e428f
PH
1799access control lists are not compiled by default. If you want to include these
1800facilities, you need to set
9b371988
PH
1801.code
1802WITH_CONTENT_SCAN=yes
1803.endd
1804in your &_Local/Makefile_&. For details of the facilities themselves, see
1805chapter &<<CHAPexiscan>>&.
168e428f
PH
1806
1807
9b371988 1808.cindex "&_Local/eximon.conf_&"
3cb1b51e 1809.cindex "&_exim_monitor/EDITME_&"
168e428f 1810If you are going to build the Exim monitor, a similar configuration process is
9b371988
PH
1811required. The file &_exim_monitor/EDITME_& must be edited appropriately for
1812your installation and saved under the name &_Local/eximon.conf_&. If you are
1813happy with the default settings described in &_exim_monitor/EDITME_&,
1814&_Local/eximon.conf_& can be empty, but it must exist.
168e428f
PH
1815
1816This is all the configuration that is needed in straightforward cases for known
1817operating systems. However, the building process is set up so that it is easy
1818to override options that are set by default or by operating-system-specific
1819configuration files, for example to change the name of the C compiler, which
9b371988
PH
1820defaults to &%gcc%&. See section &<<SECToverride>>& below for details of how to
1821do this.
168e428f
PH
1822
1823
1824
f89d2485 1825.section "Support for iconv()" "SECID26"
9b371988
PH
1826.cindex "&[iconv()]& support"
1827.cindex "RFC 2047"
168e428f
PH
1828The contents of header lines in messages may be encoded according to the rules
1829described RFC 2047. This makes it possible to transmit characters that are not
1830in the ASCII character set, and to label them as being in a particular
9b371988 1831character set. When Exim is inspecting header lines by means of the &%$h_%&
168e428f
PH
1832mechanism, it decodes them, and translates them into a specified character set
1833(default ISO-8859-1). The translation is possible only if the operating system
9b371988
PH
1834supports the &[iconv()]& function.
1835
1836However, some of the operating systems that supply &[iconv()]& do not support
1837very many conversions. The GNU &%libiconv%& library (available from
1838&url(http://www.gnu.org/software/libiconv/)) can be installed on such
1839systems to remedy this deficiency, as well as on systems that do not supply
1840&[iconv()]& at all. After installing &%libiconv%&, you should add
1841.code
1842HAVE_ICONV=yes
1843.endd
1844to your &_Local/Makefile_& and rebuild Exim.
1845
1846
1847
1848.section "Including TLS/SSL encryption support" "SECTinctlsssl"
1849.cindex "TLS" "including support for TLS"
1850.cindex "encryption" "including support for"
1851.cindex "SUPPORT_TLS"
1852.cindex "OpenSSL" "building Exim with"
1853.cindex "GnuTLS" "building Exim with"
168e428f
PH
1854Exim can be built to support encrypted SMTP connections, using the STARTTLS
1855command as per RFC 2487. It can also support legacy clients that expect to
1856start a TLS session immediately on connection to a non-standard port (see the
9b371988 1857&%tls_on_connect_ports%& runtime option and the &%-tls-on-connect%& command
168e428f
PH
1858line option).
1859
1860If you want to build Exim with TLS support, you must first install either the
1861OpenSSL or GnuTLS library. There is no cryptographic code in Exim itself for
1862implementing SSL.
1863
1864If OpenSSL is installed, you should set
9b371988
PH
1865.code
1866SUPPORT_TLS=yes
1867TLS_LIBS=-lssl -lcrypto
1868.endd
1869in &_Local/Makefile_&. You may also need to specify the locations of the
168e428f 1870OpenSSL library and include files. For example:
9b371988
PH
1871.code
1872SUPPORT_TLS=yes
1873TLS_LIBS=-L/usr/local/openssl/lib -lssl -lcrypto
1874TLS_INCLUDE=-I/usr/local/openssl/include/
1875.endd
1876.cindex "USE_GNUTLS"
168e428f 1877If GnuTLS is installed, you should set
9b371988
PH
1878.code
1879SUPPORT_TLS=yes
1880USE_GNUTLS=yes
1881TLS_LIBS=-lgnutls -ltasn1 -lgcrypt
1882.endd
1883in &_Local/Makefile_&, and again you may need to specify the locations of the
168e428f 1884library and include files. For example:
9b371988
PH
1885.code
1886SUPPORT_TLS=yes
1887USE_GNUTLS=yes
1888TLS_LIBS=-L/usr/gnu/lib -lgnutls -ltasn1 -lgcrypt
1889TLS_INCLUDE=-I/usr/gnu/include
1890.endd
168e428f 1891You do not need to set TLS_INCLUDE if the relevant directory is already
9b371988
PH
1892specified in INCLUDE. Details of how to configure Exim to make use of TLS are
1893given in chapter &<<CHAPTLS>>&.
168e428f
PH
1894
1895
1896
1897
f89d2485
PH
1898.section "Use of tcpwrappers" "SECID27"
1899.cindex "tcpwrappers, building Exim to support"
9b371988
PH
1900.cindex "USE_TCP_WRAPPERS"
1901Exim can be linked with the &'tcpwrappers'& library in order to check incoming
1902SMTP calls using the &'tcpwrappers'& control files. This may be a convenient
168e428f 1903alternative to Exim's own checking facilities for installations that are
9b371988
PH
1904already making use of &'tcpwrappers'& for other purposes. To do this, you
1905should set USE_TCP_WRAPPERS in &_Local/Makefile_&, arrange for the file
1906&_tcpd.h_& to be available at compile time, and also ensure that the library
1907&_libwrap.a_& is available at link time, typically by including &%-lwrap%& in
1908EXTRALIBS_EXIM. For example, if &'tcpwrappers'& is installed in &_/usr/local_&,
1909you might have
1910.code
1911USE_TCP_WRAPPERS=yes
1912CFLAGS=-O -I/usr/local/include
1913EXTRALIBS_EXIM=-L/usr/local/lib -lwrap
1914.endd
1915in &_Local/Makefile_&. The name to use in the &'tcpwrappers'& control files is
1916&"exim"&. For example, the line
1917.code
1918exim : LOCAL 192.168.1. .friendly.domain.example
1919.endd
1920in your &_/etc/hosts.allow_& file allows connections from the local host, from
1921the subnet 192.168.1.0/24, and from all hosts in &'friendly.domain.example'&.
1922All other connections are denied. Consult the &'tcpwrappers'& documentation for
168e428f
PH
1923further details.
1924
1925
1926
f89d2485 1927.section "Including support for IPv6" "SECID28"
9b371988 1928.cindex "IPv6" "including support for"
168e428f 1929Exim contains code for use on systems that have IPv6 support. Setting
9b371988 1930&`HAVE_IPV6=YES`& in &_Local/Makefile_& causes the IPv6 code to be included;
168e428f
PH
1931it may also be necessary to set IPV6_INCLUDE and IPV6_LIBS on systems
1932where the IPv6 support is not fully integrated into the normal include and
1933library files.
1934
1935Two different types of DNS record for handling IPv6 addresses have been
f89d2485 1936defined. AAAA records (analogous to A records for IPv4) are in use, and are
168e428f
PH
1937currently seen as the mainstream. Another record type called A6 was proposed
1938as better than AAAA because it had more flexibility. However, it was felt to be
9b371988 1939over-complex, and its status was reduced to &"experimental"&. It is not known
168e428f 1940if anyone is actually using A6 records. Exim has support for A6 records, but
9b371988 1941this is included only if you set &`SUPPORT_A6=YES`& in &_Local/Makefile_&. The
168e428f
PH
1942support has not been tested for some time.
1943
1944
1945
f89d2485 1946.section "The building process" "SECID29"
9b371988
PH
1947.cindex "build directory"
1948Once &_Local/Makefile_& (and &_Local/eximon.conf_&, if required) have been
1949created, run &'make'& at the top level. It determines the architecture and
168e428f
PH
1950operating system types, and creates a build directory if one does not exist.
1951For example, on a Sun system running Solaris 8, the directory
9b371988
PH
1952&_build-SunOS5-5.8-sparc_& is created.
1953.cindex "symbolic link" "to source files"
168e428f
PH
1954Symbolic links to relevant source files are installed in the build directory.
1955
9b371988 1956&*Warning*&: The &%-j%& (parallel) flag must not be used with &'make'&; the
168e428f
PH
1957building process fails if it is set.
1958
9b371988 1959If this is the first time &'make'& has been run, it calls a script that builds
168e428f 1960a make file inside the build directory, using the configuration files from the
9b371988
PH
1961&_Local_& directory. The new make file is then passed to another instance of
1962&'make'&. This does the real work, building a number of utility scripts, and
168e428f 1963then compiling and linking the binaries for the Exim monitor (if configured), a
9b371988
PH
1964number of utility programs, and finally Exim itself. The command &`make
1965makefile`& can be used to force a rebuild of the make file in the build
168e428f
PH
1966directory, should this ever be necessary.
1967
1968If you have problems building Exim, check for any comments there may be in the
9b371988 1969&_README_& file concerning your operating system, and also take a look at the
168e428f
PH
1970FAQ, where some common problems are covered.
1971
1972
1973
f89d2485 1974.section 'Output from &"make"&' "SECID283"
9b371988 1975The output produced by the &'make'& process for compile lines is often very
068aaea8
PH
1976unreadable, because these lines can be very long. For this reason, the normal
1977output is suppressed by default, and instead output similar to that which
1978appears when compiling the 2.6 Linux kernel is generated: just a short line for
1979each module that is being compiled or linked. However, it is still possible to
9b371988
PH
1980get the full output, by calling &'make'& like this:
1981.code
1982FULLECHO='' make -e
1983.endd
1984The value of FULLECHO defaults to &"@"&, the flag character that suppresses
1985command reflection in &'make'&. When you ask for the full output, it is
3cb1b51e 1986given in addition to the short output.
068aaea8
PH
1987
1988
1989
9b371988 1990.section "Overriding build-time options for Exim" "SECToverride"
f89d2485 1991.cindex "build-time options, overriding"
168e428f
PH
1992The main make file that is created at the beginning of the building process
1993consists of the concatenation of a number of files which set configuration
9b371988 1994values, followed by a fixed set of &'make'& instructions. If a value is set
168e428f
PH
1995more than once, the last setting overrides any previous ones. This provides a
1996convenient way of overriding defaults. The files that are concatenated are, in
1997order:
9b371988
PH
1998.display
1999&_OS/Makefile-Default_&
2000&_OS/Makefile-_&<&'ostype'&>
2001&_Local/Makefile_&
2002&_Local/Makefile-_&<&'ostype'&>
2003&_Local/Makefile-_&<&'archtype'&>
2004&_Local/Makefile-_&<&'ostype'&>-<&'archtype'&>
2005&_OS/Makefile-Base_&
2006.endd
2007.cindex "&_Local/Makefile_&"
2008.cindex "building Exim" "operating system type"
2009.cindex "building Exim" "architecture type"
2010where <&'ostype'&> is the operating system type and <&'archtype'&> is the
2011architecture type. &_Local/Makefile_& is required to exist, and the building
2012process fails if it is absent. The other three &_Local_& files are optional,
168e428f
PH
2013and are often not needed.
2014
9b371988
PH
2015The values used for <&'ostype'&> and <&'archtype'&> are obtained from scripts
2016called &_scripts/os-type_& and &_scripts/arch-type_& respectively. If either of
168e428f
PH
2017the environment variables EXIM_OSTYPE or EXIM_ARCHTYPE is set, their
2018values are used, thereby providing a means of forcing particular settings.
9b371988 2019Otherwise, the scripts try to get values from the &%uname%& command. If this
168e428f 2020fails, the shell variables OSTYPE and ARCHTYPE are inspected. A number
9b371988 2021of &'ad hoc'& transformations are then applied, to produce the standard names
168e428f
PH
2022that Exim expects. You can run these scripts directly from the shell in order
2023to find out what values are being used on your system.
2024
2025
9b371988 2026&_OS/Makefile-Default_& contains comments about the variables that are set
168e428f
PH
2027therein. Some (but not all) are mentioned below. If there is something that
2028needs changing, review the contents of this file and the contents of the make
9b371988 2029file for your operating system (&_OS/Makefile-<ostype>_&) to see what the
168e428f
PH
2030default values are.
2031
2032
9b371988
PH
2033.cindex "building Exim" "overriding default settings"
2034If you need to change any of the values that are set in &_OS/Makefile-Default_&
2035or in &_OS/Makefile-<ostype>_&, or to add any new definitions, you do not
168e428f 2036need to change the original files. Instead, you should make the changes by
9b371988
PH
2037putting the new values in an appropriate &_Local_& file. For example,
2038.cindex "Tru64-Unix build-time settings"
168e428f
PH
2039when building Exim in many releases of the Tru64-Unix (formerly Digital UNIX,
2040formerly DEC-OSF1) operating system, it is necessary to specify that the C
9b371988
PH
2041compiler is called &'cc'& rather than &'gcc'&. Also, the compiler must be
2042called with the option &%-std1%&, to make it recognize some of the features of
168e428f 2043Standard C that Exim uses. (Most other compilers recognize Standard C by
9b371988 2044default.) To do this, you should create a file called &_Local/Makefile-OSF1_&
168e428f 2045containing the lines
9b371988
PH
2046.code
2047CC=cc
2048CFLAGS=-std1
2049.endd
168e428f 2050If you are compiling for just one operating system, it may be easier to put
9b371988 2051these lines directly into &_Local/Makefile_&.
168e428f
PH
2052
2053Keeping all your local configuration settings separate from the distributed
2054files makes it easy to transfer them to new versions of Exim simply by copying
9b371988 2055the contents of the &_Local_& directory.
168e428f
PH
2056
2057
9b371988
PH
2058.cindex "NIS lookup type" "including support for"
2059.cindex "NIS+ lookup type" "including support for"
2060.cindex "LDAP" "including support for"
2061.cindex "lookup" "inclusion in binary"
168e428f
PH
2062Exim contains support for doing LDAP, NIS, NIS+, and other kinds of file
2063lookup, but not all systems have these components installed, so the default is
2064not to include the relevant code in the binary. All the different kinds of file
2065and database lookup that Exim supports are implemented as separate code modules
2066which are included only if the relevant compile-time options are set. In the
9b371988
PH
2067case of LDAP, NIS, and NIS+, the settings for &_Local/Makefile_& are:
2068.code
2069LOOKUP_LDAP=yes
2070LOOKUP_NIS=yes
2071LOOKUP_NISPLUS=yes
2072.endd
168e428f 2073and similar settings apply to the other lookup types. They are all listed in
9b371988 2074&_src/EDITME_&. In many cases the relevant include files and interface
168e428f 2075libraries need to be installed before compiling Exim.
9b371988 2076.cindex "cdb" "including support for"
068aaea8
PH
2077However, there are some optional lookup types (such as cdb) for which
2078the code is entirely contained within Exim, and no external include
168e428f
PH
2079files or libraries are required. When a lookup type is not included in the
2080binary, attempts to configure Exim to use it cause run time configuration
2081errors.
2082
9b371988 2083.cindex "Perl" "including support for"
168e428f
PH
2084Exim can be linked with an embedded Perl interpreter, allowing Perl
2085subroutines to be called during string expansion. To enable this facility,
9b371988
PH
2086.code
2087EXIM_PERL=perl.o
2088.endd
2089must be defined in &_Local/Makefile_&. Details of this facility are given in
2090chapter &<<CHAPperl>>&.
168e428f 2091
f89d2485 2092.cindex "X11 libraries, location of"
168e428f 2093The location of the X11 libraries is something that varies a lot between
068aaea8 2094operating systems, and there may be different versions of X11 to cope
168e428f
PH
2095with. Exim itself makes no use of X11, but if you are compiling the Exim
2096monitor, the X11 libraries must be available.
9b371988
PH
2097The following three variables are set in &_OS/Makefile-Default_&:
2098.code
2099X11=/usr/X11R6
2100XINCLUDE=-I$(X11)/include
2101XLFLAGS=-L$(X11)/lib
2102.endd
168e428f 2103These are overridden in some of the operating-system configuration files. For
9b371988
PH
2104example, in &_OS/Makefile-SunOS5_& there is
2105.code
2106X11=/usr/openwin
2107XINCLUDE=-I$(X11)/include
2108XLFLAGS=-L$(X11)/lib -R$(X11)/lib
2109.endd
168e428f
PH
2110If you need to override the default setting for your operating system, place a
2111definition of all three of these variables into your
9b371988 2112&_Local/Makefile-<ostype>_& file.
168e428f 2113
9b371988 2114.cindex "EXTRALIBS"
168e428f
PH
2115If you need to add any extra libraries to the link steps, these can be put in a
2116variable called EXTRALIBS, which appears in all the link commands, but by
2117default is not defined. In contrast, EXTRALIBS_EXIM is used only on the
2118command for linking the main Exim binary, and not for any associated utilities.
2119
9b371988 2120.cindex "DBM libraries" "configuration for building"
168e428f 2121There is also DBMLIB, which appears in the link commands for binaries that
9b371988 2122use DBM functions (see also section &<<SECTdb>>&). Finally, there is
168e428f
PH
2123EXTRALIBS_EXIMON, which appears only in the link step for the Exim monitor
2124binary, and which can be used, for example, to include additional X11
2125libraries.
2126
9b371988 2127.cindex "configuration file" "editing"
168e428f
PH
2128The make file copes with rebuilding Exim correctly if any of the configuration
2129files are edited. However, if an optional configuration file is deleted, it is
9b371988
PH
2130necessary to touch the associated non-optional file (that is,
2131&_Local/Makefile_& or &_Local/eximon.conf_&) before rebuilding.
168e428f
PH
2132
2133
f89d2485 2134.section "OS-specific header files" "SECID30"
9b371988
PH
2135.cindex "&_os.h_&"
2136.cindex "building Exim" "OS-specific C header files"
2137The &_OS_& directory contains a number of files with names of the form
2138&_os.h-<ostype>_&. These are system-specific C header files that should not
168e428f 2139normally need to be changed. There is a list of macro settings that are
9b371988 2140recognized in the file &_OS/os.configuring_&, which should be consulted if you
168e428f
PH
2141are porting Exim to a new operating system.
2142
2143
2144
f89d2485
PH
2145.section "Overriding build-time options for the monitor" "SECID31"
2146.cindex "building Eximon"
168e428f
PH
2147A similar process is used for overriding things when building the Exim monitor,
2148where the files that are involved are
9b371988
PH
2149.display
2150&_OS/eximon.conf-Default_&
2151&_OS/eximon.conf-_&<&'ostype'&>
2152&_Local/eximon.conf_&
2153&_Local/eximon.conf-_&<&'ostype'&>
2154&_Local/eximon.conf-_&<&'archtype'&>
2155&_Local/eximon.conf-_&<&'ostype'&>-<&'archtype'&>
2156.endd
2157.cindex "&_Local/eximon.conf_&"
168e428f 2158As with Exim itself, the final three files need not exist, and in this case the
9b371988
PH
2159&_OS/eximon.conf-<ostype>_& file is also optional. The default values in
2160&_OS/eximon.conf-Default_& can be overridden dynamically by setting environment
168e428f
PH
2161variables of the same name, preceded by EXIMON_. For example, setting
2162EXIMON_LOG_DEPTH in the environment overrides the value of
2163LOG_DEPTH at run time.
4f578862 2164.ecindex IIDbuex
168e428f
PH
2165
2166
f89d2485 2167.section "Installing Exim binaries and scripts" "SECID32"
9b371988
PH
2168.cindex "installing Exim"
2169.cindex "BIN_DIRECTORY"
2170The command &`make install`& runs the &(exim_install)& script with no
2171arguments. The script copies binaries and utility scripts into the directory
2172whose name is specified by the BIN_DIRECTORY setting in &_Local/Makefile_&.
2173.cindex "setuid" "installing Exim with"
068aaea8
PH
2174The install script copies files only if they are newer than the files they are
2175going to replace. The Exim binary is required to be owned by root and have the
9b371988
PH
2176&'setuid'& bit set, for normal configurations. Therefore, you must run &`make
2177install`& as root so that it can set up the Exim binary in this way. However, in
068aaea8
PH
2178some special situations (for example, if a host is doing no local deliveries)
2179it may be possible to run Exim without making the binary setuid root (see
9b371988 2180chapter &<<CHAPsecurity>>& for details).
168e428f 2181
9b371988 2182.cindex "CONFIGURE_FILE"
168e428f 2183Exim's run time configuration file is named by the CONFIGURE_FILE setting
9b371988
PH
2184in &_Local/Makefile_&. If this names a single file, and the file does not
2185exist, the default configuration file &_src/configure.default_& is copied there
168e428f
PH
2186by the installation script. If a run time configuration file already exists, it
2187is left alone. If CONFIGURE_FILE is a colon-separated list, naming several
2188alternative files, no default is installed.
2189
9b371988
PH
2190.cindex "system aliases file"
2191.cindex "&_/etc/aliases_&"
168e428f
PH
2192One change is made to the default configuration file when it is installed: the
2193default configuration contains a router that references a system aliases file.
2194The path to this file is set to the value specified by
9b371988 2195SYSTEM_ALIASES_FILE in &_Local/Makefile_& (&_/etc/aliases_& by default).
168e428f
PH
2196If the system aliases file does not exist, the installation script creates it,
2197and outputs a comment to the user.
2198
2199The created file contains no aliases, but it does contain comments about the
2200aliases a site should normally have. Mail aliases have traditionally been
9b371988
PH
2201kept in &_/etc/aliases_&. However, some operating systems are now using
2202&_/etc/mail/aliases_&. You should check if yours is one of these, and change
168e428f
PH
2203Exim's configuration if necessary.
2204
2205The default configuration uses the local host's name as the only local domain,
9b371988
PH
2206and is set up to do local deliveries into the shared directory &_/var/mail_&,
2207running as the local user. System aliases and &_.forward_& files in users' home
168e428f
PH
2208directories are supported, but no NIS or NIS+ support is configured. Domains
2209other than the name of the local host are routed using the DNS, with delivery
2210over SMTP.
2211
168e428f
PH
2212It is possible to install Exim for special purposes (such as building a binary
2213distribution) in a private part of the file system. You can do this by a
2214command such as
9b371988
PH
2215.code
2216make DESTDIR=/some/directory/ install
2217.endd
168e428f
PH
2218This has the effect of pre-pending the specified directory to all the file
2219paths, except the name of the system aliases file that appears in the default
9b371988 2220configuration. (If a default alias file is created, its name &'is'& modified.)
168e428f
PH
2221For backwards compatibility, ROOT is used if DESTDIR is not set,
2222but this usage is deprecated.
2223
71e1673f 2224.new
9b371988
PH
2225.cindex "installing Exim" "what is not installed"
2226Running &'make install'& does not copy the Exim 4 conversion script
40df1be3
TF
2227&'convert4r4'&. You will probably run this only once if you are
2228upgrading from Exim 3. None of the documentation files in the &_doc_&
168e428f 2229directory are copied, except for the info files when you have set
9b371988 2230INFO_DIRECTORY, as described in section &<<SECTinsinfdoc>>& below.
71e1673f 2231.wen
168e428f 2232
9b371988 2233For the utility programs, old versions are renamed by adding the suffix &_.O_&
168e428f
PH
2234to their names. The Exim binary itself, however, is handled differently. It is
2235installed under a name that includes the version number and the compile number,
9b371988
PH
2236for example &_exim-&version;-1_&. The script then arranges for a symbolic link
2237called &_exim_& to point to the binary. If you are updating a previous version
2238of Exim, the script takes care to ensure that the name &_exim_& is never absent
168e428f
PH
2239from the directory (as seen by other processes).
2240
9b371988
PH
2241.cindex "installing Exim" "testing the script"
2242If you want to see what the &'make install'& will do before running it for
2243real, you can pass the &%-n%& option to the installation script by this
2244command:
2245.code
2246make INSTALL_ARG=-n install
2247.endd
168e428f
PH
2248The contents of the variable INSTALL_ARG are passed to the installation
2249script. You do not need to be root to run this test. Alternatively, you can run
2250the installation script directly, but this must be from within the build
2251directory. For example, from the top-level Exim directory you could use this
2252command:
9b371988
PH
2253.code
2254(cd build-SunOS5-5.5.1-sparc; ../scripts/exim_install -n)
2255.endd
2256.cindex "installing Exim" "install script options"
168e428f
PH
2257There are two other options that can be supplied to the installation script.
2258
9b371988
PH
2259.ilist
2260&%-no_chown%& bypasses the call to change the owner of the installed binary
168e428f 2261to root, and the call to make it a setuid binary.
9b371988
PH
2262.next
2263&%-no_symlink%& bypasses the setting up of the symbolic link &_exim_& to the
168e428f 2264installed binary.
9b371988 2265.endlist
168e428f
PH
2266
2267INSTALL_ARG can be used to pass these options to the script. For example:
9b371988
PH
2268.code
2269make INSTALL_ARG=-no_symlink install
2270.endd
168e428f
PH
2271The installation script can also be given arguments specifying which files are
2272to be copied. For example, to install just the Exim binary, and nothing else,
2273without creating the symbolic link, you could use:
9b371988
PH
2274.code
2275make INSTALL_ARG='-no_symlink exim' install
2276.endd
168e428f
PH
2277
2278
2279
9b371988
PH
2280.section "Installing info documentation" "SECTinsinfdoc"
2281.cindex "installing Exim" "&'info'& documentation"
2282Not all systems use the GNU &'info'& system for documentation, and for this
168e428f
PH
2283reason, the Texinfo source of Exim's documentation is not included in the main
2284distribution. Instead it is available separately from the ftp site (see section
9b371988 2285&<<SECTavail>>&).
168e428f 2286
9b371988
PH
2287If you have defined INFO_DIRECTORY in &_Local/Makefile_& and the Texinfo
2288source of the documentation is found in the source tree, running &`make
2289install`& automatically builds the info files and installs them.
168e428f
PH
2290
2291
2292
f89d2485 2293.section "Setting up the spool directory" "SECID33"
9b371988 2294.cindex "spool directory" "creating"
168e428f
PH
2295When it starts up, Exim tries to create its spool directory if it does not
2296exist. The Exim uid and gid are used for the owner and group of the spool
2297directory. Sub-directories are automatically created in the spool directory as
2298necessary.
2299
2300
2301
2302
f89d2485 2303.section "Testing" "SECID34"
9b371988 2304.cindex "testing" "installation"
168e428f
PH
2305Having installed Exim, you can check that the run time configuration file is
2306syntactically valid by running the following command, which assumes that the
2307Exim binary directory is within your PATH environment variable:
9b371988
PH
2308.code
2309exim -bV
2310.endd
168e428f
PH
2311If there are any errors in the configuration file, Exim outputs error messages.
2312Otherwise it outputs the version number and build date,
2313the DBM library that is being used, and information about which drivers and
2314other optional code modules are included in the binary.
2315Some simple routing tests can be done by using the address testing option. For
2316example,
9b371988
PH
2317.display
2318&`exim -bt`& <&'local username'&>
2319.endd
168e428f 2320should verify that it recognizes a local mailbox, and
9b371988
PH
2321.display
2322&`exim -bt`& <&'remote address'&>
2323.endd
168e428f
PH
2324a remote one. Then try getting it to deliver mail, both locally and remotely.
2325This can be done by passing messages directly to Exim, without going through a
2326user agent. For example:
9b371988 2327.code
068aaea8
PH
2328exim -v postmaster@your.domain.example
2329From: user@your.domain.example
2330To: postmaster@your.domain.example
2331Subject: Testing Exim
168e428f 2332
068aaea8
PH
2333This is a test message.
2334^D
9b371988
PH
2335.endd
2336The &%-v%& option causes Exim to output some verification of what it is doing.
168e428f 2337In this case you should see copies of three log lines, one for the message's
9b371988 2338arrival, one for its delivery, and one containing &"Completed"&.
168e428f 2339
9b371988
PH
2340.cindex "delivery" "problems with"
2341If you encounter problems, look at Exim's log files (&'mainlog'& and
2342&'paniclog'&) to see if there is any relevant information there. Another source
168e428f 2343of information is running Exim with debugging turned on, by specifying the
9b371988 2344&%-d%& option. If a message is stuck on Exim's spool, you can force a delivery
168e428f 2345with debugging turned on by a command of the form
9b371988
PH
2346.display
2347&`exim -d -M`& <&'exim-message-id'&>
2348.endd
2349You must be root or an &"admin user"& in order to do this. The &%-d%& option
168e428f 2350produces rather a lot of output, but you can cut this down to specific areas.
9b371988
PH
2351For example, if you use &%-d-all+route%& only the debugging information
2352relevant to routing is included. (See the &%-d%& option in chapter
2353&<<CHAPcommandline>>& for more details.)
168e428f 2354
9b371988
PH
2355.cindex '&"sticky"& bit'
2356.cindex "lock files"
168e428f
PH
2357One specific problem that has shown up on some sites is the inability to do
2358local deliveries into a shared mailbox directory, because it does not have the
9b371988 2359&"sticky bit"& set on it. By default, Exim tries to create a lock file before
168e428f 2360writing to a mailbox file, and if it cannot create the lock file, the delivery
9b371988 2361is deferred. You can get round this either by setting the &"sticky bit"& on the
168e428f
PH
2362directory, or by setting a specific group for local deliveries and allowing
2363that group to create files in the directory (see the comments above the
9b371988 2364&(local_delivery)& transport in the default configuration file). Another
168e428f 2365approach is to configure Exim not to use lock files, but just to rely on
9b371988
PH
2366&[fcntl()]& locking instead. However, you should do this only if all user
2367agents also use &[fcntl()]& locking. For further discussion of locking issues,
2368see chapter &<<CHAPappendfile>>&.
168e428f
PH
2369
2370One thing that cannot be tested on a system that is already running an MTA is
2371the receipt of incoming SMTP mail on the standard SMTP port. However, the
9b371988
PH
2372&%-oX%& option can be used to run an Exim daemon that listens on some other
2373port, or &'inetd'& can be used to do this. The &%-bh%& option and the
2374&'exim_checkaccess'& utility can be used to check out policy controls on
168e428f
PH
2375incoming SMTP mail.
2376
2377Testing a new version on a system that is already running Exim can most easily
2378be done by building a binary with a different CONFIGURE_FILE setting. From
2379within the run time configuration, all other file and directory names
2380that Exim uses can be altered, in order to keep it entirely clear of the
2381production version.
2382
2383
f89d2485 2384.section "Replacing another MTA with Exim" "SECID35"
9b371988 2385.cindex "replacing another MTA"
168e428f
PH
2386Building and installing Exim for the first time does not of itself put it in
2387general use. The name by which the system's MTA is called by mail user agents
9b371988
PH
2388is either &_/usr/sbin/sendmail_&, or &_/usr/lib/sendmail_& (depending on the
2389operating system), and it is necessary to make this name point to the &'exim'&
168e428f 2390binary in order to get the user agents to pass messages to Exim. This is
9b371988
PH
2391normally done by renaming any existing file and making &_/usr/sbin/sendmail_&
2392or &_/usr/lib/sendmail_&
2393.cindex "symbolic link" "to &'exim'& binary"
2394a symbolic link to the &'exim'& binary. It is a good idea to remove any setuid
168e428f
PH
2395privilege and executable status from the old MTA. It is then necessary to stop
2396and restart the mailer daemon, if one is running.
2397
f89d2485 2398.cindex "FreeBSD, MTA indirection"
9b371988 2399.cindex "&_/etc/mail/mailer.conf_&"
168e428f
PH
2400Some operating systems have introduced alternative ways of switching MTAs. For
2401example, if you are running FreeBSD, you need to edit the file
9b371988 2402&_/etc/mail/mailer.conf_& instead of setting up a symbolic link as just
168e428f
PH
2403described. A typical example of the contents of this file for running Exim is
2404as follows:
9b371988
PH
2405.code
2406sendmail /usr/exim/bin/exim
2407send-mail /usr/exim/bin/exim
2408mailq /usr/exim/bin/exim -bp
2409newaliases /usr/bin/true
2410.endd
2411Once you have set up the symbolic link, or edited &_/etc/mail/mailer.conf_&,
2412your Exim installation is &"live"&. Check it by sending a message from your
168e428f
PH
2413favourite user agent.
2414
2415You should consider what to tell your users about the change of MTA. Exim may
2416have different capabilities to what was previously running, and there are
2417various operational differences such as the text of messages produced by
2418command line options and in bounce messages. If you allow your users to make
2419use of Exim's filtering capabilities, you should make the document entitled
9b371988 2420&'Exim's interface to mail filtering'& available to them.
168e428f
PH
2421
2422
2423
f89d2485 2424.section "Upgrading Exim" "SECID36"
9b371988 2425.cindex "upgrading Exim"
168e428f
PH
2426If you are already running Exim on your host, building and installing a new
2427version automatically makes it available to MUAs, or any other programs that
2428call the MTA directly. However, if you are running an Exim daemon, you do need
9b371988
PH
2429to send it a HUP signal, to make it re-execute itself, and thereby pick up the
2430new binary. You do not need to stop processing mail in order to install a new
068aaea8
PH
2431version of Exim. The install script does not modify an existing runtime
2432configuration file.
2433
168e428f
PH
2434
2435
2436
f89d2485 2437.section "Stopping the Exim daemon on Solaris" "SECID37"
9b371988 2438.cindex "Solaris" "stopping Exim on"
168e428f 2439The standard command for stopping the mailer daemon on Solaris is
9b371988
PH
2440.code
2441/etc/init.d/sendmail stop
2442.endd
2443If &_/usr/lib/sendmail_& has been turned into a symbolic link, this script
2444fails to stop Exim because it uses the command &'ps -e'& and greps the output
2445for the text &"sendmail"&; this is not present because the actual program name
2446(that is, &"exim"&) is given by the &'ps'& command with these options. A
2447solution is to replace the line that finds the process id with something like
2448.code
2449pid=`cat /var/spool/exim/exim-daemon.pid`
2450.endd
168e428f
PH
2451to obtain the daemon's pid directly from the file that Exim saves it in.
2452
9b371988 2453Note, however, that stopping the daemon does not &"stop Exim"&. Messages can
168e428f
PH
2454still be received from local processes, and if automatic delivery is configured
2455(the normal case), deliveries will still occur.
2456
2457
2458
2459
9b371988
PH
2460. ////////////////////////////////////////////////////////////////////////////
2461. ////////////////////////////////////////////////////////////////////////////
168e428f 2462
9b371988 2463.chapter "The Exim command line" "CHAPcommandline"
4f578862
PH
2464.scindex IIDclo1 "command line" "options"
2465.scindex IIDclo2 "options" "command line"
168e428f
PH
2466Exim's command line takes the standard Unix form of a sequence of options,
2467each starting with a hyphen character, followed by a number of arguments. The
2468options are compatible with the main options of Sendmail, and there are also
2469some additional options, some of which are compatible with Smail 3. Certain
2470combinations of options do not make sense, and provoke an error if used.
2471The form of the arguments depends on which options are set.
2472
2473
f89d2485 2474.section "Setting options by program name" "SECID38"
9b371988
PH
2475.cindex "&'mailq'&"
2476If Exim is called under the name &'mailq'&, it behaves as if the option &%-bp%&
168e428f 2477were present before any other options.
9b371988 2478The &%-bp%& option requests a listing of the contents of the mail queue on the
168e428f
PH
2479standard output.
2480This feature is for compatibility with some systems that contain a command of
2481that name in one of the standard libraries, symbolically linked to
9b371988
PH
2482&_/usr/sbin/sendmail_& or &_/usr/lib/sendmail_&.
2483
2484.cindex "&'rsmtp'&"
2485If Exim is called under the name &'rsmtp'& it behaves as if the option &%-bS%&
2486were present before any other options, for compatibility with Smail. The
2487&%-bS%& option is used for reading in a number of messages in batched SMTP
2488format.
2489
2490.cindex "&'rmail'&"
2491If Exim is called under the name &'rmail'& it behaves as if the &%-i%& and
2492&%-oee%& options were present before any other options, for compatibility with
2493Smail. The name &'rmail'& is used as an interface by some UUCP systems.
2494
2495.cindex "&'runq'&"
2496.cindex "queue runner"
2497If Exim is called under the name &'runq'& it behaves as if the option &%-q%&
2498were present before any other options, for compatibility with Smail. The &%-q%&
168e428f
PH
2499option causes a single queue runner process to be started.
2500
9b371988
PH
2501.cindex "&'newaliases'&"
2502.cindex "alias file" "building"
2503.cindex "Sendmail compatibility" "calling Exim as &'newaliases'&"
2504If Exim is called under the name &'newaliases'& it behaves as if the option
2505&%-bi%& were present before any other options, for compatibility with Sendmail.
168e428f
PH
2506This option is used for rebuilding Sendmail's alias file. Exim does not have
2507the concept of a single alias file, but can be configured to run a given
9b371988 2508command if called with the &%-bi%& option.
168e428f
PH
2509
2510
9b371988
PH
2511.section "Trusted and admin users" "SECTtrustedadmin"
2512Some Exim options are available only to &'trusted users'& and others are
2513available only to &'admin users'&. In the description below, the phrases &"Exim
2514user"& and &"Exim group"& mean the user and group defined by EXIM_USER and
2515EXIM_GROUP in &_Local/Makefile_& or set by the &%exim_user%& and
2516&%exim_group%& options. These do not necessarily have to use the name &"exim"&.
168e428f 2517
9b371988 2518.ilist
f89d2485 2519.cindex "trusted users" "definition of"
9b371988 2520.cindex "user" "trusted definition of"
168e428f 2521The trusted users are root, the Exim user, any user listed in the
9b371988
PH
2522&%trusted_users%& configuration option, and any user whose current group or any
2523supplementary group is one of those listed in the &%trusted_groups%&
168e428f 2524configuration option. Note that the Exim group is not automatically trusted.
9b371988
PH
2525
2526.cindex '&"From"& line'
2527.cindex "envelope sender"
2528Trusted users are always permitted to use the &%-f%& option or a leading
2529&"From&~"& line to specify the envelope sender of a message that is passed to
2530Exim through the local interface (see the &%-bm%& and &%-f%& options below).
2531See the &%untrusted_set_sender%& option for a way of permitting non-trusted
2532users to set envelope senders.
2533
2534.cindex "&'From:'& header line"
2535.cindex "&'Sender:'& header line"
2536For a trusted user, there is never any check on the contents of the &'From:'&
2537header line, and a &'Sender:'& line is never added. Furthermore, any existing
2538&'Sender:'& line in incoming local (non-TCP/IP) messages is not removed.
2539
168e428f
PH
2540Trusted users may also specify a host name, host address, interface address,
2541protocol name, ident value, and authentication data when submitting a message
2542locally. Thus, they are able to insert messages into Exim's queue locally that
2543have the characteristics of messages received from a remote host. Untrusted
9b371988 2544users may in some circumstances use &%-f%&, but can never set the other values
168e428f 2545that are available to trusted users.
9b371988
PH
2546.next
2547.cindex "user" "admin definition of"
2548.cindex "admin user" "definition of"
168e428f 2549The admin users are root, the Exim user, and any user that is a member of the
9b371988 2550Exim group or of any group listed in the &%admin_groups%& configuration option.
168e428f 2551The current group does not have to be one of these groups.
9b371988 2552
168e428f
PH
2553Admin users are permitted to list the queue, and to carry out certain
2554operations on messages, for example, to force delivery failures. It is also
2555necessary to be an admin user in order to see the full information provided by
2556the Exim monitor, and full debugging output.
9b371988
PH
2557
2558By default, the use of the &%-M%&, &%-q%&, &%-R%&, and &%-S%& options to cause
2559Exim to attempt delivery of messages on its queue is restricted to admin users.
2560However, this restriction can be relaxed by setting the &%prod_requires_admin%&
2561option false (that is, specifying &%no_prod_requires_admin%&).
2562
2563Similarly, the use of the &%-bp%& option to list all the messages in the queue
2564is restricted to admin users unless &%queue_list_requires_admin%& is set
168e428f 2565false.
9b371988 2566.endlist
168e428f
PH
2567
2568
9b371988 2569&*Warning*&: If you configure your system so that admin users are able to
168e428f
PH
2570edit Exim's configuration file, you are giving those users an easy way of
2571getting root. There is further discussion of this issue at the start of chapter
9b371988 2572&<<CHAPconf>>&.
168e428f
PH
2573
2574
2575
2576
f89d2485 2577.section "Command line options" "SECID39"
db9452a9
PH
2578Exim's command line options are described in alphabetical order below. If none
2579of the options that specifies a specific action (such as starting the daemon or
2580a queue runner, or testing an address, or receiving a message in a specific
2581format, or listing the queue) are present, and there is at least one argument
2582on the command line, &%-bm%& (accept a local message on the standard input,
2583with the arguments specifying the recipients) is assumed. Otherwise, Exim
2584outputs a brief message about itself and exits.
168e428f 2585
9b371988
PH
2586. ////////////////////////////////////////////////////////////////////////////
2587. Insert a stylized XML comment here, to identify the start of the command line
2588. options. This is for the benefit of the Perl script that automatically
2589. creates a man page for the options.
2590. ////////////////////////////////////////////////////////////////////////////
168e428f 2591
9b371988 2592.literal xml
168e428f 2593<!-- === Start of command line options === -->
9b371988 2594.literal off
168e428f
PH
2595
2596
9b371988
PH
2597.vlist
2598.vitem &%--%&
2599.oindex "--"
2600.cindex "options" "command line; terminating"
168e428f
PH
2601This is a pseudo-option whose only purpose is to terminate the options and
2602therefore to cause subsequent command line items to be treated as arguments
2603rather than options, even if they begin with hyphens.
2604
9b371988
PH
2605.vitem &%--help%&
2606.oindex "&%--help%&"
168e428f
PH
2607This option causes Exim to output a few sentences stating what it is.
2608The same output is generated if the Exim binary is called with no options and
2609no arguments.
2610
9b371988
PH
2611.vitem &%-B%&<&'type'&>
2612.oindex "&%-B%&"
2613.cindex "8-bit characters"
2614.cindex "Sendmail compatibility" "8-bit characters"
168e428f
PH
2615This is a Sendmail option for selecting 7 or 8 bit processing. Exim is 8-bit
2616clean; it ignores this option.
2617
9b371988
PH
2618.vitem &%-bd%&
2619.oindex "&%-bd%&"
2620.cindex "daemon"
f89d2485 2621.cindex "SMTP" "listener"
9b371988 2622.cindex "queue runner"
168e428f 2623This option runs Exim as a daemon, awaiting incoming SMTP connections. Usually
9b371988
PH
2624the &%-bd%& option is combined with the &%-q%&<&'time'&> option, to specify
2625that the daemon should also initiate periodic queue runs.
2626
2627The &%-bd%& option can be used only by an admin user. If either of the &%-d%&
2628(debugging) or &%-v%& (verifying) options are set, the daemon does not
168e428f
PH
2629disconnect from the controlling terminal. When running this way, it can be
2630stopped by pressing ctrl-C.
9b371988 2631
168e428f
PH
2632By default, Exim listens for incoming connections to the standard SMTP port on
2633all the host's running interfaces. However, it is possible to listen on other
2634ports, on multiple ports, and only on specific interfaces. Chapter
9b371988
PH
2635&<<CHAPinterfaces>>& contains a description of the options that control this.
2636
168e428f 2637When a listening daemon
9b371988
PH
2638.cindex "daemon" "process id (pid)"
2639.cindex "pid (process id)" "of daemon"
2640is started without the use of &%-oX%& (that is, without overriding the normal
2641configuration), it writes its process id to a file called &_exim-daemon.pid_&
2642in Exim's spool directory. This location can be overridden by setting
2643PID_FILE_PATH in &_Local/Makefile_&. The file is written while Exim is still
168e428f 2644running as root.
9b371988
PH
2645
2646When &%-oX%& is used on the command line to start a listening daemon, the
2647process id is not written to the normal pid file path. However, &%-oP%& can be
168e428f 2648used to specify a path on the command line if a pid file is required.
9b371988 2649
168e428f 2650The SIGHUP signal
9b371988 2651.cindex "SIGHUP"
3cb1b51e
PH
2652.cindex "daemon" "restarting"
2653can be used to cause the daemon to re-execute itself. This should be done
2654whenever Exim's configuration file, or any file that is incorporated into it by
2655means of the &%.include%& facility, is changed, and also whenever a new version
2656of Exim is installed. It is not necessary to do this when other files that are
9b371988
PH
2657referenced from the configuration (for example, alias files) are changed,
2658because these are reread each time they are used.
2659
2660.vitem &%-bdf%&
2661.oindex "&%-bdf%&"
2662This option has the same effect as &%-bd%& except that it never disconnects
2663from the controlling terminal, even when no debugging is specified.
2664
2665.vitem &%-be%&
2666.oindex "&%-be%&"
2667.cindex "testing" "string expansion"
2668.cindex "expansion" "testing"
168e428f
PH
2669Run Exim in expansion testing mode. Exim discards its root privilege, to
2670prevent ordinary users from using this mode to read otherwise inaccessible
2671files. If no arguments are given, Exim runs interactively, prompting for lines
4f578862 2672of data. Otherwise, it processes each argument in turn.
9b371988
PH
2673
2674If Exim was built with USE_READLINE=yes in &_Local/Makefile_&, it tries
2675to load the &%libreadline%& library dynamically whenever the &%-be%& option is
2676used without command line arguments. If successful, it uses the &[readline()]&
168e428f
PH
2677function, which provides extensive line-editing facilities, for reading the
2678test data. A line history is supported.
9b371988 2679
168e428f 2680Long expansion expressions can be split over several lines by using backslash
068aaea8 2681continuations. As in Exim's run time configuration, white space at the start of
168e428f
PH
2682continuation lines is ignored. Each argument or data line is passed through the
2683string expansion mechanism, and the result is output. Variable values from the
9b371988 2684configuration file (for example, &$qualify_domain$&) are available, but no
3cb1b51e 2685message-specific values (such as &$sender_domain$&) are set, because no message
f89d2485 2686is being processed (but see &%-bem%& and &%-Mset%&).
168e428f 2687
9b371988
PH
2688&*Note*&: If you use this mechanism to test lookups, and you change the data
2689files or databases you are using, you must exit and restart Exim before trying
2690the same lookup again. Otherwise, because each Exim process caches the results
2691of lookups, you will just get the same result as before.
9b371988 2692
3cb1b51e
PH
2693.vitem &%-bem%&&~<&'filename'&>
2694.oindex "&%-bem%&"
2695.cindex "testing" "string expansion"
2696.cindex "expansion" "testing"
2697This option operates like &%-be%& except that it must be followed by the name
2698of a file. For example:
2699.code
2700exim -bem /tmp/testmessage
2701.endd
2702The file is read as a message (as if receiving a locally-submitted non-SMTP
2703message) before any of the test expansions are done. Thus, message-specific
2704variables such as &$message_size$& and &$header_from:$& are available. However,
2705no &'Received:'& header is added to the message. If the &%-t%& option is set,
2706recipients are read from the headers in the normal way, and are shown in the
2707&$recipients$& variable. Note that recipients cannot be given on the command
2708line, because further arguments are taken as strings to expand (just like
2709&%-be%&).
3cb1b51e 2710
9b371988
PH
2711.vitem &%-bF%&&~<&'filename'&>
2712.oindex "&%-bF%&"
2713.cindex "system filter" "testing"
2714.cindex "testing" "system filter"
2715This option is the same as &%-bf%& except that it assumes that the filter being
168e428f
PH
2716tested is a system filter. The additional commands that are available only in
2717system filters are recognized.
2718
9b371988
PH
2719.vitem &%-bf%&&~<&'filename'&>
2720.oindex "&%-bf%&"
2721.cindex "filter" "testing"
2722.cindex "testing" "filter file"
2723.cindex "forward file" "testing"
2724.cindex "testing" "forward file"
2725.cindex "Sieve filter" "testing"
168e428f
PH
2726This option runs Exim in user filter testing mode; the file is the filter file
2727to be tested, and a test message must be supplied on the standard input. If
2728there are no message-dependent tests in the filter, an empty file can be
2729supplied.
168e428f 2730
9b371988
PH
2731If you want to test a system filter file, use &%-bF%& instead of &%-bf%&. You
2732can use both &%-bF%& and &%-bf%& on the same command, in order to test a system
2733filter and a user filter in the same run. For example:
2734.code
2735exim -bF /system/filter -bf /user/filter </test/message
2736.endd
168e428f
PH
2737This is helpful when the system filter adds header lines or sets filter
2738variables that are used by the user filter.
168e428f 2739
9b371988
PH
2740If the test filter file does not begin with one of the special lines
2741.code
2742# Exim filter
2743# Sieve filter
2744.endd
2745it is taken to be a normal &_.forward_& file, and is tested for validity under
2746that interpretation. See sections &<<SECTitenonfilred>>& to
2747&<<SECTspecitredli>>& for a description of the possible contents of non-filter
2748redirection lists.
2749
2750The result of an Exim command that uses &%-bf%&, provided no errors are
168e428f
PH
2751detected, is a list of the actions that Exim would try to take if presented
2752with the message for real. More details of filter testing are given in the
9b371988
PH
2753separate document entitled &'Exim's interfaces to mail filtering'&.
2754
168e428f 2755When testing a filter file,
9b371988
PH
2756.cindex "&""From""& line"
2757.cindex "envelope sender"
f89d2485 2758.oindex "&%-f%&" "for filter testing"
9b371988
PH
2759the envelope sender can be set by the &%-f%& option,
2760or by a &"From&~"& line at the start of the test message. Various parameters
2761that would normally be taken from the envelope recipient address of the message
2762can be set by means of additional command line options (see the next four
2763options).
2764
2765.vitem &%-bfd%&&~<&'domain'&>
2766.oindex "&%-bfd%&"
f89d2485 2767.vindex "&$qualify_domain$&"
168e428f 2768This sets the domain of the recipient address when a filter file is being
9b371988
PH
2769tested by means of the &%-bf%& option. The default is the value of
2770&$qualify_domain$&.
168e428f 2771
9b371988
PH
2772.vitem &%-bfl%&&~<&'local&~part'&>
2773.oindex "&%-bfl%&"
168e428f 2774This sets the local part of the recipient address when a filter file is being
9b371988 2775tested by means of the &%-bf%& option. The default is the username of the
168e428f
PH
2776process that calls Exim. A local part should be specified with any prefix or
2777suffix stripped, because that is how it appears to the filter when a message is
2778actually being delivered.
2779
9b371988
PH
2780.vitem &%-bfp%&&~<&'prefix'&>
2781.oindex "&%-bfp%&"
168e428f 2782This sets the prefix of the local part of the recipient address when a filter
9b371988 2783file is being tested by means of the &%-bf%& option. The default is an empty
168e428f
PH
2784prefix.
2785
9b371988
PH
2786.vitem &%-bfs%&&~<&'suffix'&>
2787.oindex "&%-bfs%&"
168e428f 2788This sets the suffix of the local part of the recipient address when a filter
9b371988 2789file is being tested by means of the &%-bf%& option. The default is an empty
168e428f
PH
2790suffix.
2791
9b371988
PH
2792.vitem &%-bh%&&~<&'IP&~address'&>
2793.oindex "&%-bh%&"
2794.cindex "testing" "incoming SMTP"
2795.cindex "SMTP" "testing incoming"
2796.cindex "testing" "relay control"
2797.cindex "relaying" "testing configuration"
2798.cindex "policy control" "testing"
2799.cindex "debugging" "&%-bh%& option"
168e428f
PH
2800This option runs a fake SMTP session as if from the given IP address, using the
2801standard input and output. The IP address may include a port number at the end,
2802after a full stop. For example:
9b371988
PH
2803.code
2804exim -bh 10.9.8.7.1234
2805exim -bh fe80::a00:20ff:fe86:a061.5678
2806.endd
168e428f 2807When an IPv6 address is given, it is converted into canonical form. In the case
9b371988
PH
2808of the second example above, the value of &$sender_host_address$& after
2809conversion to the canonical form is
2810&`fe80:0000:0000:0a00:20ff:fe86:a061.5678`&.
2811
168e428f 2812Comments as to what is going on are written to the standard error file. These
9b371988 2813include lines beginning with &"LOG"& for anything that would have been logged.
168e428f
PH
2814This facility is provided for testing configuration options for incoming
2815messages, to make sure they implement the required policy. For example, you can
9b371988
PH
2816test your relay controls using &%-bh%&.
2817
2818&*Warning 1*&:
2819.cindex "RFC 1413"
db9452a9
PH
2820You can test features of the configuration that rely on ident (RFC 1413)
2821information by using the &%-oMt%& option. However, Exim cannot actually perform
2822an ident callout when testing using &%-bh%& because there is no incoming SMTP
2823connection.
9b371988
PH
2824
2825&*Warning 2*&: Address verification callouts (see section &<<SECTcallver>>&)
2826are also skipped when testing using &%-bh%&. If you want these callouts to
2827occur, use &%-bhc%& instead.
2828
168e428f
PH
2829Messages supplied during the testing session are discarded, and nothing is
2830written to any of the real log files. There may be pauses when DNS (and other)
9b371988 2831lookups are taking place, and of course these may time out. The &%-oMi%& option
db9452a9
PH
2832can be used to specify a specific IP interface and port if this is important,
2833and &%-oMaa%& and &%-oMai%& can be used to set parameters as if the SMTP
2834session were authenticated.
9b371988
PH
2835
2836The &'exim_checkaccess'& utility is a &"packaged"& version of &%-bh%& whose
168e428f 2837output just states whether a given recipient address from a given host is
9b371988 2838acceptable or not. See section &<<SECTcheckaccess>>&.
168e428f 2839
3cb1b51e 2840Features such as authentication and encryption, where the client input is not
f89d2485
PH
2841plain text, cannot easily be tested with &%-bh%&. Instead, you should use a
2842specialized SMTP test program such as
3cb1b51e 2843&url(http://jetmore.org/john/code/#swaks,swaks).
3cb1b51e 2844
9b371988
PH
2845.vitem &%-bhc%&&~<&'IP&~address'&>
2846.oindex "&%-bhc%&"
2847This option operates in the same way as &%-bh%&, except that address
168e428f
PH
2848verification callouts are performed if required. This includes consulting and
2849updating the callout cache database.
2850
9b371988
PH
2851.vitem &%-bi%&
2852.oindex "&%-bi%&"
2853.cindex "alias file" "building"
2854.cindex "building alias file"
2855.cindex "Sendmail compatibility" "&%-bi%& option"
2856Sendmail interprets the &%-bi%& option as a request to rebuild its alias file.
168e428f 2857Exim does not have the concept of a single alias file, and so it cannot mimic
9b371988 2858this behaviour. However, calls to &_/usr/lib/sendmail_& with the &%-bi%& option
168e428f
PH
2859tend to appear in various scripts such as NIS make files, so the option must be
2860recognized.
9b371988
PH
2861
2862If &%-bi%& is encountered, the command specified by the &%bi_command%&
168e428f 2863configuration option is run, under the uid and gid of the caller of Exim. If
9b371988
PH
2864the &%-oA%& option is used, its value is passed to the command as an argument.
2865The command set by &%bi_command%& may not contain arguments. The command can
2866use the &'exim_dbmbuild'& utility, or some other means, to rebuild alias files
2867if this is required. If the &%bi_command%& option is not set, calling Exim with
2868&%-bi%& is a no-op.
2869
2870.vitem &%-bm%&
2871.oindex "&%-bm%&"
2872.cindex "local message reception"
168e428f
PH
2873This option runs an Exim receiving process that accepts an incoming,
2874locally-generated message on the current input. The recipients are given as the
9b371988 2875command arguments (except when &%-t%& is also present &-- see below). Each
168e428f
PH
2876argument can be a comma-separated list of RFC 2822 addresses. This is the
2877default option for selecting the overall action of an Exim call; it is assumed
2878if no other conflicting option is present.
9b371988 2879
168e428f 2880If any addresses in the message are unqualified (have no domain), they are
9b371988
PH
2881qualified by the values of the &%qualify_domain%& or &%qualify_recipient%&
2882options, as appropriate. The &%-bnq%& option (see below) provides a way of
168e428f 2883suppressing this for special cases.
9b371988 2884
168e428f 2885Policy checks on the contents of local messages can be enforced by means of
9b371988
PH
2886the non-SMTP ACL. See chapter &<<CHAPACL>>& for details.
2887
2888.cindex "return code" "for &%-bm%&"
2889The return code is zero if the message is successfully accepted. Otherwise, the
2890action is controlled by the &%-oe%&&'x'& option setting &-- see below.
2891
168e428f 2892The format
9b371988
PH
2893.cindex "message" "format"
2894.cindex "format" "message"
2895.cindex "&""From""& line"
2896.cindex "UUCP" "&""From""& line"
2897.cindex "Sendmail compatibility" "&""From""& line"
168e428f
PH
2898of the message must be as defined in RFC 2822, except that, for
2899compatibility with Sendmail and Smail, a line in one of the forms
9b371988
PH
2900.code
2901From sender Fri Jan 5 12:55 GMT 1997
2902From sender Fri, 5 Jan 97 12:55:01
2903.endd
168e428f
PH
2904(with the weekday optional, and possibly with additional text after the date)
2905is permitted to appear at the start of the message. There appears to be no
2906authoritative specification of the format of this line. Exim recognizes it by
9b371988 2907matching against the regular expression defined by the &%uucp_from_pattern%&
168e428f 2908option, which can be changed if necessary.
9b371988 2909
f89d2485
PH
2910.oindex "&%-f%&" "overriding &""From""& line"
2911The specified sender is treated as if it were given as the argument to the
9b371988 2912&%-f%& option, but if a &%-f%& option is also present, its argument is used in
168e428f
PH
2913preference to the address taken from the message. The caller of Exim must be a
2914trusted user for the sender of a message to be set in this way.
2915
9b371988
PH
2916.vitem &%-bnq%&
2917.oindex "&%-bnq%&"
f89d2485 2918.cindex "address qualification, suppressing"
168e428f
PH
2919By default, Exim automatically qualifies unqualified addresses (those
2920without domains) that appear in messages that are submitted locally (that
2921is, not over TCP/IP). This qualification applies both to addresses in
2922envelopes, and addresses in header lines. Sender addresses are qualified using
9b371988
PH
2923&%qualify_domain%&, and recipient addresses using &%qualify_recipient%& (which
2924defaults to the value of &%qualify_domain%&).
2925
2926Sometimes, qualification is not wanted. For example, if &%-bS%& (batch SMTP) is
168e428f
PH
2927being used to re-submit messages that originally came from remote hosts after
2928content scanning, you probably do not want to qualify unqualified addresses in
2929header lines. (Such lines will be present only if you have not enabled a header
2930syntax check in the appropriate ACL.)
9b371988
PH
2931
2932The &%-bnq%& option suppresses all qualification of unqualified addresses in
168e428f
PH
2933messages that originate on the local host. When this is used, unqualified
2934addresses in the envelope provoke errors (causing message rejection) and
2935unqualified addresses in header lines are left alone.
2936
2937
9b371988
PH
2938.vitem &%-bP%&
2939.oindex "&%-bP%&"
595028e4 2940.cindex "configuration options" "extracting"
9b371988 2941.cindex "options" "configuration &-- extracting"
168e428f
PH
2942If this option is given with no arguments, it causes the values of all Exim's
2943main configuration options to be written to the standard output. The values
2944of one or more specific options can be requested by giving their names as
2945arguments, for example:
9b371988
PH
2946.code
2947exim -bP qualify_domain hold_domains
2948.endd
595028e4
PH
2949.cindex "hiding configuration option values"
2950.cindex "configuration options" "hiding value of"
2951.cindex "options" "hiding value of"
9b371988 2952However, any option setting that is preceded by the word &"hide"& in the
168e428f
PH
2953configuration file is not shown in full, except to an admin user. For other
2954users, the output is as in this example:
9b371988
PH
2955.code
2956mysql_servers = <value not displayable>
2957.endd
2958If &%configure_file%& is given as an argument, the name of the run time
168e428f
PH
2959configuration file is output.
2960If a list of configuration files was supplied, the value that is output here
2961is the name of the file that was actually used.
168e428f 2962
9b371988
PH
2963.cindex "daemon" "process id (pid)"
2964.cindex "pid (process id)" "of daemon"
2965If &%log_file_path%& or &%pid_file_path%& are given, the names of the
2966directories where log files and daemon pid files are written are output,
2967respectively. If these values are unset, log files are written in a
2968sub-directory of the spool directory called &%log%&, and the pid file is
2969written directly into the spool directory.
2970
2971If &%-bP%& is followed by a name preceded by &`+`&, for example,
2972.code
2973exim -bP +local_domains
2974.endd
168e428f
PH
2975it searches for a matching named list of any type (domain, host, address, or
2976local part) and outputs what it finds.
9b371988
PH
2977
2978.cindex "options" "router &-- extracting"
2979.cindex "options" "transport &-- extracting"
5d9c27ec 2980.cindex "options" "authenticator &-- extracting"
9b371988 2981If one of the words &%router%&, &%transport%&, or &%authenticator%& is given,
168e428f
PH
2982followed by the name of an appropriate driver instance, the option settings for
2983that driver are output. For example:
9b371988
PH
2984.code
2985exim -bP transport local_delivery
2986.endd
168e428f
PH
2987The generic driver options are output first, followed by the driver's private
2988options. A list of the names of drivers of a particular type can be obtained by
9b371988
PH
2989using one of the words &%router_list%&, &%transport_list%&, or
2990&%authenticator_list%&, and a complete list of all drivers with their option
2991settings can be obtained by using &%routers%&, &%transports%&, or
2992&%authenticators%&.
168e428f 2993
71e1673f 2994.new
5d9c27ec
TK
2995.cindex "options" "macro &-- extracting"
2996If invoked by an admin user, then &%macro%&, &%macro_list%& and &%macros%&
2997are available, similarly to the drivers. Because macros are sometimes used
2998for storing passwords, this option is restricted.
2999The output format is one item per line.
71e1673f 3000.wen
168e428f 3001
9b371988
PH
3002.vitem &%-bp%&
3003.oindex "&%-bp%&"
3004.cindex "queue" "listing messages on"
3005.cindex "listing" "messages on the queue"
168e428f 3006This option requests a listing of the contents of the mail queue on the
9b371988 3007standard output. If the &%-bp%& option is followed by a list of message ids,
168e428f 3008just those messages are listed. By default, this option can be used only by an
9b371988 3009admin user. However, the &%queue_list_requires_admin%& option can be set false
168e428f 3010to allow any user to see the queue.
168e428f 3011
9b371988
PH
3012Each message on the queue is displayed as in the following example:
3013.code
301425m 2.9K 0t5C6f-0000c8-00 <alice@wonderland.fict.example>
3015 red.king@looking-glass.fict.example
3016 <other addresses>
3017.endd
3018.cindex "message" "size in queue listing"
3019.cindex "size" "of message"
3020The first line contains the length of time the message has been on the queue
168e428f
PH
3021(in this case 25 minutes), the size of the message (2.9K), the unique local
3022identifier for the message, and the message sender, as contained in the
3023envelope. For bounce messages, the sender address is empty, and appears as
9b371988 3024&"<>"&. If the message was submitted locally by an untrusted user who overrode
168e428f
PH
3025the default sender address, the user's login name is shown in parentheses
3026before the sender address.
9b371988
PH
3027
3028.cindex "frozen messages" "in queue listing"
3029If the message is frozen (attempts to deliver it are suspended) then the text
3030&"*** frozen ***"& is displayed at the end of this line.
3031
168e428f
PH
3032The recipients of the message (taken from the envelope, not the headers) are
3033displayed on subsequent lines. Those addresses to which the message has already
3034been delivered are marked with the letter D. If an original address gets
3035expanded into several addresses via an alias or forward file, the original is
3036displayed with a D only when deliveries for all of its child addresses are
3037complete.
3038
3039
9b371988
PH
3040.vitem &%-bpa%&
3041.oindex "&%-bpa%&"
3042This option operates like &%-bp%&, but in addition it shows delivered addresses
168e428f 3043that were generated from the original top level address(es) in each message by
9b371988
PH
3044alias or forwarding operations. These addresses are flagged with &"+D"& instead
3045of just &"D"&.
168e428f
PH
3046
3047
9b371988
PH
3048.vitem &%-bpc%&
3049.oindex "&%-bpc%&"
3050.cindex "queue" "count of messages on"
168e428f
PH
3051This option counts the number of messages on the queue, and writes the total
3052to the standard output. It is restricted to admin users, unless
9b371988 3053&%queue_list_requires_admin%& is set false.
168e428f
PH
3054
3055
9b371988
PH
3056.vitem &%-bpr%&
3057.oindex "&%-bpr%&"
3058This option operates like &%-bp%&, but the output is not sorted into
168e428f
PH
3059chronological order of message arrival. This can speed it up when there are
3060lots of messages on the queue, and is particularly useful if the output is
3061going to be post-processed in a way that doesn't need the sorting.
3062
9b371988
PH
3063.vitem &%-bpra%&
3064.oindex "&%-bpra%&"
3065This option is a combination of &%-bpr%& and &%-bpa%&.
168e428f 3066
9b371988
PH
3067.vitem &%-bpru%&
3068.oindex "&%-bpru%&"
3069This option is a combination of &%-bpr%& and &%-bpu%&.
168e428f
PH
3070
3071
9b371988
PH
3072.vitem &%-bpu%&
3073.oindex "&%-bpu%&"
3074This option operates like &%-bp%& but shows only undelivered top-level
3075addresses for each message displayed. Addresses generated by aliasing or
3076forwarding are not shown, unless the message was deferred after processing by a
3077router with the &%one_time%& option set.
168e428f
PH
3078
3079
9b371988
PH
3080.vitem &%-brt%&
3081.oindex "&%-brt%&"
3082.cindex "testing" "retry configuration"
3083.cindex "retry" "configuration testing"
168e428f
PH
3084This option is for testing retry rules, and it must be followed by up to three
3085arguments. It causes Exim to look for a retry rule that matches the values
3086and to write it to the standard output. For example:
9b371988
PH
3087.code
3088exim -brt bach.comp.mus.example
3089Retry rule: *.comp.mus.example F,2h,15m; F,4d,30m;
3090.endd
3091See chapter &<<CHAPretry>>& for a description of Exim's retry rules. The first
168e428f 3092argument, which is required, can be a complete address in the form
4f578862
PH
3093&'local_part@domain'&, or it can be just a domain name. If the second argument
3094contains a dot, it is interpreted as an optional second domain name; if no
3095retry rule is found for the first argument, the second is tried. This ties in
3096with Exim's behaviour when looking for retry rules for remote hosts &-- if no
3097rule is found that matches the host, one that matches the mail domain is
3098sought. Finally, an argument that is the name of a specific delivery error, as
3099used in setting up retry rules, can be given. For example:
3100.code
3101exim -brt haydn.comp.mus.example quota_3d
3102Retry rule: *@haydn.comp.mus.example quota_3d F,1h,15m
3103.endd
168e428f 3104
9b371988
PH
3105.vitem &%-brw%&
3106.oindex "&%-brw%&"
3107.cindex "testing" "rewriting"
3108.cindex "rewriting" "testing"
168e428f
PH
3109This option is for testing address rewriting rules, and it must be followed by
3110a single argument, consisting of either a local part without a domain, or a
3111complete address with a fully qualified domain. Exim outputs how this address
3112would be rewritten for each possible place it might appear. See chapter
9b371988 3113&<<CHAPrewrite>>& for further details.
168e428f 3114
9b371988
PH
3115.vitem &%-bS%&
3116.oindex "&%-bS%&"
3117.cindex "SMTP" "batched incoming"
3118.cindex "batched SMTP input"
168e428f
PH
3119This option is used for batched SMTP input, which is an alternative interface
3120for non-interactive local message submission. A number of messages can be
3121submitted in a single run. However, despite its name, this is not really SMTP
3122input. Exim reads each message's envelope from SMTP commands on the standard
3123input, but generates no responses. If the caller is trusted, or
9b371988 3124&%untrusted_set_sender%& is set, the senders in the SMTP MAIL commands are
168e428f 3125believed; otherwise the sender is always the caller of Exim.
9b371988 3126
168e428f
PH
3127The message itself is read from the standard input, in SMTP format (leading
3128dots doubled), terminated by a line containing just a single dot. An error is
3129provoked if the terminating dot is missing. A further message may then follow.
9b371988 3130
168e428f 3131As for other local message submissions, the contents of incoming batch SMTP
9b371988
PH
3132messages can be checked using the non-SMTP ACL (see chapter &<<CHAPACL>>&).
3133Unqualified addresses are automatically qualified using &%qualify_domain%& and
3134&%qualify_recipient%&, as appropriate, unless the &%-bnq%& option is used.
3135
168e428f
PH
3136Some other SMTP commands are recognized in the input. HELO and EHLO act
3137as RSET; VRFY, EXPN, ETRN, and HELP act as NOOP;
3138QUIT quits, ignoring the rest of the standard input.
9b371988
PH
3139
3140.cindex "return code" "for &%-bS%&"
168e428f
PH
3141If any error is encountered, reports are written to the standard output and
3142error streams, and Exim gives up immediately. The return code is 0 if no error
3143was detected; it is 1 if one or more messages were accepted before the error
3144was detected; otherwise it is 2.
9b371988 3145
168e428f 3146More details of input using batched SMTP are given in section
9b371988 3147&<<SECTincomingbatchedSMTP>>&.
168e428f 3148
9b371988
PH
3149.vitem &%-bs%&
3150.oindex "&%-bs%&"
3151.cindex "SMTP" "local input"
3152.cindex "local SMTP input"
168e428f
PH
3153This option causes Exim to accept one or more messages by reading SMTP commands
3154on the standard input, and producing SMTP replies on the standard output. SMTP
9b371988 3155policy controls, as defined in ACLs (see chapter &<<CHAPACL>>&) are applied.
168e428f
PH
3156Some user agents use this interface as a way of passing locally-generated
3157messages to the MTA.
9b371988 3158
168e428f 3159In
9b371988
PH
3160.cindex "sender" "source of"
3161this usage, if the caller of Exim is trusted, or &%untrusted_set_sender%& is
168e428f
PH
3162set, the senders of messages are taken from the SMTP MAIL commands.
3163Otherwise the content of these commands is ignored and the sender is set up as
3164the calling user. Unqualified addresses are automatically qualified using
9b371988
PH
3165&%qualify_domain%& and &%qualify_recipient%&, as appropriate, unless the
3166&%-bnq%& option is used.
3167
3168.cindex "inetd"
168e428f 3169The
9b371988
PH
3170&%-bs%& option is also used to run Exim from &'inetd'&, as an alternative to
3171using a listening daemon. Exim can distinguish the two cases by checking
3172whether the standard input is a TCP/IP socket. When Exim is called from
3173&'inetd'&, the source of the mail is assumed to be remote, and the comments
3174above concerning senders and qualification do not apply. In this situation,
3175Exim behaves in exactly the same way as it does when receiving a message via
3176the listening daemon.
3177
3178.vitem &%-bt%&
3179.oindex "&%-bt%&"
3180.cindex "testing" "addresses"
3181.cindex "address" "testing"
168e428f 3182This option runs Exim in address testing mode, in which each argument is taken
595028e4 3183as a recipient address to be tested for deliverability. The results are
f89d2485
PH
3184written to the standard output. If a test fails, and the caller is not an admin
3185user, no details of the failure are output, because these might contain
3186sensitive information such as usernames and passwords for database lookups.
9b371988 3187
168e428f
PH
3188If no arguments are given, Exim runs in an interactive manner, prompting with a
3189right angle bracket for addresses to be tested.
9b371988
PH
3190
3191Unlike the &%-be%& test option, you cannot arrange for Exim to use the
3192&[readline()]& function, because it is running as &'root'& and there are
168e428f 3193security issues.
9b371988 3194
168e428f 3195Each address is handled as if it were the recipient address of a message
9b371988 3196(compare the &%-bv%& option). It is passed to the routers and the result is
168e428f 3197written to the standard output. However, any router that has
9b371988 3198&%no_address_test%& set is bypassed. This can make &%-bt%& easier to use for
168e428f
PH
3199genuine routing tests if your first router passes everything to a scanner
3200program.
9b371988 3201
9b371988 3202.cindex "return code" "for &%-bt%&"
f89d2485 3203The return code is 2 if any address failed outright; it is 1 if no address
168e428f
PH
3204failed outright but at least one could not be resolved for some reason. Return
3205code 0 is given only when all addresses succeed.
9b371988 3206
db9452a9
PH
3207.cindex "duplicate addresses"
3208&*Note*&: When actually delivering a message, Exim removes duplicate recipient
3209addresses after routing is complete, so that only one delivery takes place.
3210This does not happen when testing with &%-bt%&; the full results of routing are
3211always shown.
db9452a9 3212
9b371988 3213&*Warning*&: &%-bt%& can only do relatively simple testing. If any of the
168e428f
PH
3214routers in the configuration makes any tests on the sender address of a
3215message,
f89d2485 3216.oindex "&%-f%&" "for address testing"
9b371988
PH
3217you can use the &%-f%& option to set an appropriate sender when running
3218&%-bt%& tests. Without it, the sender is assumed to be the calling user at the
168e428f
PH
3219default qualifying domain. However, if you have set up (for example) routers
3220whose behaviour depends on the contents of an incoming message, you cannot test
9b371988 3221those conditions using &%-bt%&. The &%-N%& option provides a possible way of
168e428f
PH
3222doing such tests.
3223
9b371988
PH
3224.vitem &%-bV%&
3225.oindex "&%-bV%&"
f89d2485 3226.cindex "version number of Exim"
168e428f 3227This option causes Exim to write the current version number, compilation
9b371988 3228number, and compilation date of the &'exim'& binary to the standard output.
168e428f
PH
3229It also lists the DBM library this is being used, the optional modules (such as
3230specific lookup types), the drivers that are included in the binary, and the
3231name of the run time configuration file that is in use.
9b371988
PH
3232
3233As part of its operation, &%-bV%& causes Exim to read and syntax check its
168e428f
PH
3234configuration file. However, this is a static check only. It cannot check
3235values that are to be expanded. For example, although a misspelt ACL verb is
9b371988 3236detected, an error in the verb's arguments is not. You cannot rely on &%-bV%&
168e428f 3237alone to discover (for example) all the typos in the configuration; some
9b371988
PH
3238realistic testing is needed. The &%-bh%& and &%-N%& options provide more
3239dynamic testing facilities.
168e428f 3240
9b371988
PH
3241.vitem &%-bv%&
3242.oindex "&%-bv%&"
3243.cindex "verifying address" "using &%-bv%&"
3244.cindex "address" "verification"
168e428f 3245This option runs Exim in address verification mode, in which each argument is
595028e4 3246taken as a recipient address to be verified by the routers. (This does
f89d2485
PH
3247not involve any verification callouts). During normal operation, verification
3248happens mostly as a consequence processing a &%verify%& condition in an ACL
3249(see chapter &<<CHAPACL>>&). If you want to test an entire ACL, possibly
3250including callouts, see the &%-bh%& and &%-bhc%& options.
9b371988 3251
168e428f
PH
3252If verification fails, and the caller is not an admin user, no details of the
3253failure are output, because these might contain sensitive information such as
3254usernames and passwords for database lookups.
9b371988 3255
168e428f
PH
3256If no arguments are given, Exim runs in an interactive manner, prompting with a
3257right angle bracket for addresses to be verified.
9b371988
PH
3258
3259Unlike the &%-be%& test option, you cannot arrange for Exim to use the
3260&[readline()]& function, because it is running as &'exim'& and there are
168e428f 3261security issues.
9b371988
PH
3262
3263Verification differs from address testing (the &%-bt%& option) in that routers
3264that have &%no_verify%& set are skipped, and if the address is accepted by a
3265router that has &%fail_verify%& set, verification fails. The address is
3266verified as a recipient if &%-bv%& is used; to test verification for a sender
3267address, &%-bvs%& should be used.
3268
3269If the &%-v%& option is not set, the output consists of a single line for each
168e428f 3270address, stating whether it was verified or not, and giving a reason in the
3cb1b51e
PH
3271latter case. Without &%-v%&, generating more than one address by redirection
3272causes verification to end successfully, without considering the generated
3273addresses. However, if just one address is generated, processing continues,
3274and the generated address must verify successfully for the overall verification
3275to succeed.
3276
3277When &%-v%& is set, more details are given of how the address has been handled,
3278and in the case of address redirection, all the generated addresses are also
3279considered. Verification may succeed for some and fail for others.
9b371988 3280
168e428f 3281The
9b371988 3282.cindex "return code" "for &%-bv%&"
168e428f
PH
3283return code is 2 if any address failed outright; it is 1 if no address
3284failed outright but at least one could not be resolved for some reason. Return
3285code 0 is given only when all addresses succeed.
9b371988 3286
168e428f 3287If any of the routers in the configuration makes any tests on the sender
9b371988
PH
3288address of a message, you should use the &%-f%& option to set an appropriate
3289sender when running &%-bv%& tests. Without it, the sender is assumed to be the
168e428f
PH
3290calling user at the default qualifying domain.
3291
9b371988
PH
3292.vitem &%-bvs%&
3293.oindex "&%-bvs%&"
3294This option acts like &%-bv%&, but verifies the address as a sender rather
168e428f
PH
3295than a recipient address. This affects any rewriting and qualification that
3296might happen.
3297
9b371988
PH
3298.vitem &%-C%&&~<&'filelist'&>
3299.oindex "&%-C%&"
3300.cindex "configuration file" "alternate"
3301.cindex "CONFIGURE_FILE"
3302.cindex "alternate configuration file"
168e428f
PH
3303This option causes Exim to find the run time configuration file from the given
3304list instead of from the list specified by the CONFIGURE_FILE
3305compile-time setting. Usually, the list will consist of just a single file
3306name, but it can be a colon-separated list of names. In this case, the first
3307file that exists is used. Failure to open an existing file stops Exim from
3308proceeding any further along the list, and an error is generated.
9b371988 3309
168e428f
PH
3310When this option is used by a caller other than root or the Exim user, and the
3311list is different from the compiled-in list, Exim gives up its root privilege
3312immediately, and runs with the real and effective uid and gid set to those of
3313the caller. However, if ALT_CONFIG_ROOT_ONLY is defined in
9b371988 3314&_Local/Makefile_&, root privilege is retained for &%-C%& only if the caller of
168e428f 3315Exim is root.
9b371988 3316
168e428f
PH
3317That is, the Exim user is no longer privileged in this regard. This build-time
3318option is not set by default in the Exim source distribution tarbundle.
9b371988
PH
3319However, if you are using a &"packaged"& version of Exim (source or binary),
3320the packagers might have enabled it.
3321
168e428f 3322Setting ALT_CONFIG_ROOT_ONLY locks out the possibility of testing a
9b371988
PH
3323configuration using &%-C%& right through message reception and delivery, even
3324if the caller is root. The reception works, but by that time, Exim is running
3325as the Exim user, so when it re-executes to regain privilege for the delivery,
3326the use of &%-C%& causes privilege to be lost. However, root can test reception
3327and delivery using two separate commands (one to put a message on the queue,
3328using &%-odq%&, and another to do the delivery, using &%-M%&).
3329
3330If ALT_CONFIG_PREFIX is defined &_in Local/Makefile_&, it specifies a
3331prefix string with which any file named in a &%-C%& command line option
3332must start. In addition, the file name must not contain the sequence &`/../`&.
3333However, if the value of the &%-C%& option is identical to the value of
3334CONFIGURE_FILE in &_Local/Makefile_&, Exim ignores &%-C%& and proceeds as
168e428f 3335usual. There is no default setting for ALT_CONFIG_PREFIX; when it is
9b371988
PH
3336unset, any file name can be used with &%-C%&.
3337
168e428f
PH
3338ALT_CONFIG_PREFIX can be used to confine alternative configuration files
3339to a directory to which only root has access. This prevents someone who has
3340broken into the Exim account from running a privileged Exim with an arbitrary
3341configuration file.
9b371988
PH
3342
3343The &%-C%& facility is useful for ensuring that configuration files are
168e428f
PH
3344syntactically correct, but cannot be used for test deliveries, unless the
3345caller is privileged, or unless it is an exotic configuration that does not
3346require privilege. No check is made on the owner or group of the files
3347specified by this option.
3348
9b371988
PH
3349.vitem &%-D%&<&'macro'&>=<&'value'&>
3350.oindex "&%-D%&"
3351.cindex "macro" "setting on command line"
168e428f 3352This option can be used to override macro definitions in the configuration file
9b371988 3353(see section &<<SECTmacrodefs>>&). However, like &%-C%&, if it is used by an
168e428f 3354unprivileged caller, it causes Exim to give up its root privilege.
9b371988 3355If DISABLE_D_OPTION is defined in &_Local/Makefile_&, the use of &%-D%& is
168e428f 3356completely disabled, and its use causes an immediate error exit.
9b371988 3357
168e428f 3358The entire option (including equals sign if present) must all be within one
9b371988 3359command line item. &%-D%& can be used to set the value of a macro to the empty
168e428f
PH
3360string, in which case the equals sign is optional. These two commands are
3361synonymous:
9b371988
PH
3362.code
3363exim -DABC ...
3364exim -DABC= ...
3365.endd
168e428f
PH
3366To include spaces in a macro definition item, quotes must be used. If you use
3367quotes, spaces are permitted around the macro name and the equals sign. For
3368example:
9b371988
PH
3369.code
3370exim '-D ABC = something' ...
3371.endd
3372&%-D%& may be repeated up to 10 times on a command line.
3373
3374.vitem &%-d%&<&'debug&~options'&>
3375.oindex "&%-d%&"
3376.cindex "debugging" "list of selectors"
3377.cindex "debugging" "&%-d%& option"
168e428f
PH
3378This option causes debugging information to be written to the standard
3379error stream. It is restricted to admin users because debugging output may show
3380database queries that contain password information. Also, the details of users'
f89d2485 3381filter files should be protected. If a non-admin user uses &%-d%&, Exim
3cb1b51e 3382writes an error message to the standard error stream and exits with a non-zero
f89d2485 3383return code.
3cb1b51e
PH
3384
3385When &%-d%& is used, &%-v%& is assumed. If &%-d%& is given on its own, a lot of
3386standard debugging data is output. This can be reduced, or increased to include
3387some more rarely needed information, by directly following &%-d%& with a string
3388made up of names preceded by plus or minus characters. These add or remove sets
3389of debugging data, respectively. For example, &%-d+filter%& adds filter
3390debugging, whereas &%-d-all+filter%& selects only filter debugging. Note that
3391no spaces are allowed in the debug setting. The available debugging categories
3392are:
9b371988
PH
3393.display
3394&`acl `& ACL interpretation
3395&`auth `& authenticators
3396&`deliver `& general delivery logic
3397&`dns `& DNS lookups (see also resolver)
3398&`dnsbl `& DNS black list (aka RBL) code
3399&`exec `& arguments for &[execv()]& calls
3400&`expand `& detailed debugging for string expansions
3401&`filter `& filter handling
3402&`hints_lookup `& hints data lookups
3403&`host_lookup `& all types of name-to-IP address handling
3404&`ident `& ident lookup
3405&`interface `& lists of local interfaces
3406&`lists `& matching things in lists
3407&`load `& system load checks
3408&`local_scan `& can be used by &[local_scan()]& (see chapter &&&
3409 &<<CHAPlocalscan>>&)
3410&`lookup `& general lookup code and all lookups
3411&`memory `& memory handling
3412&`pid `& add pid to debug output lines
3413&`process_info `& setting info for the process log
3414&`queue_run `& queue runs
3415&`receive `& general message reception logic
3416&`resolver `& turn on the DNS resolver's debugging output
3417&`retry `& retry handling
3418&`rewrite `& address rewriting
3419&`route `& address routing
3420&`timestamp `& add timestamp to debug output lines
3421&`tls `& TLS logic
3422&`transport `& transports
3423&`uid `& changes of uid/gid and looking up uid/gid
3424&`verify `& address verification logic
3425&`all `& almost all of the above (see below), and also &%-v%&
3426.endd
9b371988
PH
3427The &`all`& option excludes &`memory`& when used as &`+all`&, but includes it
3428for &`-all`&. The reason for this is that &`+all`& is something that people
3429tend to use when generating debug output for Exim maintainers. If &`+memory`&
3430is included, an awful lot of output that is very rarely of interest is
3431generated, so it now has to be explicitly requested. However, &`-all`& does
3432turn everything off.
9b371988 3433
f89d2485
PH
3434.cindex "resolver, debugging output"
3435.cindex "DNS resolver, debugging output"
9b371988 3436The &`resolver`& option produces output only if the DNS resolver was compiled
168e428f
PH
3437with DEBUG enabled. This is not the case in some operating systems. Also,
3438unfortunately, debugging output from the DNS resolver is written to stdout
3439rather than stderr.
9b371988
PH
3440
3441The default (&%-d%& with no argument) omits &`expand`&, &`filter`&,
3442&`interface`&, &`load`&, &`memory`&, &`pid`&, &`resolver`&, and &`timestamp`&.
3443However, the &`pid`& selector is forced when debugging is turned on for a
168e428f
PH
3444daemon, which then passes it on to any re-executed Exims. Exim also
3445automatically adds the pid to debug lines when several remote deliveries are
3446run in parallel.
9b371988
PH
3447
3448The &`timestamp`& selector causes the current time to be inserted at the start
168e428f
PH
3449of all debug output lines. This can be useful when trying to track down delays
3450in processing.
168e428f 3451
9b371988
PH
3452If the &%debug_print%& option is set in any driver, it produces output whenever
3453any debugging is selected, or if &%-v%& is used.
3454
3455.vitem &%-dd%&<&'debug&~options'&>
3456.oindex "&%-dd%&"
3457This option behaves exactly like &%-d%& except when used on a command that
168e428f
PH
3458starts a daemon process. In that case, debugging is turned off for the
3459subprocesses that the daemon creates. Thus, it is useful for monitoring the
3460behaviour of the daemon without creating as much output as full debugging does.
3461
9b371988
PH
3462.vitem &%-dropcr%&
3463.oindex "&%-dropcr%&"
168e428f
PH
3464This is an obsolete option that is now a no-op. It used to affect the way Exim
3465handled CR and LF characters in incoming messages. What happens now is
9b371988 3466described in section &<<SECTlineendings>>&.
168e428f 3467
9b371988
PH
3468.vitem &%-E%&
3469.oindex "&%-E%&"
3470.cindex "bounce message" "generating"
168e428f
PH
3471This option specifies that an incoming message is a locally-generated delivery
3472failure report. It is used internally by Exim when handling delivery failures
3473and is not intended for external use. Its only effect is to stop Exim
3474generating certain messages to the postmaster, as otherwise message cascades
3475could occur in some situations. As part of the same option, a message id may
9b371988
PH
3476follow the characters &%-E%&. If it does, the log entry for the receipt of the
3477new message contains the id, following &"R="&, as a cross-reference.
3478
3479.vitem &%-e%&&'x'&
3480.oindex "&%-e%&&'x'&"
3481There are a number of Sendmail options starting with &%-oe%& which seem to be
3482called by various programs without the leading &%o%& in the option. For
3483example, the &%vacation%& program uses &%-eq%&. Exim treats all options of the
3484form &%-e%&&'x'& as synonymous with the corresponding &%-oe%&&'x'& options.
3485
3486.vitem &%-F%&&~<&'string'&>
3487.oindex "&%-F%&"
3488.cindex "sender" "name"
3489.cindex "name" "of sender"
168e428f 3490This option sets the sender's full name for use when a locally-generated
9b371988 3491message is being accepted. In the absence of this option, the user's &'gecos'&
168e428f 3492entry from the password data is used. As users are generally permitted to alter
9b371988
PH
3493their &'gecos'& entries, no security considerations are involved. White space
3494between &%-F%& and the <&'string'&> is optional.
3495
3496.vitem &%-f%&&~<&'address'&>
3497.oindex "&%-f%&"
3498.cindex "sender" "address"
3499.cindex "address" "sender"
f89d2485 3500.cindex "trusted users"
9b371988
PH
3501.cindex "envelope sender"
3502.cindex "user" "trusted"
168e428f
PH
3503This option sets the address of the envelope sender of a locally-generated
3504message (also known as the return path). The option can normally be used only
9b371988 3505by a trusted user, but &%untrusted_set_sender%& can be set to allow untrusted
168e428f 3506users to use it.
9b371988 3507
168e428f 3508Processes running as root or the Exim user are always trusted. Other
9b371988
PH
3509trusted users are defined by the &%trusted_users%& or &%trusted_groups%&
3510options. In the absence of &%-f%&, or if the caller is not trusted, the sender
3511of a local message is set to the caller's login name at the default qualify
3512domain.
3513
3514There is one exception to the restriction on the use of &%-f%&: an empty sender
168e428f
PH
3515can be specified by any user, trusted or not, to create a message that can
3516never provoke a bounce. An empty sender can be specified either as an empty
3517string, or as a pair of angle brackets with nothing between them, as in these
3518examples of shell commands:
9b371988
PH
3519.code
3520exim -f '<>' user@domain
3521exim -f "" user@domain
3522.endd
3523In addition, the use of &%-f%& is not restricted when testing a filter file
3524with &%-bf%& or when testing or verifying addresses using the &%-bt%& or
3525&%-bv%& options.
168e428f 3526
168e428f 3527Allowing untrusted users to change the sender address does not of itself make
9b371988
PH
3528it possible to send anonymous mail. Exim still checks that the &'From:'& header
3529refers to the local user, and if it does not, it adds a &'Sender:'& header,
3530though this can be overridden by setting &%no_local_from_check%&.
3531
168e428f 3532White
9b371988
PH
3533.cindex "&""From""& line"
3534space between &%-f%& and the <&'address'&> is optional (that is, they can be
3535given as two arguments or one combined argument). The sender of a
3536locally-generated message can also be set (when permitted) by an initial
3537&"From&~"& line in the message &-- see the description of &%-bm%& above &-- but
3538if &%-f%& is also present, it overrides &"From&~"&.
3539
3540.vitem &%-G%&
3541.oindex "&%-G%&"
3542.cindex "Sendmail compatibility" "&%-G%& option ignored"
168e428f
PH
3543This is a Sendmail option which is ignored by Exim.
3544
9b371988
PH
3545.vitem &%-h%&&~<&'number'&>
3546.oindex "&%-h%&"
3547.cindex "Sendmail compatibility" "&%-h%& option ignored"
168e428f 3548This option is accepted for compatibility with Sendmail, but has no effect. (In
9b371988 3549Sendmail it overrides the &"hop count"& obtained by counting &'Received:'&
168e428f
PH
3550headers.)
3551
9b371988
PH
3552.vitem &%-i%&
3553.oindex "&%-i%&"
3554.cindex "Solaris" "&'mail'& command"
f89d2485 3555.cindex "dot" "in incoming non-SMTP message"
9b371988
PH
3556This option, which has the same effect as &%-oi%&, specifies that a dot on a
3557line by itself should not terminate an incoming, non-SMTP message. I can find
3558no documentation for this option in Solaris 2.4 Sendmail, but the &'mailx'&
3559command in Solaris 2.4 uses it. See also &%-ti%&.
3560
3561.vitem &%-M%&&~<&'message&~id'&>&~<&'message&~id'&>&~...
3562.oindex "&%-M%&"
3563.cindex "forcing delivery"
3564.cindex "delivery" "forcing attempt"
3565.cindex "frozen messages" "forcing delivery"
168e428f
PH
3566This option requests Exim to run a delivery attempt on each message in turn. If
3567any of the messages are frozen, they are automatically thawed before the
9b371988
PH
3568delivery attempt. The settings of &%queue_domains%&, &%queue_smtp_domains%&,
3569and &%hold_domains%& are ignored.
3570
168e428f 3571Retry
9b371988
PH
3572.cindex "hints database" "overriding retry hints"
3573hints for any of the addresses are overridden &-- Exim tries to deliver even if
168e428f 3574the normal retry time has not yet been reached. This option requires the caller
9b371988 3575to be an admin user. However, there is an option called &%prod_requires_admin%&
168e428f 3576which can be set false to relax this restriction (and also the same requirement
9b371988
PH
3577for the &%-q%&, &%-R%&, and &%-S%& options).
3578
068aaea8
PH
3579The deliveries happen synchronously, that is, the original Exim process does
3580not terminate until all the delivery attempts have finished. No output is
3581produced unless there is a serious error. If you want to see what is happening,
9b371988 3582use the &%-v%& option as well, or inspect Exim's main log.
168e428f 3583
9b371988
PH
3584.vitem &%-Mar%&&~<&'message&~id'&>&~<&'address'&>&~<&'address'&>&~...
3585.oindex "&%-Mar%&"
3586.cindex "message" "adding recipients"
3587.cindex "recipient" "adding"
168e428f 3588This option requests Exim to add the addresses to the list of recipients of the
9b371988
PH
3589message (&"ar"& for &"add recipients"&). The first argument must be a message
3590id, and the remaining ones must be email addresses. However, if the message is
168e428f
PH
3591active (in the middle of a delivery attempt), it is not altered. This option
3592can be used only by an admin user.
3593
4f578862 3594.vitem "&%-MC%&&~<&'transport'&>&~<&'hostname'&>&~<&'sequence&~number'&>&&&
9b371988
PH
3595 &~<&'message&~id'&>"
3596.oindex "&%-MC%&"
3597.cindex "SMTP" "passed connection"
3598.cindex "SMTP" "multiple deliveries"
3599.cindex "multiple SMTP deliveries"
168e428f
PH
3600This option is not intended for use by external callers. It is used internally
3601by Exim to invoke another instance of itself to deliver a waiting message using
3602an existing SMTP connection, which is passed as the standard input. Details are
9b371988
PH
3603given in chapter &<<CHAPSMTP>>&. This must be the final option, and the caller
3604must be root or the Exim user in order to use it.
168e428f 3605
9b371988
PH
3606.vitem &%-MCA%&
3607.oindex "&%-MCA%&"
168e428f 3608This option is not intended for use by external callers. It is used internally
9b371988
PH
3609by Exim in conjunction with the &%-MC%& option. It signifies that the
3610connection to the remote host has been authenticated.
168e428f 3611
9b371988
PH
3612.vitem &%-MCP%&
3613.oindex "&%-MCP%&"
168e428f 3614This option is not intended for use by external callers. It is used internally
9b371988 3615by Exim in conjunction with the &%-MC%& option. It signifies that the server to
168e428f
PH
3616which Exim is connected supports pipelining.
3617
9b371988
PH
3618.vitem &%-MCQ%&&~<&'process&~id'&>&~<&'pipe&~fd'&>
3619.oindex "&%-MCQ%&"
168e428f 3620This option is not intended for use by external callers. It is used internally
9b371988 3621by Exim in conjunction with the &%-MC%& option when the original delivery was
168e428f
PH
3622started by a queue runner. It passes on the process id of the queue runner,
3623together with the file descriptor number of an open pipe. Closure of the pipe
3624signals the final completion of the sequence of processes that are passing
3625messages through the same SMTP connection.
3626
9b371988
PH
3627.vitem &%-MCS%&
3628.oindex "&%-MCS%&"
168e428f 3629This option is not intended for use by external callers. It is used internally
9b371988 3630by Exim in conjunction with the &%-MC%& option, and passes on the fact that the
168e428f
PH
3631SMTP SIZE option should be used on messages delivered down the existing
3632connection.
3633
9b371988
PH
3634.vitem &%-MCT%&
3635.oindex "&%-MCT%&"
168e428f 3636This option is not intended for use by external callers. It is used internally
9b371988 3637by Exim in conjunction with the &%-MC%& option, and passes on the fact that the
168e428f
PH
3638host to which Exim is connected supports TLS encryption.
3639
9b371988
PH
3640.vitem &%-Mc%&&~<&'message&~id'&>&~<&'message&~id'&>&~...
3641.oindex "&%-Mc%&"
3642.cindex "hints database" "not overridden by &%-Mc%&"
3643.cindex "delivery" "manually started &-- not forced"
168e428f 3644This option requests Exim to run a delivery attempt on each message in turn,
9b371988 3645but unlike the &%-M%& option, it does check for retry hints, and respects any
168e428f
PH
3646that are found. This option is not very useful to external callers. It is
3647provided mainly for internal use by Exim when it needs to re-invoke itself in
9b371988
PH
3648order to regain root privilege for a delivery (see chapter &<<CHAPsecurity>>&).
3649However, &%-Mc%& can be useful when testing, in order to run a delivery that
3650respects retry times and other options such as &%hold_domains%& that are
3651overridden when &%-M%& is used. Such a delivery does not count as a queue run.
168e428f 3652If you want to run a specific delivery as if in a queue run, you should use
9b371988 3653&%-q%& with a message id argument. A distinction between queue run deliveries
168e428f
PH
3654and other deliveries is made in one or two places.
3655
9b371988
PH
3656.vitem &%-Mes%&&~<&'message&~id'&>&~<&'address'&>
3657.oindex "&%-Mes%&"
3658.cindex "message" "changing sender"
3659.cindex "sender" "changing"
168e428f 3660This option requests Exim to change the sender address in the message to the
9b371988
PH
3661given address, which must be a fully qualified address or &"<>"& (&"es"& for
3662&"edit sender"&). There must be exactly two arguments. The first argument must
3663be a message id, and the second one an email address. However, if the message
3664is active (in the middle of a delivery attempt), its status is not altered.
3665This option can be used only by an admin user.
3666
3667.vitem &%-Mf%&&~<&'message&~id'&>&~<&'message&~id'&>&~...
3668.oindex "&%-Mf%&"
3669.cindex "freezing messages"
3670.cindex "message" "manually freezing"
3671This option requests Exim to mark each listed message as &"frozen"&. This
3672prevents any delivery attempts taking place until the message is &"thawed"&,
3673either manually or as a result of the &%auto_thaw%& configuration option.
168e428f
PH
3674However, if any of the messages are active (in the middle of a delivery
3675attempt), their status is not altered. This option can be used only by an admin
3676user.
3677
9b371988
PH
3678.vitem &%-Mg%&&~<&'message&~id'&>&~<&'message&~id'&>&~...
3679.oindex "&%-Mg%&"
3680.cindex "giving up on messages"
3681.cindex "message" "abandoning delivery attempts"
3682.cindex "delivery" "abandoning further attempts"
168e428f
PH
3683This option requests Exim to give up trying to deliver the listed messages,
3684including any that are frozen. However, if any of the messages are active,
3685their status is not altered. For non-bounce messages, a delivery error message
9b371988 3686is sent to the sender, containing the text &"cancelled by administrator"&.
168e428f
PH
3687Bounce messages are just discarded. This option can be used only by an admin
3688user.
3689
9b371988
PH
3690.vitem &%-Mmad%&&~<&'message&~id'&>&~<&'message&~id'&>&~...
3691.oindex "&%-Mmad%&"
3692.cindex "delivery" "cancelling all"
168e428f 3693This option requests Exim to mark all the recipient addresses in the messages
9b371988 3694as already delivered (&"mad"& for &"mark all delivered"&). However, if any
168e428f
PH
3695message is active (in the middle of a delivery attempt), its status is not
3696altered. This option can be used only by an admin user.
3697
9b371988
PH
3698.vitem &%-Mmd%&&~<&'message&~id'&>&~<&'address'&>&~<&'address'&>&~...
3699.oindex "&%-Mmd%&"
3700.cindex "delivery" "cancelling by address"
3701.cindex "recipient" "removing"
3702.cindex "removing recipients"
168e428f 3703This option requests Exim to mark the given addresses as already delivered
9b371988 3704(&"md"& for &"mark delivered"&). The first argument must be a message id, and
168e428f
PH
3705the remaining ones must be email addresses. These are matched to recipient
3706addresses in the message in a case-sensitive manner. If the message is active
3707(in the middle of a delivery attempt), its status is not altered. This option
3708can be used only by an admin user.
3709
9b371988
PH
3710.vitem &%-Mrm%&&~<&'message&~id'&>&~<&'message&~id'&>&~...
3711.oindex "&%-Mrm%&"
3712.cindex "removing messages"
3713.cindex "abandoning mail"
3714.cindex "message" "manually discarding"
168e428f
PH
3715This option requests Exim to remove the given messages from the queue. No
3716bounce messages are sent; each message is simply forgotten. However, if any of
3717the messages are active, their status is not altered. This option can be used
3718only by an admin user or by the user who originally caused the message to be
3719placed on the queue.
3720
3cb1b51e
PH
3721.vitem &%-Mset%&&~<&'message&~id'&>
3722.oindex "&%-Mset%&
3723.cindex "testing" "string expansion"
3724.cindex "expansion" "testing"
3725This option is useful only in conjunction with &%-be%& (that is, when testing
3726string expansions). Exim loads the given message from its spool before doing
3727the test expansions, thus setting message-specific variables such as
3728&$message_size$& and the header variables. The &$recipients$& variable is made
3729available. This feature is provided to make it easier to test expansions that
3730make use of these variables. However, this option can be used only by an admin
3731user. See also &%-bem%&.
3cb1b51e 3732
9b371988
PH
3733.vitem &%-Mt%&&~<&'message&~id'&>&~<&'message&~id'&>&~...
3734.oindex "&%-Mt%&"
3735.cindex "thawing messages"
3736.cindex "unfreezing messages"
3737.cindex "frozen messages" "thawing"
3738.cindex "message" "thawing frozen"
3739This option requests Exim to &"thaw"& any of the listed messages that are
3740&"frozen"&, so that delivery attempts can resume. However, if any of the
3741messages are active, their status is not altered. This option can be used only
3742by an admin user.
3743
3744.vitem &%-Mvb%&&~<&'message&~id'&>
3745.oindex "&%-Mvb%&"
3746.cindex "listing" "message body"
3747.cindex "message" "listing body of"
168e428f
PH
3748This option causes the contents of the message body (-D) spool file to be
3749written to the standard output. This option can be used only by an admin user.
3750
595028e4
PH
3751.vitem &%-Mvc%&&~<&'message&~id'&>
3752.oindex "&%-Mvc%&"
3753.cindex "message" "listing in RFC 2822 format"
3754.cindex "listing" "message in RFC 2922 format"
3755This option causes a copy of the complete message (header lines plus body) to
3756be written to the standard output in RFC 2822 format. This option can be used
3757only by an admin user.
595028e4 3758
9b371988
PH
3759.vitem &%-Mvh%&&~<&'message&~id'&>
3760.oindex "&%-Mvh%&"
3761.cindex "listing" "message headers"
3762.cindex "header lines" "listing"
3763.cindex "message" "listing header lines"
168e428f
PH
3764This option causes the contents of the message headers (-H) spool file to be
3765written to the standard output. This option can be used only by an admin user.
3766
9b371988
PH
3767.vitem &%-Mvl%&&~<&'message&~id'&>
3768.oindex "&%-Mvl%&"
3769.cindex "listing" "message log"
3770.cindex "message" "listing message log"
168e428f
PH
3771This option causes the contents of the message log spool file to be written to
3772the standard output. This option can be used only by an admin user.
3773
9b371988
PH
3774.vitem &%-m%&
3775.oindex "&%-m%&"
3776This is apparently a synonym for &%-om%& that is accepted by Sendmail, so Exim
168e428f
PH
3777treats it that way too.
3778
9b371988
PH
3779.vitem &%-N%&
3780.oindex "&%-N%&"
3781.cindex "debugging" "&%-N%& option"
3782.cindex "debugging" "suppressing delivery"
168e428f 3783This is a debugging option that inhibits delivery of a message at the transport
9b371988 3784level. It implies &%-v%&. Exim goes through many of the motions of delivery &--
168e428f
PH
3785it just doesn't actually transport the message, but instead behaves as if it
3786had successfully done so. However, it does not make any updates to the retry
9b371988
PH
3787database, and the log entries for deliveries are flagged with &"*>"& rather
3788than &"=>"&.
3789
3790Because &%-N%& discards any message to which it applies, only root or the Exim
3791user are allowed to use it with &%-bd%&, &%-q%&, &%-R%& or &%-M%&. In other
3792words, an ordinary user can use it only when supplying an incoming message to
3793which it will apply. Although transportation never fails when &%-N%& is set, an
3794address may be deferred because of a configuration problem on a transport, or a
3795routing problem. Once &%-N%& has been used for a delivery attempt, it sticks to
3796the message, and applies to any subsequent delivery attempts that may happen
3797for that message.
3798
3799.vitem &%-n%&
3800.oindex "&%-n%&"
3801.cindex "Sendmail compatibility" "&%-n%& option ignored"
3802This option is interpreted by Sendmail to mean &"no aliasing"&. It is ignored
3803by Exim.
3804
3805.vitem &%-O%&&~<&'data'&>
3806.oindex "&%-O%&"
3807This option is interpreted by Sendmail to mean &`set option`&. It is ignored by
168e428f
PH
3808Exim.
3809
9b371988
PH
3810.vitem &%-oA%&&~<&'file&~name'&>
3811.oindex "&%-oA%&"
3812.cindex "Sendmail compatibility" "&%-oA%& option"
3813This option is used by Sendmail in conjunction with &%-bi%& to specify an
3814alternative alias file name. Exim handles &%-bi%& differently; see the
168e428f
PH
3815description above.
3816
9b371988
PH
3817.vitem &%-oB%&&~<&'n'&>
3818.oindex "&%-oB%&"
3819.cindex "SMTP" "passed connection"
3820.cindex "SMTP" "multiple deliveries"
3821.cindex "multiple SMTP deliveries"
168e428f 3822This is a debugging option which limits the maximum number of messages that can
9b371988
PH
3823be delivered down one SMTP connection, overriding the value set in any &(smtp)&
3824transport. If <&'n'&> is omitted, the limit is set to 1.
168e428f 3825
9b371988
PH
3826.vitem &%-odb%&
3827.oindex "&%-odb%&"
3828.cindex "background delivery"
3829.cindex "delivery" "in the background"
168e428f 3830This option applies to all modes in which Exim accepts incoming messages,
9b371988 3831including the listening daemon. It requests &"background"& delivery of such
168e428f
PH
3832messages, which means that the accepting process automatically starts a
3833delivery process for each message received, but does not wait for the delivery
3834processes to finish.
9b371988 3835
168e428f
PH
3836When all the messages have been received, the reception process exits,
3837leaving the delivery processes to finish in their own time. The standard output
3838and error streams are closed at the start of each delivery process.
9b371988
PH
3839This is the default action if none of the &%-od%& options are present.
3840
168e428f 3841If one of the queueing options in the configuration file
9b371988
PH
3842(&%queue_only%& or &%queue_only_file%&, for example) is in effect, &%-odb%&
3843overrides it if &%queue_only_override%& is set true, which is the default
3844setting. If &%queue_only_override%& is set false, &%-odb%& has no effect.
3845
3846.vitem &%-odf%&
3847.oindex "&%-odf%&"
3848.cindex "foreground delivery"
3849.cindex "delivery" "in the foreground"
3850This option requests &"foreground"& (synchronous) delivery when Exim has
3851accepted a locally-generated message. (For the daemon it is exactly the same as
3852&%-odb%&.) A delivery process is automatically started to deliver the message,
3853and Exim waits for it to complete before proceeding.
3854
168e428f
PH
3855The original Exim reception process does not finish until the delivery
3856process for the final message has ended. The standard error stream is left open
3857during deliveries.
9b371988
PH
3858
3859However, like &%-odb%&, this option has no effect if &%queue_only_override%& is
168e428f 3860false and one of the queueing options in the configuration file is in effect.
9b371988 3861
168e428f
PH
3862If there is a temporary delivery error during foreground delivery, the
3863message is left on the queue for later delivery, and the original reception
9b371988 3864process exits. See chapter &<<CHAPnonqueueing>>& for a way of setting up a
168e428f
PH
3865restricted configuration that never queues messages.
3866
3867
9b371988
PH
3868.vitem &%-odi%&
3869.oindex "&%-odi%&"
3870This option is synonymous with &%-odf%&. It is provided for compatibility with
168e428f
PH
3871Sendmail.
3872
9b371988
PH
3873.vitem &%-odq%&
3874.oindex "&%-odq%&"
3875.cindex "non-immediate delivery"
3876.cindex "delivery" "suppressing immediate"
3877.cindex "queueing incoming messages"
168e428f
PH
3878This option applies to all modes in which Exim accepts incoming messages,
3879including the listening daemon. It specifies that the accepting process should
3880not automatically start a delivery process for each message received. Messages
3881are placed on the queue, and remain there until a subsequent queue runner
3882process encounters them. There are several configuration options (such as
9b371988
PH
3883&%queue_only%&) that can be used to queue incoming messages under certain
3884conditions. This option overrides all of them and also &%-odqs%&. It always
168e428f
PH
3885forces queueing.
3886
9b371988
PH
3887.vitem &%-odqs%&
3888.oindex "&%-odqs%&"
3889.cindex "SMTP" "delaying delivery"
3890This option is a hybrid between &%-odb%&/&%-odi%& and &%-odq%&.
3891However, like &%-odb%& and &%-odi%&, this option has no effect if
3892&%queue_only_override%& is false and one of the queueing options in the
168e428f 3893configuration file is in effect.
9b371988
PH
3894
3895When &%-odqs%& does operate, a delivery process is started for each incoming
3896message, in the background by default, but in the foreground if &%-odi%& is
3897also present. The recipient addresses are routed, and local deliveries are done
3898in the normal way. However, if any SMTP deliveries are required, they are not
3899done at this time, so the message remains on the queue until a subsequent queue
168e428f
PH
3900runner process encounters it. Because routing was done, Exim knows which
3901messages are waiting for which hosts, and so a number of messages for the same
9b371988 3902host can be sent in a single SMTP connection. The &%queue_smtp_domains%&
168e428f 3903configuration option has the same effect for specific domains. See also the
9b371988 3904&%-qq%& option.
168e428f 3905
9b371988
PH
3906.vitem &%-oee%&
3907.oindex "&%-oee%&"
3908.cindex "error" "reporting"
168e428f
PH
3909If an error is detected while a non-SMTP message is being received (for
3910example, a malformed address), the error is reported to the sender in a mail
3911message.
9b371988
PH
3912
3913.cindex "return code" "for &%-oee%&"
168e428f 3914Provided
168e428f
PH
3915this error message is successfully sent, the Exim receiving process
3916exits with a return code of zero. If not, the return code is 2 if the problem
3917is that the original message has no recipients, or 1 any other error. This is
9b371988 3918the default &%-oe%&&'x'& option if Exim is called as &'rmail'&.
168e428f 3919
9b371988
PH
3920.vitem &%-oem%&
3921.oindex "&%-oem%&"
3922.cindex "error" "reporting"
3923.cindex "return code" "for &%-oem%&"
3924This is the same as &%-oee%&, except that Exim always exits with a non-zero
168e428f 3925return code, whether or not the error message was successfully sent.
9b371988 3926This is the default &%-oe%&&'x'& option, unless Exim is called as &'rmail'&.
168e428f 3927
9b371988
PH
3928.vitem &%-oep%&
3929.oindex "&%-oep%&"
3930.cindex "error" "reporting"
168e428f
PH
3931If an error is detected while a non-SMTP message is being received, the
3932error is reported by writing a message to the standard error file (stderr).
9b371988 3933.cindex "return code" "for &%-oep%&"
168e428f
PH
3934The return code is 1 for all errors.
3935
9b371988
PH
3936.vitem &%-oeq%&
3937.oindex "&%-oeq%&"
3938.cindex "error" "reporting"
168e428f 3939This option is supported for compatibility with Sendmail, but has the same
9b371988 3940effect as &%-oep%&.
168e428f 3941
9b371988
PH
3942.vitem &%-oew%&
3943.oindex "&%-oew%&"
3944.cindex "error" "reporting"
168e428f 3945This option is supported for compatibility with Sendmail, but has the same
9b371988
PH
3946effect as &%-oem%&.
3947
3948.vitem &%-oi%&
3949.oindex "&%-oi%&"
f89d2485 3950.cindex "dot" "in incoming non-SMTP message"
9b371988
PH
3951This option, which has the same effect as &%-i%&, specifies that a dot on a
3952line by itself should not terminate an incoming, non-SMTP message. Otherwise, a
3953single dot does terminate, though Exim does no special processing for other
3954lines that start with a dot. This option is set by default if Exim is called as
3955&'rmail'&. See also &%-ti%&.
3956
3957.vitem &%-oitrue%&
3958.oindex "&%-oitrue%&"
3959This option is treated as synonymous with &%-oi%&.
3960
3961.vitem &%-oMa%&&~<&'host&~address'&>
3962.oindex "&%-oMa%&"
f89d2485 3963.cindex "sender" "host address, specifying for local message"
9b371988 3964A number of options starting with &%-oM%& can be used to set values associated
168e428f
PH
3965with remote hosts on locally-submitted messages (that is, messages not received
3966over TCP/IP). These options can be used by any caller in conjunction with the
9b371988
PH
3967&%-bh%&, &%-be%&, &%-bf%&, &%-bF%&, &%-bt%&, or &%-bv%& testing options. In
3968other circumstances, they are ignored unless the caller is trusted.
3969
3970The &%-oMa%& option sets the sender host address. This may include a port
3971number at the end, after a full stop (period). For example:
3972.code
3973exim -bs -oMa 10.9.8.7.1234
3974.endd
168e428f
PH
3975An alternative syntax is to enclose the IP address in square brackets,
3976followed by a colon and the port number:
9b371988
PH
3977.code
3978exim -bs -oMa [10.9.8.7]:1234
3979.endd
3980The IP address is placed in the &$sender_host_address$& variable, and the
3cb1b51e 3981port, if present, in &$sender_host_port$&. If both &%-oMa%& and &%-bh%&
db9452a9 3982are present on the command line, the sender host IP address is taken from
3cb1b51e 3983whichever one is last.
9b371988
PH
3984
3985.vitem &%-oMaa%&&~<&'name'&>
3986.oindex "&%-oMaa%&"
f89d2485 3987.cindex "authentication" "name, specifying for local message"
9b371988
PH
3988See &%-oMa%& above for general remarks about the &%-oM%& options. The &%-oMaa%&
3989option sets the value of &$sender_host_authenticated$& (the authenticator
3990name). See chapter &<<CHAPSMTPAUTH>>& for a discussion of SMTP authentication.
3cb1b51e
PH
3991This option can be used with &%-bh%& and &%-bs%& to set up an
3992authenticated SMTP session without actually using the SMTP AUTH command.
9b371988
PH
3993
3994.vitem &%-oMai%&&~<&'string'&>
3995.oindex "&%-oMai%&"
f89d2485 3996.cindex "authentication" "id, specifying for local message"
9b371988
PH
3997See &%-oMa%& above for general remarks about the &%-oM%& options. The &%-oMai%&
3998option sets the value of &$authenticated_id$& (the id that was authenticated).
db9452a9
PH
3999This overrides the default value (the caller's login id, except with &%-bh%&,
4000where there is no default) for messages from local sources. See chapter
4001&<<CHAPSMTPAUTH>>& for a discussion of authenticated ids.
168e428f 4002
9b371988
PH
4003.vitem &%-oMas%&&~<&'address'&>
4004.oindex "&%-oMas%&"
f89d2485 4005.cindex "authentication" "sender, specifying for local message"
9b371988
PH
4006See &%-oMa%& above for general remarks about the &%-oM%& options. The &%-oMas%&
4007option sets the authenticated sender value in &$authenticated_sender$&. It
168e428f 4008overrides the sender address that is created from the caller's login id for
db9452a9
PH
4009messages from local sources, except when &%-bh%& is used, when there is no
4010default. For both &%-bh%& and &%-bs%&, an authenticated sender that is
4011specified on a MAIL command overrides this value. See chapter
4012&<<CHAPSMTPAUTH>>& for a discussion of authenticated senders.
168e428f 4013
9b371988
PH
4014.vitem &%-oMi%&&~<&'interface&~address'&>
4015.oindex "&%-oMi%&"
f89d2485 4016.cindex "interface" "address, specifying for local message"
9b371988
PH
4017See &%-oMa%& above for general remarks about the &%-oM%& options. The &%-oMi%&
4018option sets the IP interface address value. A port number may be included,
4019using the same syntax as for &%-oMa%&. The interface address is placed in
3cb1b51e 4020&$received_ip_address$& and the port number, if present, in &$received_port$&.
9b371988
PH
4021
4022.vitem &%-oMr%&&~<&'protocol&~name'&>
4023.oindex "&%-oMr%&"
f89d2485
PH
4024.cindex "protocol, specifying for local message"
4025.vindex "&$received_protocol$&"
9b371988
PH
4026See &%-oMa%& above for general remarks about the &%-oM%& options. The &%-oMr%&
4027option sets the received protocol value that is stored in
db9452a9
PH
4028&$received_protocol$&. However, it does not apply (and is ignored) when &%-bh%&
4029or &%-bs%& is used. For &%-bh%&, the protocol is forced to one of the standard
4030SMTP protocol names (see the description of &$received_protocol$& in section
4031&<<SECTexpvar>>&). For &%-bs%&, the protocol is always &"local-"& followed by
4032one of those same names. For &%-bS%& (batched SMTP) however, the protocol can
4033be set by &%-oMr%&.
9b371988
PH
4034
4035.vitem &%-oMs%&&~<&'host&~name'&>
4036.oindex "&%-oMs%&"
f89d2485 4037.cindex "sender" "host name, specifying for local message"
9b371988
PH
4038See &%-oMa%& above for general remarks about the &%-oM%& options. The &%-oMs%&
4039option sets the sender host name in &$sender_host_name$&. When this option is
4040present, Exim does not attempt to look up a host name from an IP address; it
4041uses the name it is given.
4042
4043.vitem &%-oMt%&&~<&'ident&~string'&>
4044.oindex "&%-oMt%&"
f89d2485 4045.cindex "sender" "ident string, specifying for local message"
9b371988
PH
4046See &%-oMa%& above for general remarks about the &%-oM%& options. The &%-oMt%&
4047option sets the sender ident value in &$sender_ident$&. The default setting for
db9452a9
PH
4048local callers is the login id of the calling process, except when &%-bh%& is
4049used, when there is no default.
9b371988
PH
4050
4051.vitem &%-om%&
4052.oindex "&%-om%&"
4053.cindex "Sendmail compatibility" "&%-om%& option ignored"
4054In Sendmail, this option means &"me too"&, indicating that the sender of a
168e428f
PH
4055message should receive a copy of the message if the sender appears in an alias
4056expansion. Exim always does this, so the option does nothing.
4057
9b371988
PH
4058.vitem &%-oo%&
4059.oindex "&%-oo%&"
4060.cindex "Sendmail compatibility" "&%-oo%& option ignored"
4061This option is ignored. In Sendmail it specifies &"old style headers"&,
4062whatever that means.
4063
4064.vitem &%-oP%&&~<&'path'&>
4065.oindex "&%-oP%&"
4066.cindex "pid (process id)" "of daemon"
4067.cindex "daemon" "process id (pid)"
4068This option is useful only in conjunction with &%-bd%& or &%-q%& with a time
168e428f 4069value. The option specifies the file to which the process id of the daemon is
9b371988
PH
4070written. When &%-oX%& is used with &%-bd%&, or when &%-q%& with a time is used
4071without &%-bd%&, this is the only way of causing Exim to write a pid file,
168e428f
PH
4072because in those cases, the normal pid file is not used.
4073
9b371988
PH
4074.vitem &%-or%&&~<&'time'&>
4075.oindex "&%-or%&"
4076.cindex "timeout" "for non-SMTP input"
168e428f
PH
4077This option sets a timeout value for incoming non-SMTP messages. If it is not
4078set, Exim will wait forever for the standard input. The value can also be set
9b371988
PH
4079by the &%receive_timeout%& option. The format used for specifying times is
4080described in section &<<SECTtimeformat>>&.
168e428f 4081
9b371988
PH
4082.vitem &%-os%&&~<&'time'&>
4083.oindex "&%-os%&"
4084.cindex "timeout" "for SMTP input"
f89d2485 4085.cindex "SMTP" "input timeout"
168e428f
PH
4086This option sets a timeout value for incoming SMTP messages. The timeout
4087applies to each SMTP command and block of data. The value can also be set by
9b371988
PH
4088the &%smtp_receive_timeout%& option; it defaults to 5 minutes. The format used
4089for specifying times is described in section &<<SECTtimeformat>>&.
4090
4091.vitem &%-ov%&
4092.oindex "&%-ov%&"
4093This option has exactly the same effect as &%-v%&.
4094
4095.vitem &%-oX%&&~<&'number&~or&~string'&>
4096.oindex "&%-oX%&"
4097.cindex "TCP/IP" "setting listening ports"
4098.cindex "TCP/IP" "setting listening interfaces"
4099.cindex "port" "receiving TCP/IP"
4100This option is relevant only when the &%-bd%& (start listening daemon) option
4101is also given. It controls which ports and interfaces the daemon uses. Details
4102of the syntax, and how it interacts with configuration file options, are given
4103in chapter &<<CHAPinterfaces>>&. When &%-oX%& is used to start a daemon, no pid
4104file is written unless &%-oP%& is also present to specify a pid file name.
4105
4106.vitem &%-pd%&
4107.oindex "&%-pd%&"
4108.cindex "Perl" "starting the interpreter"
168e428f 4109This option applies when an embedded Perl interpreter is linked with Exim (see
9b371988
PH
4110chapter &<<CHAPperl>>&). It overrides the setting of the &%perl_at_start%&
4111option, forcing the starting of the interpreter to be delayed until it is
4112needed.
168e428f 4113
9b371988
PH
4114.vitem &%-ps%&
4115.oindex "&%-ps%&"
4116.cindex "Perl" "starting the interpreter"
168e428f 4117This option applies when an embedded Perl interpreter is linked with Exim (see
9b371988
PH
4118chapter &<<CHAPperl>>&). It overrides the setting of the &%perl_at_start%&
4119option, forcing the starting of the interpreter to occur as soon as Exim is
4120started.
168e428f 4121
9b371988
PH
4122.vitem &%-p%&<&'rval'&>:<&'sval'&>
4123.oindex "&%-p%&"
168e428f 4124For compatibility with Sendmail, this option is equivalent to
9b371988
PH
4125.display
4126&`-oMr`& <&'rval'&> &`-oMs`& <&'sval'&>
4127.endd
168e428f
PH
4128It sets the incoming protocol and host name (for trusted callers). The
4129host name and its colon can be omitted when only the protocol is to be set.
9b371988
PH
4130Note the Exim already has two private options, &%-pd%& and &%-ps%&, that refer
4131to embedded Perl. It is therefore impossible to set a protocol value of &`p`&
4132or &`s`& using this option (but that does not seem a real limitation).
168e428f 4133
9b371988
PH
4134.vitem &%-q%&
4135.oindex "&%-q%&"
4136.cindex "queue runner" "starting manually"
168e428f 4137This option is normally restricted to admin users. However, there is a
9b371988
PH
4138configuration option called &%prod_requires_admin%& which can be set false to
4139relax this restriction (and also the same requirement for the &%-M%&, &%-R%&,
4140and &%-S%& options).
4141
4142.cindex "queue runner" "description of operation"
4143The &%-q%& option starts one queue runner process. This scans the queue of
168e428f
PH
4144waiting messages, and runs a delivery process for each one in turn. It waits
4145for each delivery process to finish before starting the next one. A delivery
4146process may not actually do any deliveries if the retry times for the addresses
9b371988
PH
4147have not been reached. Use &%-qf%& (see below) if you want to override this.
4148
168e428f 4149If
9b371988
PH
4150.cindex "SMTP" "passed connection"
4151.cindex "SMTP" "multiple deliveries"
4152.cindex "multiple SMTP deliveries"
168e428f
PH
4153the delivery process spawns other processes to deliver other messages down
4154passed SMTP connections, the queue runner waits for these to finish before
4155proceeding.
9b371988 4156
168e428f
PH
4157When all the queued messages have been considered, the original queue runner
4158process terminates. In other words, a single pass is made over the waiting
9b371988
PH
4159mail, one message at a time. Use &%-q%& with a time (see below) if you want
4160this to be repeated periodically.
4161
168e428f
PH
4162Exim processes the waiting messages in an unpredictable order. It isn't very
4163random, but it is likely to be different each time, which is all that matters.
4164If one particular message screws up a remote MTA, other messages to the same
4165MTA have a chance of getting through if they get tried first.
9b371988 4166
168e428f
PH
4167It is possible to cause the messages to be processed in lexical message id
4168order, which is essentially the order in which they arrived, by setting the
9b371988 4169&%queue_run_in_order%& option, but this is not recommended for normal use.
168e428f 4170
9b371988
PH
4171.vitem &%-q%&<&'qflags'&>
4172The &%-q%& option may be followed by one or more flag letters that change its
168e428f
PH
4173behaviour. They are all optional, but if more than one is present, they must
4174appear in the correct order. Each flag is described in a separate item below.
4175
9b371988
PH
4176.vitem &%-qq...%&
4177.oindex "&%-qq%&"
4178.cindex "queue" "double scanning"
4179.cindex "queue" "routing"
4180.cindex "routing" "whole queue before delivery"
4181An option starting with &%-qq%& requests a two-stage queue run. In the first
4182stage, the queue is scanned as if the &%queue_smtp_domains%& option matched
168e428f
PH
4183every domain. Addresses are routed, local deliveries happen, but no remote
4184transports are run.
9b371988
PH
4185
4186.cindex "hints database" "remembering routing"
4187The hints database that remembers which messages are waiting for specific hosts
4188is updated, as if delivery to those hosts had been deferred. After this is
168e428f
PH
4189complete, a second, normal queue scan happens, with routing and delivery taking
4190place as normal. Messages that are routed to the same host should mostly be
4191delivered down a single SMTP
9b371988
PH
4192.cindex "SMTP" "passed connection"
4193.cindex "SMTP" "multiple deliveries"
4194.cindex "multiple SMTP deliveries"
168e428f
PH
4195connection because of the hints that were set up during the first queue scan.
4196This option may be useful for hosts that are connected to the Internet
4197intermittently.
4198
9b371988
PH
4199.vitem &%-q[q]i...%&
4200.oindex "&%-qi%&"
4201.cindex "queue" "initial delivery"
4202If the &'i'& flag is present, the queue runner runs delivery processes only for
4203those messages that haven't previously been tried. (&'i'& stands for &"initial
4204delivery"&.) This can be helpful if you are putting messages on the queue using
4205&%-odq%& and want a queue runner just to process the new messages.
4206
4207.vitem &%-q[q][i]f...%&
4208.oindex "&%-qf%&"
4209.cindex "queue" "forcing delivery"
4210.cindex "delivery" "forcing in queue run"
4211If one &'f'& flag is present, a delivery attempt is forced for each non-frozen
4212message, whereas without &'f'& only those non-frozen addresses that have passed
168e428f
PH
4213their retry times are tried.
4214
9b371988
PH
4215.vitem &%-q[q][i]ff...%&
4216.oindex "&%-qff%&"
4217.cindex "frozen messages" "forcing delivery"
4218If &'ff'& is present, a delivery attempt is forced for every message, whether
168e428f
PH
4219frozen or not.
4220
9b371988
PH
4221.vitem &%-q[q][i][f[f]]l%&
4222.oindex "&%-ql%&"
4223.cindex "queue" "local deliveries only"
4224The &'l'& (the letter &"ell"&) flag specifies that only local deliveries are to
4225be done. If a message requires any remote deliveries, it remains on the queue
4226for later delivery.
168e428f 4227
9b371988
PH
4228.vitem &%-q%&<&'qflags'&>&~<&'start&~id'&>&~<&'end&~id'&>
4229.cindex "queue" "delivering specific messages"
168e428f 4230When scanning the queue, Exim can be made to skip over messages whose ids are
9b371988
PH
4231lexically less than a given value by following the &%-q%& option with a
4232starting message id. For example:
4233.code
4234exim -q 0t5C6f-0000c8-00
4235.endd
4236Messages that arrived earlier than &`0t5C6f-0000c8-00`& are not inspected. If a
168e428f
PH
4237second message id is given, messages whose ids are lexically greater than it
4238are also skipped. If the same id is given twice, for example,
9b371988
PH
4239.code
4240exim -q 0t5C6f-0000c8-00 0t5C6f-0000c8-00
4241.endd
4242just one delivery process is started, for that message. This differs from
4243&%-M%& in that retry data is respected, and it also differs from &%-Mc%& in
4244that it counts as a delivery from a queue run. Note that the selection
4245mechanism does not affect the order in which the messages are scanned. There
4246are also other ways of selecting specific sets of messages for delivery in a
4247queue run &-- see &%-R%& and &%-S%&.
4248
4249.vitem &%-q%&<&'qflags'&><&'time'&>
4250.cindex "queue runner" "starting periodically"
4251.cindex "periodic queue running"
4252When a time value is present, the &%-q%& option causes Exim to run as a daemon,
168e428f 4253starting a queue runner process at intervals specified by the given time value
9b371988
PH
4254(whose format is described in section &<<SECTtimeformat>>&). This form of the
4255&%-q%& option is commonly combined with the &%-bd%& option, in which case a
4256single daemon process handles both functions. A common way of starting up a
4257combined daemon at system boot time is to use a command such as
4258.code
4259/usr/exim/bin/exim -bd -q30m
4260.endd
168e428f
PH
4261Such a daemon listens for incoming SMTP calls, and also starts a queue runner
4262process every 30 minutes.
9b371988
PH
4263
4264When a daemon is started by &%-q%& with a time value, but without &%-bd%&, no
4265pid file is written unless one is explicitly requested by the &%-oP%& option.
4266
4267.vitem &%-qR%&<&'rsflags'&>&~<&'string'&>
4268.oindex "&%-qR%&"
4269This option is synonymous with &%-R%&. It is provided for Sendmail
4270compatibility.
4271
4272.vitem &%-qS%&<&'rsflags'&>&~<&'string'&>
4273.oindex "&%-qS%&"
4274This option is synonymous with &%-S%&.
4275
4276.vitem &%-R%&<&'rsflags'&>&~<&'string'&>
4277.oindex "&%-R%&"
4278.cindex "queue runner" "for specific recipients"
4279.cindex "delivery" "to given domain"
4280.cindex "domain" "delivery to"
4281The <&'rsflags'&> may be empty, in which case the white space before the string
4282is optional, unless the string is &'f'&, &'ff'&, &'r'&, &'rf'&, or &'rff'&,
4283which are the possible values for <&'rsflags'&>. White space is required if
4284<&'rsflags'&> is not empty.
4285
4286This option is similar to &%-q%& with no time value, that is, it causes Exim to
168e428f
PH
4287perform a single queue run, except that, when scanning the messages on the
4288queue, Exim processes only those that have at least one undelivered recipient
4289address containing the given string, which is checked in a case-independent
9b371988
PH
4290way. If the <&'rsflags'&> start with &'r'&, <&'string'&> is interpreted as a
4291regular expression; otherwise it is a literal string.
4292
3cb1b51e
PH
4293If you want to do periodic queue runs for messages with specific recipients,
4294you can combine &%-R%& with &%-q%& and a time value. For example:
4295.code
4296exim -q25m -R @special.domain.example
4297.endd
4298This example does a queue run for messages with recipients in the given domain
4299every 25 minutes. Any additional flags that are specified with &%-q%& are
4300applied to each queue run.
3cb1b51e
PH
4301
4302Once a message is selected for delivery by this mechanism, all its addresses
4303are processed. For the first selected message, Exim overrides any retry
4304information and forces a delivery attempt for each undelivered address. This
4305means that if delivery of any address in the first message is successful, any
4306existing retry information is deleted, and so delivery attempts for that
4307address in subsequently selected messages (which are processed without forcing)
4308will run. However, if delivery of any address does not succeed, the retry
4309information is updated, and in subsequently selected messages, the failing
4310address will be skipped.
9b371988
PH
4311
4312.cindex "frozen messages" "forcing delivery"
4313If the <&'rsflags'&> contain &'f'& or &'ff'&, the delivery forcing applies to
4314all selected messages, not just the first; frozen messages are included when
4315&'ff'& is present.
4316
4317The &%-R%& option makes it straightforward to initiate delivery of all messages
168e428f 4318to a given domain after a host has been down for some time. When the SMTP
9b371988
PH
4319command ETRN is accepted by its ACL (see chapter &<<CHAPACL>>&), its default
4320effect is to run Exim with the &%-R%& option, but it can be configured to run
4321an arbitrary command instead.
4322
4323.vitem &%-r%&
4324.oindex "&%-r%&"
4325This is a documented (for Sendmail) obsolete alternative name for &%-f%&.
4326
4327.vitem &%-S%&<&'rsflags'&>&~<&'string'&>
4328.oindex "&%-S%&"
4329.cindex "delivery" "from given sender"
4330.cindex "queue runner" "for specific senders"
4331This option acts like &%-R%& except that it checks the string against each
4332message's sender instead of against the recipients. If &%-R%& is also set, both
168e428f 4333conditions must be met for a message to be selected. If either of the options
9b371988 4334has &'f'& or &'ff'& in its flags, the associated action is taken.
168e428f 4335
9b371988
PH
4336.vitem &%-Tqt%&&~<&'times'&>
4337.oindex "&%-Tqt%&"
168e428f
PH
4338This an option that is exclusively for use by the Exim testing suite. It is not
4339recognized when Exim is run normally. It allows for the setting up of explicit
9b371988
PH
4340&"queue times"& so that various warning/retry features can be tested.
4341
4342.vitem &%-t%&
9b371988
PH
4343.oindex "&%-t%&"
4344.cindex "recipient" "extracting from header lines"
4345.cindex "&'Bcc:'& header line"
4346.cindex "&'Cc:'& header line"
4347.cindex "&'To:'& header line"
168e428f 4348When Exim is receiving a locally-generated, non-SMTP message on its standard
9b371988
PH
4349input, the &%-t%& option causes the recipients of the message to be obtained
4350from the &'To:'&, &'Cc:'&, and &'Bcc:'& header lines in the message instead of
4351from the command arguments. The addresses are extracted before any rewriting
4352takes place and the &'Bcc:'& header line, if present, is then removed.
9b371988
PH
4353
4354.cindex "Sendmail compatibility" "&%-t%& option"
4355If the command has any arguments, they specify addresses to which the message
4356is &'not'& to be delivered. That is, the argument addresses are removed from
168e428f
PH
4357the recipients list obtained from the headers. This is compatible with Smail 3
4358and in accordance with the documented behaviour of several versions of
4359Sendmail, as described in man pages on a number of operating systems (e.g.
9b371988 4360Solaris 8, IRIX 6.5, HP-UX 11). However, some versions of Sendmail &'add'&
168e428f
PH
4361argument addresses to those obtained from the headers, and the O'Reilly
4362Sendmail book documents it that way. Exim can be made to add argument addresses
4363instead of subtracting them by setting the option
9b371988
PH
4364&%extract_addresses_remove_arguments%& false.
4365
4366.cindex "&%Resent-%& header lines" "with &%-t%&"
4367If there are any &%Resent-%& header lines in the message, Exim extracts
4368recipients from all &'Resent-To:'&, &'Resent-Cc:'&, and &'Resent-Bcc:'& header
4369lines instead of from &'To:'&, &'Cc:'&, and &'Bcc:'&. This is for compatibility
168e428f 4370with Sendmail and other MTAs. (Prior to release 4.20, Exim gave an error if
9b371988
PH
4371&%-t%& was used in conjunction with &%Resent-%& header lines.)
4372
4373RFC 2822 talks about different sets of &%Resent-%& header lines (for when a
168e428f 4374message is resent several times). The RFC also specifies that they should be
9b371988
PH
4375added at the front of the message, and separated by &'Received:'& lines. It is
4376not at all clear how &%-t%& should operate in the present of multiple sets,
4377nor indeed exactly what constitutes a &"set"&.
4378In practice, it seems that MUAs do not follow the RFC. The &%Resent-%& lines
4379are often added at the end of the header, and if a message is resent more than
4380once, it is common for the original set of &%Resent-%& headers to be renamed as
4381&%X-Resent-%& when a new set is added. This removes any possible ambiguity.
4382
4f578862 4383.vitem &%-ti%&
9b371988
PH
4384.oindex "&%-ti%&"
4385This option is exactly equivalent to &%-t%& &%-i%&. It is provided for
168e428f
PH
4386compatibility with Sendmail.
4387
4f578862 4388.vitem &%-tls-on-connect%&
9b371988
PH
4389.oindex "&%-tls-on-connect%&"
4390.cindex "TLS" "use without STARTTLS"
4391.cindex "TLS" "automatic start"
168e428f
PH
4392This option is available when Exim is compiled with TLS support. It forces all
4393incoming SMTP connections to behave as if the incoming port is listed in the
9b371988
PH
4394&%tls_on_connect_ports%& option. See section &<<SECTsupobssmt>>& and chapter
4395&<<CHAPTLS>>& for further details.
168e428f
PH
4396
4397
4f578862 4398.vitem &%-U%&
9b371988
PH
4399.oindex "&%-U%&"
4400.cindex "Sendmail compatibility" "&%-U%& option ignored"
4401Sendmail uses this option for &"initial message submission"&, and its
168e428f
PH
4402documentation states that in future releases, it may complain about
4403syntactically invalid messages rather than fixing them when this flag is not
4404set. Exim ignores this option.
4405
4f578862 4406.vitem &%-v%&
9b371988 4407.oindex "&%-v%&"
168e428f
PH
4408This option causes Exim to write information to the standard error stream,
4409describing what it is doing. In particular, it shows the log lines for
4410receiving and delivering a message, and if an SMTP connection is made, the SMTP
4411dialogue is shown. Some of the log lines shown may not actually be written to
9b371988
PH
4412the log if the setting of &%log_selector%& discards them. Any relevant
4413selectors are shown with each log line. If none are shown, the logging is
4414unconditional.
4415
4f578862 4416.vitem &%-x%&
9b371988
PH
4417.oindex "&%-x%&"
4418AIX uses &%-x%& for a private purpose (&"mail from a local mail program has
4419National Language Support extended characters in the body of the mail item"&).
4420It sets &%-x%& when calling the MTA from its &%mail%& command. Exim ignores
4421this option.
4422.endlist
4423
4f578862
PH
4424.ecindex IIDclo1
4425.ecindex IIDclo2
4426
4427
9b371988
PH
4428. ////////////////////////////////////////////////////////////////////////////
4429. Insert a stylized DocBook comment here, to identify the end of the command
4430. line options. This is for the benefit of the Perl script that automatically
4431. creates a man page for the options.
4432. ////////////////////////////////////////////////////////////////////////////
4433
4434.literal xml
168e428f 4435<!-- === End of command line options === -->
9b371988 4436.literal off
168e428f
PH
4437
4438
4439
4440
4441
9b371988
PH
4442. ////////////////////////////////////////////////////////////////////////////
4443. ////////////////////////////////////////////////////////////////////////////
168e428f
PH
4444
4445
9b371988
PH
4446.chapter "The Exim run time configuration file" "CHAPconf" &&&
4447 "The runtime configuration file"
168e428f 4448
9b371988
PH
4449.cindex "run time configuration"
4450.cindex "configuration file" "general description"
4451.cindex "CONFIGURE_FILE"
4452.cindex "configuration file" "errors in"
4453.cindex "error" "in configuration file"
4454.cindex "return code" "for bad configuration"
168e428f
PH
4455Exim uses a single run time configuration file that is read whenever an Exim
4456binary is executed. Note that in normal operation, this happens frequently,
4457because Exim is designed to operate in a distributed manner, without central
4458control.
4459
4460If a syntax error is detected while reading the configuration file, Exim
4461writes a message on the standard error, and exits with a non-zero return code.
9b371988 4462The message is also written to the panic log. &*Note*&: Only simple syntax
168e428f
PH
4463errors can be detected at this time. The values of any expanded options are
4464not checked until the expansion happens, even when the expansion does not
4465actually alter the string.
4466
168e428f
PH
4467The name of the configuration file is compiled into the binary for security
4468reasons, and is specified by the CONFIGURE_FILE compilation option. In
4469most configurations, this specifies a single file. However, it is permitted to
4470give a colon-separated list of file names, in which case Exim uses the first
4471existing file in the list.
4472
9b371988
PH
4473.cindex "EXIM_USER"
4474.cindex "EXIM_GROUP"
4475.cindex "CONFIGURE_OWNER"
4476.cindex "CONFIGURE_GROUP"
4477.cindex "configuration file" "ownership"
4478.cindex "ownership" "configuration file"
168e428f
PH
4479The run time configuration file must be owned by root or by the user that is
4480specified at compile time by the EXIM_USER option, or by the user that is
4481specified at compile time by the CONFIGURE_OWNER option (if set). The
4482configuration file must not be world-writeable or group-writeable, unless its
9b371988
PH
4483group is the one specified at compile time by the EXIM_GROUP option or by the
4484CONFIGURE_GROUP option.
168e428f 4485
9b371988 4486&*Warning*&: In a conventional configuration, where the Exim binary is setuid
168e428f
PH
4487to root, anybody who is able to edit the run time configuration file has an
4488easy way to run commands as root. If you make your mail administrators members
4489of the Exim group, but do not trust them with root, make sure that the run time
4490configuration is not group writeable.
4491
4492A default configuration file, which will work correctly in simple situations,
9b371988 4493is provided in the file &_src/configure.default_&. If CONFIGURE_FILE
168e428f
PH
4494defines just one file name, the installation process copies the default
4495configuration to a new file of that name if it did not previously exist. If
4496CONFIGURE_FILE is a list, no default is automatically installed. Chapter
9b371988
PH
4497&<<CHAPdefconfil>>& is a &"walk-through"& discussion of the default
4498configuration.
168e428f
PH
4499
4500
4501
f89d2485 4502.section "Using a different configuration file" "SECID40"
9b371988
PH
4503.cindex "configuration file" "alternate"
4504A one-off alternate configuration can be specified by the &%-C%& command line
4505option, which may specify a single file or a list of files. However, when
4506&%-C%& is used, Exim gives up its root privilege, unless called by root or the
4507Exim user (or unless the argument for &%-C%& is identical to the built-in value
4508from CONFIGURE_FILE). &%-C%& is useful mainly for checking the syntax of
168e428f 4509configuration files before installing them. No owner or group checks are done
9b371988 4510on a configuration file specified by &%-C%&.
168e428f 4511
9b371988
PH
4512The privileged use of &%-C%& by the Exim user can be locked out by setting
4513ALT_CONFIG_ROOT_ONLY in &_Local/Makefile_& when building Exim. However,
168e428f 4514if you do this, you also lock out the possibility of testing a
9b371988
PH
4515configuration using &%-C%& right through message reception and delivery, even
4516if the caller is root. The reception works, but by that time, Exim is running
4517as the Exim user, so when it re-execs to regain privilege for the delivery, the
4518use of &%-C%& causes privilege to be lost. However, root can test reception and
168e428f 4519delivery using two separate commands (one to put a message on the queue, using
9b371988 4520&%-odq%&, and another to do the delivery, using &%-M%&).
168e428f 4521
9b371988
PH
4522If ALT_CONFIG_PREFIX is defined &_in Local/Makefile_&, it specifies a
4523prefix string with which any file named in a &%-C%& command line option must
4524start. In addition, the file name must not contain the sequence &"&`/../`&"&.
068aaea8 4525There is no default setting for ALT_CONFIG_PREFIX; when it is unset, any file
9b371988 4526name can be used with &%-C%&.
168e428f 4527
9b371988 4528One-off changes to a configuration can be specified by the &%-D%& command line
168e428f 4529option, which defines and overrides values for macros used inside the
9b371988 4530configuration file. However, like &%-C%&, the use of this option by a
168e428f 4531non-privileged user causes Exim to discard its root privilege.
9b371988 4532If DISABLE_D_OPTION is defined in &_Local/Makefile_&, the use of &%-D%& is
168e428f
PH
4533completely disabled, and its use causes an immediate error exit.
4534
4535Some sites may wish to use the same Exim binary on different machines that
4536share a file system, but to use different configuration files on each machine.
9b371988 4537If CONFIGURE_FILE_USE_NODE is defined in &_Local/Makefile_&, Exim first
168e428f 4538looks for a file whose name is the configuration file name followed by a dot
9b371988 4539and the machine's node name, as obtained from the &[uname()]& function. If this
168e428f 4540file does not exist, the standard name is tried. This processing occurs for
9b371988 4541each file name in the list given by CONFIGURE_FILE or &%-C%&.
168e428f
PH
4542
4543In some esoteric situations different versions of Exim may be run under
4544different effective uids and the CONFIGURE_FILE_USE_EUID is defined to
9b371988 4545help with this. See the comments in &_src/EDITME_& for details.
168e428f
PH
4546
4547
4548
9b371988
PH
4549.section "Configuration file format" "SECTconffilfor"
4550.cindex "configuration file" "format of"
4551.cindex "format" "configuration file"
168e428f
PH
4552Exim's configuration file is divided into a number of different parts. General
4553option settings must always appear at the start of the file. The other parts
4554are all optional, and may appear in any order. Each part other than the first
9b371988 4555is introduced by the word &"begin"& followed by the name of the part. The
168e428f
PH
4556optional parts are:
4557
9b371988 4558.ilist
595028e4
PH
4559&'ACL'&: Access control lists for controlling incoming SMTP mail (see chapter
4560&<<CHAPACL>>&).
9b371988
PH
4561.next
4562.cindex "AUTH" "configuration"
4563&'authenticators'&: Configuration settings for the authenticator drivers. These
4564are concerned with the SMTP AUTH command (see chapter &<<CHAPSMTPAUTH>>&).
4565.next
4566&'routers'&: Configuration settings for the router drivers. Routers process
595028e4
PH
4567addresses and determine how the message is to be delivered (see chapters
4568&<<CHAProutergeneric>>&&--&<<CHAPredirect>>&).
9b371988
PH
4569.next
4570&'transports'&: Configuration settings for the transport drivers. Transports
595028e4
PH
4571define mechanisms for copying messages to destinations (see chapters
4572&<<CHAPtransportgeneric>>&&--&<<CHAPsmtptrans>>&).
9b371988 4573.next
595028e4
PH
4574&'retry'&: Retry rules, for use when a message cannot be delivered immediately.
4575If there is no retry section, or if it is empty (that is, no retry rules are
4576defined), Exim will not retry deliveries. In this situation, temporary errors
4577are treated the same as permanent errors. Retry rules are discussed in chapter
4578&<<CHAPretry>>&.
9b371988
PH
4579.next
4580&'rewrite'&: Global address rewriting rules, for use when a message arrives and
595028e4
PH
4581when new addresses are generated during delivery. Rewriting is discussed in
4582chapter &<<CHAPrewrite>>&.
9b371988
PH
4583.next
4584&'local_scan'&: Private options for the &[local_scan()]& function. If you
168e428f 4585want to use this feature, you must set
9b371988
PH
4586.code
4587LOCAL_SCAN_HAS_OPTIONS=yes
4588.endd
595028e4
PH
4589in &_Local/Makefile_& before building Exim. Details of the &[local_scan()]&
4590facility are given in chapter &<<CHAPlocalscan>>&.
9b371988
PH
4591.endlist
4592
4593.cindex "configuration file" "leading white space in"
4594.cindex "configuration file" "trailing white space in"
4595.cindex "white space" "in configuration file"
068aaea8 4596Leading and trailing white space in configuration lines is always ignored.
168e428f
PH
4597
4598Blank lines in the file, and lines starting with a # character (ignoring
9b371988 4599leading white space) are treated as comments and are ignored. &*Note*&: A
168e428f
PH
4600# character other than at the beginning of a line is not treated specially,
4601and does not introduce a comment.
4602
4603Any non-comment line can be continued by ending it with a backslash. Note that
068aaea8
PH
4604the general rule for white space means that trailing white space after the
4605backslash and leading white space at the start of continuation
4606lines is ignored. Comment lines beginning with # (but not empty lines) may
168e428f
PH
4607appear in the middle of a sequence of continuation lines.
4608
4609A convenient way to create a configuration file is to start from the
9b371988 4610default, which is supplied in &_src/configure.default_&, and add, delete, or
168e428f
PH
4611change settings as required.
4612
4613The ACLs, retry rules, and rewriting rules have their own syntax which is
9b371988 4614described in chapters &<<CHAPACL>>&, &<<CHAPretry>>&, and &<<CHAPrewrite>>&,
168e428f 4615respectively. The other parts of the configuration file have some syntactic
9b371988 4616items in common, and these are described below, from section &<<SECTcos>>&
168e428f
PH
4617onwards. Before that, the inclusion, macro, and conditional facilities are
4618described.
4619
4620
4621
f89d2485 4622.section "File inclusions in the configuration file" "SECID41"
9b371988
PH
4623.cindex "inclusions in configuration file"
4624.cindex "configuration file" "including other files"
f89d2485
PH
4625.cindex "&`.include`& in configuration file"
4626.cindex "&`.include_if_exists`& in configuration file"
168e428f
PH
4627You can include other files inside Exim's run time configuration file by
4628using this syntax:
9b371988
PH
4629.display
4630&`.include`& <&'file name'&>
4631&`.include_if_exists`& <&'file name'&>
4632.endd
168e428f
PH
4633on a line by itself. Double quotes round the file name are optional. If you use
4634the first form, a configuration error occurs if the file does not exist; the
4f578862
PH
4635second form does nothing for non-existent files. In all cases, an absolute file
4636name is required.
168e428f
PH
4637
4638Includes may be nested to any depth, but remember that Exim reads its
4639configuration file often, so it is a good idea to keep them to a minimum.
4640If you change the contents of an included file, you must HUP the daemon,
4641because an included file is read only when the configuration itself is read.
4642
4643The processing of inclusions happens early, at a physical line level, so, like
4644comment lines, an inclusion can be used in the middle of an option setting,
4645for example:
9b371988 4646.code
168e428f
PH
4647hosts_lookup = a.b.c \
4648 .include /some/file
9b371988 4649.endd
168e428f 4650Include processing happens after macro processing (see below). Its effect is to
4f578862
PH
4651process the lines of the included file as if they occurred inline where the
4652inclusion appears.
168e428f
PH
4653
4654
4655
9b371988
PH
4656.section "Macros in the configuration file" "SECTmacrodefs"
4657.cindex "macro" "description of"
4658.cindex "configuration file" "macros"
168e428f 4659If a line in the main part of the configuration (that is, before the first
9b371988 4660&"begin"& line) begins with an upper case letter, it is taken as a macro
168e428f 4661definition, and must be of the form
9b371988
PH
4662.display
4663<&'name'&> = <&'rest of line'&>
4664.endd
168e428f
PH
4665The name must consist of letters, digits, and underscores, and need not all be
4666in upper case, though that is recommended. The rest of the line, including any
4667continuations, is the replacement text, and has leading and trailing white
4668space removed. Quotes are not removed. The replacement text can never end with
4669a backslash character, but this doesn't seem to be a serious limitation.
4670
068aaea8
PH
4671Macros may also be defined between router, transport, authenticator, or ACL
4672definitions. They may not, however, be defined within an individual driver or
9b371988 4673ACL, or in the &%local_scan%&, retry, or rewrite sections of the configuration.
068aaea8 4674
f89d2485 4675.section "Macro substitution" "SECID42"
168e428f
PH
4676Once a macro is defined, all subsequent lines in the file (and any included
4677files) are scanned for the macro name; if there are several macros, the line is
068aaea8 4678scanned for each in turn, in the order in which the macros are defined. The
168e428f
PH
4679replacement text is not re-scanned for the current macro, though it is scanned
4680for subsequently defined macros. For this reason, a macro name may not contain
4681the name of a previously defined macro as a substring. You could, for example,
4682define
9b371988
PH
4683.display
4684&`ABCD_XYZ = `&<&'something'&>
4685&`ABCD = `&<&'something else'&>
4686.endd
168e428f 4687but putting the definitions in the opposite order would provoke a configuration
068aaea8
PH
4688error. Macro expansion is applied to individual physical lines from the file,
4689before checking for line continuation or file inclusion (see above). If a line
4690consists solely of a macro name, and the expansion of the macro is empty, the
4691line is ignored. A macro at the start of a line may turn the line into a
9b371988 4692comment line or a &`.include`& line.
068aaea8
PH
4693
4694
f89d2485 4695.section "Redefining macros" "SECID43"
068aaea8 4696Once defined, the value of a macro can be redefined later in the configuration
9b371988
PH
4697(or in an included file). Redefinition is specified by using &'=='& instead of
4698&'='&. For example:
4699.code
4700MAC = initial value
4701...
4702MAC == updated value
4703.endd
4704Redefinition does not alter the order in which the macros are applied to the
4705subsequent lines of the configuration file. It is still the same order in which
4706the macros were originally defined. All that changes is the macro's value.
4707Redefinition makes it possible to accumulate values. For example:
4708.code
4709MAC = initial value
4710...
4711MAC == MAC and something added
4712.endd
068aaea8
PH
4713This can be helpful in situations where the configuration file is built
4714from a number of other files.
4715
f89d2485 4716.section "Overriding macro values" "SECID44"
068aaea8 4717The values set for macros in the configuration file can be overridden by the
9b371988 4718&%-D%& command line option, but Exim gives up its root privilege when &%-D%& is
068aaea8 4719used, unless called by root or the Exim user. A definition on the command line
9b371988
PH
4720using the &%-D%& option causes all definitions and redefinitions within the
4721file to be ignored.
068aaea8 4722
168e428f 4723
168e428f 4724
f89d2485 4725.section "Example of macro usage" "SECID45"
168e428f
PH
4726As an example of macro usage, consider a configuration where aliases are looked
4727up in a MySQL database. It helps to keep the file less cluttered if long
4728strings such as SQL statements are defined separately as macros, for example:
9b371988 4729.code
168e428f 4730ALIAS_QUERY = select mailbox from user where \
c4c02c55 4731 login='${quote_mysql:$local_part}';
9b371988
PH
4732.endd
4733This can then be used in a &(redirect)& router setting like this:
4734.code
4735data = ${lookup mysql{ALIAS_QUERY}}
4736.endd
168e428f 4737In earlier versions of Exim macros were sometimes used for domain, host, or
9b371988
PH
4738address lists. In Exim 4 these are handled better by named lists &-- see
4739section &<<SECTnamedlists>>&.
168e428f 4740
168e428f 4741
f89d2485 4742.section "Conditional skips in the configuration file" "SECID46"
9b371988 4743.cindex "configuration file" "conditional skips"
f89d2485 4744.cindex "&`.ifdef`&"
9b371988
PH
4745You can use the directives &`.ifdef`&, &`.ifndef`&, &`.elifdef`&,
4746&`.elifndef`&, &`.else`&, and &`.endif`& to dynamically include or exclude
168e428f
PH
4747portions of the configuration file. The processing happens whenever the file is
4748read (that is, when an Exim binary starts to run).
4749
4750The implementation is very simple. Instances of the first four directives must
4751be followed by text that includes the names of one or macros. The condition
4752that is tested is whether or not any macro substitution has taken place in the
4753line. Thus:
9b371988
PH
4754.code
4755.ifdef AAA
4756message_size_limit = 50M
4757.else
4758message_size_limit = 100M
4759.endif
4760.endd
4761sets a message size limit of 50M if the macro &`AAA`& is defined, and 100M
168e428f 4762otherwise. If there is more than one macro named on the line, the condition
9b371988
PH
4763is true if any of them are defined. That is, it is an &"or"& condition. To
4764obtain an &"and"& condition, you need to use nested &`.ifdef`&s.
168e428f
PH
4765
4766Although you can use a macro expansion to generate one of these directives,
9b371988
PH
4767it is not very useful, because the condition &"there was a macro substitution
4768in this line"& will always be true.
168e428f 4769
9b371988 4770Text following &`.else`& and &`.endif`& is ignored, and can be used as comment
168e428f
PH
4771to clarify complicated nestings.
4772
4773
4774
9b371988
PH
4775.section "Common option syntax" "SECTcos"
4776.cindex "common option syntax"
4777.cindex "syntax of common options"
4778.cindex "configuration file" "common option syntax"
4779For the main set of options, driver options, and &[local_scan()]& options,
168e428f
PH
4780each setting is on a line by itself, and starts with a name consisting of
4781lower-case letters and underscores. Many options require a data value, and in
4782these cases the name must be followed by an equals sign (with optional white
4783space) and then the value. For example:
9b371988
PH
4784.code
4785qualify_domain = mydomain.example.com
4786.endd
595028e4
PH
4787.cindex "hiding configuration option values"
4788.cindex "configuration options" "hiding value of"
4789.cindex "options" "hiding value of"
168e428f 4790Some option settings may contain sensitive data, for example, passwords for
9b371988
PH
4791accessing databases. To stop non-admin users from using the &%-bP%& command
4792line option to read these values, you can precede the option settings with the
4793word &"hide"&. For example:
4794.code
4795hide mysql_servers = localhost/users/admin/secret-password
4796.endd
168e428f 4797For non-admin users, such options are displayed like this:
9b371988
PH
4798.code
4799mysql_servers = <value not displayable>
4800.endd
4801If &"hide"& is used on a driver option, it hides the value of that option on
4802all instances of the same driver.
168e428f
PH
4803
4804The following sections describe the syntax used for the different data types
4805that are found in option settings.
4806
4807
f89d2485 4808.section "Boolean options" "SECID47"
9b371988
PH
4809.cindex "format" "boolean"
4810.cindex "boolean configuration values"
4811.oindex "&%no_%&&'xxx'&"
4812.oindex "&%not_%&&'xxx'&"
168e428f
PH
4813Options whose type is given as boolean are on/off switches. There are two
4814different ways of specifying such options: with and without a data value. If
4815the option name is specified on its own without data, the switch is turned on;
9b371988 4816if it is preceded by &"no_"& or &"not_"& the switch is turned off. However,
068aaea8 4817boolean options may be followed by an equals sign and one of the words
9b371988 4818&"true"&, &"false"&, &"yes"&, or &"no"&, as an alternative syntax. For example,
168e428f 4819the following two settings have exactly the same effect:
9b371988
PH
4820.code
4821queue_only
4822queue_only = true
4823.endd
168e428f 4824The following two lines also have the same (opposite) effect:
9b371988
PH
4825.code
4826no_queue_only
4827queue_only = false
4828.endd
168e428f
PH
4829You can use whichever syntax you prefer.
4830
4831
4832
4833
f89d2485 4834.section "Integer values" "SECID48"
9b371988
PH
4835.cindex "integer configuration values"
4836.cindex "format" "integer"
f89d2485
PH
4837If an option's type is given as &"integer"&, the value can be given in decimal,
4838hexadecimal, or octal. If it starts with a digit greater than zero, a decimal
4839number is assumed. Otherwise, it is treated as an octal number unless it starts
4840with the characters &"0x"&, in which case the remainder is interpreted as a
4841hexadecimal number.
168e428f 4842
f89d2485
PH
4843If an integer value is followed by the letter K, it is multiplied by 1024; if
4844it is followed by the letter M, it is multiplied by 1024x1024. When the values
4845of integer option settings are output, values which are an exact multiple of
48461024 or 1024x1024 are sometimes, but not always, printed using the letters K
4847and M. The printing style is independent of the actual input format that was
4848used.
168e428f
PH
4849
4850
f89d2485 4851.section "Octal integer values" "SECID49"
9b371988
PH
4852.cindex "integer format"
4853.cindex "format" "octal integer"
f89d2485
PH
4854If an option's type is given as &"octal integer"&, its value is always
4855interpreted as an octal number, whether or not it starts with the digit zero.
4856Such options are always output in octal.
168e428f
PH
4857
4858
f89d2485 4859.section "Fixed point numbers" "SECID50"
9b371988
PH
4860.cindex "fixed point configuration values"
4861.cindex "format" "fixed point"
f89d2485
PH
4862If an option's type is given as &"fixed-point"&, its value must be a decimal
4863integer, optionally followed by a decimal point and up to three further digits.
168e428f
PH
4864
4865
4866
f89d2485 4867.section "Time intervals" "SECTtimeformat"
9b371988
PH
4868.cindex "time interval" "specifying in configuration"
4869.cindex "format" "time interval"
168e428f
PH
4870A time interval is specified as a sequence of numbers, each followed by one of
4871the following letters, with no intervening white space:
4872
f89d2485
PH
4873.table2 30pt
4874.irow &%s%& seconds
4875.irow &%m%& minutes
4876.irow &%h%& hours
4877.irow &%d%& days
4878.irow &%w%& weeks
9b371988 4879.endtable
168e428f 4880
9b371988 4881For example, &"3h50m"& specifies 3 hours and 50 minutes. The values of time
168e428f 4882intervals are output in the same format. Exim does not restrict the values; it
9b371988 4883is perfectly acceptable, for example, to specify &"90m"& instead of &"1h30m"&.
168e428f
PH
4884
4885
4886
9b371988
PH
4887.section "String values" "SECTstrings"
4888.cindex "string" "format of configuration values"
4889.cindex "format" "string"
f89d2485
PH
4890If an option's type is specified as &"string"&, the value can be specified with
4891or without double-quotes. If it does not start with a double-quote, the value
4892consists of the remainder of the line plus any continuation lines, starting at
4893the first character after any leading white space, with trailing white space
4894removed, and with no interpretation of the characters in the string. Because
4895Exim removes comment lines (those beginning with #) at an early stage, they can
4896appear in the middle of a multi-line string. The following two settings are
4897therefore equivalent:
9b371988 4898.code
168e428f 4899trusted_users = uucp:mail
168e428f
PH
4900trusted_users = uucp:\
4901 # This comment line is ignored
4902 mail
9b371988
PH
4903.endd
4904.cindex "string" "quoted"
4905.cindex "escape characters in quoted strings"
168e428f
PH
4906If a string does start with a double-quote, it must end with a closing
4907double-quote, and any backslash characters other than those used for line
4908continuation are interpreted as escape characters, as follows:
4909
9b371988 4910.table2 100pt
f89d2485
PH
4911.irow &`\\`& "single backslash"
4912.irow &`\n`& "newline"
4913.irow &`\r`& "carriage return"
4914.irow &`\t`& "tab"
4915.irow "&`\`&<&'octal digits'&>" "up to 3 octal digits specify one character"
4916.irow "&`\x`&<&'hex digits'&>" "up to 2 hexadecimal digits specify one &&&
9b371988
PH
4917 character"
4918.endtable
168e428f
PH
4919
4920If a backslash is followed by some other character, including a double-quote
4921character, that character replaces the pair.
4922
4923Quoting is necessary only if you want to make use of the backslash escapes to
4924insert special characters, or if you need to specify a value with leading or
4925trailing spaces. These cases are rare, so quoting is almost never needed in
4926current versions of Exim. In versions of Exim before 3.14, quoting was required
4927in order to continue lines, so you may come across older configuration files
4928and examples that apparently quote unnecessarily.
4929
4930
f89d2485 4931.section "Expanded strings" "SECID51"
9b371988
PH
4932.cindex "expansion" "definition of"
4933Some strings in the configuration file are subjected to &'string expansion'&,
168e428f 4934by which means various parts of the string may be changed according to the
9b371988
PH
4935circumstances (see chapter &<<CHAPexpand>>&). The input syntax for such strings
4936is as just described; in particular, the handling of backslashes in quoted
4937strings is done as part of the input process, before expansion takes place.
4938However, backslash is also an escape character for the expander, so any
4939backslashes that are required for that reason must be doubled if they are
4940within a quoted configuration string.
4941
4942
f89d2485 4943.section "User and group names" "SECID52"
9b371988
PH
4944.cindex "user name" "format of"
4945.cindex "format" "user name"
f89d2485 4946.cindex "groups" "name format"
9b371988 4947.cindex "format" "group name"
168e428f
PH
4948User and group names are specified as strings, using the syntax described
4949above, but the strings are interpreted specially. A user or group name must
4950either consist entirely of digits, or be a name that can be looked up using the
9b371988 4951&[getpwnam()]& or &[getgrnam()]& function, as appropriate.
168e428f
PH
4952
4953
9b371988
PH
4954.section "List construction" "SECTlistconstruct"
4955.cindex "list" "syntax of in configuration"
4956.cindex "format" "list item in configuration"
f89d2485 4957.cindex "string" "list, definition of"
168e428f 4958The data for some configuration options is a list of items, with colon as the
9b371988
PH
4959default separator. Many of these options are shown with type &"string list"& in
4960the descriptions later in this document. Others are listed as &"domain list"&,
4961&"host list"&, &"address list"&, or &"local part list"&. Syntactically, they
4962are all the same; however, those other than &"string list"& are subject to
068aaea8 4963particular kinds of interpretation, as described in chapter
9b371988 4964&<<CHAPdomhosaddlists>>&.
168e428f
PH
4965
4966In all these cases, the entire list is treated as a single string as far as the
9b371988
PH
4967input syntax is concerned. The &%trusted_users%& setting in section
4968&<<SECTstrings>>& above is an example. If a colon is actually needed in an item
4969in a list, it must be entered as two colons. Leading and trailing white space
4970on each item in a list is ignored. This makes it possible to include items that
168e428f
PH
4971start with a colon, and in particular, certain forms of IPv6 address. For
4972example, the list
9b371988
PH
4973.code
4974local_interfaces = 127.0.0.1 : ::::1
4975.endd
068aaea8
PH
4976contains two IP addresses, the IPv4 address 127.0.0.1 and the IPv6 address ::1.
4977
9b371988
PH
4978&*Note*&: Although leading and trailing white space is ignored in individual
4979list items, it is not ignored when parsing the list. The space after the first
4980colon in the example above is necessary. If it were not there, the list would
4981be interpreted as the two items 127.0.0.1:: and 1.
168e428f 4982
f89d2485 4983.section "Changing list separators" "SECID53"
9b371988
PH
4984.cindex "list separator" "changing"
4985.cindex "IPv6" "addresses in lists"
168e428f
PH
4986Doubling colons in IPv6 addresses is an unwelcome chore, so a mechanism was
4987introduced to allow the separator character to be changed. If a list begins
4988with a left angle bracket, followed by any punctuation character, that
4989character is used instead of colon as the list separator. For example, the list
4990above can be rewritten to use a semicolon separator like this:
9b371988
PH
4991.code
4992local_interfaces = <; 127.0.0.1 ; ::1
4993.endd
168e428f 4994This facility applies to all lists, with the exception of the list in
9b371988 4995&%log_file_path%&. It is recommended that the use of non-colon separators be
168e428f
PH
4996confined to circumstances where they really are needed.
4997
f89d2485 4998.cindex "list separator" "newline as"
595028e4 4999.cindex "newline" "as list separator"
f89d2485
PH
5000It is also possible to use newline and other control characters (those with
5001code values less than 32, plus DEL) as separators in lists. Such separators
5002must be provided literally at the time the list is processed. For options that
5003are string-expanded, you can write the separator using a normal escape
5004sequence. This will be processed by the expander before the string is
5005interpreted as a list. For example, if a newline-separated list of domains is
5006generated by a lookup, you can process it directly by a line such as this:
5007.code
5008domains = <\n ${lookup mysql{.....}}
5009.endd
5010This avoids having to change the list separator in such data. You are unlikely
5011to want to use a control character as a separator in an option that is not
5012expanded, because the value is literal text. However, it can be done by giving
5013the value in quotes. For example:
5014.code
5015local_interfaces = "<\n 127.0.0.1 \n ::1"
5016.endd
5017Unlike printing character separators, which can be included in list items by
5018doubling, it is not possible to include a control character as data when it is
5019set as the separator. Two such characters in succession are interpreted as
5020enclosing an empty list item.
f89d2485 5021
168e428f
PH
5022
5023
9b371988
PH
5024.section "Empty items in lists" "SECTempitelis"
5025.cindex "list" "empty item in"
168e428f
PH
5026An empty item at the end of a list is always ignored. In other words, trailing
5027separator characters are ignored. Thus, the list in
9b371988
PH
5028.code
5029senders = user@domain :
5030.endd
168e428f
PH
5031contains only a single item. If you want to include an empty string as one item
5032in a list, it must not be the last item. For example, this list contains three
5033items, the second of which is empty:
9b371988
PH
5034.code
5035senders = user1@domain : : user2@domain
5036.endd
5037&*Note*&: There must be white space between the two colons, as otherwise they
168e428f
PH
5038are interpreted as representing a single colon data character (and the list
5039would then contain just one item). If you want to specify a list that contains
5040just one, empty item, you can do it as in this example:
9b371988
PH
5041.code
5042senders = :
5043.endd
168e428f
PH
5044In this case, the first item is empty, and the second is discarded because it
5045is at the end of the list.
5046
5047
5048
5049
9b371988
PH
5050.section "Format of driver configurations" "SECTfordricon"
5051.cindex "drivers" "configuration format"
168e428f
PH
5052There are separate parts in the configuration for defining routers, transports,
5053and authenticators. In each part, you are defining a number of driver
5054instances, each with its own set of options. Each driver instance is defined by
5055a sequence of lines like this:
9b371988
PH
5056.display
5057<&'instance name'&>:
5058 <&'option'&>
168e428f 5059 ...
9b371988
PH
5060 <&'option'&>
5061.endd
5062In the following example, the instance name is &(localuser)&, and it is
168e428f 5063followed by three options settings:
9b371988
PH
5064.code
5065localuser:
5066 driver = accept
5067 check_local_user
5068 transport = local_delivery
5069.endd
5070For each driver instance, you specify which Exim code module it uses &-- by the
5071setting of the &%driver%& option &-- and (optionally) some configuration
5072settings. For example, in the case of transports, if you want a transport to
5073deliver with SMTP you would use the &(smtp)& driver; if you want to deliver to
5074a local file you would use the &(appendfile)& driver. Each of the drivers is
5075described in detail in its own separate chapter later in this manual.
168e428f
PH
5076
5077You can have several routers, transports, or authenticators that are based on
068aaea8 5078the same underlying driver (each must have a different instance name).
168e428f
PH
5079
5080The order in which routers are defined is important, because addresses are
5081passed to individual routers one by one, in order. The order in which
5082transports are defined does not matter at all. The order in which
5083authenticators are defined is used only when Exim, as a client, is searching
5084them to find one that matches an authentication mechanism offered by the
5085server.
5086
9b371988
PH
5087.cindex "generic options"
5088.cindex "options" "generic &-- definition of"
5089Within a driver instance definition, there are two kinds of option: &'generic'&
5090and &'private'&. The generic options are those that apply to all drivers of the
5091same type (that is, all routers, all transports or all authenticators). The
5092&%driver%& option is a generic option that must appear in every definition.
5093.cindex "private options"
168e428f
PH
5094The private options are special for each driver, and none need appear, because
5095they all have default values.
5096
9b371988 5097The options may appear in any order, except that the &%driver%& option must
168e428f 5098precede any private options, since these depend on the particular driver. For
9b371988 5099this reason, it is recommended that &%driver%& always be the first option.
168e428f
PH
5100
5101Driver instance names, which are used for reference in log entries and
5102elsewhere, can be any sequence of letters, digits, and underscores (starting
5103with a letter) and must be unique among drivers of the same type. A router and
5104a transport (for example) can each have the same name, but no two router
5105instances can have the same name. The name of a driver instance should not be
5106confused with the name of the underlying driver module. For example, the
5107configuration lines:
9b371988
PH
5108.code
5109remote_smtp:
5110 driver = smtp
5111.endd
5112create an instance of the &(smtp)& transport driver whose name is
5113&(remote_smtp)&. The same driver code can be used more than once, with
168e428f 5114different instance names and different option settings each time. A second
9b371988 5115instance of the &(smtp)& transport, with different options, might be defined
168e428f 5116thus:
9b371988
PH
5117.code
5118special_smtp:
5119 driver = smtp
5120 port = 1234
5121 command_timeout = 10s
5122.endd
5123The names &(remote_smtp)& and &(special_smtp)& would be used to reference
168e428f
PH
5124these transport instances from routers, and these names would appear in log
5125lines.
5126
5127Comment lines may be present in the middle of driver specifications. The full
5128list of option settings for any particular driver instance, including all the
9b371988 5129defaulted values, can be extracted by making use of the &%-bP%& command line
168e428f
PH
5130option.
5131
5132
5133
5134
5135
5136
9b371988
PH
5137. ////////////////////////////////////////////////////////////////////////////
5138. ////////////////////////////////////////////////////////////////////////////
168e428f 5139
9b371988 5140.chapter "The default configuration file" "CHAPdefconfil"
4f578862 5141.scindex IIDconfiwal "configuration file" "default &""walk through""&"
9b371988
PH
5142.cindex "default" "configuration file &""walk through""&"
5143The default configuration file supplied with Exim as &_src/configure.default_&
168e428f 5144is sufficient for a host with simple mail requirements. As an introduction to
9b371988 5145the way Exim is configured, this chapter &"walks through"& the default
168e428f
PH
5146configuration, giving brief explanations of the settings. Detailed descriptions
5147of the options are given in subsequent chapters. The default configuration file
5148itself contains extensive comments about ways you might want to modify the
5149initial settings. However, note that there are many options that are not
5150mentioned at all in the default configuration.
5151
5152
5153
6083aca0 5154.section "Main configuration settings" "SECTdefconfmain"
168e428f
PH
5155The main (global) configuration option settings must always come first in the
5156file. The first thing you'll see in the file, after some initial comments, is
5157the line
9b371988
PH
5158.code
5159# primary_hostname =
5160.endd
5161This is a commented-out setting of the &%primary_hostname%& option. Exim needs
168e428f
PH
5162to know the official, fully qualified name of your host, and this is where you
5163can specify it. However, in most cases you do not need to set this option. When
9b371988 5164it is unset, Exim uses the &[uname()]& system function to obtain the host name.
168e428f
PH
5165
5166The first three non-comment configuration lines are as follows:
9b371988
PH
5167.code
5168domainlist local_domains = @
5169domainlist relay_to_domains =
5170hostlist relay_from_hosts = 127.0.0.1
5171.endd
168e428f
PH
5172These are not, in fact, option settings. They are definitions of two named
5173domain lists and one named host list. Exim allows you to give names to lists of
5174domains, hosts, and email addresses, in order to make it easier to manage the
9b371988 5175configuration file (see section &<<SECTnamedlists>>&).
168e428f 5176
9b371988 5177The first line defines a domain list called &'local_domains'&; this is used
168e428f
PH
5178later in the configuration to identify domains that are to be delivered
5179on the local host.
5180
9b371988
PH
5181.cindex "@ in a domain list"
5182There is just one item in this list, the string &"@"&. This is a special form
5183of entry which means &"the name of the local host"&. Thus, if the local host is
5184called &'a.host.example'&, mail to &'any.user@a.host.example'& is expected to
168e428f
PH
5185be delivered locally. Because the local host's name is referenced indirectly,
5186the same configuration file can be used on different hosts.
5187
9b371988 5188The second line defines a domain list called &'relay_to_domains'&, but the
168e428f
PH
5189list itself is empty. Later in the configuration we will come to the part that
5190controls mail relaying through the local host; it allows relaying to any
5191domains in this list. By default, therefore, no relaying on the basis of a mail
5192domain is permitted.
5193
9b371988 5194The third line defines a host list called &'relay_from_hosts'&. This list is
168e428f
PH
5195used later in the configuration to permit relaying from any host or IP address
5196that matches the list. The default contains just the IP address of the IPv4
5197loopback interface, which means that processes on the local host are able to
5198submit mail for relaying by sending it over TCP/IP to that interface. No other
5199hosts are permitted to submit messages for relaying.
5200
5201Just to be sure there's no misunderstanding: at this point in the configuration
5202we aren't actually setting up any controls. We are just defining some domains
5203and hosts that will be used in the controls that are specified later.
5204
068aaea8 5205The next two configuration lines are genuine option settings:
9b371988
PH
5206.code
5207acl_smtp_rcpt = acl_check_rcpt
5208acl_smtp_data = acl_check_data
5209.endd
9b371988
PH
5210These options specify &'Access Control Lists'& (ACLs) that are to be used
5211during an incoming SMTP session for every recipient of a message (every RCPT
5212command), and after the contents of the message have been received,
5213respectively. The names of the lists are &'acl_check_rcpt'& and
5214&'acl_check_data'&, and we will come to their definitions below, in the ACL
5215section of the configuration. The RCPT ACL controls which recipients are
5216accepted for an incoming message &-- if a configuration does not provide an ACL
5217to check recipients, no SMTP mail can be accepted. The DATA ACL allows the
5218contents of a message to be checked.
168e428f 5219
068aaea8 5220Two commented-out option settings are next:
9b371988 5221.code
068aaea8
PH
5222# av_scanner = clamd:/tmp/clamd
5223# spamd_address = 127.0.0.1 783
9b371988 5224.endd
068aaea8
PH
5225These are example settings that can be used when Exim is compiled with the
5226content-scanning extension. The first specifies the interface to the virus
5227scanner, and the second specifies the interface to SpamAssassin. Further
9b371988 5228details are given in chapter &<<CHAPexiscan>>&.
168e428f 5229
6083aca0
TF
5230Three more commented-out option settings follow:
5231.code
5232# tls_advertise_hosts = *
5233# tls_certificate = /etc/ssl/exim.crt
5234# tls_privatekey = /etc/ssl/exim.pem
5235.endd
5236These are example settings that can be used when Exim is compiled with
db9452a9
PH
5237support for TLS (aka SSL) as described in section &<<SECTinctlsssl>>&. The
5238first one specifies the list of clients that are allowed to use TLS when
5239connecting to this server; in this case the wildcard means all clients. The
5240other options specify where Exim should find its TLS certificate and private
5241key, which together prove the server's identity to any clients that connect.
5242More details are given in chapter &<<CHAPTLS>>&.
6083aca0
TF
5243
5244Another two commented-out option settings follow:
5245.code
5246# daemon_smtp_ports = 25 : 465 : 587
5247# tls_on_connect_ports = 465
5248.endd
db9452a9
PH
5249.cindex "port" "465 and 587"
5250.cindex "port" "for message submission"
5251.cindex "message" "submission, ports for"
5252.cindex "ssmtp protocol"
5253.cindex "smtps protocol"
5254.cindex "SMTP" "ssmtp protocol"
5255.cindex "SMTP" "smtps protocol"
5256These options provide better support for roaming users who wish to use this
5257server for message submission. They are not much use unless you have turned on
5258TLS (as described in the previous paragraph) and authentication (about which
5259more in section &<<SECTdefconfauth>>&). The usual SMTP port 25 is often blocked
5260on end-user networks, so RFC 4409 specifies that message submission should use
5261port 587 instead. However some software (notably Microsoft Outlook) cannot be
5262configured to use port 587 correctly, so these settings also enable the
5263non-standard &"smtps"& (aka &"ssmtp"&) port 465 (see section
5264&<<SECTsupobssmt>>&).
6083aca0 5265
068aaea8 5266Two more commented-out options settings follow:
9b371988
PH
5267.code
5268# qualify_domain =
5269# qualify_recipient =
5270.endd
168e428f
PH
5271The first of these specifies a domain that Exim uses when it constructs a
5272complete email address from a local login name. This is often needed when Exim
9b371988
PH
5273receives a message from a local process. If you do not set &%qualify_domain%&,
5274the value of &%primary_hostname%& is used. If you set both of these options,
5275you can have different qualification domains for sender and recipient
5276addresses. If you set only the first one, its value is used in both cases.
168e428f 5277
9b371988 5278.cindex "domain literal" "recognizing format"
168e428f 5279The following line must be uncommented if you want Exim to recognize
9b371988 5280addresses of the form &'user@[10.11.12.13]'& that is, with a &"domain literal"&
068aaea8 5281(an IP address within square brackets) instead of a named domain.
9b371988
PH
5282.code
5283# allow_domain_literals
5284.endd
168e428f
PH
5285The RFCs still require this form, but many people think that in the modern
5286Internet it makes little sense to permit mail to be sent to specific hosts by
5287quoting their IP addresses. This ancient format has been used by people who
5288try to abuse hosts by using them for unwanted relaying. However, some
5289people believe there are circumstances (for example, messages addressed to
9b371988 5290&'postmaster'&) where domain literals are still useful.
168e428f
PH
5291
5292The next configuration line is a kind of trigger guard:
9b371988
PH
5293.code
5294never_users = root
5295.endd
168e428f 5296It specifies that no delivery must ever be run as the root user. The normal
9b371988 5297convention is to set up &'root'& as an alias for the system administrator. This
168e428f 5298setting is a guard against slips in the configuration.
9b371988
PH
5299The list of users specified by &%never_users%& is not, however, the complete
5300list; the build-time configuration in &_Local/Makefile_& has an option called
168e428f 5301FIXED_NEVER_USERS specifying a list that cannot be overridden. The
9b371988 5302contents of &%never_users%& are added to this list. By default
168e428f
PH
5303FIXED_NEVER_USERS also specifies root.
5304
5305When a remote host connects to Exim in order to send mail, the only information
5306Exim has about the host's identity is its IP address. The next configuration
5307line,
9b371988
PH
5308.code
5309host_lookup = *
5310.endd
168e428f
PH
5311specifies that Exim should do a reverse DNS lookup on all incoming connections,
5312in order to get a host name. This improves the quality of the logging
5313information, but if you feel it is too expensive, you can remove it entirely,
9b371988 5314or restrict the lookup to hosts on &"nearby"& networks.
168e428f
PH
5315Note that it is not always possible to find a host name from an IP address,
5316because not all DNS reverse zones are maintained, and sometimes DNS servers are
5317unreachable.
5318
9b371988 5319The next two lines are concerned with &'ident'& callbacks, as defined by RFC
168e428f 53201413 (hence their names):
9b371988
PH
5321.code
5322rfc1413_hosts = *
c0712871 5323rfc1413_query_timeout = 5s
9b371988 5324.endd
168e428f
PH
5325These settings cause Exim to make ident callbacks for all incoming SMTP calls.
5326You can limit the hosts to which these calls are made, or change the timeout
5327that is used. If you set the timeout to zero, all ident calls are disabled.
5328Although they are cheap and can provide useful information for tracing problem
5329messages, some hosts and firewalls have problems with ident calls. This can
5330result in a timeout instead of an immediate refused connection, leading to
5331delays on starting up an incoming SMTP session.
5332
5333When Exim receives messages over SMTP connections, it expects all addresses to
5334be fully qualified with a domain, as required by the SMTP definition. However,
5335if you are running a server to which simple clients submit messages, you may
5336find that they send unqualified addresses. The two commented-out options:
9b371988
PH
5337.code
5338# sender_unqualified_hosts =
5339# recipient_unqualified_hosts =
5340.endd
168e428f
PH
5341show how you can specify hosts that are permitted to send unqualified sender
5342and recipient addresses, respectively.
5343
9b371988
PH
5344The &%percent_hack_domains%& option is also commented out:
5345.code
5346# percent_hack_domains =
5347.endd
5348It provides a list of domains for which the &"percent hack"& is to operate.
5349This is an almost obsolete form of explicit email routing. If you do not know
168e428f
PH
5350anything about it, you can safely ignore this topic.
5351
5352The last two settings in the main part of the default configuration are
9b371988
PH
5353concerned with messages that have been &"frozen"& on Exim's queue. When a
5354message is frozen, Exim no longer continues to try to deliver it. Freezing
5355occurs when a bounce message encounters a permanent failure because the sender
5356address of the original message that caused the bounce is invalid, so the
5357bounce cannot be delivered. This is probably the most common case, but there
5358are also other conditions that cause freezing, and frozen messages are not
5359always bounce messages.
5360.code
5361ignore_bounce_errors_after = 2d
5362timeout_frozen_after = 7d
5363.endd
168e428f
PH
5364The first of these options specifies that failing bounce messages are to be
5365discarded after 2 days on the queue. The second specifies that any frozen
5366message (whether a bounce message or not) is to be timed out (and discarded)
5367after a week. In this configuration, the first setting ensures that no failing
5368bounce message ever lasts a week.
5369
5370
5371
f89d2485 5372.section "ACL configuration" "SECID54"
9b371988
PH
5373.cindex "default" "ACLs"
5374.cindex "&ACL;" "default configuration"
168e428f
PH
5375In the default configuration, the ACL section follows the main configuration.
5376It starts with the line
9b371988
PH
5377.code
5378begin acl
5379.endd
5380and it contains the definitions of two ACLs, called &'acl_check_rcpt'& and
5381&'acl_check_data'&, that were referenced in the settings of &%acl_smtp_rcpt%&
5382and &%acl_smtp_data%& above.
5383
5384.cindex "RCPT" "ACL for"
068aaea8 5385The first ACL is used for every RCPT command in an incoming SMTP message. Each
168e428f
PH
5386RCPT command specifies one of the message's recipients. The ACL statements
5387are considered in order, until the recipient address is either accepted or
5388rejected. The RCPT command is then accepted or rejected, according to the
5389result of the ACL processing.
9b371988
PH
5390.code
5391acl_check_rcpt:
5392.endd
168e428f
PH
5393This line, consisting of a name terminated by a colon, marks the start of the
5394ACL, and names it.
9b371988
PH
5395.code
5396accept hosts = :
5397.endd
168e428f
PH
5398This ACL statement accepts the recipient if the sending host matches the list.
5399But what does that strange list mean? It doesn't actually contain any host
5400names or IP addresses. The presence of the colon puts an empty item in the
068aaea8
PH
5401list; Exim matches this only if the incoming message did not come from a remote
5402host, because in that case, the remote hostname is empty. The colon is
5403important. Without it, the list itself is empty, and can never match anything.
168e428f
PH
5404
5405What this statement is doing is to accept unconditionally all recipients in
5406messages that are submitted by SMTP from local processes using the standard
5407input and output (that is, not using TCP/IP). A number of MUAs operate in this
5408manner.
9b371988
PH
5409.code
5410deny message = Restricted characters in address
5411 domains = +local_domains
5412 local_parts = ^[.] : ^.*[@%!/|]
5413
5414deny message = Restricted characters in address
5415 domains = !+local_domains
5416 local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
5417.endd
168e428f 5418These statements are concerned with local parts that contain any of the
9b371988
PH
5419characters &"@"&, &"%"&, &"!"&, &"/"&, &"|"&, or dots in unusual places.
5420Although these characters are entirely legal in local parts (in the case of
5421&"@"& and leading dots, only if correctly quoted), they do not commonly occur
5422in Internet mail addresses.
168e428f
PH
5423
5424The first three have in the past been associated with explicitly routed
9b371988 5425addresses (percent is still sometimes used &-- see the &%percent_hack_domains%&
168e428f
PH
5426option). Addresses containing these characters are regularly tried by spammers
5427in an attempt to bypass relaying restrictions, and also by open relay testing
5428programs. Unless you really need them it is safest to reject these characters
5429at this early stage. This configuration is heavy-handed in rejecting these
5430characters for all messages it accepts from remote hosts. This is a deliberate
5431policy of being as safe as possible.
5432
5433The first rule above is stricter, and is applied to messages that are addressed
5434to one of the local domains handled by this host. This is implemented by the
5435first condition, which restricts it to domains that are listed in the
9b371988 5436&'local_domains'& domain list. The &"+"& character is used to indicate a
168e428f 5437reference to a named list. In this configuration, there is just one domain in
9b371988 5438&'local_domains'&, but in general there may be many.
168e428f
PH
5439
5440The second condition on the first statement uses two regular expressions to
9b371988
PH
5441block local parts that begin with a dot or contain &"@"&, &"%"&, &"!"&, &"/"&,
5442or &"|"&. If you have local accounts that include these characters, you will
5443have to modify this rule.
168e428f
PH
5444
5445Empty components (two dots in a row) are not valid in RFC 2822, but Exim
9b371988
PH
5446allows them because they have been encountered in practice. (Consider the
5447common convention of local parts constructed as
5448&"&'first-initial.second-initial.family-name'&"& when applied to someone like
5449the author of Exim, who has no second initial.) However, a local part starting
5450with a dot or containing &"/../"& can cause trouble if it is used as part of a
5451file name (for example, for a mailing list). This is also true for local parts
5452that contain slashes. A pipe symbol can also be troublesome if the local part
5453is incorporated unthinkingly into a shell command line.
168e428f
PH
5454
5455The second rule above applies to all other domains, and is less strict. This
5456allows your own users to send outgoing messages to sites that use slashes
5457and vertical bars in their local parts. It blocks local parts that begin
5458with a dot, slash, or vertical bar, but allows these characters within the
9b371988
PH
5459local part. However, the sequence &"/../"& is barred. The use of &"@"&, &"%"&,
5460and &"!"& is blocked, as before. The motivation here is to prevent your users
5461(or your users' viruses) from mounting certain kinds of attack on remote sites.
5462.code
5463accept local_parts = postmaster
5464 domains = +local_domains
5465.endd
168e428f 5466This statement, which has two conditions, accepts an incoming address if the
9b371988
PH
5467local part is &'postmaster'& and the domain is one of those listed in the
5468&'local_domains'& domain list. The &"+"& character is used to indicate a
168e428f 5469reference to a named list. In this configuration, there is just one domain in
9b371988 5470&'local_domains'&, but in general there may be many.
168e428f
PH
5471
5472The presence of this statement means that mail to postmaster is never blocked
5473by any of the subsequent tests. This can be helpful while sorting out problems
5474in cases where the subsequent tests are incorrectly denying access.
9b371988
PH
5475.code
5476require verify = sender
5477.endd
168e428f
PH
5478This statement requires the sender address to be verified before any subsequent
5479ACL statement can be used. If verification fails, the incoming recipient
5480address is refused. Verification consists of trying to route the address, to
068aaea8 5481see if a bounce message could be delivered to it. In the case of remote
9b371988
PH
5482addresses, basic verification checks only the domain, but &'callouts'& can be
5483used for more verification if required. Section &<<SECTaddressverification>>&
068aaea8 5484discusses the details of address verification.
9b371988
PH
5485.code
5486accept hosts = +relay_from_hosts
5487 control = submission
5488.endd
068aaea8
PH
5489This statement accepts the address if the message is coming from one of the
5490hosts that are defined as being allowed to relay through this host. Recipient
5491verification is omitted here, because in many cases the clients are dumb MUAs
5492that do not cope well with SMTP error responses. For the same reason, the
9b371988
PH
5493second line specifies &"submission mode"& for messages that are accepted. This
5494is described in detail in section &<<SECTsubmodnon>>&; it causes Exim to fix
068aaea8 5495messages that are deficient in some way, for example, because they lack a
9b371988 5496&'Date:'& header line. If you are actually relaying out from MTAs, you should
068aaea8 5497probably add recipient verification here, and disable submission mode.
9b371988
PH
5498.code
5499accept authenticated = *
5500 control = submission
5501.endd
068aaea8
PH
5502This statement accepts the address if the client host has authenticated itself.
5503Submission mode is again specified, on the grounds that such messages are most
5504likely to come from MUAs. The default configuration does not define any
6083aca0
TF
5505authenticators, though it does include some nearly complete commented-out
5506examples described in &<<SECTdefconfauth>>&. This means that no client can in
5507fact authenticate until you complete the authenticator definitions.
db9452a9
PH
5508.code
5509require message = relay not permitted
5510 domains = +local_domains : +relay_domains
5511.endd
5512This statement rejects the address if its domain is neither a local domain nor
5513one of the domains for which this host is a relay.
5514.code
5515require verify = recipient
5516.endd
5517This statement requires the recipient address to be verified; if verification
5518fails, the address is rejected.
9b371988
PH
5519.code
5520# deny message = rejected because $sender_host_address \
5521# is in a black list at $dnslist_domain\n\
5522# $dnslist_text
5523# dnslists = black.list.example
168e428f 5524#
db9452a9
PH
5525# warn dnslists = black.list.example
5526# add_header = X-Warning: $sender_host_address is in \
5527# a black list at $dnslist_domain
9b371988 5528# log_message = found in $dnslist_domain
9b371988 5529.endd
168e428f
PH
5530These commented-out lines are examples of how you could configure Exim to check
5531sending hosts against a DNS black list. The first statement rejects messages
db9452a9 5532from blacklisted hosts, whereas the second just inserts a warning header
168e428f 5533line.
9b371988 5534.code
db9452a9 5535# require verify = csa
9b371988 5536.endd
db9452a9
PH
5537This commented-out line is an example of how you could turn on client SMTP
5538authorization (CSA) checking. Such checks do DNS lookups for special SRV
5539records.
9b371988 5540.code
db9452a9 5541accept
9b371988 5542.endd
db9452a9
PH
5543The final statement in the first ACL unconditionally accepts any recipient
5544address that has successfully passed all the previous tests.
9b371988
PH
5545.code
5546acl_check_data:
5547.endd
068aaea8
PH
5548This line marks the start of the second ACL, and names it. Most of the contents
5549of this ACL are commented out:
9b371988 5550.code
068aaea8
PH
5551# deny malware = *
5552# message = This message contains a virus \
5553# ($malware_name).
9b371988 5554.endd
068aaea8
PH
5555These lines are examples of how to arrange for messages to be scanned for
5556viruses when Exim has been compiled with the content-scanning extension, and a
5557suitable virus scanner is installed. If the message is found to contain a
5558virus, it is rejected with the given custom error message.
9b371988 5559.code
068aaea8
PH
5560# warn spam = nobody
5561# message = X-Spam_score: $spam_score\n\
5562# X-Spam_score_int: $spam_score_int\n\
5563# X-Spam_bar: $spam_bar\n\
5564# X-Spam_report: $spam_report
9b371988 5565.endd
068aaea8
PH
5566These lines are an example of how to arrange for messages to be scanned by
5567SpamAssassin when Exim has been compiled with the content-scanning extension,
5568and SpamAssassin has been installed. The SpamAssassin check is run with
9b371988 5569&`nobody`& as its user parameter, and the results are added to the message as a
068aaea8
PH
5570series of extra header line. In this case, the message is not rejected,
5571whatever the spam score.
9b371988
PH
5572.code
5573accept
5574.endd
068aaea8
PH
5575This final line in the DATA ACL accepts the message unconditionally.
5576
168e428f 5577
f89d2485 5578.section "Router configuration" "SECID55"
9b371988
PH
5579.cindex "default" "routers"
5580.cindex "routers" "default"
168e428f
PH
5581The router configuration comes next in the default configuration, introduced
5582by the line
9b371988
PH
5583.code
5584begin routers
5585.endd
168e428f
PH
5586Routers are the modules in Exim that make decisions about where to send
5587messages. An address is passed to each router in turn, until it is either
5588accepted, or failed. This means that the order in which you define the routers
5589matters. Each router is fully described in its own chapter later in this
5590manual. Here we give only brief overviews.
9b371988
PH
5591.code
5592# domain_literal:
5593# driver = ipliteral
5594# domains = !+local_domains
5595# transport = remote_smtp
5596.endd
5597.cindex "domain literal" "default router"
168e428f 5598This router is commented out because the majority of sites do not want to
9b371988 5599support domain literal addresses (those of the form &'user@[10.9.8.7]'&). If
168e428f 5600you uncomment this router, you also need to uncomment the setting of
9b371988
PH
5601&%allow_domain_literals%& in the main part of the configuration.
5602.code
5603dnslookup:
5604 driver = dnslookup
5605 domains = ! +local_domains
5606 transport = remote_smtp
5607 ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
5608 no_more
5609.endd
168e428f
PH
5610The first uncommented router handles addresses that do not involve any local
5611domains. This is specified by the line
9b371988
PH
5612.code
5613domains = ! +local_domains
5614.endd
5615The &%domains%& option lists the domains to which this router applies, but the
168e428f 5616exclamation mark is a negation sign, so the router is used only for domains
9b371988
PH
5617that are not in the domain list called &'local_domains'& (which was defined at
5618the start of the configuration). The plus sign before &'local_domains'&
168e428f
PH
5619indicates that it is referring to a named list. Addresses in other domains are
5620passed on to the following routers.
5621
9b371988
PH
5622The name of the router driver is &(dnslookup)&,
5623and is specified by the &%driver%& option. Do not be confused by the fact that
168e428f 5624the name of this router instance is the same as the name of the driver. The
9b371988
PH
5625instance name is arbitrary, but the name set in the &%driver%& option must be
5626one of the driver modules that is in the Exim binary.
168e428f 5627
9b371988 5628The &(dnslookup)& router routes addresses by looking up their domains in the
168e428f 5629DNS in order to obtain a list of hosts to which the address is routed. If the
9b371988
PH
5630router succeeds, the address is queued for the &(remote_smtp)& transport, as
5631specified by the &%transport%& option. If the router does not find the domain
5632in the DNS, no further routers are tried because of the &%no_more%& setting, so
5633the address fails and is bounced.
168e428f 5634
9b371988 5635The &%ignore_target_hosts%& option specifies a list of IP addresses that are to
168e428f
PH
5636be entirely ignored. This option is present because a number of cases have been
5637encountered where MX records in the DNS point to host names
5638whose IP addresses are 0.0.0.0 or are in the 127 subnet (typically 127.0.0.1).
5639Completely ignoring these IP addresses causes Exim to fail to route the
5640email address, so it bounces. Otherwise, Exim would log a routing problem, and
5641continue to try to deliver the message periodically until the address timed
5642out.
9b371988
PH
5643.code
5644system_aliases:
5645 driver = redirect
5646 allow_fail
5647 allow_defer
5648 data = ${lookup{$local_part}lsearch{/etc/aliases}}
5649# user = exim
5650 file_transport = address_file
5651 pipe_transport = address_pipe
5652.endd
168e428f
PH
5653Control reaches this and subsequent routers only for addresses in the local
5654domains. This router checks to see whether the local part is defined as an
9b371988 5655alias in the &_/etc/aliases_& file, and if so, redirects it according to the
168e428f 5656data that it looks up from that file. If no data is found for the local part,
9b371988 5657the value of the &%data%& option is empty, causing the address to be passed to
168e428f
PH
5658the next router.
5659
9b371988 5660&_/etc/aliases_& is a conventional name for the system aliases file that is
168e428f
PH
5661often used. That is why it is referenced by from the default configuration
5662file. However, you can change this by setting SYSTEM_ALIASES_FILE in
9b371988
PH
5663&_Local/Makefile_& before building Exim.
5664.code
5665userforward:
5666 driver = redirect
5667 check_local_user
5668# local_part_suffix = +* : -*
5669# local_part_suffix_optional
5670 file = $home/.forward
5671# allow_filter
5672 no_verify
5673 no_expn
5674 check_ancestor
5675 file_transport = address_file
5676 pipe_transport = address_pipe
5677 reply_transport = address_reply
5678.endd
168e428f
PH
5679This is the most complicated router in the default configuration. It is another
5680redirection router, but this time it is looking for forwarding data set up by
9b371988 5681individual users. The &%check_local_user%& setting specifies a check that the
068aaea8 5682local part of the address is the login name of a local user. If it is not, the
9b371988 5683router is skipped. The two commented options that follow &%check_local_user%&,
068aaea8 5684namely:
9b371988 5685.code
068aaea8
PH
5686# local_part_suffix = +* : -*
5687# local_part_suffix_optional
9b371988 5688.endd
f89d2485 5689.vindex "&$local_part_suffix$&"
068aaea8
PH
5690show how you can specify the recognition of local part suffixes. If the first
5691is uncommented, a suffix beginning with either a plus or a minus sign, followed
5692by any sequence of characters, is removed from the local part and placed in the
9b371988 5693variable &$local_part_suffix$&. The second suffix option specifies that the
068aaea8
PH
5694presence of a suffix in the local part is optional. When a suffix is present,
5695the check for a local login uses the local part with the suffix removed.
5696
9b371988 5697When a local user account is found, the file called &_.forward_& in the user's
068aaea8 5698home directory is consulted. If it does not exist, or is empty, the router
9b371988
PH
5699declines. Otherwise, the contents of &_.forward_& are interpreted as
5700redirection data (see chapter &<<CHAPredirect>>& for more details).
5701
5702.cindex "Sieve filter" "enabling in default router"
5703Traditional &_.forward_& files contain just a list of addresses, pipes, or
5704files. Exim supports this by default. However, if &%allow_filter%& is set (it
5705is commented out by default), the contents of the file are interpreted as a set
5706of Exim or Sieve filtering instructions, provided the file begins with &"#Exim
5707filter"& or &"#Sieve filter"&, respectively. User filtering is discussed in the
5708separate document entitled &'Exim's interfaces to mail filtering'&.
5709
5710The &%no_verify%& and &%no_expn%& options mean that this router is skipped when
068aaea8 5711verifying addresses, or when running as a consequence of an SMTP EXPN command.
168e428f
PH
5712There are two reasons for doing this:
5713
9b371988
PH
5714.olist
5715Whether or not a local user has a &_.forward_& file is not really relevant when
168e428f
PH
5716checking an address for validity; it makes sense not to waste resources doing
5717unnecessary work.
9b371988
PH
5718.next
5719More importantly, when Exim is verifying addresses or handling an EXPN
168e428f
PH
5720command during an SMTP session, it is running as the Exim user, not as root.
5721The group is the Exim group, and no additional groups are set up.
9b371988 5722It may therefore not be possible for Exim to read users' &_.forward_& files at
168e428f 5723this time.
9b371988 5724.endlist
168e428f 5725
9b371988 5726The setting of &%check_ancestor%& prevents the router from generating a new
168e428f
PH
5727address that is the same as any previous address that was redirected. (This
5728works round a problem concerning a bad interaction between aliasing and
9b371988 5729forwarding &-- see section &<<SECTredlocmai>>&).
168e428f
PH
5730
5731The final three option settings specify the transports that are to be used when
5732forwarding generates a direct delivery to a file, or to a pipe, or sets up an
9b371988
PH
5733auto-reply, respectively. For example, if a &_.forward_& file contains
5734.code
5735a.nother@elsewhere.example, /home/spqr/archive
5736.endd
5737the delivery to &_/home/spqr/archive_& is done by running the &%address_file%&
168e428f 5738transport.
9b371988
PH
5739.code
5740localuser:
5741 driver = accept
5742 check_local_user
5743# local_part_suffix = +* : -*
5744# local_part_suffix_optional
5745 transport = local_delivery
5746.endd
168e428f 5747The final router sets up delivery into local mailboxes, provided that the local
068aaea8 5748part is the name of a local login, by accepting the address and assigning it to
9b371988 5749the &(local_delivery)& transport. Otherwise, we have reached the end of the
068aaea8 5750routers, so the address is bounced. The commented suffix settings fulfil the
9b371988 5751same purpose as they do for the &(userforward)& router.
168e428f
PH
5752
5753
f89d2485 5754.section "Transport configuration" "SECID56"
9b371988
PH
5755.cindex "default" "transports"
5756.cindex "transports" "default"
168e428f
PH
5757Transports define mechanisms for actually delivering messages. They operate
5758only when referenced from routers, so the order in which they are defined does
5759not matter. The transports section of the configuration starts with
9b371988
PH
5760.code
5761begin transports
5762.endd
168e428f 5763One remote transport and four local transports are defined.
9b371988
PH
5764.code
5765remote_smtp:
5766 driver = smtp
5767.endd
168e428f
PH
5768This transport is used for delivering messages over SMTP connections. All its
5769options are defaulted. The list of remote hosts comes from the router.
9b371988
PH
5770.code
5771local_delivery:
5772 driver = appendfile
5773 file = /var/mail/$local_part
5774 delivery_date_add
5775 envelope_to_add
5776 return_path_add
5777# group = mail
5778# mode = 0660
5779.endd
5780This &(appendfile)& transport is used for local delivery to user mailboxes in
168e428f 5781traditional BSD mailbox format. By default it runs under the uid and gid of the
9b371988 5782local user, which requires the sticky bit to be set on the &_/var/mail_&
168e428f
PH
5783directory. Some systems use the alternative approach of running mail deliveries
5784under a particular group instead of using the sticky bit. The commented options
5785show how this can be done.
5786
9b371988
PH
5787Exim adds three headers to the message as it delivers it: &'Delivery-date:'&,
5788&'Envelope-to:'& and &'Return-path:'&. This action is requested by the three
168e428f 5789similarly-named options above.
9b371988
PH
5790.code
5791address_pipe:
5792 driver = pipe
5793 return_output
5794.endd
168e428f 5795This transport is used for handling deliveries to pipes that are generated by
9b371988 5796redirection (aliasing or users' &_.forward_& files). The &%return_output%&
168e428f
PH
5797option specifies that any output generated by the pipe is to be returned to the
5798sender.
9b371988
PH
5799.code
5800address_file:
5801 driver = appendfile
5802 delivery_date_add
5803 envelope_to_add
5804 return_path_add
5805.endd
168e428f
PH
5806This transport is used for handling deliveries to files that are generated by
5807redirection. The name of the file is not specified in this instance of
9b371988
PH
5808&(appendfile)&, because it comes from the &(redirect)& router.
5809.code
5810address_reply:
5811 driver = autoreply
5812.endd
168e428f
PH
5813This transport is used for handling automatic replies generated by users'
5814filter files.
5815
5816
5817
f89d2485 5818.section "Default retry rule" "SECID57"
9b371988
PH
5819.cindex "retry" "default rule"
5820.cindex "default" "retry rule"
168e428f
PH
5821The retry section of the configuration file contains rules which affect the way
5822Exim retries deliveries that cannot be completed at the first attempt. It is
5823introduced by the line
9b371988
PH
5824.code
5825begin retry
5826.endd
168e428f
PH
5827In the default configuration, there is just one rule, which applies to all
5828errors:
9b371988
PH
5829.code
5830* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
5831.endd
168e428f
PH
5832This causes any temporarily failing address to be retried every 15 minutes for
58332 hours, then at intervals starting at one hour and increasing by a factor of
58341.5 until 16 hours have passed, then every 6 hours up to 4 days. If an address
9b371988 5835is not delivered after 4 days of temporary failure, it is bounced.
168e428f 5836
595028e4
PH
5837If the retry section is removed from the configuration, or is empty (that is,
5838if no retry rules are defined), Exim will not retry deliveries. This turns
5839temporary errors into permanent errors.
168e428f
PH
5840
5841
f89d2485 5842.section "Rewriting configuration" "SECID58"
168e428f 5843The rewriting section of the configuration, introduced by
9b371988
PH
5844.code
5845begin rewrite
5846.endd
168e428f
PH
5847contains rules for rewriting addresses in messages as they arrive. There are no
5848rewriting rules in the default configuration file.
5849
5850
5851
6083aca0 5852.section "Authenticators configuration" "SECTdefconfauth"
9b371988 5853.cindex "AUTH" "configuration"
168e428f 5854The authenticators section of the configuration, introduced by
9b371988
PH
5855.code
5856begin authenticators
5857.endd
6083aca0
TF
5858defines mechanisms for the use of the SMTP AUTH command. The default
5859configuration file contains two commented-out example authenticators
5860which support plaintext username/password authentication using the
5861standard PLAIN mechanism and the traditional but non-standard LOGIN
5862mechanism, with Exim acting as the server. PLAIN and LOGIN are enough
5863to support most MUA software.
5864
5865The example PLAIN authenticator looks like this:
5866.code
5867#PLAIN:
f89d2485
PH
5868# driver = plaintext
5869# server_set_id = $auth2
5870# server_prompts = :
5871# server_condition = Authentication is not yet configured
6083aca0
TF
5872# server_advertise_condition = ${if def:tls_cipher }
5873.endd
5874And the example LOGIN authenticator looks like this:
5875.code
5876#LOGIN:
f89d2485
PH
5877# driver = plaintext
5878# server_set_id = $auth1
5879# server_prompts = <| Username: | Password:
5880# server_condition = Authentication is not yet configured
6083aca0
TF
5881# server_advertise_condition = ${if def:tls_cipher }
5882.endd
5883
5884The &%server_set_id%& option makes Exim remember the authenticated username
5885in &$authenticated_id$&, which can be used later in ACLs or routers. The
5886&%server_prompts%& option configures the &(plaintext)& authenticator so
5887that it implements the details of the specific authentication mechanism,
5888i.e. PLAIN or LOGIN. The &%server_advertise_condition%& setting controls
5889when Exim offers authentication to clients; in the examples, this is only
5890when TLS or SSL has been started, so to enable the authenticators you also
5891need to add support for TLS as described in &<<SECTdefconfmain>>&.
5892
5893The &%server_condition%& setting defines how to verify that the username and
5894password are correct. In the examples it just produces an error message.
5895To make the authenticators work, you can use a string expansion
5896expression like one of the examples in &<<CHAPplaintext>>&.
5897
71e1673f 5898.new
e2f03231
TK
5899Beware that the sequence of the parameters to PLAIN and LOGIN differ; the
5900usercode and password are in different positions. &<<CHAPplaintext>>&
5901covers both.
71e1673f 5902.wen
e2f03231 5903
4f578862 5904.ecindex IIDconfiwal
168e428f
PH
5905
5906
5907
9b371988
PH
5908. ////////////////////////////////////////////////////////////////////////////
5909. ////////////////////////////////////////////////////////////////////////////
168e428f 5910
9b371988 5911.chapter "Regular expressions" "CHAPregexp"
168e428f 5912
9b371988
PH
5913.cindex "regular expressions" "library"
5914.cindex "PCRE"
168e428f
PH
5915Exim supports the use of regular expressions in many of its options. It
5916uses the PCRE regular expression library; this provides regular expression
5917matching that is compatible with Perl 5. The syntax and semantics of
5918regular expressions is discussed in many Perl reference books, and also in
9b371988
PH
5919Jeffrey Friedl's &'Mastering Regular Expressions'&, which is published by
5920O'Reilly (see &url(http://www.oreilly.com/catalog/regex2/)).
168e428f 5921
71e1673f 5922.new
168e428f 5923The documentation for the syntax and semantics of the regular expressions that
40df1be3
TF
5924are supported by PCRE is included in the PCRE distribution, and no further
5925description is included here. The PCRE functions are called from Exim using
5926the default option settings (that is, with no PCRE options set), except that
5927the PCRE_CASELESS option is set when the matching is required to be
5928case-insensitive.
71e1673f 5929.wen
168e428f
PH
5930
5931In most cases, when a regular expression is required in an Exim configuration,
5932it has to start with a circumflex, in order to distinguish it from plain text
9b371988 5933or an &"ends with"& wildcard. In this example of a configuration setting, the
168e428f 5934second item in the colon-separated list is a regular expression.
9b371988
PH
5935.code
5936domains = a.b.c : ^\\d{3} : *.y.z : ...
5937.endd
168e428f 5938The doubling of the backslash is required because of string expansion that
9b371988
PH
5939precedes interpretation &-- see section &<<SECTlittext>>& for more discussion
5940of this issue, and a way of avoiding the need for doubling backslashes. The
168e428f
PH
5941regular expression that is eventually used in this example contains just one
5942backslash. The circumflex is included in the regular expression, and has the
9b371988 5943normal effect of &"anchoring"& it to the start of the string that is being
168e428f
PH
5944matched.
5945
5946There are, however, two cases where a circumflex is not required for the
9b371988
PH
5947recognition of a regular expression: these are the &%match%& condition in a
5948string expansion, and the &%matches%& condition in an Exim filter file. In
5949these cases, the relevant string is always treated as a regular expression; if
5950it does not start with a circumflex, the expression is not anchored, and can
5951match anywhere in the subject string.
168e428f
PH
5952
5953In all cases, if you want a regular expression to match at the end of a string,
9b371988
PH
5954you must code the $ metacharacter to indicate this. For example:
5955.code
5956domains = ^\\d{3}\\.example
5957.endd
5958matches the domain &'123.example'&, but it also matches &'123.example.com'&.
168e428f 5959You need to use:
9b371988
PH
5960.code
5961domains = ^\\d{3}\\.example\$
5962.endd
5963if you want &'example'& to be the top-level domain. The backslash before the
5964$ is needed because string expansion also interprets dollar characters.
168e428f 5965
168e428f
PH
5966
5967
9b371988
PH
5968. ////////////////////////////////////////////////////////////////////////////
5969. ////////////////////////////////////////////////////////////////////////////
168e428f 5970
9b371988 5971.chapter "File and database lookups" "CHAPfdlookup"
4f578862 5972.scindex IIDfidalo1 "file" "lookups"
f89d2485 5973.scindex IIDfidalo2 "database" "lookups"
9b371988 5974.cindex "lookup" "description of"
168e428f
PH
5975Exim can be configured to look up data in files or databases as it processes
5976messages. Two different kinds of syntax are used:
5977
9b371988
PH
5978.olist
5979A string that is to be expanded may contain explicit lookup requests. These
168e428f 5980cause parts of the string to be replaced by data that is obtained from the
9b371988
PH
5981lookup. Lookups of this type are conditional expansion items. Different results
5982can be defined for the cases of lookup success and failure. See chapter
5983&<<CHAPexpand>>&, where string expansions are described in detail.
5984.next
5985Lists of domains, hosts, and email addresses can contain lookup requests as a
168e428f
PH
5986way of avoiding excessively long linear lists. In this case, the data that is
5987returned by the lookup is often (but not always) discarded; whether the lookup
5988succeeds or fails is what really counts. These kinds of list are described in
9b371988
PH
5989chapter &<<CHAPdomhosaddlists>>&.
5990.endlist
168e428f 5991
068aaea8
PH
5992String expansions, lists, and lookups interact with each other in such a way
5993that there is no order in which to describe any one of them that does not
5994involve references to the others. Each of these three chapters makes more sense
5995if you have read the other two first. If you are reading this for the first
5996time, be aware that some of it will make a lot more sense after you have read
9b371988 5997chapters &<<CHAPdomhosaddlists>>& and &<<CHAPexpand>>&.
068aaea8 5998
f89d2485 5999.section "Examples of different lookup syntax" "SECID60"
168e428f
PH
6000It is easy to confuse the two different kinds of lookup, especially as the
6001lists that may contain the second kind are always expanded before being
6002processed as lists. Therefore, they may also contain lookups of the first kind.
6003Be careful to distinguish between the following two examples:
9b371988
PH
6004.code
6005domains = ${lookup{$sender_host_address}lsearch{/some/file}}
6006domains = lsearch;/some/file
6007.endd
168e428f 6008The first uses a string expansion, the result of which must be a domain list.
9b371988
PH
6009No strings have been specified for a successful or a failing lookup; the
6010defaults in this case are the looked-up data and an empty string, respectively.
068aaea8
PH
6011The expansion takes place before the string is processed as a list, and the
6012file that is searched could contain lines like this:
9b371988
PH
6013.code
6014192.168.3.4: domain1:domain2:...
6015192.168.1.9: domain3:domain4:...
6016.endd
6017When the lookup succeeds, the result of the expansion is a list of domains (and
6018possibly other types of item that are allowed in domain lists).
168e428f 6019
068aaea8 6020In the second example, the lookup is a single item in a domain list. It causes
168e428f
PH
6021Exim to use a lookup to see if the domain that is being processed can be found
6022in the file. The file could contains lines like this:
9b371988
PH
6023.code
6024domain1:
6025domain2:
6026.endd
168e428f
PH
6027Any data that follows the keys is not relevant when checking that the domain
6028matches the list item.
6029
068aaea8
PH
6030It is possible, though no doubt confusing, to use both kinds of lookup at once.
6031Consider a file containing lines like this:
9b371988
PH
6032.code
6033192.168.5.6: lsearch;/another/file
6034.endd
6035If the value of &$sender_host_address$& is 192.168.5.6, expansion of the
6036first &%domains%& setting above generates the second setting, which therefore
168e428f
PH
6037causes a second lookup to occur.
6038
6039The rest of this chapter describes the different lookup types that are
068aaea8
PH
6040available. Any of them can be used in any part of the configuration where a
6041lookup is permitted.
168e428f
PH
6042
6043
f89d2485 6044.section "Lookup types" "SECID61"
9b371988
PH
6045.cindex "lookup" "types of"
6046.cindex "single-key lookup" "definition of"
068aaea8 6047Two different types of data lookup are implemented:
168e428f 6048
9b371988
PH
6049.ilist
6050The &'single-key'& type requires the specification of a file in which to look,
168e428f
PH
6051and a single key to search for. The key must be a non-empty string for the
6052lookup to succeed. The lookup type determines how the file is searched.
9b371988
PH
6053.next
6054.cindex "query-style lookup" "definition of"
6055The &'query-style'& type accepts a generalized database query. No particular
6056key value is assumed by Exim for query-style lookups. You can use whichever
6057Exim variables you need to construct the database query.
6058.endlist
168e428f
PH
6059
6060The code for each lookup type is in a separate source file that is included in
6061the binary of Exim only if the corresponding compile-time option is set. The
9b371988
PH
6062default settings in &_src/EDITME_& are:
6063.code
6064LOOKUP_DBM=yes
6065LOOKUP_LSEARCH=yes
6066.endd
168e428f
PH
6067which means that only linear searching and DBM lookups are included by default.
6068For some types of lookup (e.g. SQL databases), you need to install appropriate
6069libraries and header files before building Exim.
6070
6071
6072
6073
9b371988
PH
6074.section "Single-key lookup types" "SECTsinglekeylookups"
6075.cindex "lookup" "single-key types"
6076.cindex "single-key lookup" "list of types"
168e428f
PH
6077The following single-key lookup types are implemented:
6078
9b371988
PH
6079.ilist
6080.cindex "cdb" "description of"
6081.cindex "lookup" "cdb"
6082.cindex "binary zero" "in lookup key"
6083&(cdb)&: The given file is searched as a Constant DataBase file, using the key
168e428f
PH
6084string without a terminating binary zero. The cdb format is designed for
6085indexed files that are read frequently and never updated, except by total
f89d2485 6086re-creation. As such, it is particularly suitable for large files containing
168e428f
PH
6087aliases or other indexed data referenced by an MTA. Information about cdb can
6088be found in several places:
9b371988
PH
6089.display
6090&url(http://www.pobox.com/~djb/cdb.html)
6091&url(ftp://ftp.corpit.ru/pub/tinycdb/)
6092&url(http://packages.debian.org/stable/utils/freecdb.html)
6093.endd
168e428f
PH
6094A cdb distribution is not needed in order to build Exim with cdb support,
6095because the code for reading cdb files is included directly in Exim itself.
6096However, no means of building or testing cdb files is provided with Exim, so
6097you need to obtain a cdb distribution in order to do this.
9b371988
PH
6098.next
6099.cindex "DBM" "lookup type"
6100.cindex "lookup" "dbm"
6101.cindex "binary zero" "in lookup key"
6102&(dbm)&: Calls to DBM library functions are used to extract data from the given
168e428f
PH
6103DBM file by looking up the record with the given key. A terminating binary
6104zero is included in the key that is passed to the DBM library. See section
9b371988
PH
6105&<<SECTdb>>& for a discussion of DBM libraries.
6106
6107.cindex "Berkeley DB library" "file format"
168e428f 6108For all versions of Berkeley DB, Exim uses the DB_HASH style of database
9b371988
PH
6109when building DBM files using the &%exim_dbmbuild%& utility. However, when
6110using Berkeley DB versions 3 or 4, it opens existing databases for reading with
6111the DB_UNKNOWN option. This enables it to handle any of the types of database
168e428f
PH
6112that the library supports, and can be useful for accessing DBM files created by
6113other applications. (For earlier DB versions, DB_HASH is always used.)
9b371988
PH
6114.next
6115.cindex "lookup" "dbmnz"
6116.cindex "lookup" "dbm &-- terminating zero"
6117.cindex "binary zero" "in lookup key"
6118.cindex "Courier"
6119.cindex "&_/etc/userdbshadow.dat_&"
6120.cindex "dmbnz lookup type"
6121&(dbmnz)&: This is the same as &(dbm)&, except that a terminating binary zero
168e428f
PH
6122is not included in the key that is passed to the DBM library. You may need this
6123if you want to look up data in files that are created by or shared with some
6124other application that does not use terminating zeros. For example, you need to
9b371988
PH
6125use &(dbmnz)& rather than &(dbm)& if you want to authenticate incoming SMTP
6126calls using the passwords from Courier's &_/etc/userdbshadow.dat_& file. Exim's
6127utility program for creating DBM files (&'exim_dbmbuild'&) includes the zeros
6128by default, but has an option to omit them (see section &<<SECTdbmbuild>>&).
6129.next
6130.cindex "lookup" "dsearch"
6131.cindex "dsearch lookup type"
595028e4
PH
6132&(dsearch)&: The given file must be a directory; this is searched for an entry
6133whose name is the key by calling the &[lstat()]& function. The key may not
6134contain any forward slash characters. If &[lstat()]& succeeds, the result of
6135the lookup is the name of the entry, which may be a file, directory,
6136symbolic link, or any other kind of directory entry. An example of how this
6137lookup can be used to support virtual domains is given in section
9b371988
PH
6138&<<SECTvirtualdomains>>&.
6139.next
6140.cindex "lookup" "iplsearch"
6141.cindex "iplsearch lookup type"
6142&(iplsearch)&: The given file is a text file containing keys and data. A key is
168e428f
PH
6143terminated by a colon or white space or the end of the line. The keys in the
6144file must be IP addresses, or IP addresses with CIDR masks. Keys that involve
6145IPv6 addresses must be enclosed in quotes to prevent the first internal colon
6146being interpreted as a key terminator. For example:
9b371988
PH
6147.code
61481.2.3.4: data for 1.2.3.4
d5331c3e 6149192.168.0.0/16: data for 192.168.0.0/16
9b371988
PH
6150"abcd::cdab": data for abcd::cdab
6151"abcd:abcd::/32" data for abcd:abcd::/32
6152.endd
6153The key for an &(iplsearch)& lookup must be an IP address (without a mask). The
168e428f
PH
6154file is searched linearly, using the CIDR masks where present, until a matching
6155key is found. The first key that matches is used; there is no attempt to find a
9b371988
PH
6156&"best"& match. Apart from the way the keys are matched, the processing for
6157&(iplsearch)& is the same as for &(lsearch)&.
6158
6159&*Warning 1*&: Unlike most other single-key lookup types, a file of data for
6160&(iplsearch)& can &'not'& be turned into a DBM or cdb file, because those
168e428f 6161lookup types support only literal keys.
9b371988
PH
6162
6163&*Warning 2*&: In a host list, you must always use &(net-iplsearch)& so that
168e428f 6164the implicit key is the host's IP address rather than its name (see section
9b371988 6165&<<SECThoslispatsikey>>&).
9b371988
PH
6166.next
6167.cindex "linear search"
6168.cindex "lookup" "lsearch"
6169.cindex "lsearch lookup type"
db9452a9 6170.cindex "case sensitivity" "in lsearch lookup"
9b371988 6171&(lsearch)&: The given file is a text file that is searched linearly for a
168e428f 6172line beginning with the search key, terminated by a colon or white space or the
db9452a9
PH
6173end of the line. The search is case-insensitive; that is, upper and lower case
6174letters are treated as the same. The first occurrence of the key that is found
6175in the file is used.
db9452a9
PH
6176
6177White space between the key and the colon is permitted. The remainder of the
6178line, with leading and trailing white space removed, is the data. This can be
168e428f
PH
6179continued onto subsequent lines by starting them with any amount of white
6180space, but only a single space character is included in the data at such a
6181junction. If the data begins with a colon, the key must be terminated by a
6182colon, for example:
9b371988
PH
6183.code
6184baduser: :fail:
6185.endd
168e428f
PH
6186Empty lines and lines beginning with # are ignored, even if they occur in the
6187middle of an item. This is the traditional textual format of alias files. Note
9b371988 6188that the keys in an &(lsearch)& file are literal strings. There is no
168e428f 6189wildcarding of any kind.
9b371988
PH
6190
6191.cindex "lookup" "lsearch &-- colons in keys"
6192.cindex "white space" "in lsearch key"
6193In most &(lsearch)& files, keys are not required to contain colons or #
068aaea8 6194characters, or white space. However, if you need this feature, it is available.
168e428f
PH
6195If a key begins with a doublequote character, it is terminated only by a
6196matching quote (or end of line), and the normal escaping rules apply to its
9b371988 6197contents (see section &<<SECTstrings>>&). An optional colon is permitted after
168e428f 6198quoted keys (exactly as for unquoted keys). There is no special handling of
9b371988 6199quotes for the data part of an &(lsearch)& line.
168e428f 6200
9b371988
PH
6201.next
6202.cindex "NIS lookup type"
6203.cindex "lookup" "NIS"
6204.cindex "binary zero" "in lookup key"
6205&(nis)&: The given file is the name of a NIS map, and a NIS lookup is done with
168e428f 6206the given key, without a terminating binary zero. There is a variant called
9b371988 6207&(nis0)& which does include the terminating binary zero in the key. This is
168e428f
PH
6208reportedly needed for Sun-style alias files. Exim does not recognize NIS
6209aliases; the full map names must be used.
6210
9b371988
PH
6211.next
6212.cindex "wildlsearch lookup type"
6213.cindex "lookup" "wildlsearch"
6214.cindex "nwildlsearch lookup type"
6215.cindex "lookup" "nwildlsearch"
6216&(wildlsearch)& or &(nwildlsearch)&: These search a file linearly, like
6217&(lsearch)&, but instead of being interpreted as a literal string, each key in
6218the file may be wildcarded. The difference between these two lookup types is
6219that for &(wildlsearch)&, each key in the file is string-expanded before being
6220used, whereas for &(nwildlsearch)&, no expansion takes place.
6221
db9452a9
PH
6222.cindex "case sensitivity" "in (n)wildlsearch lookup"
6223Like &(lsearch)&, the testing is done case-insensitively. However, keys in the
6224file that are regular expressions can be made case-sensitive by the use of
6225&`(-i)`& within the pattern. The following forms of wildcard are recognized:
168e428f 6226
9b371988
PH
6227. ==== As this is a nested list, any displays it contains must be indented
6228. ==== as otherwise they are too far to the left.
6229
6230.olist
6231The string may begin with an asterisk to mean &"ends with"&. For example:
6232.code
6233 *.a.b.c data for anything.a.b.c
6234 *fish data for anythingfish
6235.endd
6236.next
6237The string may begin with a circumflex to indicate a regular expression. For
6238example, for &(wildlsearch)&:
6239.code
6240 ^\N\d+\.a\.b\N data for <digits>.a.b
6241.endd
6242Note the use of &`\N`& to disable expansion of the contents of the regular
6243expression. If you are using &(nwildlsearch)&, where the keys are not
168e428f 6244string-expanded, the equivalent entry is:
9b371988
PH
6245.code
6246 ^\d+\.a\.b data for <digits>.a.b
6247.endd
db9452a9
PH
6248The case-insensitive flag is set at the start of compiling the regular
6249expression, but it can be turned off by using &`(-i)`& at an appropriate point.
6250For example, to make the entire pattern case-sensitive:
6251.code
6252 ^(?-i)\d+\.a\.b data for <digits>.a.b
6253.endd
db9452a9 6254
168e428f 6255If the regular expression contains white space or colon characters, you must
9b371988
PH
6256either quote it (see &(lsearch)& above), or represent these characters in other
6257ways. For example, &`\s`& can be used for white space and &`\x3A`& for a
168e428f
PH
6258colon. This may be easier than quoting, because if you quote, you have to
6259escape all the backslashes inside the quotes.
6260
9b371988
PH
6261&*Note*&: It is not possible to capture substrings in a regular expression
6262match for later use, because the results of all lookups are cached. If a lookup
6263is repeated, the result is taken from the cache, and no actual pattern matching
d1e83bff 6264takes place. The values of all the numeric variables are unset after a
9b371988 6265&((n)wildlsearch)& match.
d1e83bff 6266
9b371988
PH
6267.next
6268Although I cannot see it being of much use, the general matching function that
6269is used to implement &((n)wildlsearch)& means that the string may begin with a
6270lookup name terminated by a semicolon, and followed by lookup data. For
168e428f 6271example:
9b371988
PH
6272.code
6273 cdb;/some/file data for keys that match the file
6274.endd
168e428f 6275The data that is obtained from the nested lookup is discarded.
9b371988
PH
6276.endlist olist
6277
168e428f 6278Keys that do not match any of these patterns are interpreted literally. The
9b371988 6279continuation rules for the data are the same as for &(lsearch)&, and keys may
168e428f 6280be followed by optional colons.
168e428f 6281
9b371988
PH
6282&*Warning*&: Unlike most other single-key lookup types, a file of data for
6283&((n)wildlsearch)& can &'not'& be turned into a DBM or cdb file, because those
6284lookup types support only literal keys.
6285.endlist ilist
168e428f
PH
6286
6287
f89d2485 6288.section "Query-style lookup types" "SECID62"
9b371988
PH
6289.cindex "lookup" "query-style types"
6290.cindex "query-style lookup" "list of types"
168e428f
PH
6291The supported query-style lookup types are listed below. Further details about
6292many of them are given in later sections.
6293
9b371988
PH
6294.ilist
6295.cindex "DNS" "as a lookup type"
6296.cindex "lookup" "DNS"
6297&(dnsdb)&: This does a DNS search for one or more records whose domain names
6298are given in the supplied query. The resulting data is the contents of the
6299records. See section &<<SECTdnsdb>>&.
6300.next
db9452a9
PH
6301.cindex "InterBase lookup type"
6302.cindex "lookup" "InterBase"
6303&(ibase)&: This does a lookup in an InterBase database.
9b371988
PH
6304.next
6305.cindex "LDAP" "lookup type"
6306.cindex "lookup" "LDAP"
6307&(ldap)&: This does an LDAP lookup using a query in the form of a URL, and
6308returns attributes from a single entry. There is a variant called &(ldapm)&
168e428f 6309that permits values from multiple entries to be returned. A third variant
9b371988
PH
6310called &(ldapdn)& returns the Distinguished Name of a single entry instead of
6311any attribute values. See section &<<SECTldap>>&.
6312.next
6313.cindex "MySQL" "lookup type"
6314.cindex "lookup" "MySQL"
6315&(mysql)&: The format of the query is an SQL statement that is passed to a
6316MySQL database. See section &<<SECTsql>>&.
6317.next
6318.cindex "NIS+ lookup type"
6319.cindex "lookup" "NIS+"
6320&(nisplus)&: This does a NIS+ lookup using a query that can specify the name of
6321the field to be returned. See section &<<SECTnisplus>>&.
6322.next
6323.cindex "Oracle" "lookup type"
6324.cindex "lookup" "Oracle"
6325&(oracle)&: The format of the query is an SQL statement that is passed to an
6326Oracle database. See section &<<SECTsql>>&.
6327.next
6328.cindex "lookup" "passwd"
6329.cindex "passwd lookup type"
6330.cindex "&_/etc/passwd_&"
6331&(passwd)& is a query-style lookup with queries that are just user names. The
6332lookup calls &[getpwnam()]& to interrogate the system password data, and on
6333success, the result string is the same as you would get from an &(lsearch)&
6334lookup on a traditional &_/etc/passwd file_&, though with &`*`& for the
168e428f 6335password value. For example:
9b371988
PH
6336.code
6337*:42:42:King Rat:/home/kr:/bin/bash
6338.endd
6339.next
6340.cindex "PostgreSQL lookup type"
6341.cindex "lookup" "PostgreSQL"
6342&(pgsql)&: The format of the query is an SQL statement that is passed to a
6343PostgreSQL database. See section &<<SECTsql>>&.
6344
6345.next
9b371988
PH
6346.cindex "sqlite lookup type"
6347.cindex "lookup" "sqlite"
6348&(sqlite)&: The format of the query is a file name followed by an SQL statement
6349that is passed to an SQLite database. See section &<<SECTsqlite>>&.
9b371988
PH
6350
6351.next
6352&(testdb)&: This is a lookup type that is used for testing Exim. It is
168e428f 6353not likely to be useful in normal operation.
9b371988
PH
6354.next
6355.cindex "whoson lookup type"
6356.cindex "lookup" "whoson"
f89d2485
PH
6357&(whoson)&: &'Whoson'& (&url(http://whoson.sourceforge.net)) is a protocol that
6358allows a server to check whether a particular (dynamically allocated) IP
6359address is currently allocated to a known (trusted) user and, optionally, to
6360obtain the identity of the said user. For SMTP servers, &'Whoson'& was popular
6361at one time for &"POP before SMTP"& authentication, but that approach has been
6362superseded by SMTP authentication. In Exim, &'Whoson'& can be used to implement
6363&"POP before SMTP"& checking using ACL statements such as
9b371988 6364.code
168e428f
PH
6365require condition = \
6366 ${lookup whoson {$sender_host_address}{yes}{no}}
9b371988 6367.endd
168e428f 6368The query consists of a single IP address. The value returned is the name of
9b371988
PH
6369the authenticated user, which is stored in the variable &$value$&. However, in
6370this example, the data in &$value$& is not used; the result of the lookup is
6371one of the fixed strings &"yes"& or &"no"&.
9b371988 6372.endlist
168e428f
PH
6373
6374
6375
f89d2485 6376.section "Temporary errors in lookups" "SECID63"
9b371988 6377.cindex "lookup" "temporary error in"
168e428f 6378Lookup functions can return temporary error codes if the lookup cannot be
068aaea8 6379completed. For example, an SQL or LDAP database might be unavailable. For this
168e428f
PH
6380reason, it is not advisable to use a lookup that might do this for critical
6381options such as a list of local domains.
6382
6383When a lookup cannot be completed in a router or transport, delivery
6384of the message (to the relevant address) is deferred, as for any other
6385temporary error. In other circumstances Exim may assume the lookup has failed,
6386or may give up altogether.
6387
6388
6389
9b371988
PH
6390.section "Default values in single-key lookups" "SECTdefaultvaluelookups"
6391.cindex "wildcard lookups"
6392.cindex "lookup" "default values"
6393.cindex "lookup" "wildcard"
6394.cindex "lookup" "* added to type"
6395.cindex "default" "in single-key lookups"
6396In this context, a &"default value"& is a value specified by the administrator
168e428f
PH
6397that is to be used if a lookup fails.
6398
3cb1b51e
PH
6399&*Note:*& This section applies only to single-key lookups. For query-style
6400lookups, the facilities of the query language must be used. An attempt to
6401specify a default for a query-style lookup provokes an error.
3cb1b51e 6402
9b371988
PH
6403If &"*"& is added to a single-key lookup type (for example, &%lsearch*%&)
6404and the initial lookup fails, the key &"*"& is looked up in the file to
6405provide a default value. See also the section on partial matching below.
168e428f 6406
9b371988
PH
6407.cindex "*@ with single-key lookup"
6408.cindex "lookup" "*@ added to type"
6409.cindex "alias file" "per-domain default"
6410Alternatively, if &"*@"& is added to a single-key lookup type (for example
6411&%dbm*@%&) then, if the initial lookup fails and the key contains an @
168e428f 6412character, a second lookup is done with everything before the last @ replaced
9b371988 6413by *. This makes it possible to provide per-domain defaults in alias files
168e428f 6414that include the domains in the keys. If the second lookup fails (or doesn't
9b371988
PH
6415take place because there is no @ in the key), &"*"& is looked up.
6416For example, a &(redirect)& router might contain:
6417.code
6418data = ${lookup{$local_part@$domain}lsearch*@{/etc/mix-aliases}}
6419.endd
6420Suppose the address that is being processed is &'jane@eyre.example'&. Exim
168e428f 6421looks up these keys, in this order:
9b371988
PH
6422.code
6423jane@eyre.example
6424*@eyre.example
6425*
6426.endd
6427The data is taken from whichever key it finds first. &*Note*&: In an
6428&(lsearch)& file, this does not mean the first of these keys in the file. A
168e428f
PH
6429complete scan is done for each key, and only if it is not found at all does
6430Exim move on to try the next key.
6431
6432
6433
9b371988
PH
6434.section "Partial matching in single-key lookups" "SECTpartiallookup"
6435.cindex "partial matching"
6436.cindex "wildcard lookups"
6437.cindex "lookup" "partial matching"
6438.cindex "lookup" "wildcard"
6439.cindex "asterisk" "in search type"
168e428f
PH
6440The normal operation of a single-key lookup is to search the file for an exact
6441match with the given key. However, in a number of situations where domains are
6442being looked up, it is useful to be able to do partial matching. In this case,
9b371988 6443information in the file that has a key starting with &"*."& is matched by any
168e428f
PH
6444domain that ends with the components that follow the full stop. For example, if
6445a key in a DBM file is
9b371988
PH
6446.code
6447*.dates.fict.example
6448.endd
168e428f 6449then when partial matching is enabled this is matched by (amongst others)
9b371988
PH
6450&'2001.dates.fict.example'& and &'1984.dates.fict.example'&. It is also matched
6451by &'dates.fict.example'&, if that does not appear as a separate key in the
168e428f
PH
6452file.
6453
9b371988 6454&*Note*&: Partial matching is not available for query-style lookups. It is
168e428f 6455also not available for any lookup items in address lists (see section
9b371988 6456&<<SECTaddresslist>>&).
168e428f
PH
6457
6458Partial matching is implemented by doing a series of separate lookups using
6459keys constructed by modifying the original subject key. This means that it can
6460be used with any of the single-key lookup types, provided that
6461partial matching keys
9b371988 6462beginning with a special prefix (default &"*."&) are included in the data file.
168e428f
PH
6463Keys in the file that do not begin with the prefix are matched only by
6464unmodified subject keys when partial matching is in use.
6465
9b371988
PH
6466Partial matching is requested by adding the string &"partial-"& to the front of
6467the name of a single-key lookup type, for example, &%partial-dbm%&. When this
6468is done, the subject key is first looked up unmodified; if that fails, &"*."&
168e428f 6469is added at the start of the subject key, and it is looked up again. If that
9b371988
PH
6470fails, further lookups are tried with dot-separated components removed from the
6471start of the subject key, one-by-one, and &"*."& added on the front of what
6472remains.
168e428f 6473
9b371988 6474A minimum number of two non-* components are required. This can be adjusted
168e428f 6475by including a number before the hyphen in the search type. For example,
9b371988
PH
6476&%partial3-lsearch%& specifies a minimum of three non-* components in the
6477modified keys. Omitting the number is equivalent to &"partial2-"&. If the
6478subject key is &'2250.dates.fict.example'& then the following keys are looked
6479up when the minimum number of non-* components is two:
6480.code
64812250.dates.fict.example
6482*.2250.dates.fict.example
6483*.dates.fict.example
6484*.fict.example
6485.endd
168e428f
PH
6486As soon as one key in the sequence is successfully looked up, the lookup
6487finishes.
6488
9b371988
PH
6489.cindex "lookup" "partial matching &-- changing prefix"
6490.cindex "prefix" "for partial matching"
6491The use of &"*."& as the partial matching prefix is a default that can be
168e428f
PH
6492changed. The motivation for this feature is to allow Exim to operate with file
6493formats that are used by other MTAs. A different prefix can be supplied in
9b371988
PH
6494parentheses instead of the hyphen after &"partial"&. For example:
6495.code
6496domains = partial(.)lsearch;/some/file
6497.endd
6498In this example, if the domain is &'a.b.c'&, the sequence of lookups is
6499&`a.b.c`&, &`.a.b.c`&, and &`.b.c`& (the default minimum of 2 non-wild
168e428f
PH
6500components is unchanged). The prefix may consist of any punctuation characters
6501other than a closing parenthesis. It may be empty, for example:
9b371988
PH
6502.code
6503domains = partial1()cdb;/some/file
6504.endd
6505For this example, if the domain is &'a.b.c'&, the sequence of lookups is
6506&`a.b.c`&, &`b.c`&, and &`c`&.
6507
6508If &"partial0"& is specified, what happens at the end (when the lookup with
6509just one non-wild component has failed, and the original key is shortened right
6510down to the null string) depends on the prefix:
6511
6512.ilist
6513If the prefix has zero length, the whole lookup fails.
6514.next
6515If the prefix has length 1, a lookup for just the prefix is done. For
6516example, the final lookup for &"partial0(.)"& is for &`.`& alone.
6517.next
6518Otherwise, if the prefix ends in a dot, the dot is removed, and the
168e428f 6519remainder is looked up. With the default prefix, therefore, the final lookup is
9b371988
PH
6520for &"*"& on its own.
6521.next
6522Otherwise, the whole prefix is looked up.
6523.endlist
168e428f 6524
168e428f 6525
9b371988
PH
6526If the search type ends in &"*"& or &"*@"& (see section
6527&<<SECTdefaultvaluelookups>>& above), the search for an ultimate default that
6528this implies happens after all partial lookups have failed. If &"partial0"& is
6529specified, adding &"*"& to the search type has no effect with the default
6530prefix, because the &"*"& key is already included in the sequence of partial
168e428f 6531lookups. However, there might be a use for lookup types such as
9b371988 6532&"partial0(.)lsearch*"&.
168e428f 6533
9b371988 6534The use of &"*"& in lookup partial matching differs from its use as a wildcard
168e428f 6535in domain lists and the like. Partial matching works only in terms of
9b371988 6536dot-separated components; a key such as &`*fict.example`&
168e428f
PH
6537in a database file is useless, because the asterisk in a partial matching
6538subject key is always followed by a dot.
6539
6540
6541
6542
f89d2485 6543.section "Lookup caching" "SECID64"
9b371988
PH
6544.cindex "lookup" "caching"
6545.cindex "caching" "lookup data"
168e428f
PH
6546Exim caches all lookup results in order to avoid needless repetition of
6547lookups. However, because (apart from the daemon) Exim operates as a collection
6548of independent, short-lived processes, this caching applies only within a
9b371988 6549single Exim process. There is no inter-process lookup caching facility.
168e428f
PH
6550
6551For single-key lookups, Exim keeps the relevant files open in case there is
6552another lookup that needs them. In some types of configuration this can lead to
6553many files being kept open for messages with many recipients. To avoid hitting
6554the operating system limit on the number of simultaneously open files, Exim
6555closes the least recently used file when it needs to open more files than its
9b371988 6556own internal limit, which can be changed via the &%lookup_open_max%& option.
168e428f
PH
6557
6558The single-key lookup files are closed and the lookup caches are flushed at
9b371988
PH
6559strategic points during delivery &-- for example, after all routing is
6560complete.
168e428f
PH
6561
6562
6563
6564
f89d2485 6565.section "Quoting lookup data" "SECID65"
9b371988
PH
6566.cindex "lookup" "quoting"
6567.cindex "quoting" "in lookups"
168e428f
PH
6568When data from an incoming message is included in a query-style lookup, there
6569is the possibility of special characters in the data messing up the syntax of
6570the query. For example, a NIS+ query that contains
9b371988
PH
6571.code
6572[name=$local_part]
6573.endd
168e428f
PH
6574will be broken if the local part happens to contain a closing square bracket.
6575For NIS+, data can be enclosed in double quotes like this:
9b371988
PH
6576.code
6577[name="$local_part"]
6578.endd
168e428f
PH
6579but this still leaves the problem of a double quote in the data. The rule for
6580NIS+ is that double quotes must be doubled. Other lookup types have different
6581rules, and to cope with the differing requirements, an expansion operator
6582of the following form is provided:
9b371988
PH
6583.code
6584${quote_<lookup-type>:<string>}
6585.endd
168e428f 6586For example, the safest way to write the NIS+ query is
9b371988
PH
6587.code
6588[name="${quote_nisplus:$local_part}"]
6589.endd
6590See chapter &<<CHAPexpand>>& for full coverage of string expansions. The quote
168e428f
PH
6591operator can be used for all lookup types, but has no effect for single-key
6592lookups, since no quoting is ever needed in their key strings.
6593
6594
6595
6596
9b371988
PH
6597.section "More about dnsdb" "SECTdnsdb"
6598.cindex "dnsdb lookup"
6599.cindex "lookup" "dnsdb"
6600.cindex "DNS" "as a lookup type"
6601The &(dnsdb)& lookup type uses the DNS as its database. A simple query consists
168e428f
PH
6602of a record type and a domain name, separated by an equals sign. For example,
6603an expansion string could contain:
9b371988
PH
6604.code
6605${lookup dnsdb{mx=a.b.example}{$value}fail}
6606.endd
9b371988 6607If the lookup succeeds, the result is placed in &$value$&, which in this case
3cb1b51e 6608is used on its own as the result. If the lookup does not succeed, the
db9452a9
PH
6609&`fail`& keyword causes a &'forced expansion failure'& &-- see section
6610&<<SECTforexpfai>>& for an explanation of what this means.
168e428f
PH
6611
6612The supported DNS record types are A, CNAME, MX, NS, PTR, SRV, and TXT, and,
6613when Exim is compiled with IPv6 support, AAAA (and A6 if that is also
6614configured). If no type is given, TXT is assumed. When the type is PTR,
6615the data can be an IP address, written as normal; inversion and the addition of
9b371988
PH
6616&%in-addr.arpa%& or &%ip6.arpa%& happens automatically. For example:
6617.code
6618${lookup dnsdb{ptr=192.168.4.5}{$value}fail}
6619.endd
168e428f
PH
6620If the data for a PTR record is not a syntactically valid IP address, it is not
6621altered and nothing is added.
6622
9b371988
PH
6623.cindex "MX record" "in &(dnsdb)& lookup"
6624.cindex "SRV record" "in &(dnsdb)& lookup"
068aaea8
PH
6625For an MX lookup, both the preference value and the host name are returned for
6626each record, separated by a space. For an SRV lookup, the priority, weight,
6627port, and host name are returned for each record, separated by spaces.
6628
168e428f
PH
6629For any record type, if multiple records are found (or, for A6 lookups, if a
6630single record leads to multiple addresses), the data is returned as a
6631concatenation, with newline as the default separator. The order, of course,
6632depends on the DNS resolver. You can specify a different separator character
6633between multiple records by putting a right angle-bracket followed immediately
6634by the new separator at the start of the query. For example:
9b371988
PH
6635.code
6636${lookup dnsdb{>: a=host1.example}}
6637.endd
168e428f 6638It is permitted to specify a space as the separator character. Further
068aaea8 6639white space is ignored.
168e428f 6640
f89d2485 6641.section "Pseudo dnsdb record types" "SECID66"
9b371988 6642.cindex "MX record" "in &(dnsdb)& lookup"
068aaea8
PH
6643By default, both the preference value and the host name are returned for
6644each MX record, separated by a space. If you want only host names, you can use
6645the pseudo-type MXH:
9b371988
PH
6646.code
6647${lookup dnsdb{mxh=a.b.example}}
6648.endd
068aaea8
PH
6649In this case, the preference values are omitted, and just the host names are
6650returned.
168e428f 6651
f89d2485 6652.cindex "name server for enclosing domain"
9b371988 6653Another pseudo-type is ZNS (for &"zone NS"&). It performs a lookup for NS
168e428f
PH
6654records on the given domain, but if none are found, it removes the first
6655component of the domain name, and tries again. This process continues until NS
6656records are found or there are no more components left (or there is a DNS
6657error). In other words, it may return the name servers for a top-level domain,
6658but it never returns the root name servers. If there are no NS records for the
6659top-level domain, the lookup fails. Consider these examples:
9b371988
PH
6660.code
6661${lookup dnsdb{zns=xxx.quercite.com}}
6662${lookup dnsdb{zns=xxx.edu}}
6663.endd
168e428f 6664Assuming that in each case there are no NS records for the full domain name,
9b371988
PH
6665the first returns the name servers for &%quercite.com%&, and the second returns
6666the name servers for &%edu%&.
168e428f
PH
6667
6668You should be careful about how you use this lookup because, unless the
6669top-level domain does not exist, the lookup always returns some host names. The
6670sort of use to which this might be put is for seeing if the name servers for a
6671given domain are on a blacklist. You can probably assume that the name servers
9b371988
PH
6672for the high-level domains such as &%com%& or &%co.uk%& are not going to be on
6673such a list.
168e428f 6674
9b371988
PH
6675.cindex "CSA" "in &(dnsdb)& lookup"
6676A third pseudo-type is CSA (Client SMTP Authorization). This looks up SRV
068aaea8 6677records according to the CSA rules, which are described in section
9b371988
PH
6678&<<SECTverifyCSA>>&. Although &(dnsdb)& supports SRV lookups directly, this is
6679not sufficient because of the extra parent domain search behaviour of CSA. The
068aaea8 6680result of a successful lookup such as:
9b371988 6681.code
068aaea8 6682${lookup dnsdb {csa=$sender_helo_name}}
9b371988 6683.endd
068aaea8 6684has two space-separated fields: an authorization code and a target host name.
9b371988
PH
6685The authorization code can be &"Y"& for yes, &"N"& for no, &"X"& for explicit
6686authorization required but absent, or &"?"& for unknown.
168e428f
PH
6687
6688
f89d2485 6689.section "Multiple dnsdb lookups" "SECID67"
9b371988 6690In the previous sections, &(dnsdb)& lookups for a single domain are described.
168e428f 6691However, you can specify a list of domains or IP addresses in a single
9b371988 6692&(dnsdb)& lookup. The list is specified in the normal Exim way, with colon as
168e428f 6693the default separator, but with the ability to change this. For example:
9b371988
PH
6694.code
6695${lookup dnsdb{one.domain.com:two.domain.com}}
6696${lookup dnsdb{a=one.host.com:two.host.com}}
6697${lookup dnsdb{ptr = <; 1.2.3.4 ; 4.5.6.8}}
6698.endd
168e428f
PH
6699In order to retain backwards compatibility, there is one special case: if
6700the lookup type is PTR and no change of separator is specified, Exim looks
6701to see if the rest of the string is precisely one IPv6 address. In this
6702case, it does not treat it as a list.
6703
6704The data from each lookup is concatenated, with newline separators by default,
6705in the same way that multiple DNS records for a single item are handled. A
6706different separator can be specified, as described above.
6707
9b371988 6708The &(dnsdb)& lookup fails only if all the DNS lookups fail. If there is a
168e428f
PH
6709temporary DNS error for any of them, the behaviour is controlled by
6710an optional keyword followed by a comma that may appear before the record
9b371988
PH
6711type. The possible keywords are &"defer_strict"&, &"defer_never"&, and
6712&"defer_lax"&. With &"strict"& behaviour, any temporary DNS error causes the
6713whole lookup to defer. With &"never"& behaviour, a temporary DNS error is
168e428f 6714ignored, and the behaviour is as if the DNS lookup failed to find anything.
9b371988 6715With &"lax"& behaviour, all the queries are attempted, but a temporary DNS
168e428f 6716error causes the whole lookup to defer only if none of the other lookups
9b371988
PH
6717succeed. The default is &"lax"&, so the following lookups are equivalent:
6718.code
6719${lookup dnsdb{defer_lax,a=one.host.com:two.host.com}}
6720${lookup dnsdb{a=one.host.com:two.host.com}}
6721.endd
168e428f
PH
6722Thus, in the default case, as long as at least one of the DNS lookups
6723yields some data, the lookup succeeds.
6724
6725
6726
6727
9b371988 6728.section "More about LDAP" "SECTldap"
f89d2485 6729.cindex "LDAP" "lookup, more about"
9b371988
PH
6730.cindex "lookup" "LDAP"
6731.cindex "Solaris" "LDAP"
168e428f 6732The original LDAP implementation came from the University of Michigan; this has
9b371988 6733become &"Open LDAP"&, and there are now two different releases. Another
168e428f
PH
6734implementation comes from Netscape, and Solaris 7 and subsequent releases
6735contain inbuilt LDAP support. Unfortunately, though these are all compatible at
6736the lookup function level, their error handling is different. For this reason
6737it is necessary to set a compile-time variable when building Exim with LDAP, to
6738indicate which LDAP library is in use. One of the following should appear in
9b371988
PH
6739your &_Local/Makefile_&:
6740.code
6741LDAP_LIB_TYPE=UMICHIGAN
6742LDAP_LIB_TYPE=OPENLDAP1
6743LDAP_LIB_TYPE=OPENLDAP2
6744LDAP_LIB_TYPE=NETSCAPE
6745LDAP_LIB_TYPE=SOLARIS
6746.endd
6747If LDAP_LIB_TYPE is not set, Exim assumes &`OPENLDAP1`&, which has the
168e428f
PH
6748same interface as the University of Michigan version.
6749
6750There are three LDAP lookup types in Exim. These behave slightly differently in
6751the way they handle the results of a query:
6752
9b371988
PH
6753.ilist
6754&(ldap)& requires the result to contain just one entry; if there are more, it
168e428f 6755gives an error.
9b371988
PH
6756.next
6757&(ldapdn)& also requires the result to contain just one entry, but it is the
168e428f 6758Distinguished Name that is returned rather than any attribute values.
9b371988
PH
6759.next
6760&(ldapm)& permits the result to contain more than one entry; the attributes
6761from all of them are returned.
6762.endlist
168e428f
PH
6763
6764
9b371988 6765For &(ldap)& and &(ldapm)&, if a query finds only entries with no attributes,
168e428f
PH
6766Exim behaves as if the entry did not exist, and the lookup fails. The format of
6767the data returned by a successful lookup is described in the next section.
6768First we explain how LDAP queries are coded.
6769
6770
9b371988
PH
6771.section "Format of LDAP queries" "SECTforldaque"
6772.cindex "LDAP" "query format"
168e428f 6773An LDAP query takes the form of a URL as defined in RFC 2255. For example, in
9b371988
PH
6774the configuration of a &(redirect)& router one might have this setting:
6775.code
168e428f
PH
6776data = ${lookup ldap \
6777 {ldap:///cn=$local_part,o=University%20of%20Cambridge,\
6778 c=UK?mailbox?base?}}
9b371988
PH
6779.endd
6780.cindex "LDAP" "with TLS"
6781The URL may begin with &`ldap`& or &`ldaps`& if your LDAP library supports
168e428f
PH
6782secure (encrypted) LDAP connections. The second of these ensures that an
6783encrypted TLS connection is used.
6784
6785
f89d2485 6786.section "LDAP quoting" "SECID68"
9b371988 6787.cindex "LDAP" "quoting"
168e428f
PH
6788Two levels of quoting are required in LDAP queries, the first for LDAP itself
6789and the second because the LDAP query is represented as a URL. Furthermore,
6790within an LDAP query, two different kinds of quoting are required. For this
6791reason, there are two different LDAP-specific quoting operators.
6792
9b371988 6793The &%quote_ldap%& operator is designed for use on strings that are part of
168e428f
PH
6794filter specifications. Conceptually, it first does the following conversions on
6795the string:
9b371988 6796.code
168e428f
PH
6797* => \2A
6798( => \28
6799) => \29
6800\ => \5C
9b371988 6801.endd
168e428f 6802in accordance with RFC 2254. The resulting string is then quoted according
9b371988
PH
6803to the rules for URLs, that is, all non-alphanumeric characters except
6804.code
6805! $ ' - . _ ( ) * +
6806.endd
168e428f 6807are converted to their hex values, preceded by a percent sign. For example:
9b371988
PH
6808.code
6809${quote_ldap: a(bc)*, a<yz>; }
6810.endd
168e428f 6811yields
9b371988
PH
6812.code
6813%20a%5C28bc%5C29%5C2A%2C%20a%3Cyz%3E%3B%20
6814.endd
168e428f 6815Removing the URL quoting, this is (with a leading and a trailing space):
9b371988
PH
6816.code
6817a\28bc\29\2A, a<yz>;
6818.endd
6819The &%quote_ldap_dn%& operator is designed for use on strings that are part of
168e428f
PH
6820base DN specifications in queries. Conceptually, it first converts the string
6821by inserting a backslash in front of any of the following characters:
9b371988
PH
6822.code
6823, + " \ < > ;
6824.endd
168e428f
PH
6825It also inserts a backslash before any leading spaces or # characters, and
6826before any trailing spaces. (These rules are in RFC 2253.) The resulting string
6827is then quoted according to the rules for URLs. For example:
9b371988
PH
6828.code
6829${quote_ldap_dn: a(bc)*, a<yz>; }
6830.endd
168e428f 6831yields
9b371988
PH
6832.code
6833%5C%20a(bc)*%5C%2C%20a%5C%3Cyz%5C%3E%5C%3B%5C%20
6834.endd
168e428f 6835Removing the URL quoting, this is (with a trailing space):
9b371988 6836.code
168e428f 6837\ a(bc)*\, a\<yz\>\;\
9b371988 6838.endd
168e428f
PH
6839There are some further comments about quoting in the section on LDAP
6840authentication below.
6841
6842
f89d2485 6843.section "LDAP connections" "SECID69"
9b371988 6844.cindex "LDAP" "connections"
168e428f
PH
6845The connection to an LDAP server may either be over TCP/IP, or, when OpenLDAP
6846is in use, via a Unix domain socket. The example given above does not specify
6847an LDAP server. A server that is reached by TCP/IP can be specified in a query
6848by starting it with
9b371988
PH
6849.code
6850ldap://<hostname>:<port>/...
6851.endd
168e428f
PH
6852If the port (and preceding colon) are omitted, the standard LDAP port (389) is
6853used. When no server is specified in a query, a list of default servers is
9b371988 6854taken from the &%ldap_default_servers%& configuration option. This supplies a
168e428f
PH
6855colon-separated list of servers which are tried in turn until one successfully
6856handles a query, or there is a serious error. Successful handling either
6857returns the requested data, or indicates that it does not exist. Serious errors
6858are syntactical, or multiple values when only a single value is expected.
6859Errors which cause the next server to be tried are connection failures, bind
6860failures, and timeouts.
6861
6862For each server name in the list, a port number can be given. The standard way
f89d2485 6863of specifying a host and port is to use a colon separator (RFC 1738). Because
9b371988 6864&%ldap_default_servers%& is a colon-separated list, such colons have to be
168e428f 6865doubled. For example
9b371988
PH
6866.code
6867ldap_default_servers = ldap1.example.com::145:ldap2.example.com
6868.endd
6869If &%ldap_default_servers%& is unset, a URL with no server name is passed
168e428f
PH
6870to the LDAP library with no server name, and the library's default (normally
6871the local host) is used.
6872
6873If you are using the OpenLDAP library, you can connect to an LDAP server using
6874a Unix domain socket instead of a TCP/IP connection. This is specified by using
9b371988 6875&`ldapi`& instead of &`ldap`& in LDAP queries. What follows here applies only
168e428f
PH
6876to OpenLDAP. If Exim is compiled with a different LDAP library, this feature is
6877not available.
6878
6879For this type of connection, instead of a host name for the server, a pathname
6880for the socket is required, and the port number is not relevant. The pathname
9b371988 6881can be specified either as an item in &%ldap_default_servers%&, or inline in
168e428f 6882the query. In the former case, you can have settings such as
9b371988
PH
6883.code
6884ldap_default_servers = /tmp/ldap.sock : backup.ldap.your.domain
6885.endd
168e428f 6886When the pathname is given in the query, you have to escape the slashes as
9b371988
PH
6887&`%2F`& to fit in with the LDAP URL syntax. For example:
6888.code
6889${lookup ldap {ldapi://%2Ftmp%2Fldap.sock/o=...
6890.endd
6891When Exim processes an LDAP lookup and finds that the &"hostname"& is really
168e428f 6892a pathname, it uses the Unix domain socket code, even if the query actually
9b371988 6893specifies &`ldap`& or &`ldaps`&. In particular, no encryption is used for a
168e428f 6894socket connection. This behaviour means that you can use a setting of
9b371988
PH
6895&%ldap_default_servers%& such as in the example above with traditional &`ldap`&
6896or &`ldaps`& queries, and it will work. First, Exim tries a connection via
168e428f
PH
6897the Unix domain socket; if that fails, it tries a TCP/IP connection to the
6898backup host.
6899
9b371988 6900If an explicit &`ldapi`& type is given in a query when a host name is
168e428f 6901specified, an error is diagnosed. However, if there are more items in
9b371988 6902&%ldap_default_servers%&, they are tried. In other words:
168e428f 6903
9b371988
PH
6904.ilist
6905Using a pathname with &`ldap`& or &`ldaps`& forces the use of the Unix domain
168e428f 6906interface.
9b371988
PH
6907.next
6908Using &`ldapi`& with a host name causes an error.
6909.endlist
168e428f
PH
6910
6911
9b371988
PH
6912Using &`ldapi`& with no host or path in the query, and no setting of
6913&%ldap_default_servers%&, does whatever the library does by default.
168e428f
PH
6914
6915
6916
f89d2485 6917.section "LDAP authentication and control information" "SECID70"
9b371988 6918.cindex "LDAP" "authentication"
168e428f
PH
6919The LDAP URL syntax provides no way of passing authentication and other control
6920information to the server. To make this possible, the URL in an LDAP query may
9b371988 6921be preceded by any number of <&'name'&>=<&'value'&> settings, separated by
168e428f
PH
6922spaces. If a value contains spaces it must be enclosed in double quotes, and
6923when double quotes are used, backslash is interpreted in the usual way inside
6924them. The following names are recognized:
9b371988
PH
6925.display
6926&`DEREFERENCE`& set the dereferencing parameter
6927&`NETTIME `& set a timeout for a network operation
6928&`USER `& set the DN, for authenticating the LDAP bind
6929&`PASS `& set the password, likewise
db9452a9 6930&`REFERRALS `& set the referrals parameter
9b371988
PH
6931&`SIZE `& set the limit for the number of entries returned
6932&`TIME `& set the maximum waiting time for a query
6933.endd
6934The value of the DEREFERENCE parameter must be one of the words &"never"&,
db9452a9
PH
6935&"searching"&, &"finding"&, or &"always"&. The value of the REFERRALS parameter
6936must be &"follow"& (the default) or &"nofollow"&. The latter stops the LDAP
6937library from trying to follow referrals issued by the LDAP server.
168e428f
PH
6938
6939The name CONNECT is an obsolete name for NETTIME, retained for
6940backwards compatibility. This timeout (specified as a number of seconds) is
6941enforced from the client end for operations that can be carried out over a
6942network. Specifically, it applies to network connections and calls to the
9b371988 6943&'ldap_result()'& function. If the value is greater than zero, it is used if
168e428f
PH
6944LDAP_OPT_NETWORK_TIMEOUT is defined in the LDAP headers (OpenLDAP), or
6945if LDAP_X_OPT_CONNECT_TIMEOUT is defined in the LDAP headers (Netscape
9b371988 6946SDK 4.1). A value of zero forces an explicit setting of &"no timeout"& for
168e428f
PH
6947Netscape SDK; for OpenLDAP no action is taken.
6948
6949The TIME parameter (also a number of seconds) is passed to the server to
6950set a server-side limit on the time taken to complete a search.
6951
6952
6953Here is an example of an LDAP query in an Exim lookup that uses some of these
9b371988
PH
6954values. This is a single line, folded to fit on the page:
6955.code
6956${lookup ldap
6957 {user="cn=manager,o=University of Cambridge,c=UK" pass=secret
6958 ldap:///o=University%20of%20Cambridge,c=UK?sn?sub?(cn=foo)}
6959 {$value}fail}
6960.endd
6961The encoding of spaces as &`%20`& is a URL thing which should not be done for
6962any of the auxiliary data. Exim configuration settings that include lookups
6963which contain password information should be preceded by &"hide"& to prevent
6964non-admin users from using the &%-bP%& option to see their values.
168e428f
PH
6965
6966The auxiliary data items may be given in any order. The default is no
6967connection timeout (the system timeout is used), no user or password, no limit
6968on the number of entries returned, and no time limit on queries.
6969
6970When a DN is quoted in the USER= setting for LDAP authentication, Exim
6971removes any URL quoting that it may contain before passing it LDAP. Apparently
6972some libraries do this for themselves, but some do not. Removing the URL
6973quoting has two advantages:
6974
9b371988
PH
6975.ilist
6976It makes it possible to use the same &%quote_ldap_dn%& expansion for USER=
168e428f 6977DNs as with DNs inside actual queries.
9b371988
PH
6978.next
6979It permits spaces inside USER= DNs.
6980.endlist
168e428f
PH
6981
6982For example, a setting such as
9b371988
PH
6983.code
6984USER=cn=${quote_ldap_dn:$1}
6985.endd
6986should work even if &$1$& contains spaces.
168e428f 6987
9b371988 6988Expanded data for the PASS= value should be quoted using the &%quote%&
168e428f
PH
6989expansion operator, rather than the LDAP quote operators. The only reason this
6990field needs quoting is to ensure that it conforms to the Exim syntax, which
6991does not allow unquoted spaces. For example:
9b371988
PH
6992.code
6993PASS=${quote:$3}
6994.endd
168e428f 6995The LDAP authentication mechanism can be used to check passwords as part of
9b371988
PH
6996SMTP authentication. See the &%ldapauth%& expansion string condition in chapter
6997&<<CHAPexpand>>&.
168e428f 6998
168e428f
PH
6999
7000
f89d2485 7001.section "Format of data returned by LDAP" "SECID71"
9b371988
PH
7002.cindex "LDAP" "returned data formats"
7003The &(ldapdn)& lookup type returns the Distinguished Name from a single entry
7004as a sequence of values, for example
7005.code
7006cn=manager, o=University of Cambridge, c=UK
7007.endd
7008The &(ldap)& lookup type generates an error if more than one entry matches the
7009search filter, whereas &(ldapm)& permits this case, and inserts a newline in
168e428f 7010the result between the data from different entries. It is possible for multiple
9b371988 7011values to be returned for both &(ldap)& and &(ldapm)&, but in the former case
168e428f
PH
7012you know that whatever values are returned all came from a single entry in the
7013directory.
7014
7015In the common case where you specify a single attribute in your LDAP query, the
7016result is not quoted, and does not contain the attribute name. If the attribute
7017has multiple values, they are separated by commas.
7018
7019If you specify multiple attributes, the result contains space-separated, quoted
7020strings, each preceded by the attribute name and an equals sign. Within the
7021quotes, the quote character, backslash, and newline are escaped with
7022backslashes, and commas are used to separate multiple values for the attribute.
7023Apart from the escaping, the string within quotes takes the same form as the
7024output when a single attribute is requested. Specifying no attributes is the
7025same as specifying all of an entry's attributes.
7026
7027Here are some examples of the output format. The first line of each pair is an
7028LDAP query, and the second is the data that is returned. The attribute called
9b371988
PH
7029&%attr1%& has two values, whereas &%attr2%& has only one value:
7030.code
7031ldap:///o=base?attr1?sub?(uid=fred)
7032value1.1, value1.2
168e428f 7033
9b371988
PH
7034ldap:///o=base?attr2?sub?(uid=fred)
7035value two
168e428f 7036
9b371988
PH
7037ldap:///o=base?attr1,attr2?sub?(uid=fred)
7038attr1="value1.1, value1.2" attr2="value two"
168e428f 7039
9b371988
PH
7040ldap:///o=base??sub?(uid=fred)
7041objectClass="top" attr1="value1.1, value1.2" attr2="value two"
7042.endd
7043The &%extract%& operator in string expansions can be used to pick out
7044individual fields from data that consists of &'key'&=&'value'& pairs. You can
7045make use of Exim's &%-be%& option to run expansion tests and thereby check the
7046results of LDAP lookups.
168e428f 7047
168e428f 7048
168e428f
PH
7049
7050
9b371988
PH
7051.section "More about NIS+" "SECTnisplus"
7052.cindex "NIS+ lookup type"
7053.cindex "lookup" "NIS+"
7054NIS+ queries consist of a NIS+ &'indexed name'& followed by an optional colon
168e428f
PH
7055and field name. If this is given, the result of a successful query is the
7056contents of the named field; otherwise the result consists of a concatenation
9b371988 7057of &'field-name=field-value'& pairs, separated by spaces. Empty values and
168e428f 7058values containing spaces are quoted. For example, the query
9b371988
PH
7059.code
7060[name=mg1456],passwd.org_dir
7061.endd
168e428f 7062might return the string
9b371988
PH
7063.code
7064name=mg1456 passwd="" uid=999 gid=999 gcos="Martin Guerre"
7065home=/home/mg1456 shell=/bin/bash shadow=""
7066.endd
168e428f 7067(split over two lines here to fit on the page), whereas
9b371988
PH
7068.code
7069[name=mg1456],passwd.org_dir:gcos
7070.endd
168e428f 7071would just return
9b371988
PH
7072.code
7073Martin Guerre
7074.endd
168e428f 7075with no quotes. A NIS+ lookup fails if NIS+ returns more than one table entry
9b371988 7076for the given indexed key. The effect of the &%quote_nisplus%& expansion
168e428f
PH
7077operator is to double any quote characters within the text.
7078
7079
7080
9b371988 7081.section "SQL lookups" "SECTsql"
9b371988 7082.cindex "SQL lookup types"
595028e4
PH
7083.cindex "MySQL" "lookup type"
7084.cindex "PostgreSQL lookup type"
7085.cindex "lookup" "MySQL"
7086.cindex "lookup" "PostgreSQL"
7087.cindex "Oracle" "lookup type"
7088.cindex "lookup" "Oracle"
7089.cindex "InterBase lookup type"
7090.cindex "lookup" "InterBase"
db9452a9 7091Exim can support lookups in InterBase, MySQL, Oracle, PostgreSQL, and SQLite
068aaea8
PH
7092databases. Queries for these databases contain SQL statements, so an example
7093might be
9b371988 7094.code
068aaea8
PH
7095${lookup mysql{select mailbox from users where id='userx'}\
7096 {$value}fail}
9b371988 7097.endd
068aaea8
PH
7098If the result of the query contains more than one field, the data for each
7099field in the row is returned, preceded by its name, so the result of
9b371988 7100.code
068aaea8
PH
7101${lookup pgsql{select home,name from users where id='userx'}\
7102 {$value}}
9b371988 7103.endd
068aaea8 7104might be
9b371988
PH
7105.code
7106home=/home/userx name="Mister X"
7107.endd
068aaea8
PH
7108Empty values and values containing spaces are double quoted, with embedded
7109quotes escaped by a backslash. If the result of the query contains just one
7110field, the value is passed back verbatim, without a field name, for example:
9b371988
PH
7111.code
7112Mister X
7113.endd
068aaea8
PH
7114If the result of the query yields more than one row, it is all concatenated,
7115with a newline between the data for each row.
7116
7117
f89d2485 7118.section "More about MySQL, PostgreSQL, Oracle, and InterBase" "SECID72"
9b371988
PH
7119.cindex "MySQL" "lookup type"
7120.cindex "PostgreSQL lookup type"
7121.cindex "lookup" "MySQL"
7122.cindex "lookup" "PostgreSQL"
7123.cindex "Oracle" "lookup type"
7124.cindex "lookup" "Oracle"
db9452a9
PH
7125.cindex "InterBase lookup type"
7126.cindex "lookup" "InterBase"
7127If any MySQL, PostgreSQL, Oracle, or InterBase lookups are used, the
9b371988
PH
7128&%mysql_servers%&, &%pgsql_servers%&, &%oracle_servers%&, or &%ibase_servers%&
7129option (as appropriate) must be set to a colon-separated list of server
595028e4 7130information.
7d0ab55c 7131(For MySQL and PostgreSQL only, the global option need not be set if all
595028e4 7132queries contain their own server information &-- see section
7d0ab55c 7133&<<SECTspeserque>>&.) Each item in the list is a slash-separated list of four
595028e4
PH
7134items: host name, database name, user name, and password. In the case of
7135Oracle, the host name field is used for the &"service name"&, and the database
7136name field is not used and should be empty. For example:
9b371988
PH
7137.code
7138hide oracle_servers = oracle.plc.example//userx/abcdwxyz
7139.endd
168e428f 7140Because password data is sensitive, you should always precede the setting with
9b371988 7141&"hide"&, to prevent non-admin users from obtaining the setting via the &%-bP%&
168e428f 7142option. Here is an example where two MySQL servers are listed:
9b371988 7143.code
168e428f
PH
7144hide mysql_servers = localhost/users/root/secret:\
7145 otherhost/users/root/othersecret
9b371988
PH
7146.endd
7147For MySQL and PostgreSQL, a host may be specified as <&'name'&>:<&'port'&> but
068aaea8 7148because this is a colon-separated list, the colon has to be doubled. For each
595028e4
PH
7149query, these parameter groups are tried in order until a connection is made and
7150a query is successfully processed. The result of a query may be that no data is
7151found, but that is still a successful query. In other words, the list of
7152servers provides a backup facility, not a list of different places to look.
168e428f 7153
9b371988 7154The &%quote_mysql%&, &%quote_pgsql%&, and &%quote_oracle%& expansion operators
168e428f
PH
7155convert newline, tab, carriage return, and backspace to \n, \t, \r, and \b
7156respectively, and the characters single-quote, double-quote, and backslash
9b371988 7157itself are escaped with backslashes. The &%quote_pgsql%& expansion operator, in
168e428f
PH
7158addition, escapes the percent and underscore characters. This cannot be done
7159for MySQL because these escapes are not recognized in contexts where these
7160characters are not special.
7161
595028e4
PH
7162.section "Specifying the server in the query" "SECTspeserque"
7163For MySQL and PostgreSQL lookups (but not currently for Oracle and InterBase),
7164it is possible to specify a list of servers with an individual query. This is
7165done by starting the query with
7166.display
7167&`servers=`&&'server1:server2:server3:...'&&`;`&
7168.endd
7169Each item in the list may take one of two forms:
7170.olist
7171If it contains no slashes it is assumed to be just a host name. The appropriate
7172global option (&%mysql_servers%& or &%pgsql_servers%&) is searched for a host
7173of the same name, and the remaining parameters (database, user, password) are
7174taken from there.
7175.next
7176If it contains any slashes, it is taken as a complete parameter set.
7177.endlist
7178The list of servers is used in exactly the same way as the global list.
7179Once a connection to a server has happened and a query has been
7180successfully executed, processing of the lookup ceases.
7181
7182This feature is intended for use in master/slave situations where updates
7183are occurring and you want to update the master rather than a slave. If the
7184master is in the list as a backup for reading, you might have a global setting
7185like this:
7186.code
7187mysql_servers = slave1/db/name/pw:\
7188 slave2/db/name/pw:\
7189 master/db/name/pw
7190.endd
7191In an updating lookup, you could then write:
7192.code
512314e9 7193${lookup mysql{servers=master; UPDATE ...} }
595028e4
PH
7194.endd
7195That query would then be sent only to the master server. If, on the other hand,
7196the master is not to be used for reading, and so is not present in the global
7197option, you can still update it by a query of this form:
7198.code
512314e9 7199${lookup pgsql{servers=master/db/name/pw; UPDATE ...} }
595028e4 7200.endd
595028e4 7201
168e428f 7202
f89d2485 7203.section "Special MySQL features" "SECID73"
9b371988 7204For MySQL, an empty host name or the use of &"localhost"& in &%mysql_servers%&
168e428f
PH
7205causes a connection to the server on the local host by means of a Unix domain
7206socket. An alternate socket can be specified in parentheses. The full syntax of
9b371988
PH
7207each item in &%mysql_servers%& is:
7208.display
7209<&'hostname'&>::<&'port'&>(<&'socket name'&>)/<&'database'&>/&&&
7210 <&'user'&>/<&'password'&>
7211.endd
168e428f 7212Any of the three sub-parts of the first field can be omitted. For normal use on
9b371988 7213the local host it can be left blank or set to just &"localhost"&.
168e428f 7214
9b371988 7215No database need be supplied &-- but if it is absent here, it must be given in
168e428f
PH
7216the queries.
7217
7218If a MySQL query is issued that does not request any data (an insert, update,
7219or delete command), the result of the lookup is the number of rows affected.
7220
9b371988 7221&*Warning*&: This can be misleading. If an update does not actually change
168e428f
PH
7222anything (for example, setting a field to the value it already has), the result
7223is zero because no rows are affected.
7224
7225
f89d2485 7226.section "Special PostgreSQL features" "SECID74"
168e428f
PH
7227PostgreSQL lookups can also use Unix domain socket connections to the database.
7228This is usually faster and costs less CPU time than a TCP/IP connection.
7229However it can be used only if the mail server runs on the same machine as the
7230database server. A configuration line for PostgreSQL via Unix domain sockets
7231looks like this:
9b371988
PH
7232.code
7233hide pgsql_servers = (/tmp/.s.PGSQL.5432)/db/user/password : ...
7234.endd
168e428f
PH
7235In other words, instead of supplying a host name, a path to the socket is
7236given. The path name is enclosed in parentheses so that its slashes aren't
7237visually confused with the delimiters for the other server parameters.
7238
7239If a PostgreSQL query is issued that does not request any data (an insert,
7240update, or delete command), the result of the lookup is the number of rows
7241affected.
7242
9b371988
PH
7243.section "More about SQLite" "SECTsqlite"
7244.cindex "lookup" "SQLite"
f89d2485 7245.cindex "sqlite lookup type"
068aaea8
PH
7246SQLite is different to the other SQL lookups because a file name is required in
7247addition to the SQL query. An SQLite database is a single file, and there is no
7248daemon as in the other SQL databases. The interface to Exim requires the name
7249of the file, as an absolute path, to be given at the start of the query. It is
7250separated from the query by white space. This means that the path name cannot
7251contain white space. Here is a lookup expansion example:
9b371988 7252.code
068aaea8
PH
7253${lookup sqlite {/some/thing/sqlitedb \
7254 select name from aliases where id='userx';}}
9b371988 7255.endd
068aaea8 7256In a list, the syntax is similar. For example:
9b371988 7257.code
068aaea8
PH
7258domainlist relay_domains = sqlite;/some/thing/sqlitedb \
7259 select * from relays where ip='$sender_host_address';
9b371988
PH
7260.endd
7261The only character affected by the &%quote_sqlite%& operator is a single
068aaea8
PH
7262quote, which it doubles.
7263
068aaea8
PH
7264The SQLite library handles multiple simultaneous accesses to the database
7265internally. Multiple readers are permitted, but only one process can
7266update at once. Attempts to access the database while it is being updated
7267are rejected after a timeout period, during which the SQLite library
7268waits for the lock to be released. In Exim, the default timeout is set
9b371988 7269to 5 seconds, but it can be changed by means of the &%sqlite_lock_timeout%&
068aaea8 7270option.
4f578862
PH
7271.ecindex IIDfidalo1
7272.ecindex IIDfidalo2
168e428f
PH
7273
7274
9b371988
PH
7275. ////////////////////////////////////////////////////////////////////////////
7276. ////////////////////////////////////////////////////////////////////////////
168e428f 7277
9b371988
PH
7278.chapter "Domain, host, address, and local part lists" &&&
7279 "CHAPdomhosaddlists" &&&
7280 "Domain, host, and address lists"
4f578862 7281.scindex IIDdohoadli "lists of domains; hosts; etc."
168e428f 7282A number of Exim configuration options contain lists of domains, hosts,
9b371988 7283email addresses, or local parts. For example, the &%hold_domains%& option
168e428f 7284contains a list of domains whose delivery is currently suspended. These lists
9b371988
PH
7285are also used as data in ACL statements (see chapter &<<CHAPACL>>&), and as
7286arguments to expansion conditions such as &%match_domain%&.
168e428f
PH
7287
7288Each item in one of these lists is a pattern to be matched against a domain,
7289host, email address, or local part, respectively. In the sections below, the
7290different types of pattern for each case are described, but first we cover some
7291general facilities that apply to all four kinds of list.
7292
7293
7294
f89d2485 7295.section "Expansion of lists" "SECID75"
9b371988 7296.cindex "expansion" "of lists"
168e428f
PH
7297Each list is expanded as a single string before it is used. The result of
7298expansion must be a list, possibly containing empty items, which is split up
7299into separate items for matching. By default, colon is the separator character,
9b371988
PH
7300but this can be varied if necessary. See sections &<<SECTlistconstruct>>& and
7301&<<SECTempitelis>>& for details of the list syntax; the second of these
7302discusses the way to specify empty list items.
168e428f
PH
7303
7304
7305If the string expansion is forced to fail, Exim behaves as if the item it is
7306testing (domain, host, address, or local part) is not in the list. Other
7307expansion failures cause temporary errors.
7308
7309If an item in a list is a regular expression, backslashes, dollars and possibly
7310other special characters in the expression must be protected against
7311misinterpretation by the string expander. The easiest way to do this is to use
9b371988 7312the &`\N`& expansion feature to indicate that the contents of the regular
168e428f 7313expression should not be expanded. For example, in an ACL you might have:
9b371988 7314.code
168e428f
PH
7315deny senders = \N^\d{8}\w@.*\.baddomain\.example$\N : \
7316 ${lookup{$domain}lsearch{/badsenders/bydomain}}
9b371988 7317.endd
168e428f 7318The first item is a regular expression that is protected from expansion by
9b371988 7319&`\N`&, whereas the second uses the expansion to obtain a list of unwanted
168e428f
PH
7320senders based on the receiving domain.
7321
7322
7323
7324
f89d2485 7325.section "Negated items in lists" "SECID76"
9b371988 7326.cindex "list" "negation"
4f578862 7327.cindex "negation" "in lists"
168e428f
PH
7328Items in a list may be positive or negative. Negative items are indicated by a
7329leading exclamation mark, which may be followed by optional white space. A list
7330defines a set of items (domains, etc). When Exim processes one of these lists,
7331it is trying to find out whether a domain, host, address, or local part
7332(respectively) is in the set that is defined by the list. It works like this:
7333
7334The list is scanned from left to right. If a positive item is matched, the
7335subject that is being checked is in the set; if a negative item is matched, the
7336subject is not in the set. If the end of the list is reached without the
7337subject having matched any of the patterns, it is in the set if the last item
7338was a negative one, but not if it was a positive one. For example, the list in
9b371988
PH
7339.code
7340domainlist relay_domains = !a.b.c : *.b.c
7341.endd
7342matches any domain ending in &'.b.c'& except for &'a.b.c'&. Domains that match
7343neither &'a.b.c'& nor &'*.b.c'& do not match, because the last item in the
168e428f 7344list is positive. However, if the setting were
9b371988
PH
7345.code
7346domainlist relay_domains = !a.b.c
7347.endd
7348then all domains other than &'a.b.c'& would match because the last item in the
168e428f 7349list is negative. In other words, a list that ends with a negative item behaves
9b371988 7350as if it had an extra item &`:*`& on the end.
168e428f
PH
7351
7352Another way of thinking about positive and negative items in lists is to read
9b371988 7353the connector as &"or"& after a positive item and as &"and"& after a negative
168e428f
PH
7354item.
7355
7356
7357
9b371988
PH
7358.section "File names in lists" "SECTfilnamlis"
7359.cindex "list" "file name in"
168e428f
PH
7360If an item in a domain, host, address, or local part list is an absolute file
7361name (beginning with a slash character), each line of the file is read and
7362processed as if it were an independent item in the list, except that further
7363file names are not allowed,
7364and no expansion of the data from the file takes place.
7365Empty lines in the file are ignored, and the file may also contain comment
7366lines:
7367
9b371988
PH
7368.ilist
7369For domain and host lists, if a # character appears anywhere in a line of the
168e428f 7370file, it and all following characters are ignored.
9b371988
PH
7371.next
7372Because local parts may legitimately contain # characters, a comment in an
168e428f
PH
7373address list or local part list file is recognized only if # is preceded by
7374white space or the start of the line. For example:
9b371988
PH
7375.code
7376not#comment@x.y.z # but this is a comment
7377.endd
7378.endlist
168e428f
PH
7379
7380Putting a file name in a list has the same effect as inserting each line of the
7381file as an item in the list (blank lines and comments excepted). However, there
7382is one important difference: the file is read each time the list is processed,
7383so if its contents vary over time, Exim's behaviour changes.
7384
7385If a file name is preceded by an exclamation mark, the sense of any match
7386within the file is inverted. For example, if
9b371988
PH
7387.code
7388hold_domains = !/etc/nohold-domains
7389.endd
168e428f 7390and the file contains the lines
9b371988
PH
7391.code
7392!a.b.c
7393*.b.c
7394.endd
7395then &'a.b.c'& is in the set of domains defined by &%hold_domains%&, whereas
7396any domain matching &`*.b.c`& is not.
168e428f 7397
168e428f
PH
7398
7399
f89d2485 7400.section "An lsearch file is not an out-of-line list" "SECID77"
168e428f
PH
7401As will be described in the sections that follow, lookups can be used in lists
7402to provide indexed methods of checking list membership. There has been some
9b371988
PH
7403confusion about the way &(lsearch)& lookups work in lists. Because
7404an &(lsearch)& file contains plain text and is scanned sequentially, it is
168e428f 7405sometimes thought that it is allowed to contain wild cards and other kinds of
9b371988 7406non-constant pattern. This is not the case. The keys in an &(lsearch)& file are
168e428f
PH
7407always fixed strings, just as for any other single-key lookup type.
7408
7409If you want to use a file to contain wild-card patterns that form part of a
7410list, just give the file name on its own, without a search type, as described
db9452a9
PH
7411in the previous section. You could also use the &(wildlsearch)& or
7412&(nwildlsearch)&, but there is no advantage in doing this.
168e428f
PH
7413
7414
7415
7416
9b371988
PH
7417.section "Named lists" "SECTnamedlists"
7418.cindex "named lists"
7419.cindex "list" "named"
168e428f
PH
7420A list of domains, hosts, email addresses, or local parts can be given a name
7421which is then used to refer to the list elsewhere in the configuration. This is
7422particularly convenient if the same list is required in several different
7423places. It also allows lists to be given meaningful names, which can improve
7424the readability of the configuration. For example, it is conventional to define
9b371988 7425a domain list called &'local_domains'& for all the domains that are handled
168e428f 7426locally on a host, using a configuration line such as
9b371988
PH
7427.code
7428domainlist local_domains = localhost:my.dom.example
7429.endd
168e428f
PH
7430Named lists are referenced by giving their name preceded by a plus sign, so,
7431for example, a router that is intended to handle local domains would be
7432configured with the line
9b371988
PH
7433.code
7434domains = +local_domains
7435.endd
168e428f
PH
7436The first router in a configuration is often one that handles all domains
7437except the local ones, using a configuration with a negated item like this:
9b371988
PH
7438.code
7439dnslookup:
7440 driver = dnslookup
7441 domains = ! +local_domains
7442 transport = remote_smtp
7443 no_more
7444.endd
168e428f 7445The four kinds of named list are created by configuration lines starting with
9b371988 7446the words &%domainlist%&, &%hostlist%&, &%addresslist%&, or &%localpartlist%&,
168e428f
PH
7447respectively. Then there follows the name that you are defining, followed by an
7448equals sign and the list itself. For example:
9b371988
PH
7449.code
7450hostlist relay_hosts = 192.168.23.0/24 : my.friend.example
7451addresslist bad_senders = cdb;/etc/badsenders
7452.endd
168e428f 7453A named list may refer to other named lists:
9b371988
PH
7454.code
7455domainlist dom1 = first.example : second.example
7456domainlist dom2 = +dom1 : third.example
7457domainlist dom3 = fourth.example : +dom2 : fifth.example
7458.endd
7459&*Warning*&: If the last item in a referenced list is a negative one, the
168e428f
PH
7460effect may not be what you intended, because the negation does not propagate
7461out to the higher level. For example, consider:
9b371988
PH
7462.code
7463domainlist dom1 = !a.b
7464domainlist dom2 = +dom1 : *.b
7465.endd
7466The second list specifies &"either in the &%dom1%& list or &'*.b'&"&. The first
7467list specifies just &"not &'a.b'&"&, so the domain &'x.y'& matches it. That
7468means it matches the second list as well. The effect is not the same as
7469.code
7470domainlist dom2 = !a.b : *.b
7471.endd
7472where &'x.y'& does not match. It's best to avoid negation altogether in
168e428f
PH
7473referenced lists if you can.
7474
7475Named lists may have a performance advantage. When Exim is routing an
7476address or checking an incoming message, it caches the result of tests on named
7477lists. So, if you have a setting such as
9b371988
PH
7478.code
7479domains = +local_domains
7480.endd
168e428f
PH
7481on several of your routers
7482or in several ACL statements,
7483the actual test is done only for the first one. However, the caching works only
7484if there are no expansions within the list itself or any sublists that it
7485references. In other words, caching happens only for lists that are known to be
7486the same each time they are referenced.
7487
7488By default, there may be up to 16 named lists of each type. This limit can be
7489extended by changing a compile-time variable. The use of domain and host lists
7490is recommended for concepts such as local domains, relay domains, and relay
7491hosts. The default configuration is set up like this.
7492
7493
7494
f89d2485 7495.section "Named lists compared with macros" "SECID78"
9b371988
PH
7496.cindex "list" "named compared with macro"
7497.cindex "macro" "compared with named list"
168e428f
PH
7498At first sight, named lists might seem to be no different from macros in the
7499configuration file. However, macros are just textual substitutions. If you
7500write
9b371988
PH
7501.code
7502ALIST = host1 : host2
7503auth_advertise_hosts = !ALIST
7504.endd
168e428f 7505it probably won't do what you want, because that is exactly the same as
9b371988
PH
7506.code
7507auth_advertise_hosts = !host1 : host2
7508.endd
168e428f
PH
7509Notice that the second host name is not negated. However, if you use a host
7510list, and write
9b371988
PH
7511.code
7512hostlist alist = host1 : host2
7513auth_advertise_hosts = ! +alist
7514.endd
168e428f 7515the negation applies to the whole list, and so that is equivalent to
9b371988
PH
7516.code
7517auth_advertise_hosts = !host1 : !host2
7518.endd
168e428f
PH
7519
7520
f89d2485 7521.section "Named list caching" "SECID79"
9b371988
PH
7522.cindex "list" "caching of named"
7523.cindex "caching" "named lists"
168e428f
PH
7524While processing a message, Exim caches the result of checking a named list if
7525it is sure that the list is the same each time. In practice, this means that
9b371988 7526the cache operates only if the list contains no $ characters, which guarantees
168e428f
PH
7527that it will not change when it is expanded. Sometimes, however, you may have
7528an expanded list that you know will be the same each time within a given
7529message. For example:
9b371988 7530.code
168e428f
PH
7531domainlist special_domains = \
7532 ${lookup{$sender_host_address}cdb{/some/file}}
9b371988 7533.endd
168e428f
PH
7534This provides a list of domains that depends only on the sending host's IP
7535address. If this domain list is referenced a number of times (for example,
7536in several ACL lines, or in several routers) the result of the check is not
7537cached by default, because Exim does not know that it is going to be the
7538same list each time.
7539
9b371988 7540By appending &`_cache`& to &`domainlist`& you can tell Exim to go ahead and
168e428f 7541cache the result anyway. For example:
9b371988
PH
7542.code
7543domainlist_cache special_domains = ${lookup{...
7544.endd
168e428f
PH
7545If you do this, you should be absolutely sure that caching is going to do
7546the right thing in all cases. When in doubt, leave it out.
7547
7548
7549
9b371988
PH
7550.section "Domain lists" "SECTdomainlist"
7551.cindex "domain list" "patterns for"
7552.cindex "list" "domain list"
168e428f
PH
7553Domain lists contain patterns that are to be matched against a mail domain.
7554The following types of item may appear in domain lists:
7555
9b371988
PH
7556.ilist
7557.cindex "primary host name"
7558.cindex "host name" "matched in domain list"
0a4e3112 7559.oindex "&%primary_hostname%&"
9b371988
PH
7560.cindex "domain list" "matching primary host name"
7561.cindex "@ in a domain list"
168e428f 7562If a pattern consists of a single @ character, it matches the local host name,
9b371988
PH
7563as set by the &%primary_hostname%& option (or defaulted). This makes it
7564possible to use the same configuration file on several different hosts that
7565differ only in their names.
7566.next
7567.cindex "@[] in a domain list"
7568.cindex "domain list" "matching local IP interfaces"
7569.cindex "domain literal"
595028e4
PH
7570If a pattern consists of the string &`@[]`& it matches an IP address enclosed
7571in square brackets (as in an email address that contains a domain literal), but
7572only if that IP address is recognized as local for email routing purposes. The
7573&%local_interfaces%& and &%extra_local_interfaces%& options can be used to
7574control which of a host's several IP addresses are treated as local.
168e428f 7575In today's Internet, the use of domain literals is controversial.
9b371988
PH
7576.next
7577.cindex "@mx_any"
7578.cindex "@mx_primary"
7579.cindex "@mx_secondary"
7580.cindex "domain list" "matching MX pointers to local host"
7581If a pattern consists of the string &`@mx_any`& it matches any domain that
168e428f 7582has an MX record pointing to the local host or to any host that is listed in
0a4e3112 7583.oindex "&%hosts_treat_as_local%&"
9b371988 7584&%hosts_treat_as_local%&. The items &`@mx_primary`& and &`@mx_secondary`&
168e428f
PH
7585are similar, except that the first matches only when a primary MX target is the
7586local host, and the second only when no primary MX target is the local host,
9b371988
PH
7587but a secondary MX target is. &"Primary"& means an MX record with the lowest
7588preference value &-- there may of course be more than one of them.
7589
168e428f
PH
7590The MX lookup that takes place when matching a pattern of this type is
7591performed with the resolver options for widening names turned off. Thus, for
9b371988
PH
7592example, a single-component domain will &'not'& be expanded by adding the
7593resolver's default domain. See the &%qualify_single%& and &%search_parents%&
7594options of the &(dnslookup)& router for a discussion of domain widening.
7595
168e428f 7596Sometimes you may want to ignore certain IP addresses when using one of these
9b371988
PH
7597patterns. You can specify this by following the pattern with &`/ignore=`&<&'ip
7598list'&>, where <&'ip list'&> is a list of IP addresses. These addresses are
7599ignored when processing the pattern (compare the &%ignore_target_hosts%& option
168e428f 7600on a router). For example:
9b371988
PH
7601.code
7602domains = @mx_any/ignore=127.0.0.1
7603.endd
168e428f
PH
7604This example matches any domain that has an MX record pointing to one of
7605the local host's IP addresses other than 127.0.0.1.
9b371988 7606
168e428f
PH
7607The list of IP addresses is in fact processed by the same code that processes
7608host lists, so it may contain CIDR-coded network specifications and it may also
7609contain negative items.
9b371988 7610
168e428f
PH
7611Because the list of IP addresses is a sublist within a domain list, you have to
7612be careful about delimiters if there is more than one address. Like any other
7613list, the default delimiter can be changed. Thus, you might have:
9b371988 7614.code
168e428f
PH
7615domains = @mx_any/ignore=<;127.0.0.1;0.0.0.0 : \
7616 an.other.domain : ...
9b371988 7617.endd
168e428f
PH
7618so that the sublist uses semicolons for delimiters. When IPv6 addresses are
7619involved, it is easiest to change the delimiter for the main list as well:
9b371988 7620.code
168e428f
PH
7621domains = <? @mx_any/ignore=<;127.0.0.1;::1 ? \
7622 an.other.domain ? ...
9b371988
PH
7623.endd
7624.next
7625.cindex "asterisk" "in domain list"
7626.cindex "domain list" "asterisk in"
7627.cindex "domain list" "matching &""ends with""&"
168e428f 7628If a pattern starts with an asterisk, the remaining characters of the pattern
9b371988 7629are compared with the terminating characters of the domain. The use of &"*"& in
168e428f
PH
7630domain lists differs from its use in partial matching lookups. In a domain
7631list, the character following the asterisk need not be a dot, whereas partial
7632matching works only in terms of dot-separated components. For example, a domain
9b371988
PH
7633list item such as &`*key.ex`& matches &'donkey.ex'& as well as
7634&'cipher.key.ex'&.
168e428f 7635
9b371988
PH
7636.next
7637.cindex "regular expressions" "in domain list"
7638.cindex "domain list" "matching regular expression"
168e428f
PH
7639If a pattern starts with a circumflex character, it is treated as a regular
7640expression, and matched against the domain using a regular expression matching
7641function. The circumflex is treated as part of the regular expression.
595028e4
PH
7642Email domains are case-independent, so this regular expression match is by
7643default case-independent, but you can make it case-dependent by starting it
7644with &`(?-i)`&. References to descriptions of the syntax of regular expressions
7645are given in chapter &<<CHAPregexp>>&.
168e428f 7646
9b371988
PH
7647&*Warning*&: Because domain lists are expanded before being processed, you
7648must escape any backslash and dollar characters in the regular expression, or
7649use the special &`\N`& sequence (see chapter &<<CHAPexpand>>&) to specify that
7650it is not to be expanded (unless you really do want to build a regular
7651expression by expansion, of course).
7652.next
7653.cindex "lookup" "in domain list"
7654.cindex "domain list" "matching by lookup"
168e428f 7655If a pattern starts with the name of a single-key lookup type followed by a
9b371988 7656semicolon (for example, &"dbm;"& or &"lsearch;"&), the remainder of the pattern
168e428f 7657must be a file name in a suitable format for the lookup type. For example, for
9b371988
PH
7658&"cdb;"& it must be an absolute path:
7659.code
7660domains = cdb;/etc/mail/local_domains.cdb
7661.endd
168e428f
PH
7662The appropriate type of lookup is done on the file using the domain name as the
7663key. In most cases, the data that is looked up is not used; Exim is interested
7664only in whether or not the key is present in the file. However, when a lookup
9b371988
PH
7665is used for the &%domains%& option on a router
7666or a &%domains%& condition in an ACL statement, the data is preserved in the
7667&$domain_data$& variable and can be referred to in other router options or
168e428f
PH
7668other statements in the same ACL.
7669
9b371988
PH
7670.next
7671Any of the single-key lookup type names may be preceded by
7672&`partial`&<&'n'&>&`-`&, where the <&'n'&> is optional, for example,
7673.code
7674domains = partial-dbm;/partial/domains
7675.endd
168e428f 7676This causes partial matching logic to be invoked; a description of how this
9b371988 7677works is given in section &<<SECTpartiallookup>>&.
168e428f 7678
9b371988
PH
7679.next
7680.cindex "asterisk" "in lookup type"
168e428f
PH
7681Any of the single-key lookup types may be followed by an asterisk. This causes
7682a default lookup for a key consisting of a single asterisk to be done if the
7683original lookup fails. This is not a useful feature when using a domain list to
7684select particular domains (because any domain would match), but it might have
9b371988 7685value if the result of the lookup is being used via the &$domain_data$&
168e428f 7686expansion variable.
9b371988
PH
7687.next
7688If the pattern starts with the name of a query-style lookup type followed by a
7689semicolon (for example, &"nisplus;"& or &"ldap;"&), the remainder of the
7690pattern must be an appropriate query for the lookup type, as described in
7691chapter &<<CHAPfdlookup>>&. For example:
7692.code
168e428f
PH
7693hold_domains = mysql;select domain from holdlist \
7694 where domain = '$domain';
9b371988 7695.endd
168e428f
PH
7696In most cases, the data that is looked up is not used (so for an SQL query, for
7697example, it doesn't matter what field you select). Exim is interested only in
7698whether or not the query succeeds. However, when a lookup is used for the
9b371988 7699&%domains%& option on a router, the data is preserved in the &$domain_data$&
168e428f 7700variable and can be referred to in other options.
9b371988
PH
7701.next
7702.cindex "domain list" "matching literal domain name"
168e428f
PH
7703If none of the above cases apply, a caseless textual comparison is made
7704between the pattern and the domain.
9b371988 7705.endlist
168e428f
PH
7706
7707Here is an example that uses several different kinds of pattern:
9b371988 7708.code
168e428f
PH
7709domainlist funny_domains = \
7710 @ : \
7711 lib.unseen.edu : \
7712 *.foundation.fict.example : \
7713 \N^[1-2]\d{3}\.fict\.example$\N : \
7714 partial-dbm;/opt/data/penguin/book : \
7715 nis;domains.byname : \
7716 nisplus;[name=$domain,status=local],domains.org_dir
9b371988 7717.endd
168e428f
PH
7718There are obvious processing trade-offs among the various matching modes. Using
7719an asterisk is faster than a regular expression, and listing a few names
7720explicitly probably is too. The use of a file or database lookup is expensive,
7721but may be the only option if hundreds of names are required. Because the
7722patterns are tested in order, it makes sense to put the most commonly matched
7723patterns earlier.
7724
7725
7726
9b371988
PH
7727.section "Host lists" "SECThostlist"
7728.cindex "host list" "patterns in"
7729.cindex "list" "host list"
168e428f
PH
7730Host lists are used to control what remote hosts are allowed to do. For
7731example, some hosts may be allowed to use the local host as a relay, and some
7732may be permitted to use the SMTP ETRN command. Hosts can be identified in
7733two different ways, by name or by IP address. In a host list, some types of
7734pattern are matched to a host name, and some are matched to an IP address.
7735You need to be particularly careful with this when single-key lookups are
7736involved, to ensure that the right value is being used as the key.
7737
7738
f89d2485 7739.section "Special host list patterns" "SECID80"
9b371988
PH
7740.cindex "empty item in hosts list"
7741.cindex "host list" "empty string in"
168e428f
PH
7742If a host list item is the empty string, it matches only when no remote host is
7743involved. This is the case when a message is being received from a local
7744process using SMTP on the standard input, that is, when a TCP/IP connection is
7745not used.
7746
9b371988
PH
7747.cindex "asterisk" "in host list"
7748The special pattern &"*"& in a host list matches any host or no host. Neither
168e428f
PH
7749the IP address nor the name is actually inspected.
7750
7751
7752
9b371988
PH
7753.section "Host list patterns that match by IP address" "SECThoslispatip"
7754.cindex "host list" "matching IP addresses"
168e428f
PH
7755If an IPv4 host calls an IPv6 host and the call is accepted on an IPv6 socket,
7756the incoming address actually appears in the IPv6 host as
9b371988 7757&`::ffff:`&<&'v4address'&>. When such an address is tested against a host
168e428f
PH
7758list, it is converted into a traditional IPv4 address first. (Not all operating
7759systems accept IPv4 calls on IPv6 sockets, as there have been some security
7760concerns.)
7761
7762The following types of pattern in a host list check the remote host by
7763inspecting its IP address:
7764
9b371988
PH
7765.ilist
7766If the pattern is a plain domain name (not a regular expression, not starting
7767with *, not a lookup of any kind), Exim calls the operating system function
168e428f 7768to find the associated IP address(es). Exim uses the newer
9b371988 7769&[getipnodebyname()]& function when available, otherwise &[gethostbyname()]&.
168e428f
PH
7770This typically causes a forward DNS lookup of the name. The result is compared
7771with the IP address of the subject host.
9b371988 7772
168e428f
PH
7773If there is a temporary problem (such as a DNS timeout) with the host name
7774lookup, a temporary error occurs. For example, if the list is being used in an
9b371988
PH
7775ACL condition, the ACL gives a &"defer"& response, usually leading to a
7776temporary SMTP error code. If no IP address can be found for the host name,
7777what happens is described in section &<<SECTbehipnot>>& below.
168e428f 7778
9b371988
PH
7779.next
7780.cindex "@ in a host list"
7781If the pattern is &"@"&, the primary host name is substituted and used as a
168e428f
PH
7782domain name, as just described.
7783
9b371988
PH
7784.next
7785If the pattern is an IP address, it is matched against the IP address of the
7786subject host. IPv4 addresses are given in the normal &"dotted-quad"& notation.
168e428f
PH
7787IPv6 addresses can be given in colon-separated format, but the colons have to
7788be doubled so as not to be taken as item separators when the default list
7789separator is used. IPv6 addresses are recognized even when Exim is compiled
7790without IPv6 support. This means that if they appear in a host list on an
7791IPv4-only host, Exim will not treat them as host names. They are just addresses
7792that can never match a client host.
7793
9b371988
PH
7794.next
7795.cindex "@[] in a host list"
7796If the pattern is &"@[]"&, it matches the IP address of any IP interface on
168e428f
PH
7797the local host. For example, if the local host is an IPv4 host with one
7798interface address 10.45.23.56, these two ACL statements have the same effect:
9b371988
PH
7799.code
7800accept hosts = 127.0.0.1 : 10.45.23.56
7801accept hosts = @[]
7802.endd
7803.next
7804.cindex "CIDR notation"
168e428f
PH
7805If the pattern is an IP address followed by a slash and a mask length (for
7806example 10.11.42.0/24), it is matched against the IP address of the subject
7807host under the given mask. This allows, an entire network of hosts to be
7808included (or excluded) by a single item. The mask uses CIDR notation; it
7809specifies the number of address bits that must match, starting from the most
7810significant end of the address.
9b371988
PH
7811
7812&*Note*&: The mask is &'not'& a count of addresses, nor is it the high number
168e428f
PH
7813of a range of addresses. It is the number of bits in the network portion of the
7814address. The above example specifies a 24-bit netmask, so it matches all 256
7815addresses in the 10.11.42.0 network. An item such as
9b371988
PH
7816.code
7817192.168.23.236/31
7818.endd
168e428f
PH
7819matches just two addresses, 192.168.23.236 and 192.168.23.237. A mask value of
782032 for an IPv4 address is the same as no mask at all; just a single address
7821matches.
9b371988 7822
168e428f 7823Here is another example which shows an IPv4 and an IPv6 network:
9b371988 7824.code
168e428f
PH
7825recipient_unqualified_hosts = 192.168.0.0/16: \
7826 3ffe::ffff::836f::::/48
9b371988 7827.endd
168e428f
PH
7828The doubling of list separator characters applies only when these items
7829appear inline in a host list. It is not required when indirecting via a file.
9b371988
PH
7830For example:
7831.code
7832recipient_unqualified_hosts = /opt/exim/unqualnets
7833.endd
168e428f 7834could make use of a file containing
9b371988
PH
7835.code
7836172.16.0.0/12
78373ffe:ffff:836f::/48
7838.endd
168e428f
PH
7839to have exactly the same effect as the previous example. When listing IPv6
7840addresses inline, it is usually more convenient to use the facility for
7841changing separator characters. This list contains the same two networks:
9b371988 7842.code
168e428f
PH
7843recipient_unqualified_hosts = <; 172.16.0.0/12; \
7844 3ffe:ffff:836f::/48
9b371988
PH
7845.endd
7846The separator is changed to semicolon by the leading &"<;"& at the start of the
168e428f 7847list.
9b371988 7848.endlist
168e428f
PH
7849
7850
7851
9b371988
PH
7852.section "Host list patterns for single-key lookups by host address" &&&
7853 "SECThoslispatsikey"
7854.cindex "host list" "lookup of IP address"
168e428f
PH
7855When a host is to be identified by a single-key lookup of its complete IP
7856address, the pattern takes this form:
9b371988
PH
7857.display
7858&`net-<`&&'single-key-search-type'&&`>;<`&&'search-data'&&`>`&
7859.endd
168e428f 7860For example:
9b371988
PH
7861.code
7862hosts_lookup = net-cdb;/hosts-by-ip.db
7863.endd
168e428f
PH
7864The text form of the IP address of the subject host is used as the lookup key.
7865IPv6 addresses are converted to an unabbreviated form, using lower case
7866letters, with dots as separators because colon is the key terminator in
9b371988 7867&(lsearch)& files. [Colons can in fact be used in keys in &(lsearch)& files by
168e428f
PH
7868quoting the keys, but this is a facility that was added later.] The data
7869returned by the lookup is not used.
7870
9b371988
PH
7871.cindex "IP address" "masking"
7872.cindex "host list" "masked IP address"
168e428f
PH
7873Single-key lookups can also be performed using masked IP addresses, using
7874patterns of this form:
9b371988
PH
7875.display
7876&`net<`&&'number'&&`>-<`&&'single-key-search-type'&&`>;<`&&'search-data'&&`>`&
7877.endd
168e428f 7878For example:
9b371988
PH
7879.code
7880net24-dbm;/networks.db
7881.endd
7882The IP address of the subject host is masked using <&'number'&> as the mask
168e428f
PH
7883length. A textual string is constructed from the masked value, followed by the
7884mask, and this is used as the lookup key. For example, if the host's IP address
7885is 192.168.34.6, the key that is looked up for the above example is
595028e4
PH
7886&"192.168.34.0/24"&.
7887
595028e4
PH
7888When an IPv6 address is converted to a string, dots are normally used instead
7889of colons, so that keys in &(lsearch)& files need not contain colons (which
7890terminate &(lsearch)& keys). This was implemented some time before the ability
7891to quote keys was made available in &(lsearch)& files. However, the more
7892recently implemented &(iplsearch)& files do require colons in IPv6 keys
7893(notated using the quoting facility) so as to distinguish them from IPv4 keys.
7894For this reason, when the lookup type is &(iplsearch)&, IPv6 addresses are
7895converted using colons and not dots. In all cases, full, unabbreviated IPv6
168e428f
PH
7896addresses are always used.
7897
595028e4
PH
7898Ideally, it would be nice to tidy up this anomalous situation by changing to
7899colons in all cases, given that quoting is now available for &(lsearch)&.
7900However, this would be an incompatible change that might break some existing
7901configurations.
595028e4 7902
f89d2485
PH
7903&*Warning*&: Specifying &%net32-%& (for an IPv4 address) or &%net128-%& (for an
7904IPv6 address) is not the same as specifying just &%net-%& without a number. In
168e428f
PH
7905the former case the key strings include the mask value, whereas in the latter
7906case the IP address is used on its own.
7907
7908
7909
9b371988
PH
7910.section "Host list patterns that match by host name" "SECThoslispatnam"
7911.cindex "host" "lookup failures"
7912.cindex "unknown host name"
7913.cindex "host list" "matching host name"
168e428f
PH
7914There are several types of pattern that require Exim to know the name of the
7915remote host. These are either wildcard patterns or lookups by name. (If a
7916complete hostname is given without any wildcarding, it is used to find an IP
9b371988
PH
7917address to match against, as described in the section &<<SECThoslispatip>>&
7918above.)
168e428f
PH
7919
7920If the remote host name is not already known when Exim encounters one of these
7921patterns, it has to be found from the IP address.
7922Although many sites on the Internet are conscientious about maintaining reverse
7923DNS data for their hosts, there are also many that do not do this.
7924Consequently, a name cannot always be found, and this may lead to unwanted
7925effects. Take care when configuring host lists with wildcarded name patterns.
7926Consider what will happen if a name cannot be found.
7927
7928Because of the problems of determining host names from IP addresses, matching
7929against host names is not as common as matching against IP addresses.
7930
7931By default, in order to find a host name, Exim first does a reverse DNS lookup;
9b371988
PH
7932if no name is found in the DNS, the system function (&[gethostbyaddr()]& or
7933&[getipnodebyaddr()]& if available) is tried. The order in which these lookups
ad268134
PH
7934are done can be changed by setting the &%host_lookup_order%& option. For
7935security, once Exim has found one or more names, it looks up the IP addresses
7936for these names and compares them with the IP address that it started with.
7937Only those names whose IP addresses match are accepted. Any other names are
7938discarded. If no names are left, Exim behaves as if the host name cannot be
7939found. In the most common case there is only one name and one IP address.
168e428f
PH
7940
7941There are some options that control what happens if a host name cannot be
9b371988 7942found. These are described in section &<<SECTbehipnot>>& below.
168e428f 7943
9b371988
PH
7944.cindex "host" "alias for"
7945.cindex "alias for host"
168e428f
PH
7946As a result of aliasing, hosts may have more than one name. When processing any
7947of the following types of pattern, all the host's names are checked:
7948
9b371988
PH
7949.ilist
7950.cindex "asterisk" "in host list"
7951If a pattern starts with &"*"& the remainder of the item must match the end of
7952the host name. For example, &`*.b.c`& matches all hosts whose names end in
7953&'.b.c'&. This special simple form is provided because this is a very common
168e428f
PH
7954requirement. Other kinds of wildcarding require the use of a regular
7955expression.
9b371988
PH
7956.next
7957.cindex "regular expressions" "in host list"
7958.cindex "host list" "regular expression in"
7959If the item starts with &"^"& it is taken to be a regular expression which is
595028e4
PH
7960matched against the host name. Host names are case-independent, so this regular
7961expression match is by default case-independent, but you can make it
7962case-dependent by starting it with &`(?-i)`&. References to descriptions of the
7963syntax of regular expressions are given in chapter &<<CHAPregexp>>&. For
7964example,
9b371988
PH
7965.code
7966^(a|b)\.c\.d$
7967.endd
7968is a regular expression that matches either of the two hosts &'a.c.d'& or
7969&'b.c.d'&. When a regular expression is used in a host list, you must take care
168e428f 7970that backslash and dollar characters are not misinterpreted as part of the
9b371988 7971string expansion. The simplest way to do this is to use &`\N`& to mark that
168e428f 7972part of the string as non-expandable. For example:
9b371988
PH
7973.code
7974sender_unqualified_hosts = \N^(a|b)\.c\.d$\N : ....
7975.endd
7976&*Warning*&: If you want to match a complete host name, you must include the
7977&`$`& terminating metacharacter in the regular expression, as in the above
168e428f
PH
7978example. Without it, a match at the start of the host name is all that is
7979required.
9b371988 7980.endlist
168e428f
PH
7981
7982
7983
7984
9b371988 7985.section "Behaviour when an IP address or name cannot be found" "SECTbehipnot"
595028e4 7986.cindex "host" "lookup failures, permanent"
168e428f 7987While processing a host list, Exim may need to look up an IP address from a
9b371988
PH
7988name (see section &<<SECThoslispatip>>&), or it may need to look up a host name
7989from an IP address (see section &<<SECThoslispatnam>>&). In either case, the
168e428f
PH
7990behaviour when it fails to find the information it is seeking is the same.
7991
595028e4
PH
7992&*Note*&: This section applies to permanent lookup failures. It does &'not'&
7993apply to temporary DNS errors, whose handling is described in the next section.
595028e4 7994
9b371988
PH
7995.cindex "&`+include_unknown`&"
7996.cindex "&`+ignore_unknown`&"
168e428f
PH
7997By default, Exim behaves as if the host does not match the list. This may not
7998always be what you want to happen. To change Exim's behaviour, the special
9b371988
PH
7999items &`+include_unknown`& or &`+ignore_unknown`& may appear in the list (at
8000top level &-- they are not recognized in an indirected file).
168e428f 8001
9b371988
PH
8002.ilist
8003If any item that follows &`+include_unknown`& requires information that
168e428f 8004cannot found, Exim behaves as if the host does match the list. For example,
9b371988
PH
8005.code
8006host_reject_connection = +include_unknown:*.enemy.ex
8007.endd
8008rejects connections from any host whose name matches &`*.enemy.ex`&, and also
168e428f
PH
8009any hosts whose name it cannot find.
8010
9b371988
PH
8011.next
8012If any item that follows &`+ignore_unknown`& requires information that cannot
168e428f
PH
8013be found, Exim ignores that item and proceeds to the rest of the list. For
8014example:
9b371988 8015.code
168e428f
PH
8016accept hosts = +ignore_unknown : friend.example : \
8017 192.168.4.5
9b371988
PH
8018.endd
8019accepts from any host whose name is &'friend.example'& and from 192.168.4.5,
8020whether or not its host name can be found. Without &`+ignore_unknown`&, if no
168e428f 8021name can be found for 192.168.4.5, it is rejected.
9b371988 8022.endlist
168e428f 8023
9b371988 8024Both &`+include_unknown`& and &`+ignore_unknown`& may appear in the same
168e428f
PH
8025list. The effect of each one lasts until the next, or until the end of the
8026list.
8027
595028e4 8028
595028e4
PH
8029.section "Temporary DNS errors when looking up host information" &&&
8030 "SECTtemdnserr"
8031.cindex "host" "lookup failures, temporary"
8032.cindex "&`+include_defer`&"
8033.cindex "&`+ignore_defer`&"
8034A temporary DNS lookup failure normally causes a defer action (except when
8035&%dns_again_means_nonexist%& converts it into a permanent error). However,
8036host lists can include &`+ignore_defer`& and &`+include_defer`&, analagous to
8037&`+ignore_unknown`& and &`+include_unknown`&, as described in the previous
8038section. These options should be used with care, probably only in non-critical
8039host lists such as whitelists.
168e428f
PH
8040
8041
8042
9b371988
PH
8043.section "Host list patterns for single-key lookups by host name" &&&
8044 "SECThoslispatnamsk"
9b371988
PH
8045.cindex "unknown host name"
8046.cindex "host list" "matching host name"
168e428f 8047If a pattern is of the form
9b371988
PH
8048.display
8049<&'single-key-search-type'&>;<&'search-data'&>
8050.endd
168e428f 8051for example
9b371988
PH
8052.code
8053dbm;/host/accept/list
8054.endd
f89d2485 8055a single-key lookup is performed, using the host name as its key. If the
168e428f
PH
8056lookup succeeds, the host matches the item. The actual data that is looked up
8057is not used.
8058
9b371988 8059&*Reminder*&: With this kind of pattern, you must have host &'names'& as
168e428f 8060keys in the file, not IP addresses. If you want to do lookups based on IP
9b371988
PH
8061addresses, you must precede the search type with &"net-"& (see section
8062&<<SECThoslispatsikey>>&). There is, however, no reason why you could not use
8063two items in the same list, one doing an address lookup and one doing a name
168e428f
PH
8064lookup, both using the same file.
8065
8066
8067
f89d2485 8068.section "Host list patterns for query-style lookups" "SECID81"
168e428f 8069If a pattern is of the form
9b371988
PH
8070.display
8071<&'query-style-search-type'&>;<&'query'&>
8072.endd
168e428f 8073the query is obeyed, and if it succeeds, the host matches the item. The actual
9b371988
PH
8074data that is looked up is not used. The variables &$sender_host_address$& and
8075&$sender_host_name$& can be used in the query. For example:
8076.code
168e428f
PH
8077hosts_lookup = pgsql;\
8078 select ip from hostlist where ip='$sender_host_address'
9b371988
PH
8079.endd
8080The value of &$sender_host_address$& for an IPv6 address contains colons. You
8081can use the &%sg%& expansion item to change this if you need to. If you want to
8082use masked IP addresses in database queries, you can use the &%mask%& expansion
168e428f
PH
8083operator.
8084
9b371988 8085If the query contains a reference to &$sender_host_name$&, Exim automatically
168e428f 8086looks up the host name if has not already done so. (See section
9b371988 8087&<<SECThoslispatnam>>& for comments on finding host names.)
168e428f
PH
8088
8089Historical note: prior to release 4.30, Exim would always attempt to find a
8090host name before running the query, unless the search type was preceded by
9b371988 8091&`net-`&. This is no longer the case. For backwards compatibility, &`net-`& is
168e428f 8092still recognized for query-style lookups, but its presence or absence has no
9b371988
PH
8093effect. (Of course, for single-key lookups, &`net-`& &'is'& important.
8094See section &<<SECThoslispatsikey>>&.)
168e428f
PH
8095
8096
8097
9b371988
PH
8098.section "Mixing wildcarded host names and addresses in host lists" &&&
8099 "SECTmixwilhos"
8100.cindex "host list" "mixing names and addresses in"
168e428f
PH
8101If you have name lookups or wildcarded host names and IP addresses in the same
8102host list, you should normally put the IP addresses first. For example, in an
8103ACL you could have:
9b371988
PH
8104.code
8105accept hosts = 10.9.8.7 : *.friend.example
8106.endd
168e428f
PH
8107The reason for this lies in the left-to-right way that Exim processes lists.
8108It can test IP addresses without doing any DNS lookups, but when it reaches an
8109item that requires a host name, it fails if it cannot find a host name to
8110compare with the pattern. If the above list is given in the opposite order, the
9b371988 8111&%accept%& statement fails for a host whose name cannot be found, even if its
168e428f
PH
8112IP address is 10.9.8.7.
8113
8114If you really do want to do the name check first, and still recognize the IP
8115address, you can rewrite the ACL like this:
9b371988
PH
8116.code
8117accept hosts = *.friend.example
8118accept hosts = 10.9.8.7
8119.endd
8120If the first &%accept%& fails, Exim goes on to try the second one. See chapter
8121&<<CHAPACL>>& for details of ACLs.
168e428f
PH
8122
8123
8124
8125
8126
9b371988
PH
8127.section "Address lists" "SECTaddresslist"
8128.cindex "list" "address list"
8129.cindex "address list" "empty item"
8130.cindex "address list" "patterns"
168e428f
PH
8131Address lists contain patterns that are matched against mail addresses. There
8132is one special case to be considered: the sender address of a bounce message is
8133always empty. You can test for this by providing an empty item in an address
8134list. For example, you can set up a router to process bounce messages by
8135using this option setting:
9b371988
PH
8136.code
8137senders = :
8138.endd
168e428f
PH
8139The presence of the colon creates an empty item. If you do not provide any
8140data, the list is empty and matches nothing. The empty sender can also be
8141detected by a regular expression that matches an empty string,
9b371988 8142and by a query-style lookup that succeeds when &$sender_address$& is empty.
168e428f 8143
4f578862
PH
8144Non-empty items in an address list can be straightforward email addresses. For
8145example:
8146.code
8147senders = jbc@askone.example : hs@anacreon.example
8148.endd
8149A certain amount of wildcarding is permitted. If a pattern contains an @
8150character, but is not a regular expression and does not begin with a
8151semicolon-terminated lookup type (described below), the local part of the
8152subject address is compared with the local part of the pattern, which may start
8153with an asterisk. If the local parts match, the domain is checked in exactly
8154the same way as for a pattern in a domain list. For example, the domain can be
8155wildcarded, refer to a named list, or be a lookup:
8156.code
8157deny senders = *@*.spamming.site:\
8158 *@+hostile_domains:\
8159 bozo@partial-lsearch;/list/of/dodgy/sites:\
8160 *@dbm;/bad/domains.db
8161.endd
8162.cindex "local part" "starting with !"
8163.cindex "address list" "local part starting with !"
8164If a local part that begins with an exclamation mark is required, it has to be
8165specified using a regular expression, because otherwise the exclamation mark is
8166treated as a sign of negation, as is standard in lists.
8167
8168If a non-empty pattern that is not a regular expression or a lookup does not
8169contain an @ character, it is matched against the domain part of the subject
8170address. The only two formats that are recognized this way are a literal
8171domain, or a domain pattern that starts with *. In both these cases, the effect
8172is the same as if &`*@`& preceded the pattern. For example:
8173.code
8174deny senders = enemy.domain : *.enemy.domain
8175.endd
168e428f 8176
4f578862
PH
8177The following kinds of more complicated address list pattern can match any
8178address, including the empty address that is characteristic of bounce message
8179senders:
168e428f 8180
4f578862 8181.ilist
9b371988
PH
8182.cindex "regular expressions" "in address list"
8183.cindex "address list" "regular expression in"
8184If (after expansion) a pattern starts with &"^"&, a regular expression match is
168e428f
PH
8185done against the complete address, with the pattern as the regular expression.
8186You must take care that backslash and dollar characters are not misinterpreted
9b371988 8187as part of the string expansion. The simplest way to do this is to use &`\N`&
168e428f 8188to mark that part of the string as non-expandable. For example:
9b371988 8189.code
4f578862
PH
8190deny senders = \N^.*this.*@example\.com$\N : \
8191 \N^\d{8}.+@spamhaus.example$\N : ...
9b371988 8192.endd
4f578862
PH
8193The &`\N`& sequences are removed by the expansion, so these items do indeed
8194start with &"^"& by the time they are being interpreted as address patterns.
9b371988
PH
8195
8196.next
8197.cindex "address list" "lookup for complete address"
168e428f
PH
8198Complete addresses can be looked up by using a pattern that starts with a
8199lookup type terminated by a semicolon, followed by the data for the lookup. For
8200example:
9b371988 8201.code
168e428f
PH
8202deny senders = cdb;/etc/blocked.senders : \
8203 mysql;select address from blocked where \
8204 address='${quote_mysql:$sender_address}'
9b371988 8205.endd
168e428f
PH
8206Both query-style and single-key lookup types can be used. For a single-key
8207lookup type, Exim uses the complete address as the key. However, empty keys are
8208not supported for single-key lookups, so a match against the empty address
8209always fails. This restriction does not apply to query-style lookups.
9b371988
PH
8210
8211Partial matching for single-key lookups (section &<<SECTpartiallookup>>&)
8212cannot be used, and is ignored if specified, with an entry being written to the
8213panic log.
8214.cindex "*@ with single-key lookup"
168e428f 8215However, you can configure lookup defaults, as described in section
9b371988 8216&<<SECTdefaultvaluelookups>>&, but this is useful only for the &"*@"& type of
168e428f 8217default. For example, with this lookup:
9b371988
PH
8218.code
8219accept senders = lsearch*@;/some/file
8220.endd
168e428f 8221the file could contains lines like this:
9b371988
PH
8222.code
8223user1@domain1.example
8224*@domain2.example
8225.endd
8226and for the sender address &'nimrod@jaeger.example'&, the sequence of keys
168e428f 8227that are tried is:
9b371988
PH
8228.code
8229nimrod@jaeger.example
8230*@jaeger.example
8231*
8232.endd
8233&*Warning 1*&: Do not include a line keyed by &"*"& in the file, because that
168e428f 8234would mean that every address matches, thus rendering the test useless.
168e428f 8235
9b371988
PH
8236&*Warning 2*&: Do not confuse these two kinds of item:
8237.code
8238deny recipients = dbm*@;/some/file
8239deny recipients = *@dbm;/some/file
8240.endd
168e428f
PH
8241The first does a whole address lookup, with defaulting, as just described,
8242because it starts with a lookup type. The second matches the local part and
8243domain independently, as described in a bullet point below.
9b371988 8244.endlist
168e428f
PH
8245
8246
8247The following kinds of address list pattern can match only non-empty addresses.
8248If the subject address is empty, a match against any of these pattern types
8249always fails.
8250
8251
9b371988
PH
8252.ilist
8253.cindex "@@ with single-key lookup"
8254.cindex "address list" "@@ lookup type"
8255.cindex "address list" "split local part and domain"
8256If a pattern starts with &"@@"& followed by a single-key lookup item
8257(for example, &`@@lsearch;/some/file`&), the address that is being checked is
168e428f
PH
8258split into a local part and a domain. The domain is looked up in the file. If
8259it is not found, there is no match. If it is found, the data that is looked up
8260from the file is treated as a colon-separated list of local part patterns, each
8261of which is matched against the subject local part in turn.
168e428f 8262
9b371988
PH
8263.cindex "asterisk" "in address list"
8264The lookup may be a partial one, and/or one involving a search for a default
8265keyed by &"*"& (see section &<<SECTdefaultvaluelookups>>&). The local part
8266patterns that are looked up can be regular expressions or begin with &"*"&, or
8267even be further lookups. They may also be independently negated. For example,
8268with
8269.code
8270deny senders = @@dbm;/etc/reject-by-domain
8271.endd
168e428f 8272the data from which the DBM file is built could contain lines like
9b371988
PH
8273.code
8274baddomain.com: !postmaster : *
8275.endd
8276to reject all senders except &%postmaster%& from that domain.
168e428f 8277
9b371988 8278.cindex "local part" "starting with !"
168e428f 8279If a local part that actually begins with an exclamation mark is required, it
9b371988 8280has to be specified using a regular expression. In &(lsearch)& files, an entry
168e428f
PH
8281may be split over several lines by indenting the second and subsequent lines,
8282but the separating colon must still be included at line breaks. White space
8283surrounding the colons is ignored. For example:
9b371988
PH
8284.code
8285aol.com: spammer1 : spammer2 : ^[0-9]+$ :
8286spammer3 : spammer4
8287.endd
168e428f
PH
8288As in all colon-separated lists in Exim, a colon can be included in an item by
8289doubling.
9b371988 8290
168e428f
PH
8291If the last item in the list starts with a right angle-bracket, the remainder
8292of the item is taken as a new key to look up in order to obtain a continuation
8293list of local parts. The new key can be any sequence of characters. Thus one
8294might have entries like
9b371988
PH
8295.code
8296aol.com: spammer1 : spammer 2 : >*
8297xyz.com: spammer3 : >*
8298*: ^\d{8}$
8299.endd
8300in a file that was searched with &%@@dbm*%&, to specify a match for 8-digit
168e428f
PH
8301local parts for all domains, in addition to the specific local parts listed for
8302each domain. Of course, using this feature costs another lookup each time a
8303chain is followed, but the effort needed to maintain the data is reduced.
9b371988
PH
8304
8305.cindex "loop" "in lookups"
168e428f
PH
8306It is possible to construct loops using this facility, and in order to catch
8307them, the chains may be no more than fifty items long.
8308
9b371988
PH
8309.next
8310The @@<&'lookup'&> style of item can also be used with a query-style
168e428f
PH
8311lookup, but in this case, the chaining facility is not available. The lookup
8312can only return a single list of local parts.
9b371988 8313.endlist
168e428f 8314
9b371988 8315&*Warning*&: There is an important difference between the address list items
168e428f 8316in these two examples:
9b371988
PH
8317.code
8318senders = +my_list
8319senders = *@+my_list
8320.endd
8321In the first one, &`my_list`& is a named address list, whereas in the second
168e428f
PH
8322example it is a named domain list.
8323
8324
8325
8326
9b371988
PH
8327.section "Case of letters in address lists" "SECTcasletadd"
8328.cindex "case of local parts"
8329.cindex "address list" "case forcing"
8330.cindex "case forcing in address lists"
168e428f 8331Domains in email addresses are always handled caselessly, but for local parts
9b371988
PH
8332case may be significant on some systems (see &%caseful_local_part%& for how
8333Exim deals with this when routing addresses). However, RFC 2505 (&'Anti-Spam
8334Recommendations for SMTP MTAs'&) suggests that matching of addresses to
8335blocking lists should be done in a case-independent manner. Since most address
8336lists in Exim are used for this kind of control, Exim attempts to do this by
8337default.
168e428f
PH
8338
8339The domain portion of an address is always lowercased before matching it to an
8340address list. The local part is lowercased by default, and any string
8341comparisons that take place are done caselessly. This means that the data in
8342the address list itself, in files included as plain file names, and in any file
9b371988
PH
8343that is looked up using the &"@@"& mechanism, can be in any case. However, the
8344keys in files that are looked up by a search type other than &(lsearch)& (which
168e428f
PH
8345works caselessly) must be in lower case, because these lookups are not
8346case-independent.
8347
9b371988 8348.cindex "&`+caseful`&"
168e428f 8349To allow for the possibility of caseful address list matching, if an item in
9b371988 8350an address list is the string &"+caseful"&, the original case of the local
168e428f
PH
8351part is restored for any comparisons that follow, and string comparisons are no
8352longer case-independent. This does not affect the domain, which remains in
8353lower case. However, although independent matches on the domain alone are still
8354performed caselessly, regular expressions that match against an entire address
9b371988 8355become case-sensitive after &"+caseful"& has been seen.
168e428f
PH
8356
8357
8358
9b371988
PH
8359.section "Local part lists" "SECTlocparlis"
8360.cindex "list" "local part list"
8361.cindex "local part" "list"
168e428f 8362Case-sensitivity in local part lists is handled in the same way as for address
9b371988
PH
8363lists, as just described. The &"+caseful"& item can be used if required. In a
8364setting of the &%local_parts%& option in a router with &%caseful_local_part%&
168e428f 8365set false, the subject is lowercased and the matching is initially
9b371988
PH
8366case-insensitive. In this case, &"+caseful"& will restore case-sensitive
8367matching in the local part list, but not elsewhere in the router. If
8368&%caseful_local_part%& is set true in a router, matching in the &%local_parts%&
168e428f
PH
8369option is case-sensitive from the start.
8370
9b371988
PH
8371If a local part list is indirected to a file (see section &<<SECTfilnamlis>>&),
8372comments are handled in the same way as address lists &-- they are recognized
168e428f
PH
8373only if the # is preceded by white space or the start of the line.
8374Otherwise, local part lists are matched in the same way as domain lists, except
9b371988
PH
8375that the special items that refer to the local host (&`@`&, &`@[]`&,
8376&`@mx_any`&, &`@mx_primary`&, and &`@mx_secondary`&) are not recognized.
8377Refer to section &<<SECTdomainlist>>& for details of the other available item
168e428f 8378types.
4f578862 8379.ecindex IIDdohoadli
168e428f
PH
8380
8381
8382
8383
9b371988
PH
8384. ////////////////////////////////////////////////////////////////////////////
8385. ////////////////////////////////////////////////////////////////////////////
168e428f 8386
9b371988 8387.chapter "String expansions" "CHAPexpand"
4f578862 8388.scindex IIDstrexp "expansion" "of strings"
168e428f
PH
8389Many strings in Exim's run time configuration are expanded before use. Some of
8390them are expanded every time they are used; others are expanded only once.
8391
8392When a string is being expanded it is copied verbatim from left to right except
8393when a dollar or backslash character is encountered. A dollar specifies the
068aaea8 8394start of a portion of the string that is interpreted and replaced as described
9b371988
PH
8395below in section &<<SECTexpansionitems>>& onwards. Backslash is used as an
8396escape character, as described in the following section.
168e428f
PH
8397
8398
8399
9b371988
PH
8400.section "Literal text in expanded strings" "SECTlittext"
8401.cindex "expansion" "including literal text"
168e428f
PH
8402An uninterpreted dollar can be included in an expanded string by putting a
8403backslash in front of it. A backslash can be used to prevent any special
068aaea8
PH
8404character being treated specially in an expansion, including backslash itself.
8405If the string appears in quotes in the configuration file, two backslashes are
168e428f 8406required because the quotes themselves cause interpretation of backslashes when
9b371988 8407the string is read in (see section &<<SECTstrings>>&).
168e428f 8408
9b371988 8409.cindex "expansion" "non-expandable substrings"
168e428f 8410A portion of the string can specified as non-expandable by placing it between
9b371988 8411two occurrences of &`\N`&. This is particularly useful for protecting regular
168e428f 8412expressions, which often contain backslashes and dollar signs. For example:
9b371988
PH
8413.code
8414deny senders = \N^\d{8}[a-z]@some\.site\.example$\N
8415.endd
8416On encountering the first &`\N`&, the expander copies subsequent characters
8417without interpretation until it reaches the next &`\N`& or the end of the
168e428f
PH
8418string.
8419
8420
8421
f89d2485 8422.section "Character escape sequences in expanded strings" "SECID82"
9b371988
PH
8423.cindex "expansion" "escape sequences"
8424A backslash followed by one of the letters &"n"&, &"r"&, or &"t"& in an
8425expanded string is recognized as an escape sequence for the character newline,
8426carriage return, or tab, respectively. A backslash followed by up to three
8427octal digits is recognized as an octal encoding for a single character, and a
8428backslash followed by &"x"& and up to two hexadecimal digits is a hexadecimal
8429encoding.
168e428f
PH
8430
8431These escape sequences are also recognized in quoted strings when they are read
8432in. Their interpretation in expansions as well is useful for unquoted strings,
8433and for other cases such as looked-up strings that are then expanded.
8434
8435
f89d2485 8436.section "Testing string expansions" "SECID83"
9b371988
PH
8437.cindex "expansion" "testing"
8438.cindex "testing" "string expansion"
f89d2485 8439.oindex "&%-be%&"
9b371988
PH
8440Many expansions can be tested by calling Exim with the &%-be%& option. This
8441takes the command arguments, or lines from the standard input if there are no
168e428f
PH
8442arguments, runs them through the string expansion code, and writes the results
8443to the standard output. Variables based on configuration values are set up, but
9b371988
PH
8444since no message is being processed, variables such as &$local_part$& have no
8445value. Nevertheless the &%-be%& option can be useful for checking out file and
8446database lookups, and the use of expansion operators such as &%sg%&, &%substr%&
8447and &%nhash%&.
168e428f 8448
9b371988 8449Exim gives up its root privilege when it is called with the &%-be%& option, and
168e428f 8450instead runs under the uid and gid it was called with, to prevent users from
9b371988 8451using &%-be%& for reading files to which they do not have access.
168e428f 8452
f89d2485 8453.oindex "&%-bem%&"
3cb1b51e
PH
8454If you want to test expansions that include variables whose values are taken
8455from a message, there are two other options that can be used. The &%-bem%&
8456option is like &%-be%& except that it is followed by a file name. The file is
8457read as a message before doing the test expansions. For example:
8458.code
8459exim -bem /tmp/test.message '$h_subject:'
8460.endd
8461The &%-Mset%& option is used in conjunction with &%-be%& and is followed by an
8462Exim message identifier. For example:
8463.code
8464exim -be -Mset 1GrA8W-0004WS-LQ '$recipients'
8465.endd
8466This loads the message from Exim's spool before doing the test expansions, and
8467is therefore restricted to admin users.
168e428f
PH
8468
8469
9b371988
PH
8470.section "Forced expansion failure" "SECTforexpfai"
8471.cindex "expansion" "forced failure"
168e428f 8472A number of expansions that are described in the following section have
9b371988
PH
8473alternative &"true"& and &"false"& substrings, enclosed in brace characters
8474(which are sometimes called &"curly brackets"&). Which of the two strings is
068aaea8 8475used depends on some condition that is evaluated as part of the expansion. If,
9b371988 8476instead of a &"false"& substring, the word &"fail"& is used (not in braces),
068aaea8 8477the entire string expansion fails in a way that can be detected by the code
9b371988 8478that requested the expansion. This is called &"forced expansion failure"&, and
068aaea8
PH
8479its consequences depend on the circumstances. In some cases it is no different
8480from any other expansion failure, but in others a different action may be
8481taken. Such variations are mentioned in the documentation of the option that is
8482being expanded.
168e428f
PH
8483
8484
8485
8486
9b371988 8487.section "Expansion items" "SECTexpansionitems"
168e428f
PH
8488The following items are recognized in expanded strings. White space may be used
8489between sub-items that are keywords or substrings enclosed in braces inside an
9b371988 8490outer set of braces, to improve readability. &*Warning*&: Within braces,
168e428f
PH
8491white space is significant.
8492
9b371988
PH
8493.vlist
8494.vitem &*$*&<&'variable&~name'&>&~or&~&*${*&<&'variable&~name'&>&*}*&
8495.cindex "expansion" "variables"
8496Substitute the contents of the named variable, for example:
8497.code
8498$local_part
8499${domain}
8500.endd
168e428f 8501The second form can be used to separate the name from subsequent alphanumeric
068aaea8 8502characters. This form (using braces) is available only for variables; it does
9b371988
PH
8503&'not'& apply to message headers. The names of the variables are given in
8504section &<<SECTexpvar>>& below. If the name of a non-existent variable is
8505given, the expansion fails.
8506
8507.vitem &*${*&<&'op'&>&*:*&<&'string'&>&*}*&
8508.cindex "expansion" "operators"
8509The string is first itself expanded, and then the operation specified by
8510<&'op'&> is applied to it. For example:
8511.code
8512${lc:$local_part}
8513.endd
168e428f 8514The string starts with the first character after the colon, which may be
9b371988 8515leading white space. A list of operators is given in section &<<SECTexpop>>&
168e428f
PH
8516below. The operator notation is used for simple expansion items that have just
8517one argument, because it reduces the number of braces and therefore makes the
8518string easier to understand.
8519
595028e4
PH
8520.vitem &*$bheader_*&<&'header&~name'&>&*:*&&~or&~&*$bh_*&<&'header&~name'&>&*:*&
8521This item inserts &"basic"& header lines. It is described with the &%header%&
8522expansion item below.
8523
9b371988
PH
8524.vitem "&*${dlfunc{*&<&'file'&>&*}{*&<&'function'&>&*}{*&<&'arg'&>&*}&&&
8525 {*&<&'arg'&>&*}...}*&"
4f578862 8526.cindex &%dlfunc%&
068aaea8
PH
8527This expansion dynamically loads and then calls a locally-written C function.
8528This functionality is available only if Exim is compiled with
9b371988
PH
8529.code
8530EXPAND_DLFUNC=yes
8531.endd
8532set in &_Local/Makefile_&. Once loaded, Exim remembers the dynamically loaded
068aaea8
PH
8533object so that it doesn't reload the same object file in the same Exim process
8534(but of course Exim does start new processes frequently).
9b371988 8535
068aaea8 8536There may be from zero to eight arguments to the function. When compiling
9b371988 8537a local function that is to be called in this way, &_local_scan.h_& should be
068aaea8
PH
8538included. The Exim variables and functions that are defined by that API
8539are also available for dynamically loaded functions. The function itself
8540must have the following type:
9b371988 8541.code
068aaea8 8542int dlfunction(uschar **yield, int argc, uschar *argv[])
9b371988
PH
8543.endd
8544Where &`uschar`& is a typedef for &`unsigned char`& in &_local_scan.h_&. The
068aaea8 8545function should return one of the following values:
068aaea8 8546
9b371988
PH
8547&`OK`&: Success. The string that is placed in the variable &'yield'& is put
8548into the expanded string that is being built.
8549
8550&`FAIL`&: A non-forced expansion failure occurs, with the error message taken
8551from &'yield'&, if it is set.
8552
8553&`FAIL_FORCED`&: A forced expansion failure occurs, with the error message
8554taken from &'yield'& if it is set.
8555
8556&`ERROR`&: Same as &`FAIL`&, except that a panic log entry is written.
068aaea8 8557
9b371988
PH
8558When compiling a function that is to be used in this way with gcc,
8559you need to add &%-shared%& to the gcc command. Also, in the Exim build-time
8560configuration, you must add &%-export-dynamic%& to EXTRALIBS.
9b371988
PH
8561
8562.vitem "&*${extract{*&<&'key'&>&*}{*&<&'string1'&>&*}{*&<&'string2'&>&*}&&&
8563 {*&<&'string3'&>&*}}*&"
8564.cindex "expansion" "extracting substrings by key"
4f578862 8565.cindex "&%extract%&" "substrings by key"
9b371988 8566The key and <&'string1'&> are first expanded separately. Leading and trailing
068aaea8 8567white space is removed from the key (but not from any of the strings). The key
9b371988 8568must not consist entirely of digits. The expanded <&'string1'&> must be of the
068aaea8 8569form:
9b371988
PH
8570.display
8571<&'key1'&> = <&'value1'&> <&'key2'&> = <&'value2'&> ...
8572.endd
f89d2485 8573.vindex "&$value$&"
068aaea8
PH
8574where the equals signs and spaces (but not both) are optional. If any of the
8575values contain white space, they must be enclosed in double quotes, and any
8576values that are enclosed in double quotes are subject to escape processing as
9b371988
PH
8577described in section &<<SECTstrings>>&. The expanded <&'string1'&> is searched
8578for the value that corresponds to the key. The search is case-insensitive. If
8579the key is found, <&'string2'&> is expanded, and replaces the whole item;
8580otherwise <&'string3'&> is used. During the expansion of <&'string2'&> the
8581variable &$value$& contains the value that has been extracted. Afterwards, it
8582is restored to any previous value it might have had.
8583
8584If {<&'string3'&>} is omitted, the item is replaced by an empty string if the
8585key is not found. If {<&'string2'&>} is also omitted, the value that was
168e428f 8586extracted is used. Thus, for example, these two expansions are identical, and
9b371988
PH
8587yield &"2001"&:
8588.code
8589${extract{gid}{uid=1984 gid=2001}}
8590${extract{gid}{uid=1984 gid=2001}{$value}}
8591.endd
8592Instead of {<&'string3'&>} the word &"fail"& (not in curly brackets) can
168e428f 8593appear, for example:
9b371988
PH
8594.code
8595${extract{Z}{A=... B=...}{$value} fail }
8596.endd
8597This forces an expansion failure (see section &<<SECTforexpfai>>&);
8598{<&'string2'&>} must be present for &"fail"& to be recognized.
168e428f
PH
8599
8600
9b371988
PH
8601.vitem "&*${extract{*&<&'number'&>&*}{*&<&'separators'&>&*}&&&
8602 {*&<&'string1'&>&*}{*&<&'string2'&>&*}{*&<&'string3'&>&*}}*&"
8603.cindex "expansion" "extracting substrings by number"
4f578862 8604.cindex "&%extract%&" "substrings by number"
9b371988 8605The <&'number'&> argument must consist entirely of decimal digits,
068aaea8 8606apart from leading and trailing white space, which is ignored.
9b371988 8607This is what distinguishes this form of &%extract%& from the previous kind. It
168e428f 8608behaves in the same way, except that, instead of extracting a named field, it
9b371988
PH
8609extracts from <&'string1'&> the field whose number is given as the first
8610argument. You can use &$value$& in <&'string2'&> or &`fail`& instead of
8611<&'string3'&> as before.
8612
168e428f
PH
8613The fields in the string are separated by any one of the characters in the
8614separator string. These may include space or tab characters.
8615The first field is numbered one. If the number is negative, the fields are
8616counted from the end of the string, with the rightmost one numbered -1. If the
8617number given is zero, the entire string is returned. If the modulus of the
8618number is greater than the number of fields in the string, the result is the
9b371988
PH
8619expansion of <&'string3'&>, or the empty string if <&'string3'&> is not
8620provided. For example:
8621.code
8622${extract{2}{:}{x:42:99:& Mailer::/bin/bash}}
8623.endd
8624yields &"42"&, and
8625.code
8626${extract{-4}{:}{x:42:99:& Mailer::/bin/bash}}
8627.endd
8628yields &"99"&. Two successive separators mean that the field between them is
168e428f
PH
8629empty (for example, the fifth field above).
8630
8631
f89d2485
PH
8632.vitem &*${filter{*&<&'string'&>&*}{*&<&'condition'&>&*}}*&
8633.cindex "list" "selecting by condition"
8634.cindex "expansion" "selecting from list by condition"
8635.vindex "&$item$&"
8636After expansion, <&'string'&> is interpreted as a list, colon-separated by
8637default, but the separator can be changed in the usual way. For each item
8638in this list, its value is place in &$item$&, and then the condition is
8639evaluated. If the condition is true, &$item$& is added to the output as an
8640item in a new list; if the condition is false, the item is discarded. The
8641separator used for the output list is the same as the one used for the
8642input, but a separator setting is not included in the output. For example:
8643.code
8644${filter{a:b:c}{!eq{$item}{b}}
8645.endd
8646yields &`a:c`&. At the end of the expansion, the value of &$item$& is restored
8647to what it was before. See also the &*map*& and &*reduce*& expansion items.
f89d2485
PH
8648
8649
9b371988
PH
8650.vitem &*${hash{*&<&'string1'&>&*}{*&<&'string2'&>&*}{*&<&'string3'&>&*}}*&
8651.cindex "hash function" "textual"
8652.cindex "expansion" "textual hash"
168e428f
PH
8653This is a textual hashing function, and was the first to be implemented in
8654early versions of Exim. In current releases, there are other hashing functions
8655(numeric, MD5, and SHA-1), which are described below.
9b371988
PH
8656
8657The first two strings, after expansion, must be numbers. Call them <&'m'&> and
8658<&'n'&>. If you are using fixed values for these numbers, that is, if
8659<&'string1'&> and <&'string2'&> do not change when they are expanded, you can
8660use the simpler operator notation that avoids some of the braces:
8661.code
8662${hash_<n>_<m>:<string>}
8663.endd
8664The second number is optional (in both notations). If <&'n'&> is greater than
8665or equal to the length of the string, the expansion item returns the string.
8666Otherwise it computes a new string of length <&'n'&> by applying a hashing
8667function to the string. The new string consists of characters taken from the
8668first <&'m'&> characters of the string
8669.code
8670abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQWRSTUVWXYZ0123456789
8671.endd
8672If <&'m'&> is not present the value 26 is used, so that only lower case
168e428f 8673letters appear. For example:
9b371988
PH
8674.display
8675&`$hash{3}{monty}} `& yields &`jmg`&
8676&`$hash{5}{monty}} `& yields &`monty`&
8677&`$hash{4}{62}{monty python}}`& yields &`fbWx`&
8678.endd
8679
8680.vitem "&*$header_*&<&'header&~name'&>&*:*&&~or&~&&&
595028e4
PH
8681 &*$h_*&<&'header&~name'&>&*:*&" &&&
8682 "&*$bheader_*&<&'header&~name'&>&*:*&&~or&~&&&
8683 &*$bh_*&<&'header&~name'&>&*:*&" &&&
8684 "&*$rheader_*&<&'header&~name'&>&*:*&&~or&~&&&
9b371988
PH
8685 &*$rh_*&<&'header&~name'&>&*:*&"
8686.cindex "expansion" "header insertion"
f89d2485
PH
8687.vindex "&$header_$&"
8688.vindex "&$bheader_$&"
8689.vindex "&$rheader_$&"
9b371988
PH
8690.cindex "header lines" "in expansion strings"
8691.cindex "header lines" "character sets"
8692.cindex "header lines" "decoding"
168e428f 8693Substitute the contents of the named message header line, for example
9b371988
PH
8694.code
8695$header_reply-to:
8696.endd
168e428f
PH
8697The newline that terminates a header line is not included in the expansion, but
8698internal newlines (caused by splitting the header line over several physical
8699lines) may be present.
9b371988
PH
8700
8701The difference between &%rheader%&, &%bheader%&, and &%header%& is in the way
8702the data in the header line is interpreted.
8703
8704.ilist
8705.cindex "white space" "in header lines"
8706&%rheader%& gives the original &"raw"& content of the header line, with no
068aaea8 8707processing at all, and without the removal of leading and trailing white space.
168e428f 8708
9b371988
PH
8709.next
8710.cindex "base64 encoding" "in header lines"
8711&%bheader%& removes leading and trailing white space, and then decodes base64
8712or quoted-printable MIME &"words"& within the header text, but does no
8713character set translation. If decoding of what looks superficially like a MIME
8714&"word"& fails, the raw string is returned. If decoding
8715.cindex "binary zero" "in header line"
8716produces a binary zero character, it is replaced by a question mark &-- this is
168e428f
PH
8717what Exim does for binary zeros that are actually received in header lines.
8718
9b371988
PH
8719.next
8720&%header%& tries to translate the string as decoded by &%bheader%& to a
8721standard character set. This is an attempt to produce the same string as would
8722be displayed on a user's MUA. If translation fails, the &%bheader%& string is
168e428f 8723returned. Translation is attempted only on operating systems that support the
9b371988
PH
8724&[iconv()]& function. This is indicated by the compile-time macro HAVE_ICONV in
8725a system Makefile or in &_Local/Makefile_&.
8726.endlist ilist
168e428f 8727
9b371988
PH
8728In a filter file, the target character set for &%header%& can be specified by a
8729command of the following form:
8730.code
8731headers charset "UTF-8"
8732.endd
8733This command affects all references to &$h_$& (or &$header_$&) expansions in
168e428f 8734subsequently obeyed filter commands. In the absence of this command, the target
9b371988 8735character set in a filter is taken from the setting of the &%headers_charset%&
168e428f 8736option in the runtime configuration. The value of this option defaults to the
9b371988 8737value of HEADERS_CHARSET in &_Local/Makefile_&. The ultimate default is
168e428f 8738ISO-8859-1.
9b371988 8739
168e428f
PH
8740Header names follow the syntax of RFC 2822, which states that they may contain
8741any printing characters except space and colon. Consequently, curly brackets
9b371988 8742&'do not'& terminate header names, and should not be used to enclose them as
168e428f 8743if they were variables. Attempting to do so causes a syntax error.
9b371988 8744
168e428f
PH
8745Only header lines that are common to all copies of a message are visible to
8746this mechanism. These are the original header lines that are received with the
3cb1b51e 8747message, and any that are added by an ACL statement or by a system
168e428f
PH
8748filter. Header lines that are added to a particular copy of a message by a
8749router or transport are not accessible.
9b371988 8750
168e428f
PH
8751For incoming SMTP messages, no header lines are visible in ACLs that are obeyed
8752before the DATA ACL, because the header structure is not set up until the
3cb1b51e
PH
8753message is received. Header lines that are added in a RCPT ACL (for example)
8754are saved until the message's incoming header lines are available, at which
8755point they are added. When a DATA ACL is running, however, header lines added
8756by earlier ACLs are visible.
9b371988 8757
168e428f
PH
8758Upper case and lower case letters are synonymous in header names. If the
8759following character is white space, the terminating colon may be omitted, but
8760this is not recommended, because you may then forget it when it is needed. When
8761white space terminates the header name, it is included in the expanded string.
8762If the message does not contain the given header, the expansion item is
9b371988
PH
8763replaced by an empty string. (See the &%def%& condition in section
8764&<<SECTexpcond>>& for a means of testing for the existence of a header.)
8765
3cb1b51e
PH
8766If there is more than one header with the same name, they are all concatenated
8767to form the substitution string, up to a maximum length of 64K. Unless
8768&%rheader%& is being used, leading and trailing white space is removed from
8769each header before concatenation, and a completely empty header is ignored. A
8770newline character is then inserted between non-empty headers, but there is no
8771newline at the very end. For the &%header%& and &%bheader%& expansion, for
8772those headers that contain lists of addresses, a comma is also inserted at the
8773junctions between headers. This does not happen for the &%rheader%& expansion.
168e428f
PH
8774
8775
9b371988
PH
8776.vitem &*${hmac{*&<&'hashname'&>&*}{*&<&'secret'&>&*}{*&<&'string'&>&*}}*&
8777.cindex "expansion" "hmac hashing"
4f578862 8778.cindex &%hmac%&
168e428f
PH
8779This function uses cryptographic hashing (either MD5 or SHA-1) to convert a
8780shared secret and some text into a message authentication code, as specified in
9b371988
PH
8781RFC 2104. This differs from &`${md5:secret_text...}`& or
8782&`${sha1:secret_text...}`& in that the hmac step adds a signature to the
168e428f 8783cryptographic hash, allowing for authentication that is not possible with MD5
9b371988
PH
8784or SHA-1 alone. The hash name must expand to either &`md5`& or &`sha1`& at
8785present. For example:
8786.code
8787${hmac{md5}{somesecret}{$primary_hostname $tod_log}}
8788.endd
8789For the hostname &'mail.example.com'& and time 2002-10-17 11:30:59, this
168e428f 8790produces:
9b371988
PH
8791.code
8792dd97e3ba5d1a61b5006108f8c8252953
8793.endd
168e428f
PH
8794As an example of how this might be used, you might put in the main part of
8795an Exim configuration:
9b371988
PH
8796.code
8797SPAMSCAN_SECRET=cohgheeLei2thahw
8798.endd
168e428f 8799In a router or a transport you could then have:
9b371988 8800.code
168e428f 8801headers_add = \
d1e83bff 8802 X-Spam-Scanned: ${primary_hostname} ${message_exim_id} \
168e428f 8803 ${hmac{md5}{SPAMSCAN_SECRET}\
d1e83bff 8804 {${primary_hostname},${message_exim_id},$h_message-id:}}
9b371988 8805.endd
168e428f 8806Then given a message, you can check where it was scanned by looking at the
9b371988
PH
8807&'X-Spam-Scanned:'& header line. If you know the secret, you can check that
8808this header line is authentic by recomputing the authentication code from the
8809host name, message ID and the &'Message-id:'& header line. This can be done
8810using Exim's &%-be%& option, or by other means, for example by using the
8811&'hmac_md5_hex()'& function in Perl.
8812
8813
8814.vitem &*${if&~*&<&'condition'&>&*&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}}*&
8815.cindex "expansion" "conditional"
4f578862 8816.cindex "&%if%&, expansion item"
9b371988
PH
8817If <&'condition'&> is true, <&'string1'&> is expanded and replaces the whole
8818item; otherwise <&'string2'&> is used. The available conditions are described
8819in section &<<SECTexpcond>>& below. For example:
8820.code
8821${if eq {$local_part}{postmaster} {yes}{no} }
8822.endd
168e428f 8823The second string need not be present; if it is not and the condition is not
9b371988
PH
8824true, the item is replaced with nothing. Alternatively, the word &"fail"& may
8825be present instead of the second string (without any curly brackets). In this
168e428f 8826case, the expansion is forced to fail if the condition is not true (see section
9b371988
PH
8827&<<SECTforexpfai>>&).
8828
8829If both strings are omitted, the result is the string &`true`& if the condition
168e428f
PH
8830is true, and the empty string if the condition is false. This makes it less
8831cumbersome to write custom ACL and router conditions. For example, instead of
9b371988
PH
8832.code
8833condition = ${if >{$acl_m4}{3}{true}{false}}
8834.endd
168e428f 8835you can use
9b371988
PH
8836.code
8837condition = ${if >{$acl_m4}{3}}
8838.endd
8839
8840.vitem &*${length{*&<&'string1'&>&*}{*&<&'string2'&>&*}}*&
8841.cindex "expansion" "string truncation"
f89d2485 8842.cindex "&%length%& expansion item"
9b371988
PH
8843The &%length%& item is used to extract the initial portion of a string. Both
8844strings are expanded, and the first one must yield a number, <&'n'&>, say. If
8845you are using a fixed value for the number, that is, if <&'string1'&> does not
8846change when expanded, you can use the simpler operator notation that avoids
8847some of the braces:
8848.code
8849${length_<n>:<string>}
8850.endd
8851The result of this item is either the first <&'n'&> characters or the whole
8852of <&'string2'&>, whichever is the shorter. Do not confuse &%length%& with
8853&%strlen%&, which gives the length of a string.
8854
8855
8856.vitem "&*${lookup{*&<&'key'&>&*}&~*&<&'search&~type'&>&*&~&&&
8857 {*&<&'file'&>&*}&~{*&<&'string1'&>&*}&~{*&<&'string2'&>&*}}*&"
168e428f
PH
8858This is the first of one of two different types of lookup item, which are both
8859described in the next item.
8860
9b371988
PH
8861.vitem "&*${lookup&~*&<&'search&~type'&>&*&~{*&<&'query'&>&*}&~&&&
8862 {*&<&'string1'&>&*}&~{*&<&'string2'&>&*}}*&"
8863.cindex "expansion" "lookup in"
4f578862 8864.cindex "file" "lookups"
9b371988 8865.cindex "lookup" "in expanded string"
168e428f 8866The two forms of lookup item specify data lookups in files and databases, as
9b371988
PH
8867discussed in chapter &<<CHAPfdlookup>>&. The first form is used for single-key
8868lookups, and the second is used for query-style lookups. The <&'key'&>,
8869<&'file'&>, and <&'query'&> strings are expanded before use.
8870
168e428f 8871If there is any white space in a lookup item which is part of a filter command,
9b371988 8872a retry or rewrite rule, a routing rule for the &(manualroute)& router, or any
168e428f
PH
8873other place where white space is significant, the lookup item must be enclosed
8874in double quotes. The use of data lookups in users' filter files may be locked
8875out by the system administrator.
9b371988 8876
f89d2485 8877.vindex "&$value$&"
9b371988
PH
8878If the lookup succeeds, <&'string1'&> is expanded and replaces the entire item.
8879During its expansion, the variable &$value$& contains the data returned by the
168e428f 8880lookup. Afterwards it reverts to the value it had previously (at the outer
9b371988
PH
8881level it is empty). If the lookup fails, <&'string2'&> is expanded and replaces
8882the entire item. If {<&'string2'&>} is omitted, the replacement is the empty
8883string on failure. If <&'string2'&> is provided, it can itself be a nested
168e428f
PH
8884lookup, thus providing a mechanism for looking up a default value when the
8885original lookup fails.
9b371988
PH
8886
8887If a nested lookup is used as part of <&'string1'&>, &$value$& contains the
8888data for the outer lookup while the parameters of the second lookup are
8889expanded, and also while <&'string2'&> of the second lookup is expanded, should
8890the second lookup fail. Instead of {<&'string2'&>} the word &"fail"& can
8891appear, and in this case, if the lookup fails, the entire expansion is forced
8892to fail (see section &<<SECTforexpfai>>&). If both {<&'string1'&>} and
8893{<&'string2'&>} are omitted, the result is the looked up value in the case of a
8894successful lookup, and nothing in the case of failure.
8895
8896For single-key lookups, the string &"partial"& is permitted to precede the
8897search type in order to do partial matching, and * or *@ may follow a search
168e428f 8898type to request default lookups if the key does not match (see sections
9b371988
PH
8899&<<SECTdefaultvaluelookups>>& and &<<SECTpartiallookup>>& for details).
8900
8901.cindex "numerical variables (&$1$& &$2$& etc)" "in lookup expansion"
8902If a partial search is used, the variables &$1$& and &$2$& contain the wild
168e428f
PH
8903and non-wild parts of the key during the expansion of the replacement text.
8904They return to their previous values at the end of the lookup item.
168e428f 8905
9b371988
PH
8906This example looks up the postmaster alias in the conventional alias file:
8907.code
8908${lookup {postmaster} lsearch {/etc/aliases} {$value}}
8909.endd
168e428f
PH
8910This example uses NIS+ to look up the full name of the user corresponding to
8911the local part of an address, forcing the expansion to fail if it is not found:
9b371988 8912.code
168e428f
PH
8913${lookup nisplus {[name=$local_part],passwd.org_dir:gcos} \
8914 {$value}fail}
9b371988 8915.endd
168e428f 8916
f89d2485 8917
f89d2485
PH
8918.vitem &*${map{*&<&'string1'&>&*}{*&<&'string2'&>&*}}*&
8919.cindex "expansion" "list creation"
8920.vindex "&$item$&"
8921After expansion, <&'string1'&> is interpreted as a list, colon-separated by
8922default, but the separator can be changed in the usual way. For each item
8923in this list, its value is place in &$item$&, and then <&'string2'&> is
8924expanded and added to the output as an item in a new list. The separator used
8925for the output list is the same as the one used for the input, but a separator
8926setting is not included in the output. For example:
8927.code
8928${map{a:b:c}{[$item]}} ${map{<- x-y-z}{($item)}}
8929.endd
8930expands to &`[a]:[b]:[c] (x)-(y)-(z)`&. At the end of the expansion, the
8931value of &$item$& is restored to what it was before. See also the &*filter*&
8932and &*reduce*& expansion items.
f89d2485 8933
9b371988
PH
8934.vitem &*${nhash{*&<&'string1'&>&*}{*&<&'string2'&>&*}{*&<&'string3'&>&*}}*&
8935.cindex "expansion" "numeric hash"
8936.cindex "hash function" "numeric"
168e428f 8937The three strings are expanded; the first two must yield numbers. Call them
9b371988
PH
8938<&'n'&> and <&'m'&>. If you are using fixed values for these numbers, that is,
8939if <&'string1'&> and <&'string2'&> do not change when they are expanded, you
8940can use the simpler operator notation that avoids some of the braces:
8941.code
8942${nhash_<n>_<m>:<string>}
8943.endd
168e428f 8944The second number is optional (in both notations). If there is only one number,
9b371988 8945the result is a number in the range 0&--<&'n'&>-1. Otherwise, the string is
168e428f 8946processed by a div/mod hash function that returns two numbers, separated by a
9b371988
PH
8947slash, in the ranges 0 to <&'n'&>-1 and 0 to <&'m'&>-1, respectively. For
8948example,
8949.code
8950${nhash{8}{64}{supercalifragilisticexpialidocious}}
8951.endd
8952returns the string &"6/33"&.
168e428f
PH
8953
8954
8955
9b371988
PH
8956.vitem &*${perl{*&<&'subroutine'&>&*}{*&<&'arg'&>&*}{*&<&'arg'&>&*}...}*&
8957.cindex "Perl" "use in expanded string"
8958.cindex "expansion" "calling Perl from"
168e428f
PH
8959This item is available only if Exim has been built to include an embedded Perl
8960interpreter. The subroutine name and the arguments are first separately
8961expanded, and then the Perl subroutine is called with those arguments. No
8962additional arguments need be given; the maximum number permitted, including the
8963name of the subroutine, is nine.
9b371988 8964
168e428f 8965The return value of the subroutine is inserted into the expanded string, unless
9b371988
PH
8966the return value is &%undef%&. In that case, the expansion fails in the same
8967way as an explicit &"fail"& on a lookup item. The return value is a scalar.
8968Whatever you return is evaluated in a scalar context. For example, if you
8969return the name of a Perl vector, the return value is the size of the vector,
8970not its contents.
8971
8972If the subroutine exits by calling Perl's &%die%& function, the expansion fails
8973with the error message that was passed to &%die%&. More details of the embedded
8974Perl facility are given in chapter &<<CHAPperl>>&.
8975
8976The &(redirect)& router has an option called &%forbid_filter_perl%& which locks
168e428f
PH
8977out the use of this expansion item in filter files.
8978
8979
9b371988 8980.vitem &*${prvs{*&<&'address'&>&*}{*&<&'secret'&>&*}{*&<&'keynumber'&>&*}}*&
f89d2485 8981.cindex "&%prvs%& expansion item"
068aaea8
PH
8982The first argument is a complete email address and the second is secret
8983keystring. The third argument, specifying a key number, is optional. If absent,
8984it defaults to 0. The result of the expansion is a prvs-signed email address,
9b371988
PH
8985to be typically used with the &%return_path%& option on an &(smtp)& transport
8986as part of a bounce address tag validation (BATV) scheme. For more discussion
8987and an example, see section &<<SECTverifyPRVS>>&.
9b371988 8988
9b371988
PH
8989.vitem "&*${prvscheck{*&<&'address'&>&*}{*&<&'secret'&>&*}&&&
8990 {*&<&'string'&>&*}}*&"
f89d2485 8991.cindex "&%prvscheck%& expansion item"
9b371988 8992This expansion item is the complement of the &%prvs%& item. It is used for
068aaea8
PH
8993checking prvs-signed addresses. If the expansion of the first argument does not
8994yield a syntactically valid prvs-signed address, the whole item expands to the
8995empty string. When the first argument does expand to a syntactically valid
8996prvs-signed address, the second argument is expanded, with the prvs-decoded
8997version of the address and the key number extracted from the address in the
9b371988
PH
8998variables &$prvscheck_address$& and &$prvscheck_keynum$&, respectively.
8999
068aaea8
PH
9000These two variables can be used in the expansion of the second argument to
9001retrieve the secret. The validity of the prvs-signed address is then checked
9b371988
PH
9002against the secret. The result is stored in the variable &$prvscheck_result$&,
9003which is empty for failure or &"1"& for success.
9004
068aaea8
PH
9005The third argument is optional; if it is missing, it defaults to an empty
9006string. This argument is now expanded. If the result is an empty string, the
9007result of the expansion is the decoded version of the address. This is the case
9008whether or not the signature was valid. Otherwise, the result of the expansion
9009is the expansion of the third argument.
068aaea8 9010
9b371988
PH
9011All three variables can be used in the expansion of the third argument.
9012However, once the expansion is complete, only &$prvscheck_result$& remains set.
9013For more discussion and an example, see section &<<SECTverifyPRVS>>&.
068aaea8 9014
9b371988
PH
9015.vitem &*${readfile{*&<&'file&~name'&>&*}{*&<&'eol&~string'&>&*}}*&
9016.cindex "expansion" "inserting an entire file"
9017.cindex "file" "inserting into expansion"
4f578862 9018.cindex "&%readfile%& expansion item"
168e428f
PH
9019The file name and end-of-line string are first expanded separately. The file is
9020then read, and its contents replace the entire item. All newline characters in
9021the file are replaced by the end-of-line string if it is present. Otherwise,
9022newlines are left in the string.
9023String expansion is not applied to the contents of the file. If you want this,
9b371988
PH
9024you must wrap the item in an &%expand%& operator. If the file cannot be read,
9025the string expansion fails.
9026
9027The &(redirect)& router has an option called &%forbid_filter_readfile%& which
168e428f
PH
9028locks out the use of this expansion item in filter files.
9029
9030
9031
9b371988
PH
9032.vitem "&*${readsocket{*&<&'name'&>&*}{*&<&'request'&>&*}&&&
9033 {*&<&'timeout'&>&*}{*&<&'eol&~string'&>&*}{*&<&'fail&~string'&>&*}}*&"
9034.cindex "expansion" "inserting from a socket"
f89d2485 9035.cindex "socket, use of in expansion"
4f578862 9036.cindex "&%readsocket%& expansion item"
c0712871
PH
9037This item inserts data from a Unix domain or Internet socket into the expanded
9038string. The minimal way of using it uses just two arguments, as in these
9039examples:
9b371988
PH
9040.code
9041${readsocket{/socket/name}{request string}}
c0712871 9042${readsocket{inet:some.host:1234}{request string}}
9b371988 9043.endd
c0712871
PH
9044For a Unix domain socket, the first substring must be the path to the socket.
9045For an Internet socket, the first substring must contain &`inet:`& followed by
9046a host name or IP address, followed by a colon and a port, which can be a
9047number or the name of a TCP port in &_/etc/services_&. An IP address may
9048optionally be enclosed in square brackets. This is best for IPv6 addresses. For
9049example:
9050.code
9051${readsocket{inet:[::1]:1234}{request string}}
9052.endd
9053Only a single host name may be given, but if looking it up yields more than
9054one IP address, they are each tried in turn until a connection is made. For
9055both kinds of socket, Exim makes a connection, writes the request string
9056(unless it is an empty string) and reads from the socket until an end-of-file
9057is read. A timeout of 5 seconds is applied. Additional, optional arguments
9058extend what can be done. Firstly, you can vary the timeout. For example:
9b371988 9059.code
db9452a9 9060${readsocket{/socket/name}{request string}{3s}}
9b371988 9061.endd
168e428f 9062A fourth argument allows you to change any newlines that are in the data
9b371988
PH
9063that is read, in the same way as for &%readfile%& (see above). This example
9064turns them into spaces:
9065.code
db9452a9 9066${readsocket{inet:127.0.0.1:3294}{request string}{3s}{ }}
9b371988 9067.endd
168e428f
PH
9068As with all expansions, the substrings are expanded before the processing
9069happens. Errors in these sub-expansions cause the expansion to fail. In
9070addition, the following errors can occur:
168e428f 9071
9b371988
PH
9072.ilist
9073Failure to create a socket file descriptor;
9074.next
9075Failure to connect the socket;
9076.next
db9452a9 9077Failure to write the request string;
9b371988
PH
9078.next
9079Timeout on reading from the socket.
9080.endlist
168e428f 9081
168e428f
PH
9082By default, any of these errors causes the expansion to fail. However, if
9083you supply a fifth substring, it is expanded and used when any of the above
9084errors occurs. For example:
9b371988 9085.code
db9452a9 9086${readsocket{/socket/name}{request string}{3s}{\n}\
9b371988
PH
9087 {socket failure}}
9088.endd
c0712871
PH
9089You can test for the existence of a Unix domain socket by wrapping this
9090expansion in &`${if exists`&, but there is a race condition between that test
9091and the actual opening of the socket, so it is safer to use the fifth argument
9092if you want to be absolutely sure of avoiding an expansion error for a
9093non-existent Unix domain socket, or a failure to connect to an Internet socket.
9b371988
PH
9094
9095The &(redirect)& router has an option called &%forbid_filter_readsocket%& which
168e428f
PH
9096locks out the use of this expansion item in filter files.
9097
f89d2485 9098
f89d2485
PH
9099.vitem &*${reduce{*&<&'string1'&>}{<&'string2'&>&*}{*&<&'string3'&>&*}}*&
9100.cindex "expansion" "reducing a list to a scalar"
9101.cindex "list" "reducing to a scalar"
9102.vindex "&$value$&"
9103.vindex "&$item$&"
9104This operation reduces a list to a single, scalar string. After expansion,
9105<&'string1'&> is interpreted as a list, colon-separated by default, but the
9106separator can be changed in the usual way. Then <&'string2'&> is expanded and
9107assigned to the &$value$& variable. After this, each item in the <&'string1'&>
9108list is assigned to &$item$& in turn, and <&'string3'&> is expanded for each of
9109them. The result of that expansion is assigned to &$value$& before the next
9110iteration. When the end of the list is reached, the final value of &$value$& is
9111added to the expansion output. The &*reduce*& expansion item can be used in a
9112number of ways. For example, to add up a list of numbers:
9113.code
9114${reduce {<, 1,2,3}{0}{${eval:$value+$item}}}
9115.endd
9116The result of that expansion would be &`6`&. The maximum of a list of numbers
9117can be found:
9118.code
9119${reduce {3:0:9:4:6}{0}{${if >{$item}{$value}{$item}{$value}}}}
9120.endd
9121At the end of a &*reduce*& expansion, the values of &$item$& and &$value$& are
9122restored to what they were before. See also the &*filter*& and &*map*&
9123expansion items.
f89d2485 9124
595028e4 9125.vitem &*$rheader_*&<&'header&~name'&>&*:*&&~or&~&*$rh_*&<&'header&~name'&>&*:*&
9b371988 9126This item inserts &"raw"& header lines. It is described with the &%header%&
168e428f
PH
9127expansion item above.
9128
9b371988
PH
9129.vitem "&*${run{*&<&'command'&>&*&~*&<&'args'&>&*}{*&<&'string1'&>&*}&&&
9130 {*&<&'string2'&>&*}}*&"
9131.cindex "expansion" "running a command"
4f578862 9132.cindex "&%run%& expansion item"
168e428f
PH
9133The command and its arguments are first expanded separately, and then the
9134command is run in a separate process, but under the same uid and gid. As in
9135other command executions from Exim, a shell is not used by default. If you want
9136a shell, you must explicitly code it.
168e428f 9137
3cb1b51e
PH
9138The standard input for the command exists, but is empty. The standard output
9139and standard error are set to the same file descriptor.
9b371988 9140.cindex "return code" "from &%run%& expansion"
f89d2485 9141.vindex "&$value$&"
9b371988 9142If the command succeeds (gives a zero return code) <&'string1'&> is expanded
3cb1b51e
PH
9143and replaces the entire item; during this expansion, the standard output/error
9144from the command is in the variable &$value$&. If the command fails,
9145<&'string2'&>, if present, is expanded and used. Once again, during the
9146expansion, the standard output/error from the command is in the variable
9147&$value$&.
9148
9149If <&'string2'&> is absent, the result is empty. Alternatively, <&'string2'&>
9150can be the word &"fail"& (not in braces) to force expansion failure if the
9151command does not succeed. If both strings are omitted, the result is contents
9152of the standard output/error on success, and nothing on failure.
9b371988 9153
f89d2485 9154.vindex "&$runrc$&"
9b371988
PH
9155The return code from the command is put in the variable &$runrc$&, and this
9156remains set afterwards, so in a filter file you can do things like this:
9157.code
9158if "${run{x y z}{}}$runrc" is 1 then ...
9159 elif $runrc is 2 then ...
9160 ...
9161endif
9162.endd
168e428f 9163If execution of the command fails (for example, the command does not exist),
9b371988 9164the return code is 127 &-- the same code that shells use for non-existent
168e428f 9165commands.
9b371988
PH
9166
9167&*Warning*&: In a router or transport, you cannot assume the order in which
9168option values are expanded, except for those preconditions whose order of
9169testing is documented. Therefore, you cannot reliably expect to set &$runrc$&
168e428f 9170by the expansion of one option, and use it in another.
9b371988
PH
9171
9172The &(redirect)& router has an option called &%forbid_filter_run%& which locks
168e428f
PH
9173out the use of this expansion item in filter files.
9174
9175
9b371988
PH
9176.vitem &*${sg{*&<&'subject'&>&*}{*&<&'regex'&>&*}{*&<&'replacement'&>&*}}*&
9177.cindex "expansion" "string substitution"
4f578862 9178.cindex "&%sg%& expansion item"
168e428f
PH
9179This item works like Perl's substitution operator (s) with the global (/g)
9180option; hence its name. However, unlike the Perl equivalent, Exim does not
9181modify the subject string; instead it returns the modified string for insertion
9182into the overall expansion. The item takes three arguments: the subject string,
9b371988
PH
9183a regular expression, and a substitution string. For example:
9184.code
9185${sg{abcdefabcdef}{abc}{xyz}}
9186.endd
9187yields &"xyzdefxyzdef"&. Because all three arguments are expanded before use,
9188if any $ or \ characters are required in the regular expression or in the
9189substitution string, they have to be escaped. For example:
9190.code
9191${sg{abcdef}{^(...)(...)\$}{\$2\$1}}
9192.endd
9193yields &"defabc"&, and
9194.code
9195${sg{1=A 4=D 3=C}{\N(\d+)=\N}{K\$1=}}
9196.endd
9197yields &"K1=A K4=D K3=C"&. Note the use of &`\N`& to protect the contents of
168e428f
PH
9198the regular expression from string expansion.
9199
9200
9201
9b371988 9202.vitem &*${substr{*&<&'string1'&>&*}{*&<&'string2'&>&*}{*&<&'string3'&>&*}}*&
f89d2485 9203.cindex "&%substr%& expansion item"
9b371988
PH
9204.cindex "substring extraction"
9205.cindex "expansion" "substring extraction"
168e428f 9206The three strings are expanded; the first two must yield numbers. Call them
9b371988
PH
9207<&'n'&> and <&'m'&>. If you are using fixed values for these numbers, that is,
9208if <&'string1'&> and <&'string2'&> do not change when they are expanded, you
9209can use the simpler operator notation that avoids some of the braces:
9210.code
9211${substr_<n>_<m>:<string>}
9212.endd
168e428f
PH
9213The second number is optional (in both notations).
9214If it is absent in the simpler format, the preceding underscore must also be
9215omitted.
168e428f 9216
9b371988
PH
9217The &%substr%& item can be used to extract more general substrings than
9218&%length%&. The first number, <&'n'&>, is a starting offset, and <&'m'&> is the
9219length required. For example
9220.code
9221${substr{3}{2}{$local_part}}
9222.endd
168e428f
PH
9223If the starting offset is greater than the string length the result is the
9224null string; if the length plus starting offset is greater than the string
9225length, the result is the right-hand part of the string, starting from the
9226given offset. The first character in the string has offset zero.
9b371988
PH
9227
9228The &%substr%& expansion item can take negative offset values to count
168e428f
PH
9229from the right-hand end of its operand. The last character is offset -1, the
9230second-last is offset -2, and so on. Thus, for example,
9b371988
PH
9231.code
9232${substr{-5}{2}{1234567}}
9233.endd
9234yields &"34"&. If the absolute value of a negative offset is greater than the
168e428f
PH
9235length of the string, the substring starts at the beginning of the string, and
9236the length is reduced by the amount of overshoot. Thus, for example,
9b371988
PH
9237.code
9238${substr{-5}{2}{12}}
9239.endd
168e428f 9240yields an empty string, but
9b371988
PH
9241.code
9242${substr{-3}{2}{12}}
9243.endd
9244yields &"1"&.
168e428f 9245
9b371988 9246When the second number is omitted from &%substr%&, the remainder of the string
168e428f
PH
9247is taken if the offset is positive. If it is negative, all characters in the
9248string preceding the offset point are taken. For example, an offset of -1 and
9249no length, as in these semantically identical examples:
9b371988
PH
9250.code
9251${substr_-1:abcde}
9252${substr{-1}{abcde}}
9253.endd
9254yields all but the last character of the string, that is, &"abcd"&.
168e428f
PH
9255
9256
9257
9b371988
PH
9258.vitem "&*${tr{*&<&'subject'&>&*}{*&<&'characters'&>&*}&&&
9259 {*&<&'replacements'&>&*}}*&"
9260.cindex "expansion" "character translation"
4f578862 9261.cindex "&%tr%& expansion item"
168e428f
PH
9262This item does single-character translation on its subject string. The second
9263argument is a list of characters to be translated in the subject string. Each
9264matching character is replaced by the corresponding character from the
9265replacement list. For example
9b371988
PH
9266.code
9267${tr{abcdea}{ac}{13}}
9268.endd
9269yields &`1b3de1`&. If there are duplicates in the second character string, the
168e428f
PH
9270last occurrence is used. If the third string is shorter than the second, its
9271last character is replicated. However, if it is empty, no translation takes
9272place.
9b371988 9273.endlist
168e428f
PH
9274
9275
9276
9b371988
PH
9277.section "Expansion operators" "SECTexpop"
9278.cindex "expansion" "operators"
168e428f 9279For expansion items that perform transformations on a single argument string,
9b371988 9280the &"operator"& notation is used because it is simpler and uses fewer braces.
168e428f
PH
9281The substring is first expanded before the operation is applied to it. The
9282following operations can be performed:
9283
9b371988
PH
9284.vlist
9285.vitem &*${address:*&<&'string'&>&*}*&
9286.cindex "expansion" "RFC 2822 address handling"
f89d2485 9287.cindex "&%address%& expansion item"
168e428f
PH
9288The string is interpreted as an RFC 2822 address, as it might appear in a
9289header line, and the effective address is extracted from it. If the string does
9290not parse successfully, the result is empty.
9291
9292
f89d2485
PH
9293.vitem &*${addresses:*&<&'string'&>&*}*&
9294.cindex "expansion" "RFC 2822 address handling"
9295.cindex "&%addresses%& expansion item"
9296The string (after expansion) is interpreted as a list of addresses in RFC
92972822 format, such as can be found in a &'To:'& or &'Cc:'& header line. The
9298operative address (&'local-part@domain'&) is extracted from each item, and the
9299result of the expansion is a colon-separated list, with appropriate
9300doubling of colons should any happen to be present in the email addresses.
9301Syntactically invalid RFC2822 address items are omitted from the output.
9302
9303It is possible to specify a character other than colon for the output
9304separator by starting the string with > followed by the new separator
9305character. For example:
9306.code
9307${addresses:>& Chief <ceo@up.stairs>, sec@base.ment (dogsbody)}
9308.endd
9309expands to &`ceo@up.stairs&&sec@base.ment`&. Compare the &*address*& (singular)
9310expansion item, which extracts the working address from a single RFC2822
9311address. See the &*filter*&, &*map*&, and &*reduce*& items for ways of
9312processing lists.
f89d2485
PH
9313
9314
9b371988 9315.vitem &*${base62:*&<&'digits'&>&*}*&
0a4e3112 9316.cindex "&%base62%& expansion item"
9b371988 9317.cindex "expansion" "conversion to base 62"
168e428f 9318The string must consist entirely of decimal digits. The number is converted to
068aaea8
PH
9319base 62 and output as a string of six characters, including leading zeros. In
9320the few operating environments where Exim uses base 36 instead of base 62 for
9321its message identifiers (because those systems do not have case-sensitive file
9b371988
PH
9322names), base 36 is used by this operator, despite its name. &*Note*&: Just to
9323be absolutely clear: this is &'not'& base64 encoding.
9b371988 9324
9b371988 9325.vitem &*${base62d:*&<&'base-62&~digits'&>&*}*&
0a4e3112 9326.cindex "&%base62d%& expansion item"
9b371988 9327.cindex "expansion" "conversion to base 62"
068aaea8
PH
9328The string must consist entirely of base-62 digits, or, in operating
9329environments where Exim uses base 36 instead of base 62 for its message
9330identifiers, base-36 digits. The number is converted to decimal and output as a
9331string.
168e428f 9332
9b371988
PH
9333.vitem &*${domain:*&<&'string'&>&*}*&
9334.cindex "domain" "extraction"
9335.cindex "expansion" "domain extraction"
168e428f
PH
9336The string is interpreted as an RFC 2822 address and the domain is extracted
9337from it. If the string does not parse successfully, the result is empty.
9338
9339
9b371988
PH
9340.vitem &*${escape:*&<&'string'&>&*}*&
9341.cindex "expansion" "escaping non-printing characters"
0a4e3112 9342.cindex "&%escape%& expansion item"
168e428f
PH
9343If the string contains any non-printing characters, they are converted to
9344escape sequences starting with a backslash. Whether characters with the most
9b371988
PH
9345significant bit set (so-called &"8-bit characters"&) count as printing or not
9346is controlled by the &%print_topbitchars%& option.
168e428f
PH
9347
9348
9b371988
PH
9349.vitem &*${eval:*&<&'string'&>&*}*&&~and&~&*${eval10:*&<&'string'&>&*}*&
9350.cindex "expansion" "expression evaluation"
9351.cindex "expansion" "arithmetic expression"
4f578862 9352.cindex "&%eval%& expansion item"
3cb1b51e
PH
9353These items supports simple arithmetic and bitwise logical operations in
9354expansion strings. The string (after expansion) must be a conventional
9355arithmetic expression, but it is limited to basic arithmetic operators, bitwise
9356logical operators, and parentheses. All operations are carried out using
9357integer arithmetic. The operator priorities are as follows (the same as in the
9358C programming language):
f89d2485
PH
9359.table2 70pt 300pt
9360.irow &'highest:'& "not (~), negate (-)"
9361.irow "" "multiply (*), divide (/), remainder (%)"
9362.irow "" "plus (+), minus (-)"
9363.irow "" "shift-left (<<), shift-right (>>)"
9364.irow "" "and (&&)"
9365.irow "" "xor (^)"
9366.irow &'lowest:'& "or (|)"
3cb1b51e
PH
9367.endtable
9368Binary operators with the same priority are evaluated from left to right. White
9369space is permitted before or after operators.
9370
9b371988
PH
9371For &%eval%&, numbers may be decimal, octal (starting with &"0"&) or
9372hexadecimal (starting with &"0x"&). For &%eval10%&, all numbers are taken as
db9452a9
PH
9373decimal, even if they start with a leading zero; hexadecimal numbers are not
9374permitted. This can be useful when processing numbers extracted from dates or
9375times, which often do have leading zeros.
9b371988
PH
9376
9377A number may be followed by &"K"& or &"M"& to multiply it by 1024 or 1024*1024,
168e428f 9378respectively. Negative numbers are supported. The result of the computation is
9b371988
PH
9379a decimal representation of the answer (without &"K"& or &"M"&). For example:
9380
9b371988 9381.display
3cb1b51e
PH
9382&`${eval:1+1} `& yields 2
9383&`${eval:1+2*3} `& yields 7
9384&`${eval:(1+2)*3} `& yields 9
9385&`${eval:2+42%5} `& yields 4
9386&`${eval:0xc&amp;5} `& yields 4
9387&`${eval:0xc|5} `& yields 13
9388&`${eval:0xc^5} `& yields 9
9389&`${eval:0xc>>1} `& yields 6
9390&`${eval:0xc<<1} `& yields 24
9391&`${eval:~255&amp;0x1234} `& yields 4608
9392&`${eval:-(~255&amp;0x1234)} `& yields -4608
9b371988 9393.endd
9b371988 9394
168e428f 9395As a more realistic example, in an ACL you might have
9b371988 9396.code
168e428f
PH
9397deny message = Too many bad recipients
9398 condition = \
9399 ${if and { \
9400 {>{$rcpt_count}{10}} \
9401 { \
9402 < \
9403 {$recipients_count} \
9404 {${eval:$rcpt_count/2}} \
9405 } \
9406 }{yes}{no}}
9b371988 9407.endd
168e428f
PH
9408The condition is true if there have been more than 10 RCPT commands and
9409fewer than half of them have resulted in a valid recipient.
9410
9411
9b371988
PH
9412.vitem &*${expand:*&<&'string'&>&*}*&
9413.cindex "expansion" "re-expansion of substring"
9414The &%expand%& operator causes a string to be expanded for a second time. For
168e428f 9415example,
9b371988
PH
9416.code
9417${expand:${lookup{$domain}dbm{/some/file}{$value}}}
9418.endd
9419first looks up a string in a file while expanding the operand for &%expand%&,
9420and then re-expands what it has found.
168e428f 9421
168e428f 9422
9b371988
PH
9423.vitem &*${from_utf8:*&<&'string'&>&*}*&
9424.cindex "Unicode"
9425.cindex "UTF-8" "conversion from"
9426.cindex "expansion" "UTF-8 conversion"
0a4e3112 9427.cindex "&%from_utf8%& expansion item"
168e428f
PH
9428The world is slowly moving towards Unicode, although there are no standards for
9429email yet. However, other applications (including some databases) are starting
9430to store data in Unicode, using UTF-8 encoding. This operator converts from a
9431UTF-8 string to an ISO-8859-1 string. UTF-8 code values greater than 255 are
9432converted to underscores. The input must be a valid UTF-8 string. If it is not,
9433the result is an undefined sequence of bytes.
9b371988 9434
168e428f
PH
9435Unicode code points with values less than 256 are compatible with ASCII and
9436ISO-8859-1 (also known as Latin-1).
9437For example, character 169 is the copyright symbol in both cases, though the
9438way it is encoded is different. In UTF-8, more than one byte is needed for
9439characters with code values greater than 127, whereas ISO-8859-1 is a
9440single-byte encoding (but thereby limited to 256 characters). This makes
9441translation from UTF-8 to ISO-8859-1 straightforward.
9442
9443
9b371988
PH
9444.vitem &*${hash_*&<&'n'&>&*_*&<&'m'&>&*:*&<&'string'&>&*}*&
9445.cindex "hash function" "textual"
9446.cindex "expansion" "textual hash"
9447The &%hash%& operator is a simpler interface to the hashing function that can
9448be used when the two parameters are fixed numbers (as opposed to strings that
168e428f 9449change when expanded). The effect is the same as
9b371988
PH
9450.code
9451${hash{<n>}{<m>}{<string>}}
9452.endd
9453See the description of the general &%hash%& item above for details. The
9454abbreviation &%h%& can be used when &%hash%& is used as an operator.
168e428f
PH
9455
9456
9457
9b371988
PH
9458.vitem &*${hex2b64:*&<&'hexstring'&>&*}*&
9459.cindex "base64 encoding" "conversion from hex"
9460.cindex "expansion" "hex to base64"
0a4e3112 9461.cindex "&%hex2b64%& expansion item"
168e428f
PH
9462This operator converts a hex string into one that is base64 encoded. This can
9463be useful for processing the output of the MD5 and SHA-1 hashing functions.
9464
9465
9b371988
PH
9466.vitem &*${lc:*&<&'string'&>&*}*&
9467.cindex "case forcing in strings"
9468.cindex "string" "case forcing"
9469.cindex "lower casing"
9470.cindex "expansion" "case forcing"
4f578862 9471.cindex "&%lc%& expansion item"
168e428f 9472This forces the letters in the string into lower-case, for example:
9b371988
PH
9473.code
9474${lc:$local_part}
9475.endd
9476
9477.vitem &*${length_*&<&'number'&>&*:*&<&'string'&>&*}*&
9478.cindex "expansion" "string truncation"
f89d2485 9479.cindex "&%length%& expansion item"
9b371988
PH
9480The &%length%& operator is a simpler interface to the &%length%& function that
9481can be used when the parameter is a fixed number (as opposed to a string that
168e428f 9482changes when expanded). The effect is the same as
9b371988
PH
9483.code
9484${length{<number>}{<string>}}
9485.endd
9486See the description of the general &%length%& item above for details. Note that
9487&%length%& is not the same as &%strlen%&. The abbreviation &%l%& can be used
9488when &%length%& is used as an operator.
168e428f 9489
168e428f 9490
9b371988
PH
9491.vitem &*${local_part:*&<&'string'&>&*}*&
9492.cindex "expansion" "local part extraction"
4f578862 9493.cindex "&%local_part%& expansion item"
168e428f
PH
9494The string is interpreted as an RFC 2822 address and the local part is
9495extracted from it. If the string does not parse successfully, the result is
9496empty.
9497
9498
9b371988
PH
9499.vitem &*${mask:*&<&'IP&~address'&>&*/*&<&'bit&~count'&>&*}*&
9500.cindex "masked IP address"
9501.cindex "IP address" "masking"
9502.cindex "CIDR notation"
9503.cindex "expansion" "IP address masking"
0a4e3112 9504.cindex "&%mask%& expansion item"
168e428f
PH
9505If the form of the string to be operated on is not an IP address followed by a
9506slash and an integer (that is, a network address in CIDR notation), the
9507expansion fails. Otherwise, this operator converts the IP address to binary,
9508masks off the least significant bits according to the bit count, and converts
9509the result back to text, with mask appended. For example,
9b371988
PH
9510.code
9511${mask:10.111.131.206/28}
9512.endd
9513returns the string &"10.111.131.192/28"&. Since this operation is expected to
9514be mostly used for looking up masked addresses in files, the result for an IPv6
168e428f
PH
9515address uses dots to separate components instead of colons, because colon
9516terminates a key string in lsearch files. So, for example,
9b371988
PH
9517.code
9518${mask:3ffe:ffff:836f:0a00:000a:0800:200a:c031/99}
9519.endd
168e428f 9520returns the string
9b371988
PH
9521.code
95223ffe.ffff.836f.0a00.000a.0800.2000.0000/99
9523.endd
168e428f
PH
9524Letters in IPv6 addresses are always output in lower case.
9525
9526
9b371988
PH
9527.vitem &*${md5:*&<&'string'&>&*}*&
9528.cindex "MD5 hash"
9529.cindex "expansion" "MD5 hash"
4f578862 9530.cindex "&%md5%& expansion item"
9b371988
PH
9531The &%md5%& operator computes the MD5 hash value of the string, and returns it
9532as a 32-digit hexadecimal number, in which any letters are in lower case.
168e428f
PH
9533
9534
9b371988
PH
9535.vitem &*${nhash_*&<&'n'&>&*_*&<&'m'&>&*:*&<&'string'&>&*}*&
9536.cindex "expansion" "numeric hash"
9537.cindex "hash function" "numeric"
9538The &%nhash%& operator is a simpler interface to the numeric hashing function
168e428f
PH
9539that can be used when the two parameters are fixed numbers (as opposed to
9540strings that change when expanded). The effect is the same as
9b371988
PH
9541.code
9542${nhash{<n>}{<m>}{<string>}}
9543.endd
9544See the description of the general &%nhash%& item above for details.
168e428f 9545
168e428f 9546
9b371988
PH
9547.vitem &*${quote:*&<&'string'&>&*}*&
9548.cindex "quoting" "in string expansions"
9549.cindex "expansion" "quoting"
0a4e3112 9550.cindex "&%quote%& expansion item"
9b371988 9551The &%quote%& operator puts its argument into double quotes if it
168e428f
PH
9552is an empty string or
9553contains anything other than letters, digits, underscores, dots, and hyphens.
9554Any occurrences of double quotes and backslashes are escaped with a backslash.
9b371988 9555Newlines and carriage returns are converted to &`\n`& and &`\r`&,
168e428f 9556respectively For example,
9b371988
PH
9557.code
9558${quote:ab"*"cd}
9559.endd
168e428f 9560becomes
9b371988
PH
9561.code
9562"ab\"*\"cd"
9563.endd
168e428f
PH
9564The place where this is useful is when the argument is a substitution from a
9565variable or a message header.
9566
9b371988 9567.vitem &*${quote_local_part:*&<&'string'&>&*}*&
4f578862 9568.cindex "&%quote_local_part%& expansion item"
9b371988 9569This operator is like &%quote%&, except that it quotes the string only if
168e428f 9570required to do so by the rules of RFC 2822 for quoting local parts. For
9b371988
PH
9571example, a plus sign would not cause quoting (but it would for &%quote%&).
9572If you are creating a new email address from the contents of &$local_part$&
168e428f
PH
9573(or any other unknown data), you should always use this operator.
9574
9575
9b371988
PH
9576.vitem &*${quote_*&<&'lookup-type'&>&*:*&<&'string'&>&*}*&
9577.cindex "quoting" "lookup-specific"
168e428f
PH
9578This operator applies lookup-specific quoting rules to the string. Each
9579query-style lookup type has its own quoting rules which are described with
9b371988
PH
9580the lookups in chapter &<<CHAPfdlookup>>&. For example,
9581.code
9582${quote_ldap:two * two}
9583.endd
168e428f 9584returns
9b371988
PH
9585.code
9586two%20%5C2A%20two
9587.endd
168e428f
PH
9588For single-key lookup types, no quoting is ever necessary and this operator
9589yields an unchanged string.
9590
9591
0eb8eedd
NM
9592.vitem &*${randint:*&<&'n'&>&*}*&
9593.cindex "random number"
9594This operator returns a somewhat random number which is less than the
9595supplied number and is at least 0. The quality of this randomness depends
9596on how Exim was built; the values are not suitable for keying material.
9597If Exim is linked against OpenSSL then RAND_pseudo_bytes() is used.
9598Otherwise, the implementation may be arc4random(), random() seeded by
9599srandomdev() or srandom(), or a custom implementation even weaker than
9600random().
9601
9602
9b371988
PH
9603.vitem &*${rfc2047:*&<&'string'&>&*}*&
9604.cindex "expansion" "RFC 2047"
9605.cindex "RFC 2047" "expansion operator"
4f578862 9606.cindex "&%rfc2047%& expansion item"
168e428f
PH
9607This operator encodes text according to the rules of RFC 2047. This is an
9608encoding that is used in header lines to encode non-ASCII characters. It is
9609assumed that the input string is in the encoding specified by the
9b371988
PH
9610&%headers_charset%& option, which defaults to ISO-8859-1. If the string
9611contains only characters in the range 33&--126, and no instances of the
9612characters
9613.code
9614? = ( ) < > @ , ; : \ " . [ ] _
9615.endd
168e428f 9616it is not modified. Otherwise, the result is the RFC 2047 encoding of the
9b371988 9617string, using as many &"encoded words"& as necessary to encode all the
168e428f
PH
9618characters.
9619
9620
f89d2485
PH
9621.vitem &*${rfc2047d:*&<&'string'&>&*}*&
9622.cindex "expansion" "RFC 2047"
9623.cindex "RFC 2047" "decoding"
9624.cindex "&%rfc2047d%& expansion item"
9625This operator decodes strings that are encoded as per RFC 2047. Binary zero
9626bytes are replaced by question marks. Characters are converted into the
9627character set defined by &%headers_charset%&. Overlong RFC 2047 &"words"& are
9628not recognized unless &%check_rfc2047_length%& is set false.
595028e4 9629
595028e4
PH
9630&*Note*&: If you use &%$header%&_&'xxx'&&*:*& (or &%$h%&_&'xxx'&&*:*&) to
9631access a header line, RFC 2047 decoding is done automatically. You do not need
9632to use this operator as well.
f89d2485
PH
9633
9634
168e428f 9635
db9452a9
PH
9636.vitem &*${rxquote:*&<&'string'&>&*}*&
9637.cindex "quoting" "in regular expressions"
9638.cindex "regular expressions" "quoting"
9639.cindex "&%rxquote%& expansion item"
9640The &%rxquote%& operator inserts a backslash before any non-alphanumeric
9641characters in its argument. This is useful when substituting the values of
9642variables or headers inside regular expressions.
9643
9644
9b371988
PH
9645.vitem &*${sha1:*&<&'string'&>&*}*&
9646.cindex "SHA-1 hash"
9647.cindex "expansion" "SHA-1 hashing"
4f578862 9648.cindex "&%sha2%& expansion item"
9b371988
PH
9649The &%sha1%& operator computes the SHA-1 hash value of the string, and returns
9650it as a 40-digit hexadecimal number, in which any letters are in upper case.
168e428f
PH
9651
9652
9b371988
PH
9653.vitem &*${stat:*&<&'string'&>&*}*&
9654.cindex "expansion" "statting a file"
9655.cindex "file" "extracting characteristics"
4f578862 9656.cindex "&%stat%& expansion item"
9b371988
PH
9657The string, after expansion, must be a file path. A call to the &[stat()]&
9658function is made for this path. If &[stat()]& fails, an error occurs and the
168e428f 9659expansion fails. If it succeeds, the data from the stat replaces the item, as a
9b371988
PH
9660series of <&'name'&>=<&'value'&> pairs, where the values are all numerical,
9661except for the value of &"smode"&. The names are: &"mode"& (giving the mode as
9662a 4-digit octal number), &"smode"& (giving the mode in symbolic format as a
966310-character string, as for the &'ls'& command), &"inode"&, &"device"&,
9664&"links"&, &"uid"&, &"gid"&, &"size"&, &"atime"&, &"mtime"&, and &"ctime"&. You
9665can extract individual fields using the &%extract%& expansion item.
9666
9b371988
PH
9667The use of the &%stat%& expansion in users' filter files can be locked out by
9668the system administrator. &*Warning*&: The file size may be incorrect on 32-bit
068aaea8 9669systems for files larger than 2GB.
168e428f 9670
9b371988
PH
9671.vitem &*${str2b64:*&<&'string'&>&*}*&
9672.cindex "expansion" "base64 encoding"
9673.cindex "base64 encoding" "in string expansion"
4f578862 9674.cindex "&%str2b64%& expansion item"
168e428f
PH
9675This operator converts a string into one that is base64 encoded.
9676
9677
9678
9b371988
PH
9679.vitem &*${strlen:*&<&'string'&>&*}*&
9680.cindex "expansion" "string length"
9681.cindex "string" "length in expansion"
4f578862 9682.cindex "&%strlen%& expansion item"
168e428f 9683The item is replace by the length of the expanded string, expressed as a
9b371988
PH
9684decimal number. &*Note*&: Do not confuse &%strlen%& with &%length%&.
9685
9686
9687.vitem &*${substr_*&<&'start'&>&*_*&<&'length'&>&*:*&<&'string'&>&*}*&
4f578862 9688.cindex "&%substr%& expansion item"
9b371988
PH
9689.cindex "substring extraction"
9690.cindex "expansion" "substring expansion"
9691The &%substr%& operator is a simpler interface to the &%substr%& function that
9692can be used when the two parameters are fixed numbers (as opposed to strings
9693that change when expanded). The effect is the same as
9694.code
9695${substr{<start>}{<length>}{<string>}}
9696.endd
9697See the description of the general &%substr%& item above for details. The
9698abbreviation &%s%& can be used when &%substr%& is used as an operator.
9699
4f578862
PH
9700.vitem &*${time_eval:*&<&'string'&>&*}*&
9701.cindex "&%time_eval%& expansion item"
9702.cindex "time interval" "decoding"
9703This item converts an Exim time interval such as &`2d4h5m`& into a number of
9704seconds.
4f578862 9705
9b371988 9706.vitem &*${time_interval:*&<&'string'&>&*}*&
4f578862 9707.cindex "&%time_interval%& expansion item"
9b371988 9708.cindex "time interval" "formatting"
168e428f
PH
9709The argument (after sub-expansion) must be a sequence of decimal digits that
9710represents an interval of time as a number of seconds. It is converted into a
9711number of larger units and output in Exim's normal time format, for example,
9b371988 9712&`1w3d4h2m6s`&.
168e428f 9713
9b371988
PH
9714.vitem &*${uc:*&<&'string'&>&*}*&
9715.cindex "case forcing in strings"
9716.cindex "string" "case forcing"
9717.cindex "upper casing"
9718.cindex "expansion" "case forcing"
4f578862 9719.cindex "&%uc%& expansion item"
168e428f 9720This forces the letters in the string into upper-case.
9b371988 9721.endlist
168e428f
PH
9722
9723
9724
9725
9726
9727
9b371988 9728.section "Expansion conditions" "SECTexpcond"
3cb1b51e 9729.scindex IIDexpcond "expansion" "conditions"
9b371988 9730The following conditions are available for testing by the &%${if%& construct
168e428f
PH
9731while expanding strings:
9732
9b371988
PH
9733.vlist
9734.vitem &*!*&<&'condition'&>
9735.cindex "expansion" "negating a condition"
4f578862 9736.cindex "negation" "in expansion condition"
168e428f
PH
9737Preceding any condition with an exclamation mark negates the result of the
9738condition.
9739
9b371988
PH
9740.vitem <&'symbolic&~operator'&>&~&*{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
9741.cindex "numeric comparison"
9742.cindex "expansion" "numeric comparison"
168e428f
PH
9743There are a number of symbolic operators for doing numeric comparisons. They
9744are:
9b371988
PH
9745.display
9746&`= `& equal
9747&`== `& equal
9748&`> `& greater
9749&`>= `& greater or equal
9750&`< `& less
9751&`<= `& less or equal
9752.endd
9753For example:
9754.code
9755${if >{$message_size}{10M} ...
9756.endd
168e428f
PH
9757Note that the general negation operator provides for inequality testing. The
9758two strings must take the form of optionally signed decimal integers,
9b371988
PH
9759optionally followed by one of the letters &"K"& or &"M"& (in either upper or
9760lower case), signifying multiplication by 1024 or 1024*1024, respectively.
f89d2485
PH
9761As a special case, the numerical value of an empty string is taken as
9762zero.
168e428f 9763
71e1673f 9764.new
f3766eb5
NM
9765.vitem &*bool&~{*&<&'string'&>&*}*&
9766.cindex "expansion" "boolean parsing"
9767.cindex "&%bool%& expansion condition"
9768This condition turns a string holding a true or false representation into
9769a boolean state. It parses &"true"&, &"false"&, &"yes"& and &"no"&
9770(case-insensitively); also positive integer numbers map to true if non-zero,
9771false if zero. Leading whitespace is ignored.
9772All other string values will result in expansion failure.
9773
9774When combined with ACL variables, this expansion condition will let you
9775make decisions in one place and act on those decisions in another place.
9776For example,
9777.code
9778${if bool{$acl_m_privileged_sender} ...
9779.endd
71e1673f 9780.wen
f3766eb5 9781
9b371988
PH
9782.vitem &*crypteq&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
9783.cindex "expansion" "encrypted comparison"
f89d2485 9784.cindex "encrypted strings, comparing"
4f578862 9785.cindex "&%crypteq%& expansion condition"
168e428f 9786This condition is included in the Exim binary if it is built to support any
9b371988
PH
9787authentication mechanisms (see chapter &<<CHAPSMTPAUTH>>&). Otherwise, it is
9788necessary to define SUPPORT_CRYPTEQ in &_Local/Makefile_& to get &%crypteq%&
168e428f 9789included in the binary.
9b371988
PH
9790
9791The &%crypteq%& condition has two arguments. The first is encrypted and
9792compared against the second, which is already encrypted. The second string may
9793be in the LDAP form for storing encrypted strings, which starts with the
9794encryption type in curly brackets, followed by the data. If the second string
9795does not begin with &"{"& it is assumed to be encrypted with &[crypt()]& or
9796&[crypt16()]& (see below), since such strings cannot begin with &"{"&.
9797Typically this will be a field from a password file. An example of an encrypted
9798string in LDAP form is:
9799.code
9800{md5}CY9rzUYh03PK3k6DJie09g==
9801.endd
168e428f
PH
9802If such a string appears directly in an expansion, the curly brackets have to
9803be quoted, because they are part of the expansion syntax. For example:
9b371988
PH
9804.code
9805${if crypteq {test}{\{md5\}CY9rzUYh03PK3k6DJie09g==}{yes}{no}}
9806.endd
168e428f
PH
9807The following encryption types (whose names are matched case-independently) are
9808supported:
9b371988
PH
9809
9810.ilist
9811.cindex "MD5 hash"
9812.cindex "base64 encoding" "in encrypted password"
9813&%{md5}%& computes the MD5 digest of the first string, and expresses this as
168e428f
PH
9814printable characters to compare with the remainder of the second string. If the
9815length of the comparison string is 24, Exim assumes that it is base64 encoded
9816(as in the above example). If the length is 32, Exim assumes that it is a
9817hexadecimal encoding of the MD5 digest. If the length not 24 or 32, the
9818comparison fails.
9819
9b371988
PH
9820.next
9821.cindex "SHA-1 hash"
9822&%{sha1}%& computes the SHA-1 digest of the first string, and expresses this as
168e428f
PH
9823printable characters to compare with the remainder of the second string. If the
9824length of the comparison string is 28, Exim assumes that it is base64 encoded.
9825If the length is 40, Exim assumes that it is a hexadecimal encoding of the
9826SHA-1 digest. If the length is not 28 or 40, the comparison fails.
9827
9b371988
PH
9828.next
9829.cindex "&[crypt()]&"
9830&%{crypt}%& calls the &[crypt()]& function, which traditionally used to use
9831only the first eight characters of the password. However, in modern operating
168e428f
PH
9832systems this is no longer true, and in many cases the entire password is used,
9833whatever its length.
3cb1b51e 9834
9b371988
PH
9835.next
9836.cindex "&[crypt16()]&"
f89d2485 9837&%{crypt16}%& calls the &[crypt16()]& function, which was originally created to
3cb1b51e
PH
9838use up to 16 characters of the password in some operating systems. Again, in
9839modern operating systems, more characters may be used.
9b371988 9840.endlist
3cb1b51e
PH
9841Exim has its own version of &[crypt16()]&, which is just a double call to
9842&[crypt()]&. For operating systems that have their own version, setting
9b371988 9843HAVE_CRYPT16 in &_Local/Makefile_& when building Exim causes it to use the
168e428f 9844operating system version instead of its own. This option is set by default in
9b371988
PH
9845the OS-dependent &_Makefile_& for those operating systems that are known to
9846support &[crypt16()]&.
9847
3cb1b51e
PH
9848Some years after Exim's &[crypt16()]& was implemented, a user discovered that
9849it was not using the same algorithm as some operating systems' versions. It
9850turns out that as well as &[crypt16()]& there is a function called
9851&[bigcrypt()]& in some operating systems. This may or may not use the same
9852algorithm, and both of them may be different to Exim's built-in &[crypt16()]&.
9853
9854However, since there is now a move away from the traditional &[crypt()]&
9855functions towards using SHA1 and other algorithms, tidying up this area of
9856Exim is seen as very low priority.
9857
9858If you do not put a encryption type (in curly brackets) in a &%crypteq%&
9859comparison, the default is usually either &`{crypt}`& or &`{crypt16}`&, as
9860determined by the setting of DEFAULT_CRYPT in &_Local/Makefile_&. The default
9861default is &`{crypt}`&. Whatever the default, you can always use either
9862function by specifying it explicitly in curly brackets.
168e428f 9863
9b371988
PH
9864.vitem &*def:*&<&'variable&~name'&>
9865.cindex "expansion" "checking for empty variable"
4f578862 9866.cindex "&%def%& expansion condition"
9b371988
PH
9867The &%def%& condition must be followed by the name of one of the expansion
9868variables defined in section &<<SECTexpvar>>&. The condition is true if the
9869variable does not contain the empty string. For example:
9870.code
9871${if def:sender_ident {from $sender_ident}}
9872.endd
9873Note that the variable name is given without a leading &%$%& character. If the
168e428f
PH
9874variable does not exist, the expansion fails.
9875
9b371988
PH
9876.vitem "&*def:header_*&<&'header&~name'&>&*:*&&~&~or&~&&&
9877 &~&*def:h_*&<&'header&~name'&>&*:*&"
9878.cindex "expansion" "checking header line existence"
168e428f
PH
9879This condition is true if a message is being processed and the named header
9880exists in the message. For example,
9b371988
PH
9881.code
9882${if def:header_reply-to:{$h_reply-to:}{$h_from:}}
9883.endd
9884&*Note*&: No &%$%& appears before &%header_%& or &%h_%& in the condition, and
9885the header name must be terminated by a colon if white space does not follow.
9886
f89d2485
PH
9887.vitem &*eq&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*& &&&
9888 &*eqi&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
9b371988
PH
9889.cindex "string" "comparison"
9890.cindex "expansion" "string comparison"
4f578862 9891.cindex "&%eq%& expansion condition"
4f578862 9892.cindex "&%eqi%& expansion condition"
168e428f 9893The two substrings are first expanded. The condition is true if the two
f89d2485
PH
9894resulting strings are identical. For &%eq%& the comparison includes the case of
9895letters, whereas for &%eqi%& the comparison is case-independent.
168e428f 9896
9b371988
PH
9897.vitem &*exists&~{*&<&'file&~name'&>&*}*&
9898.cindex "expansion" "file existence test"
9899.cindex "file" "existence test"
4f578862 9900.cindex "&%exists%&, expansion condition"
168e428f
PH
9901The substring is first expanded and then interpreted as an absolute path. The
9902condition is true if the named file (or directory) exists. The existence test
9b371988 9903is done by calling the &[stat()]& function. The use of the &%exists%& test in
168e428f
PH
9904users' filter files may be locked out by the system administrator.
9905
9b371988
PH
9906.vitem &*first_delivery*&
9907.cindex "delivery" "first"
9908.cindex "first delivery"
9909.cindex "expansion" "first delivery test"
4f578862 9910.cindex "&%first_delivery%& expansion condition"
168e428f
PH
9911This condition, which has no data, is true during a message's first delivery
9912attempt. It is false during any subsequent delivery attempts.
9913
168e428f 9914
f89d2485
PH
9915.vitem "&*forall{*&<&'a list'&>&*}{*&<&'a condition'&>&*}*&" &&&
9916 "&*forany{*&<&'a list'&>&*}{*&<&'a condition'&>&*}*&"
9917.cindex "list" "iterative conditions"
9918.cindex "expansion" "&*forall*& condition"
9919.cindex "expansion" "&*forany*& condition"
9920.vindex "&$item$&"
9921These conditions iterate over a list. The first argument is expanded to form
9922the list. By default, the list separator is a colon, but it can be changed by
9923the normal method. The second argument is interpreted as a condition that is to
9924be applied to each item in the list in turn. During the interpretation of the
9925condition, the current list item is placed in a variable called &$item$&.
9926.ilist
9927For &*forany*&, interpretation stops if the condition is true for any item, and
9928the result of the whole condition is true. If the condition is false for all
9929items in the list, the overall condition is false.
9930.next
9931For &*forall*&, interpretation stops if the condition is false for any item,
9932and the result of the whole condition is false. If the condition is true for
9933all items in the list, the overall condition is true.
9934.endlist
9935Note that negation of &*forany*& means that the condition must be false for all
9936items for the overall condition to succeed, and negation of &*forall*& means
9937that the condition must be false for at least one item. In this example, the
9938list separator is changed to a comma:
9939.code
9940${if forany{<, $recipients}{match{$item}{^user3@}}{yes}{no}}
9941.endd
9942The value of &$item$& is saved and restored while &*forany*& or &*forall*& is
9943being processed, to enable these expansion items to be nested.
f89d2485
PH
9944
9945
9946.vitem &*ge&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*& &&&
9947 &*gei&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
9b371988
PH
9948.cindex "string" "comparison"
9949.cindex "expansion" "string comparison"
f89d2485 9950.cindex "&%ge%& expansion condition"
4f578862 9951.cindex "&%gei%& expansion condition"
168e428f 9952The two substrings are first expanded. The condition is true if the first
f89d2485 9953string is lexically greater than or equal to the second string. For &%ge%& the
9b371988 9954comparison includes the case of letters, whereas for &%gei%& the comparison is
168e428f
PH
9955case-independent.
9956
f89d2485
PH
9957.vitem &*gt&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*& &&&
9958 &*gti&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
9b371988
PH
9959.cindex "string" "comparison"
9960.cindex "expansion" "string comparison"
f89d2485 9961.cindex "&%gt%& expansion condition"
4f578862 9962.cindex "&%gti%& expansion condition"
168e428f 9963The two substrings are first expanded. The condition is true if the first
f89d2485 9964string is lexically greater than the second string. For &%gt%& the comparison
9b371988 9965includes the case of letters, whereas for &%gti%& the comparison is
168e428f
PH
9966case-independent.
9967
f89d2485
PH
9968.vitem &*isip&~{*&<&'string'&>&*}*& &&&
9969 &*isip4&~{*&<&'string'&>&*}*& &&&
9970 &*isip6&~{*&<&'string'&>&*}*&
9b371988
PH
9971.cindex "IP address" "testing string format"
9972.cindex "string" "testing for IP address"
f89d2485
PH
9973.cindex "&%isip%& expansion condition"
9974.cindex "&%isip4%& expansion condition"
4f578862 9975.cindex "&%isip6%& expansion condition"
168e428f 9976The substring is first expanded, and then tested to see if it has the form of
9b371988 9977an IP address. Both IPv4 and IPv6 addresses are valid for &%isip%&, whereas
595028e4
PH
9978&%isip4%& and &%isip6%& test specifically for IPv4 or IPv6 addresses.
9979
595028e4
PH
9980For an IPv4 address, the test is for four dot-separated components, each of
9981which consists of from one to three digits. For an IPv6 address, up to eight
9982colon-separated components are permitted, each containing from one to four
9983hexadecimal digits. There may be fewer than eight components if an empty
9984component (adjacent colons) is present. Only one empty component is permitted.
9985
9986&*Note*&: The checks are just on the form of the address; actual numerical
9987values are not considered. Thus, for example, 999.999.999.999 passes the IPv4
9988check. The main use of these tests is to distinguish between IP addresses and
9989host names, or between IPv4 and IPv6 addresses. For example, you could use
9b371988
PH
9990.code
9991${if isip4{$sender_host_address}...
9992.endd
595028e4 9993to test which IP version an incoming SMTP connection is using.
168e428f 9994
9b371988
PH
9995.vitem &*ldapauth&~{*&<&'ldap&~query'&>&*}*&
9996.cindex "LDAP" "use for authentication"
9997.cindex "expansion" "LDAP authentication test"
4f578862 9998.cindex "&%ldapauth%& expansion condition"
168e428f 9999This condition supports user authentication using LDAP. See section
9b371988 10000&<<SECTldap>>& for details of how to use LDAP in lookups and the syntax of
168e428f
PH
10001queries. For this use, the query must contain a user name and password. The
10002query itself is not used, and can be empty. The condition is true if the
10003password is not empty, and the user name and password are accepted by the LDAP
10004server. An empty password is rejected without calling LDAP because LDAP binds
10005with an empty password are considered anonymous regardless of the username, and
9b371988
PH
10006will succeed in most configurations. See chapter &<<CHAPSMTPAUTH>>& for details
10007of SMTP authentication, and chapter &<<CHAPplaintext>>& for an example of how
168e428f
PH
10008this can be used.
10009
10010
f89d2485
PH
10011.vitem &*le&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*& &&&
10012 &*lei&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
9b371988
PH
10013.cindex "string" "comparison"
10014.cindex "expansion" "string comparison"
f89d2485 10015.cindex "&%le%& expansion condition"
4f578862 10016.cindex "&%lei%& expansion condition"
168e428f 10017The two substrings are first expanded. The condition is true if the first
f89d2485 10018string is lexically less than or equal to the second string. For &%le%& the
9b371988 10019comparison includes the case of letters, whereas for &%lei%& the comparison is
168e428f
PH
10020case-independent.
10021
f89d2485
PH
10022.vitem &*lt&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*& &&&
10023 &*lti&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
9b371988
PH
10024.cindex "string" "comparison"
10025.cindex "expansion" "string comparison"
f89d2485 10026.cindex "&%lt%& expansion condition"
4f578862 10027.cindex "&%lti%& expansion condition"
168e428f 10028The two substrings are first expanded. The condition is true if the first
f89d2485 10029string is lexically less than the second string. For &%lt%& the comparison
9b371988 10030includes the case of letters, whereas for &%lti%& the comparison is
168e428f
PH
10031case-independent.
10032
10033
9b371988
PH
10034.vitem &*match&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
10035.cindex "expansion" "regular expression comparison"
10036.cindex "regular expressions" "match in expanded string"
0a4e3112 10037.cindex "&%match%& expansion condition"
168e428f
PH
10038The two substrings are first expanded. The second is then treated as a regular
10039expression and applied to the first. Because of the pre-expansion, if the
10040regular expression contains dollar, or backslash characters, they must be
10041escaped. Care must also be taken if the regular expression contains braces
10042(curly brackets). A closing brace must be escaped so that it is not taken as a
9b371988
PH
10043premature termination of <&'string2'&>. The easiest approach is to use the
10044&`\N`& feature to disable expansion of the regular expression.
168e428f 10045For example,
9b371988
PH
10046.code
10047${if match {$local_part}{\N^\d{3}\N} ...
10048.endd
168e428f
PH
10049If the whole expansion string is in double quotes, further escaping of
10050backslashes is also required.
9b371988 10051
168e428f
PH
10052The condition is true if the regular expression match succeeds.
10053The regular expression is not required to begin with a circumflex
10054metacharacter, but if there is no circumflex, the expression is not anchored,
10055and it may match anywhere in the subject, not just at the start. If you want
9b371988 10056the pattern to match at the end of the subject, you must include the &`$`&
168e428f 10057metacharacter at an appropriate point.
9b371988
PH
10058
10059.cindex "numerical variables (&$1$& &$2$& etc)" "in &%if%& expansion"
10060At the start of an &%if%& expansion the values of the numeric variable
10061substitutions &$1$& etc. are remembered. Obeying a &%match%& condition that
168e428f
PH
10062succeeds causes them to be reset to the substrings of that condition and they
10063will have these values during the expansion of the success string. At the end
9b371988
PH
10064of the &%if%& expansion, the previous values are restored. After testing a
10065combination of conditions using &%or%&, the subsequent values of the numeric
168e428f
PH
10066variables are those of the condition that succeeded.
10067
9b371988 10068.vitem &*match_address&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
4f578862 10069.cindex "&%match_address%& expansion condition"
9b371988 10070See &*match_local_part*&.
168e428f 10071
9b371988 10072.vitem &*match_domain&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
4f578862 10073.cindex "&%match_domain%& expansion condition"
9b371988 10074See &*match_local_part*&.
168e428f 10075
9b371988 10076.vitem &*match_ip&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
4f578862 10077.cindex "&%match_ip%& expansion condition"
068aaea8
PH
10078This condition matches an IP address to a list of IP address patterns. It must
10079be followed by two argument strings. The first (after expansion) must be an IP
10080address or an empty string. The second (after expansion) is a restricted host
10081list that can match only an IP address, not a host name. For example:
9b371988 10082.code
068aaea8 10083${if match_ip{$sender_host_address}{1.2.3.4:5.6.7.8}{...}{...}}
9b371988 10084.endd
068aaea8 10085The specific types of host list item that are permitted in the list are:
068aaea8 10086
9b371988
PH
10087.ilist
10088An IP address, optionally with a CIDR mask.
10089.next
10090A single asterisk, which matches any IP address.
10091.next
10092An empty item, which matches only if the IP address is empty. This could be
068aaea8
PH
10093useful for testing for a locally submitted message or one from specific hosts
10094in a single test such as
9b371988 10095. ==== As this is a nested list, any displays it contains must be indented
f89d2485
PH
10096. ==== as otherwise they are too far to the left. This comment applies to
10097. ==== the use of xmlto plus fop. There's no problem when formatting with
10098. ==== sdop, with or without the extra indent.
9b371988
PH
10099.code
10100 ${if match_ip{$sender_host_address}{:4.3.2.1:...}{...}{...}}
10101.endd
068aaea8 10102where the first item in the list is the empty string.
9b371988
PH
10103.next
10104The item @[] matches any of the local host's interface addresses.
10105.next
f89d2485
PH
10106Single-key lookups are assumed to be like &"net-"& style lookups in host lists,
10107even if &`net-`& is not specified. There is never any attempt to turn the IP
10108address into a host name. The most common type of linear search for
10109&*match_ip*& is likely to be &*iplsearch*&, in which the file can contain CIDR
10110masks. For example:
10111.code
10112 ${if match_ip{$sender_host_address}{iplsearch;/some/file}...
10113.endd
10114It is of course possible to use other kinds of lookup, and in such a case, you
10115do need to specify the &`net-`& prefix if you want to specify a specific
10116address mask, for example:
9b371988 10117.code
f89d2485 10118 ${if match_ip{$sender_host_address}{net24-dbm;/some/file}...
9b371988 10119.endd
f89d2485
PH
10120However, unless you are combining a &%match_ip%& condition with others, it is
10121just as easy to use the fact that a lookup is itself a condition, and write:
db9452a9 10122.code
f89d2485 10123 ${lookup{${mask:$sender_host_address/24}}dbm{/a/file}...
db9452a9 10124.endd
9b371988
PH
10125.endlist ilist
10126
10127Consult section &<<SECThoslispatip>>& for further details of these patterns.
9b371988
PH
10128
10129.vitem &*match_local_part&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
10130.cindex "domain list" "in expansion condition"
10131.cindex "address list" "in expansion condition"
f89d2485 10132.cindex "local part" "list, in expansion condition"
4f578862 10133.cindex "&%match_local_part%& expansion condition"
9b371988 10134This condition, together with &%match_address%& and &%match_domain%&, make it
068aaea8
PH
10135possible to test domain, address, and local part lists within expansions. Each
10136condition requires two arguments: an item and a list to match. A trivial
10137example is:
9b371988
PH
10138.code
10139${if match_domain{a.b.c}{x.y.z:a.b.c:p.q.r}{yes}{no}}
10140.endd
168e428f
PH
10141In each case, the second argument may contain any of the allowable items for a
10142list of the appropriate type. Also, because the second argument (after
10143expansion) is a standard form of list, it is possible to refer to a named list.
10144Thus, you can use conditions like this:
9b371988
PH
10145.code
10146${if match_domain{$domain}{+local_domains}{...
10147.endd
10148.cindex "&`+caseful`&"
10149For address lists, the matching starts off caselessly, but the &`+caseful`&
168e428f
PH
10150item can be used, as in all address lists, to cause subsequent items to
10151have their local parts matched casefully. Domains are always matched
10152caselessly.
9b371988
PH
10153
10154&*Note*&: Host lists are &'not'& supported in this way. This is because
168e428f 10155hosts have two identities: a name and an IP address, and it is not clear
068aaea8 10156how to specify cleanly how such a test would work. However, IP addresses can be
9b371988
PH
10157matched using &%match_ip%&.
10158
10159.vitem &*pam&~{*&<&'string1'&>&*:*&<&'string2'&>&*:...}*&
10160.cindex "PAM authentication"
10161.cindex "AUTH" "with PAM"
10162.cindex "Solaris" "PAM support"
10163.cindex "expansion" "PAM authentication test"
4f578862 10164.cindex "&%pam%& expansion condition"
9b371988
PH
10165&'Pluggable Authentication Modules'&
10166(&url(http://www.kernel.org/pub/linux/libs/pam/)) are a facility that is
10167available in the latest releases of Solaris and in some GNU/Linux
10168distributions. The Exim support, which is intended for use in conjunction with
10169the SMTP AUTH command, is available only if Exim is compiled with
10170.code
10171SUPPORT_PAM=yes
10172.endd
10173in &_Local/Makefile_&. You probably need to add &%-lpam%& to EXTRALIBS, and
10174in some releases of GNU/Linux &%-ldl%& is also needed.
10175
168e428f 10176The argument string is first expanded, and the result must be a
068aaea8 10177colon-separated list of strings. Leading and trailing white space is ignored.
9b371988
PH
10178The PAM module is initialized with the service name &"exim"& and the user name
10179taken from the first item in the colon-separated data string (<&'string1'&>).
10180The remaining items in the data string are passed over in response to requests
10181from the authentication function. In the simple case there will only be one
10182request, for a password, so the data consists of just two strings.
10183
168e428f
PH
10184There can be problems if any of the strings are permitted to contain colon
10185characters. In the usual way, these have to be doubled to avoid being taken as
9b371988 10186separators. If the data is being inserted from a variable, the &%sg%& expansion
168e428f
PH
10187item can be used to double any existing colons. For example, the configuration
10188of a LOGIN authenticator might contain this setting:
9b371988 10189.code
db9452a9 10190server_condition = ${if pam{$auth1:${sg{$auth2}{:}{::}}}}
9b371988 10191.endd
168e428f 10192For a PLAIN authenticator you could use:
9b371988 10193.code
db9452a9 10194server_condition = ${if pam{$auth2:${sg{$auth3}{:}{::}}}}
9b371988 10195.endd
168e428f
PH
10196In some operating systems, PAM authentication can be done only from a process
10197running as root. Since Exim is running as the Exim user when receiving
10198messages, this means that PAM cannot be used directly in those systems.
9b371988
PH
10199A patched version of the &'pam_unix'& module that comes with the
10200Linux PAM package is available from &url(http://www.e-admin.de/pam_exim/).
168e428f
PH
10201The patched module allows one special uid/gid combination, in addition to root,
10202to authenticate. If you build the patched module to allow the Exim user and
10203group, PAM can then be used from an Exim authenticator.
10204
10205
9b371988
PH
10206.vitem &*pwcheck&~{*&<&'string1'&>&*:*&<&'string2'&>&*}*&
10207.cindex "&'pwcheck'& daemon"
10208.cindex "Cyrus"
10209.cindex "expansion" "&'pwcheck'& authentication test"
4f578862 10210.cindex "&%pwcheck%& expansion condition"
9b371988 10211This condition supports user authentication using the Cyrus &'pwcheck'& daemon.
168e428f 10212This is one way of making it possible for passwords to be checked by a process
9b371988
PH
10213that is not running as root. &*Note*&: The use of &'pwcheck'& is now
10214deprecated. Its replacement is &'saslauthd'& (see below).
10215
168e428f 10216The pwcheck support is not included in Exim by default. You need to specify
9b371988 10217the location of the pwcheck daemon's socket in &_Local/Makefile_& before
168e428f 10218building Exim. For example:
9b371988
PH
10219.code
10220CYRUS_PWCHECK_SOCKET=/var/pwcheck/pwcheck
10221.endd
168e428f
PH
10222You do not need to install the full Cyrus software suite in order to use
10223the pwcheck daemon. You can compile and install just the daemon alone
9b371988
PH
10224from the Cyrus SASL library. Ensure that &'exim'& is the only user that has
10225access to the &_/var/pwcheck_& directory.
10226
10227The &%pwcheck%& condition takes one argument, which must be the user name and
168e428f
PH
10228password, separated by a colon. For example, in a LOGIN authenticator
10229configuration, you might have this:
9b371988 10230.code
db9452a9 10231server_condition = ${if pwcheck{$auth1:$auth2}}
9b371988 10232.endd
71e1673f 10233.new
e2f03231
TK
10234Again, for a PLAIN authenticator configuration, this would be:
10235.code
10236server_condition = ${if pwcheck{$auth2:$auth3}}
10237.endd
71e1673f 10238.wen
9b371988
PH
10239.vitem &*queue_running*&
10240.cindex "queue runner" "detecting when delivering from"
10241.cindex "expansion" "queue runner test"
f89d2485 10242.cindex "&%queue_running%& expansion condition"
168e428f
PH
10243This condition, which has no data, is true during delivery attempts that are
10244initiated by queue runner processes, and false otherwise.
10245
10246
9b371988
PH
10247.vitem &*radius&~{*&<&'authentication&~string'&>&*}*&
10248.cindex "Radius"
10249.cindex "expansion" "Radius authentication"
3cb1b51e 10250.cindex "&%radius%& expansion condition"
168e428f 10251Radius authentication (RFC 2865) is supported in a similar way to PAM. You must
9b371988 10252set RADIUS_CONFIG_FILE in &_Local/Makefile_& to specify the location of
168e428f
PH
10253the Radius client configuration file in order to build Exim with Radius
10254support.
9b371988 10255
9b371988 10256With just that one setting, Exim expects to be linked with the &%radiusclient%&
068aaea8
PH
10257library, using the original API. If you are using release 0.4.0 or later of
10258this library, you need to set
9b371988 10259.code
068aaea8 10260RADIUS_LIB_TYPE=RADIUSCLIENTNEW
9b371988
PH
10261.endd
10262in &_Local/Makefile_& when building Exim. You can also link Exim with the
10263&%libradius%& library that comes with FreeBSD. To do this, set
9b371988
PH
10264.code
10265RADIUS_LIB_TYPE=RADLIB
10266.endd
10267in &_Local/Makefile_&, in addition to setting RADIUS_CONFIGURE_FILE.
168e428f
PH
10268You may also have to supply a suitable setting in EXTRALIBS so that the
10269Radius library can be found when Exim is linked.
9b371988 10270
168e428f
PH
10271The string specified by RADIUS_CONFIG_FILE is expanded and passed to the
10272Radius client library, which calls the Radius server. The condition is true if
9b371988
PH
10273the authentication is successful. For example:
10274.code
db9452a9 10275server_condition = ${if radius{<arguments>}}
9b371988
PH
10276.endd
10277
10278
10279.vitem "&*saslauthd&~{{*&<&'user'&>&*}{*&<&'password'&>&*}&&&
10280 {*&<&'service'&>&*}{*&<&'realm'&>&*}}*&"
10281.cindex "&'saslauthd'& daemon"
10282.cindex "Cyrus"
10283.cindex "expansion" "&'saslauthd'& authentication test"
4f578862 10284.cindex "&%saslauthd%& expansion condition"
9b371988
PH
10285This condition supports user authentication using the Cyrus &'saslauthd'&
10286daemon. This replaces the older &'pwcheck'& daemon, which is now deprecated.
168e428f
PH
10287Using this daemon is one way of making it possible for passwords to be checked
10288by a process that is not running as root.
9b371988 10289
168e428f 10290The saslauthd support is not included in Exim by default. You need to specify
9b371988 10291the location of the saslauthd daemon's socket in &_Local/Makefile_& before
168e428f 10292building Exim. For example:
9b371988
PH
10293.code
10294CYRUS_SASLAUTHD_SOCKET=/var/state/saslauthd/mux
10295.endd
168e428f
PH
10296You do not need to install the full Cyrus software suite in order to use
10297the saslauthd daemon. You can compile and install just the daemon alone
10298from the Cyrus SASL library.
168e428f 10299
9b371988
PH
10300Up to four arguments can be supplied to the &%saslauthd%& condition, but only
10301two are mandatory. For example:
10302.code
db9452a9 10303server_condition = ${if saslauthd{{$auth1}{$auth2}}}
9b371988 10304.endd
168e428f
PH
10305The service and the realm are optional (which is why the arguments are enclosed
10306in their own set of braces). For details of the meaning of the service and
10307realm, and how to run the daemon, consult the Cyrus documentation.
9b371988 10308.endlist vlist
168e428f
PH
10309
10310
10311
f89d2485 10312.section "Combining expansion conditions" "SECID84"
9b371988
PH
10313.cindex "expansion" "combining conditions"
10314Several conditions can be tested at once by combining them using the &%and%&
10315and &%or%& combination conditions. Note that &%and%& and &%or%& are complete
10316conditions on their own, and precede their lists of sub-conditions. Each
10317sub-condition must be enclosed in braces within the overall braces that contain
10318the list. No repetition of &%if%& is used.
168e428f
PH
10319
10320
9b371988
PH
10321.vlist
10322.vitem &*or&~{{*&<&'cond1'&>&*}{*&<&'cond2'&>&*}...}*&
10323.cindex "&""or""& expansion condition"
10324.cindex "expansion" "&""or""& of conditions"
168e428f
PH
10325The sub-conditions are evaluated from left to right. The condition is true if
10326any one of the sub-conditions is true.
10327For example,
9b371988
PH
10328.code
10329${if or {{eq{$local_part}{spqr}}{eq{$domain}{testing.com}}}...
10330.endd
168e428f 10331When a true sub-condition is found, the following ones are parsed but not
9b371988 10332evaluated. If there are several &"match"& sub-conditions the values of the
168e428f
PH
10333numeric variables afterwards are taken from the first one that succeeds.
10334
9b371988
PH
10335.vitem &*and&~{{*&<&'cond1'&>&*}{*&<&'cond2'&>&*}...}*&
10336.cindex "&""and""& expansion condition"
10337.cindex "expansion" "&""and""& of conditions"
168e428f 10338The sub-conditions are evaluated from left to right. The condition is true if
9b371988 10339all of the sub-conditions are true. If there are several &"match"&
168e428f
PH
10340sub-conditions, the values of the numeric variables afterwards are taken from
10341the last one. When a false sub-condition is found, the following ones are
10342parsed but not evaluated.
9b371988 10343.endlist
3cb1b51e 10344.ecindex IIDexpcond
168e428f
PH
10345
10346
10347
10348
9b371988 10349.section "Expansion variables" "SECTexpvar"
f89d2485 10350.cindex "expansion" "variables, list of"
168e428f
PH
10351This section contains an alphabetical list of all the expansion variables. Some
10352of them are available only when Exim is compiled with specific options such as
10353support for TLS or the content scanning extension.
10354
9b371988
PH
10355.vlist
10356.vitem "&$0$&, &$1$&, etc"
10357.cindex "numerical variables (&$1$& &$2$& etc)"
10358When a &%match%& expansion condition succeeds, these variables contain the
168e428f 10359captured substrings identified by the regular expression during subsequent
f89d2485
PH
10360processing of the success string of the containing &%if%& expansion item.
10361However, they do not retain their values afterwards; in fact, their previous
10362values are restored at the end of processing an &%if%& item. The numerical
10363variables may also be set externally by some other matching process which
10364precedes the expansion of the string. For example, the commands available in
10365Exim filter files include an &%if%& command with its own regular expression
10366matching condition.
168e428f 10367
f89d2485 10368.vitem "&$acl_c...$&"
9b371988 10369Values can be placed in these variables by the &%set%& modifier in an ACL. They
f89d2485
PH
10370can be given any name that starts with &$acl_c$& and is at least six characters
10371long, but the sixth character must be either a digit or an underscore. For
10372example: &$acl_c5$&, &$acl_c_mycount$&. The values of the &$acl_c...$&
10373variables persist throughout the lifetime of an SMTP connection. They can be
10374used to pass information between ACLs and between different invocations of the
10375same ACL. When a message is received, the values of these variables are saved
10376with the message, and can be accessed by filters, routers, and transports
168e428f
PH
10377during subsequent delivery.
10378
f89d2485
PH
10379.vitem "&$acl_m...$&"
10380These variables are like the &$acl_c...$& variables, except that their values
10381are reset after a message has been received. Thus, if several messages are
10382received in one SMTP connection, &$acl_m...$& values are not passed on from one
10383message to the next, as &$acl_c...$& values are. The &$acl_m...$& variables are
10384also reset by MAIL, RSET, EHLO, HELO, and after starting a TLS session. When a
10385message is received, the values of these variables are saved with the message,
10386and can be accessed by filters, routers, and transports during subsequent
10387delivery.
f89d2485 10388
9b371988 10389.vitem &$acl_verify_message$&
f89d2485 10390.vindex "&$acl_verify_message$&"
068aaea8
PH
10391After an address verification has failed, this variable contains the failure
10392message. It retains its value for use in subsequent modifiers. The message can
10393be preserved by coding like this:
9b371988 10394.code
068aaea8
PH
10395warn !verify = sender
10396 set acl_m0 = $acl_verify_message
9b371988
PH
10397.endd
10398You can use &$acl_verify_message$& during the expansion of the &%message%& or
10399&%log_message%& modifiers, to include information about the verification
10400failure.
9b371988
PH
10401
10402.vitem &$address_data$&
f89d2485 10403.vindex "&$address_data$&"
9b371988 10404This variable is set by means of the &%address_data%& option in routers. The
168e428f
PH
10405value then remains with the address while it is processed by subsequent routers
10406and eventually a transport. If the transport is handling multiple addresses,
9b371988
PH
10407the value from the first address is used. See chapter &<<CHAProutergeneric>>&
10408for more details. &*Note*&: The contents of &$address_data$& are visible in
10409user filter files.
10410
10411If &$address_data$& is set when the routers are called from an ACL to verify
168e428f
PH
10412a recipient address, the final value is still in the variable for subsequent
10413conditions and modifiers of the ACL statement. If routing the address caused it
10414to be redirected to just one address, the child address is also routed as part
9b371988 10415of the verification, and in this case the final value of &$address_data$& is
168e428f 10416from the child's routing.
9b371988
PH
10417
10418If &$address_data$& is set when the routers are called from an ACL to verify a
168e428f 10419sender address, the final value is also preserved, but this time in
9b371988 10420&$sender_address_data$&, to distinguish it from data from a recipient
168e428f 10421address.
9b371988 10422
168e428f
PH
10423In both cases (recipient and sender verification), the value does not persist
10424after the end of the current ACL statement. If you want to preserve
10425these values for longer, you can save them in ACL variables.
10426
9b371988 10427.vitem &$address_file$&
f89d2485 10428.vindex "&$address_file$&"
168e428f
PH
10429When, as a result of aliasing, forwarding, or filtering, a message is directed
10430to a specific file, this variable holds the name of the file when the transport
10431is running. At other times, the variable is empty. For example, using the
9b371988
PH
10432default configuration, if user &%r2d2%& has a &_.forward_& file containing
10433.code
10434/home/r2d2/savemail
10435.endd
10436then when the &(address_file)& transport is running, &$address_file$&
f89d2485 10437contains the text string &`/home/r2d2/savemail`&.
9b371988
PH
10438.cindex "Sieve filter" "value of &$address_file$&"
10439For Sieve filters, the value may be &"inbox"& or a relative folder name. It is
168e428f
PH
10440then up to the transport configuration to generate an appropriate absolute path
10441to the relevant file.
10442
9b371988 10443.vitem &$address_pipe$&
f89d2485 10444.vindex "&$address_pipe$&"
168e428f
PH
10445When, as a result of aliasing or forwarding, a message is directed to a pipe,
10446this variable holds the pipe command when the transport is running.
10447
4f578862 10448.vitem "&$auth1$& &-- &$auth3$&"
f89d2485 10449.vindex "&$auth1$&, &$auth2$&, etc"
4f578862
PH
10450These variables are used in SMTP authenticators (see chapters
10451&<<CHAPplaintext>>&&--&<<CHAPspa>>&). Elsewhere, they are empty.
4f578862 10452
9b371988
PH
10453.vitem &$authenticated_id$&
10454.cindex "authentication" "id"
f89d2485 10455.vindex "&$authenticated_id$&"
168e428f
PH
10456When a server successfully authenticates a client it may be configured to
10457preserve some of the authentication information in the variable
9b371988
PH
10458&$authenticated_id$& (see chapter &<<CHAPSMTPAUTH>>&). For example, a
10459user/password authenticator configuration might preserve the user name for use
10460in the routers. Note that this is not the same information that is saved in
db9452a9 10461&$sender_host_authenticated$&.
3cb1b51e 10462When a message is submitted locally (that is, not over a TCP connection)
db9452a9
PH
10463the value of &$authenticated_id$& is normally the login name of the calling
10464process. However, a trusted user can override this by means of the &%-oMai%&
3cb1b51e 10465command line option.
db9452a9
PH
10466
10467
10468
9b371988
PH
10469
10470.vitem &$authenticated_sender$&
10471.cindex "sender" "authenticated"
10472.cindex "authentication" "sender"
10473.cindex "AUTH" "on MAIL command"
f89d2485 10474.vindex "&$authenticated_sender$&"
168e428f
PH
10475When acting as a server, Exim takes note of the AUTH= parameter on an incoming
10476SMTP MAIL command if it believes the sender is sufficiently trusted, as
9b371988
PH
10477described in section &<<SECTauthparamail>>&. Unless the data is the string
10478&"<>"&, it is set as the authenticated sender of the message, and the value is
10479available during delivery in the &$authenticated_sender$& variable. If the
10480sender is not trusted, Exim accepts the syntax of AUTH=, but ignores the data.
10481
f89d2485 10482.vindex "&$qualify_domain$&"
168e428f 10483When a message is submitted locally (that is, not over a TCP connection), the
9b371988 10484value of &$authenticated_sender$& is an address constructed from the login
db9452a9
PH
10485name of the calling process and &$qualify_domain$&, except that a trusted user
10486can override this by means of the &%-oMas%& command line option.
9b371988
PH
10487
10488
10489.vitem &$authentication_failed$&
10490.cindex "authentication" "failure"
f89d2485 10491.vindex "&$authentication_failed$&"
9b371988
PH
10492This variable is set to &"1"& in an Exim server if a client issues an AUTH
10493command that does not succeed. Otherwise it is set to &"0"&. This makes it
10494possible to distinguish between &"did not try to authenticate"&
10495(&$sender_host_authenticated$& is empty and &$authentication_failed$& is set to
10496&"0"&) and &"tried to authenticate but failed"& (&$sender_host_authenticated$&
10497is empty and &$authentication_failed$& is set to &"1"&). Failure includes any
168e428f
PH
10498negative response to an AUTH command, including (for example) an attempt to use
10499an undefined mechanism.
10500
9b371988
PH
10501.vitem &$body_linecount$&
10502.cindex "message body" "line count"
10503.cindex "body of message" "line count"
f89d2485 10504.vindex "&$body_linecount$&"
168e428f 10505When a message is being received or delivered, this variable contains the
9b371988 10506number of lines in the message's body. See also &$message_linecount$&.
168e428f 10507
9b371988
PH
10508.vitem &$body_zerocount$&
10509.cindex "message body" "binary zero count"
10510.cindex "body of message" "binary zero count"
10511.cindex "binary zero" "in message body"
f89d2485 10512.vindex "&$body_zerocount$&"
168e428f
PH
10513When a message is being received or delivered, this variable contains the
10514number of binary zero bytes in the message's body.
10515
9b371988 10516.vitem &$bounce_recipient$&
f89d2485 10517.vindex "&$bounce_recipient$&"
168e428f
PH
10518This is set to the recipient address of a bounce message while Exim is creating
10519it. It is useful if a customized bounce message text file is in use (see
9b371988 10520chapter &<<CHAPemsgcust>>&).
168e428f 10521
9b371988 10522.vitem &$bounce_return_size_limit$&
f89d2485 10523.vindex "&$bounce_return_size_limit$&"
9b371988 10524This contains the value set in the &%bounce_return_size_limit%& option, rounded
168e428f 10525up to a multiple of 1000. It is useful when a customized error message text
9b371988 10526file is in use (see chapter &<<CHAPemsgcust>>&).
168e428f 10527
9b371988
PH
10528.vitem &$caller_gid$&
10529.cindex "gid (group id)" "caller"
f89d2485 10530.vindex "&$caller_gid$&"
168e428f
PH
10531The real group id under which the process that called Exim was running. This is
10532not the same as the group id of the originator of a message (see
9b371988 10533&$originator_gid$&). If Exim re-execs itself, this variable in the new
168e428f
PH
10534incarnation normally contains the Exim gid.
10535
9b371988
PH
10536.vitem &$caller_uid$&
10537.cindex "uid (user id)" "caller"
f89d2485 10538.vindex "&$caller_uid$&"
168e428f
PH
10539The real user id under which the process that called Exim was running. This is
10540not the same as the user id of the originator of a message (see
9b371988 10541&$originator_uid$&). If Exim re-execs itself, this variable in the new
168e428f
PH
10542incarnation normally contains the Exim uid.
10543
9b371988 10544.vitem &$compile_date$&
f89d2485 10545.vindex "&$compile_date$&"
168e428f
PH
10546The date on which the Exim binary was compiled.
10547
9b371988 10548.vitem &$compile_number$&
f89d2485 10549.vindex "&$compile_number$&"
168e428f
PH
10550The building process for Exim keeps a count of the number
10551of times it has been compiled. This serves to distinguish different
10552compilations of the same version of the program.
10553
9b371988 10554.vitem &$demime_errorlevel$&
f89d2485 10555.vindex "&$demime_errorlevel$&"
168e428f 10556This variable is available when Exim is compiled with
9b371988
PH
10557the content-scanning extension and the obsolete &%demime%& condition. For
10558details, see section &<<SECTdemimecond>>&.
168e428f 10559
9b371988 10560.vitem &$demime_reason$&
f89d2485 10561.vindex "&$demime_reason$&"
168e428f 10562This variable is available when Exim is compiled with the
9b371988
PH
10563content-scanning extension and the obsolete &%demime%& condition. For details,
10564see section &<<SECTdemimecond>>&.
168e428f 10565
595028e4
PH
10566.vitem &$dnslist_domain$& &&&
10567 &$dnslist_matched$& &&&
10568 &$dnslist_text$& &&&
10569 &$dnslist_value$&
f89d2485 10570.vindex "&$dnslist_domain$&"
595028e4 10571.vindex "&$dnslist_matched$&"
f89d2485 10572.vindex "&$dnslist_text$&"
f89d2485 10573.vindex "&$dnslist_value$&"
595028e4
PH
10574.cindex "black list (DNS)"
10575When a DNS (black) list lookup succeeds, these variables are set to contain
10576the following data from the lookup: the list's domain name, the key that was
10577looked up, the contents of any associated TXT record, and the value from the
10578main A record. See section &<<SECID204>>& for more details.
168e428f 10579
9b371988 10580.vitem &$domain$&
f89d2485 10581.vindex "&$domain$&"
068aaea8 10582When an address is being routed, or delivered on its own, this variable
3cb1b51e
PH
10583contains the domain. Uppercase letters in the domain are converted into lower
10584case for &$domain$&.
3cb1b51e
PH
10585
10586Global address rewriting happens when a message is received, so the value of
10587&$domain$& during routing and delivery is the value after rewriting. &$domain$&
10588is set during user filtering, but not during system filtering, because a
10589message may have many recipients and the system filter is called just once.
9b371988 10590
168e428f 10591When more than one address is being delivered at once (for example, several
9b371988 10592RCPT commands in one SMTP delivery), &$domain$& is set only if they all
168e428f 10593have the same domain. Transports can be restricted to handling only one domain
9b371988 10594at a time if the value of &$domain$& is required at transport time &-- this is
168e428f 10595the default for local transports. For further details of the environment in
9b371988
PH
10596which local transports are run, see chapter &<<CHAPenvironment>>&.
10597
0a4e3112 10598.oindex "&%delay_warning_condition%&"
168e428f 10599At the end of a delivery, if all deferred addresses have the same domain, it is
9b371988
PH
10600set in &$domain$& during the expansion of &%delay_warning_condition%&.
10601
10602The &$domain$& variable is also used in some other circumstances:
10603
10604.ilist
10605When an ACL is running for a RCPT command, &$domain$& contains the domain of
10606the recipient address. The domain of the &'sender'& address is in
10607&$sender_address_domain$& at both MAIL time and at RCPT time. &$domain$& is not
068aaea8
PH
10608normally set during the running of the MAIL ACL. However, if the sender address
10609is verified with a callout during the MAIL ACL, the sender domain is placed in
9b371988
PH
10610&$domain$& during the expansions of &%hosts%&, &%interface%&, and &%port%& in
10611the &(smtp)& transport.
10612
10613.next
10614When a rewrite item is being processed (see chapter &<<CHAPrewrite>>&),
10615&$domain$& contains the domain portion of the address that is being rewritten;
10616it can be used in the expansion of the replacement address, for example, to
10617rewrite domains by file lookup.
10618
10619.next
10620With one important exception, whenever a domain list is being scanned,
10621&$domain$& contains the subject domain. &*Exception*&: When a domain list in
10622a &%sender_domains%& condition in an ACL is being processed, the subject domain
10623is in &$sender_address_domain$& and not in &$domain$&. It works this way so
168e428f 10624that, in a RCPT ACL, the sender domain list can be dependent on the
9b371988 10625recipient domain (which is what is in &$domain$& at this time).
168e428f 10626
9b371988
PH
10627.next
10628.cindex "ETRN" "value of &$domain$&"
0a4e3112 10629.oindex "&%smtp_etrn_command%&"
9b371988
PH
10630When the &%smtp_etrn_command%& option is being expanded, &$domain$& contains
10631the complete argument of the ETRN command (see section &<<SECTETRN>>&).
10632.endlist
168e428f
PH
10633
10634
9b371988 10635.vitem &$domain_data$&
f89d2485 10636.vindex "&$domain_data$&"
9b371988 10637When the &%domains%& option on a router matches a domain by
168e428f 10638means of a lookup, the data read by the lookup is available during the running
9b371988 10639of the router as &$domain_data$&. In addition, if the driver routes the
168e428f
PH
10640address to a transport, the value is available in that transport. If the
10641transport is handling multiple addresses, the value from the first address is
10642used.
9b371988
PH
10643
10644&$domain_data$& is also set when the &%domains%& condition in an ACL matches a
168e428f
PH
10645domain by means of a lookup. The data read by the lookup is available during
10646the rest of the ACL statement. In all other situations, this variable expands
10647to nothing.
10648
9b371988 10649.vitem &$exim_gid$&
f89d2485 10650.vindex "&$exim_gid$&"
168e428f
PH
10651This variable contains the numerical value of the Exim group id.
10652
9b371988 10653.vitem &$exim_path$&
f89d2485 10654.vindex "&$exim_path$&"
168e428f
PH
10655This variable contains the path to the Exim binary.
10656
9b371988 10657.vitem &$exim_uid$&
f89d2485 10658.vindex "&$exim_uid$&"
168e428f
PH
10659This variable contains the numerical value of the Exim user id.
10660
9b371988 10661.vitem &$found_extension$&
f89d2485 10662.vindex "&$found_extension$&"
168e428f 10663This variable is available when Exim is compiled with the
9b371988
PH
10664content-scanning extension and the obsolete &%demime%& condition. For details,
10665see section &<<SECTdemimecond>>&.
168e428f 10666
9b371988 10667.vitem &$header_$&<&'name'&>
068aaea8
PH
10668This is not strictly an expansion variable. It is expansion syntax for
10669inserting the message header line with the given name. Note that the name must
10670be terminated by colon or white space, because it may contain a wide variety of
9b371988 10671characters. Note also that braces must &'not'& be used.
168e428f 10672
9b371988 10673.vitem &$home$&
f89d2485 10674.vindex "&$home$&"
9b371988
PH
10675When the &%check_local_user%& option is set for a router, the user's home
10676directory is placed in &$home$& when the check succeeds. In particular, this
168e428f
PH
10677means it is set during the running of users' filter files. A router may also
10678explicitly set a home directory for use by a transport; this can be overridden
10679by a setting on the transport itself.
9b371988
PH
10680
10681When running a filter test via the &%-bf%& option, &$home$& is set to the value
168e428f
PH
10682of the environment variable HOME.
10683
9b371988 10684.vitem &$host$&
f89d2485 10685.vindex "&$host$&"
db9452a9
PH
10686If a router assigns an address to a transport (any transport), and passes a
10687list of hosts with the address, the value of &$host$& when the transport starts
10688to run is the name of the first host on the list. Note that this applies both
10689to local and remote transports.
9b371988
PH
10690
10691.cindex "transport" "filter"
10692.cindex "filter" "transport filter"
db9452a9
PH
10693For the &(smtp)& transport, if there is more than one host, the value of
10694&$host$& changes as the transport works its way through the list. In
10695particular, when the &(smtp)& transport is expanding its options for encryption
10696using TLS, or for specifying a transport filter (see chapter
10697&<<CHAPtransportgeneric>>&), &$host$& contains the name of the host to which it
10698is connected.
10699
10700When used in the client part of an authenticator configuration (see chapter
10701&<<CHAPSMTPAUTH>>&), &$host$& contains the name of the server to which the
10702client is connected.
db9452a9 10703
9b371988
PH
10704
10705.vitem &$host_address$&
f89d2485 10706.vindex "&$host_address$&"
9b371988
PH
10707This variable is set to the remote host's IP address whenever &$host$& is set
10708for a remote connection. It is also set to the IP address that is being checked
10709when the &%ignore_target_hosts%& option is being processed.
10710
10711.vitem &$host_data$&
f89d2485 10712.vindex "&$host_data$&"
9b371988
PH
10713If a &%hosts%& condition in an ACL is satisfied by means of a lookup, the
10714result of the lookup is made available in the &$host_data$& variable. This
168e428f 10715allows you, for example, to do things like this:
9b371988
PH
10716.code
10717deny hosts = net-lsearch;/some/file
10718message = $host_data
10719.endd
10720.vitem &$host_lookup_deferred$&
f89d2485
PH
10721.cindex "host name" "lookup, failure of"
10722.vindex "&$host_lookup_deferred$&"
9b371988 10723This variable normally contains &"0"&, as does &$host_lookup_failed$&. When a
168e428f
PH
10724message comes from a remote host and there is an attempt to look up the host's
10725name from its IP address, and the attempt is not successful, one of these
9b371988 10726variables is set to &"1"&.
168e428f 10727
9b371988
PH
10728.ilist
10729If the lookup receives a definite negative response (for example, a DNS lookup
10730succeeded, but no records were found), &$host_lookup_failed$& is set to &"1"&.
10731
10732.next
10733If there is any kind of problem during the lookup, such that Exim cannot
168e428f 10734tell whether or not the host name is defined (for example, a timeout for a DNS
9b371988
PH
10735lookup), &$host_lookup_deferred$& is set to &"1"&.
10736.endlist ilist
10737
168e428f
PH
10738Looking up a host's name from its IP address consists of more than just a
10739single reverse lookup. Exim checks that a forward lookup of at least one of the
10740names it receives from a reverse lookup yields the original IP address. If this
10741is not the case, Exim does not accept the looked up name(s), and
9b371988 10742&$host_lookup_failed$& is set to &"1"&. Thus, being able to find a name from an
168e428f
PH
10743IP address (for example, the existence of a PTR record in the DNS) is not
10744sufficient on its own for the success of a host name lookup. If the reverse
10745lookup succeeds, but there is a lookup problem such as a timeout when checking
9b371988
PH
10746the result, the name is not accepted, and &$host_lookup_deferred$& is set to
10747&"1"&. See also &$sender_host_name$&.
168e428f 10748
9b371988 10749.vitem &$host_lookup_failed$&
f89d2485 10750.vindex "&$host_lookup_failed$&"
9b371988 10751See &$host_lookup_deferred$&.
168e428f
PH
10752
10753
9b371988 10754.vitem &$inode$&
f89d2485 10755.vindex "&$inode$&"
9b371988
PH
10756The only time this variable is set is while expanding the &%directory_file%&
10757option in the &(appendfile)& transport. The variable contains the inode number
168e428f
PH
10758of the temporary file which is about to be renamed. It can be used to construct
10759a unique name for the file.
10760
9b371988 10761.vitem &$interface_address$&
f89d2485 10762.vindex "&$interface_address$&"
3cb1b51e 10763This is an obsolete name for &$received_ip_address$&.
168e428f 10764
9b371988 10765.vitem &$interface_port$&
f89d2485 10766.vindex "&$interface_port$&"
3cb1b51e 10767This is an obsolete name for &$received_port$&.
f89d2485 10768
f89d2485
PH
10769.vitem &$item$&
10770.vindex "&$item$&"
10771This variable is used during the expansion of &*forall*& and &*forany*&
0b5038ed 10772conditions (see section &<<SECTexpcond>>&), and &*filter*&, &*map*&, and
f89d2485
PH
10773&*reduce*& items (see section &<<SECTexpcond>>&). In other circumstances, it is
10774empty.
168e428f 10775
9b371988 10776.vitem &$ldap_dn$&
f89d2485 10777.vindex "&$ldap_dn$&"
168e428f
PH
10778This variable, which is available only when Exim is compiled with LDAP support,
10779contains the DN from the last entry in the most recently successful LDAP
10780lookup.
10781
9b371988 10782.vitem &$load_average$&
f89d2485 10783.vindex "&$load_average$&"
4d0893ec 10784This variable contains the system load average, multiplied by 1000 so that it
168e428f
PH
10785is an integer. For example, if the load average is 0.21, the value of the
10786variable is 210. The value is recomputed every time the variable is referenced.
10787
9b371988 10788.vitem &$local_part$&
f89d2485 10789.vindex "&$local_part$&"
168e428f
PH
10790When an address is being routed, or delivered on its own, this
10791variable contains the local part. When a number of addresses are being
10792delivered together (for example, multiple RCPT commands in an SMTP
9b371988
PH
10793session), &$local_part$& is not set.
10794
168e428f 10795Global address rewriting happens when a message is received, so the value of
9b371988
PH
10796&$local_part$& during routing and delivery is the value after rewriting.
10797&$local_part$& is set during user filtering, but not during system filtering,
168e428f
PH
10798because a message may have many recipients and the system filter is called just
10799once.
9b371988 10800
f89d2485
PH
10801.vindex "&$local_part_prefix$&"
10802.vindex "&$local_part_suffix$&"
168e428f 10803If a local part prefix or suffix has been recognized, it is not included in the
9b371988
PH
10804value of &$local_part$& during routing and subsequent delivery. The values of
10805any prefix or suffix are in &$local_part_prefix$& and
10806&$local_part_suffix$&, respectively.
10807
168e428f 10808When a message is being delivered to a file, pipe, or autoreply transport as a
9b371988
PH
10809result of aliasing or forwarding, &$local_part$& is set to the local part of
10810the parent address, not to the file name or command (see &$address_file$& and
10811&$address_pipe$&).
10812
10813When an ACL is running for a RCPT command, &$local_part$& contains the
168e428f 10814local part of the recipient address.
9b371988
PH
10815
10816When a rewrite item is being processed (see chapter &<<CHAPrewrite>>&),
10817&$local_part$& contains the local part of the address that is being rewritten;
168e428f 10818it can be used in the expansion of the replacement address, for example.
9b371988 10819
168e428f
PH
10820In all cases, all quoting is removed from the local part. For example, for both
10821the addresses
9b371988
PH
10822.code
10823"abc:xyz"@test.example
10824abc\:xyz@test.example
10825.endd
10826the value of &$local_part$& is
10827.code
10828abc:xyz
10829.endd
10830If you use &$local_part$& to create another address, you should always wrap it
10831inside a quoting operator. For example, in a &(redirect)& router you could
10832have:
10833.code
10834data = ${quote_local_part:$local_part}@new.domain.example
10835.endd
10836&*Note*&: The value of &$local_part$& is normally lower cased. If you want
168e428f 10837to process local parts in a case-dependent manner in a router, you can set the
9b371988 10838&%caseful_local_part%& option (see chapter &<<CHAProutergeneric>>&).
168e428f 10839
9b371988 10840.vitem &$local_part_data$&
f89d2485 10841.vindex "&$local_part_data$&"
9b371988 10842When the &%local_parts%& option on a router matches a local part by means of a
168e428f 10843lookup, the data read by the lookup is available during the running of the
9b371988 10844router as &$local_part_data$&. In addition, if the driver routes the address
168e428f
PH
10845to a transport, the value is available in that transport. If the transport is
10846handling multiple addresses, the value from the first address is used.
9b371988
PH
10847
10848&$local_part_data$& is also set when the &%local_parts%& condition in an ACL
168e428f
PH
10849matches a local part by means of a lookup. The data read by the lookup is
10850available during the rest of the ACL statement. In all other situations, this
10851variable expands to nothing.
10852
9b371988 10853.vitem &$local_part_prefix$&
f89d2485 10854.vindex "&$local_part_prefix$&"
168e428f
PH
10855When an address is being routed or delivered, and a
10856specific prefix for the local part was recognized, it is available in this
9b371988 10857variable, having been removed from &$local_part$&.
168e428f 10858
9b371988 10859.vitem &$local_part_suffix$&
f89d2485 10860.vindex "&$local_part_suffix$&"
168e428f
PH
10861When an address is being routed or delivered, and a
10862specific suffix for the local part was recognized, it is available in this
9b371988
PH
10863variable, having been removed from &$local_part$&.
10864
10865.vitem &$local_scan_data$&
f89d2485 10866.vindex "&$local_scan_data$&"
9b371988
PH
10867This variable contains the text returned by the &[local_scan()]& function when
10868a message is received. See chapter &<<CHAPlocalscan>>& for more details.
10869
10870.vitem &$local_user_gid$&
f89d2485 10871.vindex "&$local_user_gid$&"
9b371988
PH
10872See &$local_user_uid$&.
10873
10874.vitem &$local_user_uid$&
f89d2485 10875.vindex "&$local_user_uid$&"
9b371988
PH
10876This variable and &$local_user_gid$& are set to the uid and gid after the
10877&%check_local_user%& router precondition succeeds. This means that their values
10878are available for the remaining preconditions (&%senders%&, &%require_files%&,
10879and &%condition%&), for the &%address_data%& expansion, and for any
10880router-specific expansions. At all other times, the values in these variables
10881are &`(uid_t)(-1)`& and &`(gid_t)(-1)`&, respectively.
10882
10883.vitem &$localhost_number$&
f89d2485 10884.vindex "&$localhost_number$&"
168e428f 10885This contains the expanded value of the
9b371988 10886&%localhost_number%& option. The expansion happens after the main options have
168e428f
PH
10887been read.
10888
9b371988 10889.vitem &$log_inodes$&
f89d2485 10890.vindex "&$log_inodes$&"
168e428f
PH
10891The number of free inodes in the disk partition where Exim's
10892log files are being written. The value is recalculated whenever the variable is
10893referenced. If the relevant file system does not have the concept of inodes,
9b371988 10894the value of is -1. See also the &%check_log_inodes%& option.
168e428f 10895
9b371988 10896.vitem &$log_space$&
f89d2485 10897.vindex "&$log_space$&"
168e428f
PH
10898The amount of free space (as a number of kilobytes) in the disk
10899partition where Exim's log files are being written. The value is recalculated
10900whenever the variable is referenced. If the operating system does not have the
10901ability to find the amount of free space (only true for experimental systems),
9b371988 10902the space value is -1. See also the &%check_log_space%& option.
168e428f
PH
10903
10904
9b371988 10905.vitem &$mailstore_basename$&
f89d2485 10906.vindex "&$mailstore_basename$&"
9b371988
PH
10907This variable is set only when doing deliveries in &"mailstore"& format in the
10908&(appendfile)& transport. During the expansion of the &%mailstore_prefix%&,
10909&%mailstore_suffix%&, &%message_prefix%&, and &%message_suffix%& options, it
10910contains the basename of the files that are being written, that is, the name
10911without the &".tmp"&, &".env"&, or &".msg"& suffix. At all other times, this
10912variable is empty.
168e428f 10913
9b371988 10914.vitem &$malware_name$&
f89d2485 10915.vindex "&$malware_name$&"
168e428f
PH
10916This variable is available when Exim is compiled with the
10917content-scanning extension. It is set to the name of the virus that was found
9b371988 10918when the ACL &%malware%& condition is true (see section &<<SECTscanvirus>>&).
168e428f 10919
595028e4
PH
10920.vitem &$max_received_linelength$&
10921.vindex "&$max_received_linelength$&"
10922.cindex "maximum" "line length"
10923.cindex "line length" "maximum"
10924This variable contains the number of bytes in the longest line that was
10925received as part of the message, not counting the line termination
10926character(s).
168e428f 10927
9b371988
PH
10928.vitem &$message_age$&
10929.cindex "message" "age of"
f89d2485 10930.vindex "&$message_age$&"
068aaea8
PH
10931This variable is set at the start of a delivery attempt to contain the number
10932of seconds since the message was received. It does not change during a single
10933delivery attempt.
168e428f 10934
9b371988
PH
10935.vitem &$message_body$&
10936.cindex "body of message" "expansion variable"
10937.cindex "message body" "in expansion"
10938.cindex "binary zero" "in message body"
f89d2485 10939.vindex "&$message_body$&"
595028e4
PH
10940.oindex "&%message_body_visible%&"
10941This variable contains the initial portion of a message's body while it is
10942being delivered, and is intended mainly for use in filter files. The maximum
10943number of characters of the body that are put into the variable is set by the
10944&%message_body_visible%& configuration option; the default is 500.
10945
595028e4
PH
10946.oindex "&%message_body_newlines%&"
10947By default, newlines are converted into spaces in &$message_body$&, to make it
10948easier to search for phrases that might be split over a line break. However,
10949this can be disabled by setting &%message_body_newlines%& to be true. Binary
10950zeros are always converted into spaces.
168e428f 10951
9b371988
PH
10952.vitem &$message_body_end$&
10953.cindex "body of message" "expansion variable"
10954.cindex "message body" "in expansion"
f89d2485 10955.vindex "&$message_body_end$&"
168e428f
PH
10956This variable contains the final portion of a message's
10957body while it is being delivered. The format and maximum size are as for
9b371988 10958&$message_body$&.
168e428f 10959
9b371988
PH
10960.vitem &$message_body_size$&
10961.cindex "body of message" "size"
10962.cindex "message body" "size"
f89d2485 10963.vindex "&$message_body_size$&"
068aaea8
PH
10964When a message is being delivered, this variable contains the size of the body
10965in bytes. The count starts from the character after the blank line that
10966separates the body from the header. Newlines are included in the count. See
9b371988 10967also &$message_size$&, &$body_linecount$&, and &$body_zerocount$&.
068aaea8 10968
9b371988 10969.vitem &$message_exim_id$&
f89d2485 10970.vindex "&$message_exim_id$&"
068aaea8
PH
10971When a message is being received or delivered, this variable contains the
10972unique message id that is generated and used by Exim to identify the message.
10973An id is not created for a message until after its header has been successfully
9b371988
PH
10974received. &*Note*&: This is &'not'& the contents of the &'Message-ID:'& header
10975line; it is the local id that Exim assigns to the message, for example:
10976&`1BXTIK-0001yO-VA`&.
168e428f 10977
9b371988 10978.vitem &$message_headers$&
f89d2485 10979.vindex &$message_headers$&
168e428f
PH
10980This variable contains a concatenation of all the header lines when a message
10981is being processed, except for lines added by routers or transports. The header
3cb1b51e
PH
10982lines are separated by newline characters. Their contents are decoded in the
10983same way as a header line that is inserted by &%bheader%&.
10984
10985.vitem &$message_headers_raw$&
f89d2485 10986.vindex &$message_headers_raw$&
3cb1b51e
PH
10987This variable is like &$message_headers$& except that no processing of the
10988contents of header lines is done.
168e428f 10989
9b371988 10990.vitem &$message_id$&
9b371988 10991This is an old name for &$message_exim_id$&, which is now deprecated.
068aaea8 10992
9b371988 10993.vitem &$message_linecount$&
f89d2485 10994.vindex "&$message_linecount$&"
068aaea8 10995This variable contains the total number of lines in the header and body of the
9b371988
PH
10996message. Compare &$body_linecount$&, which is the count for the body only.
10997During the DATA and content-scanning ACLs, &$message_linecount$& contains the
10998number of lines received. Before delivery happens (that is, before filters,
10999routers, and transports run) the count is increased to include the
11000&'Received:'& header line that Exim standardly adds, and also any other header
11001lines that are added by ACLs. The blank line that separates the message header
11002from the body is not counted. Here is an example of the use of this variable in
11003a DATA ACL:
11004.code
068aaea8
PH
11005deny message = Too many lines in message header
11006 condition = \
f89d2485 11007 ${if <{250}{${eval:$message_linecount - $body_linecount}}}
9b371988 11008.endd
068aaea8
PH
11009In the MAIL and RCPT ACLs, the value is zero because at that stage the
11010message has not yet been received.
168e428f 11011
9b371988
PH
11012.vitem &$message_size$&
11013.cindex "size" "of message"
11014.cindex "message" "size"
f89d2485 11015.vindex "&$message_size$&"
168e428f
PH
11016When a message is being processed, this variable contains its size in bytes. In
11017most cases, the size includes those headers that were received with the
9b371988 11018message, but not those (such as &'Envelope-to:'&) that are added to individual
168e428f 11019deliveries as they are written. However, there is one special case: during the
9b371988
PH
11020expansion of the &%maildir_tag%& option in the &(appendfile)& transport while
11021doing a delivery in maildir format, the value of &$message_size$& is the
168e428f 11022precise size of the file that has been written. See also
9b371988
PH
11023&$message_body_size$&, &$body_linecount$&, and &$body_zerocount$&.
11024
71e1673f 11025.new
9b371988 11026.cindex "RCPT" "value of &$message_size$&"
400eda43 11027While running a per message ACL (mail/rcpt/predata), &$message_size$&
168e428f
PH
11028contains the size supplied on the MAIL command, or -1 if no size was given. The
11029value may not, of course, be truthful.
71e1673f 11030.wen
168e428f 11031
9b371988
PH
11032.vitem &$mime_$&&'xxx'&
11033A number of variables whose names start with &$mime$& are
168e428f 11034available when Exim is compiled with the content-scanning extension. For
9b371988 11035details, see section &<<SECTscanmimepart>>&.
168e428f 11036
9b371988 11037.vitem "&$n0$& &-- &$n9$&"
168e428f 11038These variables are counters that can be incremented by means
9b371988 11039of the &%add%& command in filter files.
168e428f 11040
9b371988 11041.vitem &$original_domain$&
f89d2485
PH
11042.vindex "&$domain$&"
11043.vindex "&$original_domain$&"
068aaea8 11044When a top-level address is being processed for delivery, this contains the
9b371988
PH
11045same value as &$domain$&. However, if a &"child"& address (for example,
11046generated by an alias, forward, or filter file) is being processed, this
3cb1b51e
PH
11047variable contains the domain of the original address (lower cased). This
11048differs from &$parent_domain$& only when there is more than one level of
11049aliasing or forwarding. When more than one address is being delivered in a
11050single transport run, &$original_domain$& is not set.
9b371988
PH
11051
11052If a new address is created by means of a &%deliver%& command in a system
11053filter, it is set up with an artificial &"parent"& address. This has the local
11054part &'system-filter'& and the default qualify domain.
11055
11056.vitem &$original_local_part$&
f89d2485
PH
11057.vindex "&$local_part$&"
11058.vindex "&$original_local_part$&"
068aaea8 11059When a top-level address is being processed for delivery, this contains the
9b371988
PH
11060same value as &$local_part$&, unless a prefix or suffix was removed from the
11061local part, because &$original_local_part$& always contains the full local
11062part. When a &"child"& address (for example, generated by an alias, forward, or
068aaea8
PH
11063filter file) is being processed, this variable contains the full local part of
11064the original address.
9b371988 11065
168e428f 11066If the router that did the redirection processed the local part
9b371988
PH
11067case-insensitively, the value in &$original_local_part$& is in lower case.
11068This variable differs from &$parent_local_part$& only when there is more than
168e428f 11069one level of aliasing or forwarding. When more than one address is being
9b371988
PH
11070delivered in a single transport run, &$original_local_part$& is not set.
11071
11072If a new address is created by means of a &%deliver%& command in a system
11073filter, it is set up with an artificial &"parent"& address. This has the local
11074part &'system-filter'& and the default qualify domain.
11075
11076.vitem &$originator_gid$&
11077.cindex "gid (group id)" "of originating user"
11078.cindex "sender" "gid"
f89d2485
PH
11079.vindex "&$caller_gid$&"
11080.vindex "&$originator_gid$&"
9b371988
PH
11081This variable contains the value of &$caller_gid$& that was set when the
11082message was received. For messages received via the command line, this is the
11083gid of the sending user. For messages received by SMTP over TCP/IP, this is
11084normally the gid of the Exim user.
11085
11086.vitem &$originator_uid$&
11087.cindex "uid (user id)" "of originating user"
11088.cindex "sender" "uid"
f89d2485
PH
11089.vindex "&$caller_uid$&"
11090.vindex "&$originaltor_uid$&"
9b371988 11091The value of &$caller_uid$& that was set when the message was received. For
068aaea8
PH
11092messages received via the command line, this is the uid of the sending user.
11093For messages received by SMTP over TCP/IP, this is normally the uid of the Exim
11094user.
168e428f 11095
9b371988 11096.vitem &$parent_domain$&
f89d2485 11097.vindex "&$parent_domain$&"
9b371988 11098This variable is similar to &$original_domain$& (see
168e428f
PH
11099above), except that it refers to the immediately preceding parent address.
11100
9b371988 11101.vitem &$parent_local_part$&
f89d2485 11102.vindex "&$parent_local_part$&"
9b371988 11103This variable is similar to &$original_local_part$&
168e428f
PH
11104(see above), except that it refers to the immediately preceding parent address.
11105
9b371988
PH
11106.vitem &$pid$&
11107.cindex "pid (process id)" "of current process"
f89d2485 11108.vindex "&$pid$&"
168e428f
PH
11109This variable contains the current process id.
11110
9b371988
PH
11111.vitem &$pipe_addresses$&
11112.cindex "filter" "transport filter"
11113.cindex "transport" "filter"
f89d2485 11114.vindex "&$pipe_addresses$&"
068aaea8 11115This is not an expansion variable, but is mentioned here because the string
c0712871 11116&`$pipe_addresses`& is handled specially in the command specification for the
9b371988
PH
11117&(pipe)& transport (chapter &<<CHAPpipetransport>>&) and in transport filters
11118(described under &%transport_filter%& in chapter &<<CHAPtransportgeneric>>&).
11119It cannot be used in general expansion strings, and provokes an &"unknown
11120variable"& error if encountered.
11121
11122.vitem &$primary_hostname$&
f89d2485 11123.vindex "&$primary_hostname$&"
9b371988
PH
11124This variable contains the value set by &%primary_hostname%& in the
11125configuration file, or read by the &[uname()]& function. If &[uname()]& returns
11126a single-component name, Exim calls &[gethostbyname()]& (or
11127&[getipnodebyname()]& where available) in an attempt to acquire a fully
11128qualified host name. See also &$smtp_active_hostname$&.
11129
11130
9b371988
PH
11131.vitem &$prvscheck_address$&
11132This variable is used in conjunction with the &%prvscheck%& expansion item,
11133which is described in sections &<<SECTexpansionitems>>& and
11134&<<SECTverifyPRVS>>&.
11135
11136.vitem &$prvscheck_keynum$&
11137This variable is used in conjunction with the &%prvscheck%& expansion item,
11138which is described in sections &<<SECTexpansionitems>>& and
11139&<<SECTverifyPRVS>>&.
11140
11141.vitem &$prvscheck_result$&
11142This variable is used in conjunction with the &%prvscheck%& expansion item,
11143which is described in sections &<<SECTexpansionitems>>& and
11144&<<SECTverifyPRVS>>&.
9b371988
PH
11145
11146.vitem &$qualify_domain$&
f89d2485 11147.vindex "&$qualify_domain$&"
9b371988
PH
11148The value set for the &%qualify_domain%& option in the configuration file.
11149
11150.vitem &$qualify_recipient$&
f89d2485 11151.vindex "&$qualify_recipient$&"
9b371988
PH
11152The value set for the &%qualify_recipient%& option in the configuration file,
11153or if not set, the value of &$qualify_domain$&.
11154
11155.vitem &$rcpt_count$&
f89d2485 11156.vindex "&$rcpt_count$&"
068aaea8
PH
11157When a message is being received by SMTP, this variable contains the number of
11158RCPT commands received for the current message. If this variable is used in a
11159RCPT ACL, its value includes the current command.
168e428f 11160
9b371988 11161.vitem &$rcpt_defer_count$&
f89d2485 11162.vindex "&$rcpt_defer_count$&"
3cb1b51e 11163.cindex "4&'xx'& responses" "count of"
068aaea8
PH
11164When a message is being received by SMTP, this variable contains the number of
11165RCPT commands in the current message that have previously been rejected with a
9b371988 11166temporary (4&'xx'&) response.
168e428f 11167
9b371988 11168.vitem &$rcpt_fail_count$&
f89d2485 11169.vindex "&$rcpt_fail_count$&"
068aaea8
PH
11170When a message is being received by SMTP, this variable contains the number of
11171RCPT commands in the current message that have previously been rejected with a
9b371988 11172permanent (5&'xx'&) response.
168e428f 11173
9b371988 11174.vitem &$received_count$&
f89d2485 11175.vindex "&$received_count$&"
9b371988 11176This variable contains the number of &'Received:'& header lines in the message,
068aaea8
PH
11177including the one added by Exim (so its value is always greater than zero). It
11178is available in the DATA ACL, the non-SMTP ACL, and while routing and
11179delivering.
168e428f 11180
9b371988 11181.vitem &$received_for$&
f89d2485 11182.vindex "&$received_for$&"
068aaea8 11183If there is only a single recipient address in an incoming message, this
9b371988
PH
11184variable contains that address when the &'Received:'& header line is being
11185built. The value is copied after recipient rewriting has happened, but before
11186the &[local_scan()]& function is run.
168e428f 11187
3cb1b51e 11188.vitem &$received_ip_address$&
f89d2485 11189.vindex "&$received_ip_address$&"
3cb1b51e
PH
11190As soon as an Exim server starts processing an incoming TCP/IP connection, this
11191variable is set to the address of the local IP interface, and &$received_port$&
11192is set to the local port number. (The remote IP address and port are in
11193&$sender_host_address$& and &$sender_host_port$&.) When testing with &%-bh%&,
11194the port value is -1 unless it has been set using the &%-oMi%& command line
11195option.
11196
11197As well as being useful in ACLs (including the &"connect"& ACL), these variable
11198could be used, for example, to make the file name for a TLS certificate depend
11199on which interface and/or port is being used for the incoming connection. The
11200values of &$received_ip_address$& and &$received_port$& are saved with any
11201messages that are received, thus making these variables available at delivery
11202time.
11203
11204&*Note:*& There are no equivalent variables for outgoing connections, because
11205the values are unknown (unless they are explicitly set by options of the
11206&(smtp)& transport).
11207
11208.vitem &$received_port$&
f89d2485 11209.vindex "&$received_port$&"
3cb1b51e 11210See &$received_ip_address$&.
3cb1b51e 11211
9b371988 11212.vitem &$received_protocol$&
f89d2485 11213.vindex "&$received_protocol$&"
068aaea8
PH
11214When a message is being processed, this variable contains the name of the
11215protocol by which it was received. Most of the names used by Exim are defined
9b371988
PH
11216by RFCs 821, 2821, and 3848. They start with &"smtp"& (the client used HELO) or
11217&"esmtp"& (the client used EHLO). This can be followed by &"s"& for secure
11218(encrypted) and/or &"a"& for authenticated. Thus, for example, if the protocol
11219is set to &"esmtpsa"&, the message was received over an encrypted SMTP
068aaea8 11220connection and the client was successfully authenticated.
9b371988
PH
11221
11222Exim uses the protocol name &"smtps"& for the case when encryption is
168e428f 11223automatically set up on connection without the use of STARTTLS (see
9b371988
PH
11224&%tls_on_connect_ports%&), and the client uses HELO to initiate the
11225encrypted SMTP session. The name &"smtps"& is also used for the rare situation
168e428f
PH
11226where the client initially uses EHLO, sets up an encrypted connection using
11227STARTTLS, and then uses HELO afterwards.
9b371988
PH
11228
11229The &%-oMr%& option provides a way of specifying a custom protocol name for
168e428f
PH
11230messages that are injected locally by trusted callers. This is commonly used to
11231identify messages that are being re-injected after some kind of scanning.
11232
9b371988 11233.vitem &$received_time$&
f89d2485 11234.vindex "&$received_time$&"
068aaea8
PH
11235This variable contains the date and time when the current message was received,
11236as a number of seconds since the start of the Unix epoch.
168e428f 11237
9b371988 11238.vitem &$recipient_data$&
f89d2485 11239.vindex "&$recipient_data$&"
9b371988 11240This variable is set after an indexing lookup success in an ACL &%recipients%&
068aaea8 11241condition. It contains the data from the lookup, and the value remains set
9b371988
PH
11242until the next &%recipients%& test. Thus, you can do things like this:
11243.display
11244&`require recipients = cdb*@;/some/file`&
11245&`deny `&&'some further test involving'& &`$recipient_data`&
11246.endd
11247&*Warning*&: This variable is set only when a lookup is used as an indexing
168e428f
PH
11248method in the address list, using the semicolon syntax as in the example above.
11249The variable is not set for a lookup that is used as part of the string
11250expansion that all such lists undergo before being interpreted.
11251
9b371988 11252.vitem &$recipient_verify_failure$&
f89d2485 11253.vindex "&$recipient_verify_failure$&"
068aaea8
PH
11254In an ACL, when a recipient verification fails, this variable contains
11255information about the failure. It is set to one of the following words:
9b371988
PH
11256
11257.ilist
11258&"qualify"&: The address was unqualified (no domain), and the message
168e428f
PH
11259was neither local nor came from an exempted host.
11260
9b371988
PH
11261.next
11262&"route"&: Routing failed.
168e428f 11263
9b371988
PH
11264.next
11265&"mail"&: Routing succeeded, and a callout was attempted; rejection occurred at
168e428f
PH
11266or before the MAIL command (that is, on initial connection, HELO, or
11267MAIL).
11268
9b371988
PH
11269.next
11270&"recipient"&: The RCPT command in a callout was rejected.
11271.next
11272
11273&"postmaster"&: The postmaster check in a callout was rejected.
11274.endlist
168e428f 11275
168e428f
PH
11276The main use of this variable is expected to be to distinguish between
11277rejections of MAIL and rejections of RCPT.
11278
9b371988 11279.vitem &$recipients$&
f89d2485
PH
11280.vindex "&$recipients$&"
11281This variable contains a list of envelope recipients for a message. A comma and
11282a space separate the addresses in the replacement text. However, the variable
11283is not generally available, to prevent exposure of Bcc recipients in
11284unprivileged users' filter files. You can use &$recipients$& only in these
11285cases:
168e428f 11286
9b371988
PH
11287.olist
11288In a system filter file.
11289.next
db9452a9
PH
11290In the ACLs associated with the DATA command and with non-SMTP messages, that
11291is, the ACLs defined by &%acl_smtp_predata%&, &%acl_smtp_data%&,
11292&%acl_smtp_mime%&, &%acl_not_smtp_start%&, &%acl_not_smtp%&, and
11293&%acl_not_smtp_mime%&.
f89d2485 11294.next
f89d2485 11295From within a &[local_scan()]& function.
9b371988 11296.endlist
168e428f 11297
168e428f 11298
9b371988 11299.vitem &$recipients_count$&
f89d2485 11300.vindex "&$recipients_count$&"
068aaea8
PH
11301When a message is being processed, this variable contains the number of
11302envelope recipients that came with the message. Duplicates are not excluded
11303from the count. While a message is being received over SMTP, the number
11304increases for each accepted recipient. It can be referenced in an ACL.
168e428f 11305
db9452a9 11306
db9452a9 11307.vitem &$regex_match_string$&
f89d2485 11308.vindex "&$regex_match_string$&"
db9452a9
PH
11309This variable is set to contain the matching regular expression after a
11310&%regex%& ACL condition has matched (see section &<<SECTscanregex>>&).
db9452a9
PH
11311
11312
9b371988 11313.vitem &$reply_address$&
f89d2485 11314.vindex "&$reply_address$&"
068aaea8 11315When a message is being processed, this variable contains the contents of the
9b371988 11316&'Reply-To:'& header line if one exists and it is not empty, or otherwise the
c0712871 11317contents of the &'From:'& header line. Apart from the removal of leading
4f578862 11318white space, the value is not processed in any way. In particular, no RFC 2047
c0712871 11319decoding or character code translation takes place.
168e428f 11320
9b371988 11321.vitem &$return_path$&
f89d2485 11322.vindex "&$return_path$&"
9b371988 11323When a message is being delivered, this variable contains the return path &--
168e428f 11324the sender field that will be sent as part of the envelope. It is not enclosed
9b371988
PH
11325in <> characters. At the start of routing an address, &$return_path$& has the
11326same value as &$sender_address$&, but if, for example, an incoming message to a
168e428f 11327mailing list has been expanded by a router which specifies a different address
9b371988
PH
11328for bounce messages, &$return_path$& subsequently contains the new bounce
11329address, whereas &$sender_address$& always contains the original sender address
11330that was received with the message. In other words, &$sender_address$& contains
11331the incoming envelope sender, and &$return_path$& contains the outgoing
11332envelope sender.
11333
11334.vitem &$return_size_limit$&
f89d2485 11335.vindex "&$return_size_limit$&"
9b371988
PH
11336This is an obsolete name for &$bounce_return_size_limit$&.
11337
11338.vitem &$runrc$&
11339.cindex "return code" "from &%run%& expansion"
f89d2485 11340.vindex "&$runrc$&"
168e428f 11341This variable contains the return code from a command that is run by the
9b371988 11342&%${run...}%& expansion item. &*Warning*&: In a router or transport, you cannot
168e428f 11343assume the order in which option values are expanded, except for those
9b371988
PH
11344preconditions whose order of testing is documented. Therefore, you cannot
11345reliably expect to set &$runrc$& by the expansion of one option, and use it in
168e428f
PH
11346another.
11347
9b371988 11348.vitem &$self_hostname$&
0a4e3112 11349.oindex "&%self%&" "value of host name"
f89d2485 11350.vindex "&$self_hostname$&"
068aaea8 11351When an address is routed to a supposedly remote host that turns out to be the
9b371988
PH
11352local host, what happens is controlled by the &%self%& generic router option.
11353One of its values causes the address to be passed to another router. When this
11354happens, &$self_hostname$& is set to the name of the local host that the
11355original router encountered. In other circumstances its contents are null.
168e428f 11356
9b371988 11357.vitem &$sender_address$&
f89d2485 11358.vindex "&$sender_address$&"
068aaea8 11359When a message is being processed, this variable contains the sender's address
3cb1b51e
PH
11360that was received in the message's envelope. The case of letters in the address
11361is retained, in both the local part and the domain. For bounce messages, the
11362value of this variable is the empty string. See also &$return_path$&.
168e428f 11363
9b371988 11364.vitem &$sender_address_data$&
f89d2485
PH
11365.vindex "&$address_data$&"
11366.vindex "&$sender_address_data$&"
9b371988
PH
11367If &$address_data$& is set when the routers are called from an ACL to verify a
11368sender address, the final value is preserved in &$sender_address_data$&, to
168e428f
PH
11369distinguish it from data from a recipient address. The value does not persist
11370after the end of the current ACL statement. If you want to preserve it for
11371longer, you can save it in an ACL variable.
11372
9b371988 11373.vitem &$sender_address_domain$&
f89d2485 11374.vindex "&$sender_address_domain$&"
9b371988
PH
11375The domain portion of &$sender_address$&.
11376
11377.vitem &$sender_address_local_part$&
f89d2485 11378.vindex "&$sender_address_local_part$&"
9b371988
PH
11379The local part portion of &$sender_address$&.
11380
11381.vitem &$sender_data$&
f89d2485 11382.vindex "&$sender_data$&"
9b371988
PH
11383This variable is set after a lookup success in an ACL &%senders%& condition or
11384in a router &%senders%& option. It contains the data from the lookup, and the
11385value remains set until the next &%senders%& test. Thus, you can do things like
11386this:
11387.display
11388&`require senders = cdb*@;/some/file`&
11389&`deny `&&'some further test involving'& &`$sender_data`&
11390.endd
11391&*Warning*&: This variable is set only when a lookup is used as an indexing
168e428f
PH
11392method in the address list, using the semicolon syntax as in the example above.
11393The variable is not set for a lookup that is used as part of the string
11394expansion that all such lists undergo before being interpreted.
11395
9b371988 11396.vitem &$sender_fullhost$&
f89d2485 11397.vindex "&$sender_fullhost$&"
168e428f
PH
11398When a message is received from a remote host, this variable contains the host
11399name and IP address in a single string. It ends with the IP address in square
11400brackets, followed by a colon and a port number if the logging of ports is
11401enabled. The format of the rest of the string depends on whether the host
11402issued a HELO or EHLO SMTP command, and whether the host name was verified by
11403looking up its IP address. (Looking up the IP address can be forced by the
9b371988 11404&%host_lookup%& option, independent of verification.) A plain host name at the
168e428f
PH
11405start of the string is a verified host name; if this is not present,
11406verification either failed or was not requested. A host name in parentheses is
11407the argument of a HELO or EHLO command. This is omitted if it is identical to
11408the verified host name or to the host's IP address in square brackets.
11409
9b371988 11410.vitem &$sender_helo_name$&
f89d2485 11411.vindex "&$sender_helo_name$&"
068aaea8
PH
11412When a message is received from a remote host that has issued a HELO or EHLO
11413command, the argument of that command is placed in this variable. It is also
11414set if HELO or EHLO is used when a message is received using SMTP locally via
9b371988 11415the &%-bs%& or &%-bS%& options.
168e428f 11416
9b371988 11417.vitem &$sender_host_address$&
f89d2485 11418.vindex "&$sender_host_address$&"
068aaea8
PH
11419When a message is received from a remote host, this variable contains that
11420host's IP address. For locally submitted messages, it is empty.
168e428f 11421
9b371988 11422.vitem &$sender_host_authenticated$&
f89d2485 11423.vindex "&$sender_host_authenticated$&"
168e428f 11424This variable contains the name (not the public name) of the authenticator
068aaea8
PH
11425driver that successfully authenticated the client from which the message was
11426received. It is empty if there was no successful authentication. See also
9b371988 11427&$authenticated_id$&.
168e428f 11428
9b371988 11429.vitem &$sender_host_name$&
f89d2485 11430.vindex "&$sender_host_name$&"
168e428f
PH
11431When a message is received from a remote host, this variable contains the
11432host's name as obtained by looking up its IP address. For messages received by
11433other means, this variable is empty.
9b371988 11434
f89d2485 11435.vindex "&$host_lookup_failed$&"
168e428f 11436If the host name has not previously been looked up, a reference to
9b371988 11437&$sender_host_name$& triggers a lookup (for messages from remote hosts).
168e428f
PH
11438A looked up name is accepted only if it leads back to the original IP address
11439via a forward lookup. If either the reverse or the forward lookup fails to find
11440any data, or if the forward lookup does not yield the original IP address,
9b371988
PH
11441&$sender_host_name$& remains empty, and &$host_lookup_failed$& is set to &"1"&.
11442
f89d2485 11443.vindex "&$host_lookup_deferred$&"
168e428f 11444However, if either of the lookups cannot be completed (for example, there is a
9b371988
PH
11445DNS timeout), &$host_lookup_deferred$& is set to &"1"&, and
11446&$host_lookup_failed$& remains set to &"0"&.
11447
11448Once &$host_lookup_failed$& is set to &"1"&, Exim does not try to look up the
11449host name again if there is a subsequent reference to &$sender_host_name$&
db9452a9 11450in the same Exim process, but it does try again if &$host_lookup_deferred$&
9b371988
PH
11451is set to &"1"&.
11452
168e428f
PH
11453Exim does not automatically look up every calling host's name. If you want
11454maximum efficiency, you should arrange your configuration so that it avoids
11455these lookups altogether. The lookup happens only if one or more of the
11456following are true:
11457
9b371988
PH
11458.ilist
11459A string containing &$sender_host_name$& is expanded.
11460.next
11461The calling host matches the list in &%host_lookup%&. In the default
11462configuration, this option is set to *, so it must be changed if lookups are
11463to be avoided. (In the code, the default for &%host_lookup%& is unset.)
11464.next
11465Exim needs the host name in order to test an item in a host list. The items
11466that require this are described in sections &<<SECThoslispatnam>>& and
11467&<<SECThoslispatnamsk>>&.
11468.next
11469The calling host matches &%helo_try_verify_hosts%& or &%helo_verify_hosts%&.
168e428f
PH
11470In this case, the host name is required to compare with the name quoted in any
11471EHLO or HELO commands that the client issues.
9b371988
PH
11472.next
11473The remote host issues a EHLO or HELO command that quotes one of the
11474domains in &%helo_lookup_domains%&. The default value of this option is
11475. ==== As this is a nested list, any displays it contains must be indented
11476. ==== as otherwise they are too far to the left.
11477.code
11478 helo_lookup_domains = @ : @[]
11479.endd
168e428f
PH
11480which causes a lookup if a remote host (incorrectly) gives the server's name or
11481IP address in an EHLO or HELO command.
9b371988 11482.endlist
168e428f
PH
11483
11484
9b371988 11485.vitem &$sender_host_port$&
f89d2485 11486.vindex "&$sender_host_port$&"
068aaea8
PH
11487When a message is received from a remote host, this variable contains the port
11488number that was used on the remote host.
168e428f 11489
9b371988 11490.vitem &$sender_ident$&
f89d2485 11491.vindex "&$sender_ident$&"
168e428f
PH
11492When a message is received from a remote host, this variable contains the
11493identification received in response to an RFC 1413 request. When a message has
11494been received locally, this variable contains the login name of the user that
11495called Exim.
11496
9b371988
PH
11497.vitem &$sender_rate_$&&'xxx'&
11498A number of variables whose names begin &$sender_rate_$& are set as part of the
11499&%ratelimit%& ACL condition. Details are given in section
11500&<<SECTratelimiting>>&.
9b371988
PH
11501
11502.vitem &$sender_rcvhost$&
11503.cindex "DNS" "reverse lookup"
11504.cindex "reverse DNS lookup"
f89d2485 11505.vindex "&$sender_rcvhost$&"
9b371988 11506This is provided specifically for use in &'Received:'& headers. It starts with
068aaea8
PH
11507either the verified host name (as obtained from a reverse DNS lookup) or, if
11508there is no verified host name, the IP address in square brackets. After that
11509there may be text in parentheses. When the first item is a verified host name,
11510the first thing in the parentheses is the IP address in square brackets,
11511followed by a colon and a port number if port logging is enabled. When the
9b371988 11512first item is an IP address, the port is recorded as &"port=&'xxxx'&"& inside
068aaea8 11513the parentheses.
9b371988
PH
11514
11515There may also be items of the form &"helo=&'xxxx'&"& if HELO or EHLO
168e428f 11516was used and its argument was not identical to the real host name or IP
9b371988
PH
11517address, and &"ident=&'xxxx'&"& if an RFC 1413 ident string is available. If
11518all three items are present in the parentheses, a newline and tab are inserted
11519into the string, to improve the formatting of the &'Received:'& header.
168e428f 11520
9b371988 11521.vitem &$sender_verify_failure$&
f89d2485 11522.vindex "&$sender_verify_failure$&"
168e428f 11523In an ACL, when a sender verification fails, this variable contains information
9b371988
PH
11524about the failure. The details are the same as for
11525&$recipient_verify_failure$&.
168e428f 11526
f89d2485
PH
11527.vitem &$sending_ip_address$&
11528.vindex "&$sending_ip_address$&"
11529This variable is set whenever an outgoing SMTP connection to another host has
11530been set up. It contains the IP address of the local interface that is being
11531used. This is useful if a host that has more than one IP address wants to take
11532on different personalities depending on which one is being used. For incoming
11533connections, see &$received_ip_address$&.
11534
11535.vitem &$sending_port$&
11536.vindex "&$sending_port$&"
11537This variable is set whenever an outgoing SMTP connection to another host has
11538been set up. It contains the local port that is being used. For incoming
11539connections, see &$received_port$&.
f89d2485 11540
9b371988 11541.vitem &$smtp_active_hostname$&
f89d2485 11542.vindex "&$smtp_active_hostname$&"
3cb1b51e
PH
11543During an incoming SMTP session, this variable contains the value of the active
11544host name, as specified by the &%smtp_active_hostname%& option. The value of
9b371988
PH
11545&$smtp_active_hostname$& is saved with any message that is received, so its
11546value can be consulted during routing and delivery.
11547
9b371988 11548.vitem &$smtp_command$&
f89d2485 11549.vindex "&$smtp_command$&"
068aaea8
PH
11550During the processing of an incoming SMTP command, this variable contains the
11551entire command. This makes it possible to distinguish between HELO and EHLO in
11552the HELO ACL, and also to distinguish between commands such as these:
9b371988 11553.code
068aaea8
PH
11554MAIL FROM:<>
11555MAIL FROM: <>
9b371988 11556.endd
068aaea8 11557For a MAIL command, extra parameters such as SIZE can be inspected. For a RCPT
9b371988
PH
11558command, the address in &$smtp_command$& is the original address before any
11559rewriting, whereas the values in &$local_part$& and &$domain$& are taken from
11560the address after SMTP-time rewriting.
9b371988
PH
11561
11562.vitem &$smtp_command_argument$&
f89d2485
PH
11563.cindex "SMTP" "command, argument for"
11564.vindex "&$smtp_command_argument$&"
068aaea8
PH
11565While an ACL is running to check an SMTP command, this variable contains the
11566argument, that is, the text that follows the command name, with leading white
9b371988 11567space removed. Following the introduction of &$smtp_command$&, this variable is
068aaea8 11568somewhat redundant, but is retained for backwards compatibility.
168e428f 11569
f89d2485
PH
11570.vitem &$smtp_count_at_connection_start$&
11571.vindex "&$smtp_count_at_connection_start$&"
11572This variable is set greater than zero only in processes spawned by the Exim
11573daemon for handling incoming SMTP connections. The name is deliberately long,
11574in order to emphasize what the contents are. When the daemon accepts a new
11575connection, it increments this variable. A copy of the variable is passed to
11576the child process that handles the connection, but its value is fixed, and
11577never changes. It is only an approximation of how many incoming connections
11578there actually are, because many other connections may come and go while a
11579single connection is being processed. When a child process terminates, the
11580daemon decrements its copy of the variable.
f89d2485 11581
9b371988
PH
11582.vitem "&$sn0$& &-- &$sn9$&"
11583These variables are copies of the values of the &$n0$& &-- &$n9$& accumulators
11584that were current at the end of the system filter file. This allows a system
11585filter file to set values that can be tested in users' filter files. For
11586example, a system filter could set a value indicating how likely it is that a
11587message is junk mail.
168e428f 11588
9b371988
PH
11589.vitem &$spam_$&&'xxx'&
11590A number of variables whose names start with &$spam$& are available when Exim
11591is compiled with the content-scanning extension. For details, see section
11592&<<SECTscanspamass>>&.
168e428f
PH
11593
11594
9b371988 11595.vitem &$spool_directory$&
f89d2485 11596.vindex "&$spool_directory$&"
168e428f
PH
11597The name of Exim's spool directory.
11598
9b371988 11599.vitem &$spool_inodes$&
f89d2485 11600.vindex "&$spool_inodes$&"
168e428f
PH
11601The number of free inodes in the disk partition where Exim's spool files are
11602being written. The value is recalculated whenever the variable is referenced.
11603If the relevant file system does not have the concept of inodes, the value of
9b371988 11604is -1. See also the &%check_spool_inodes%& option.
168e428f 11605
9b371988 11606.vitem &$spool_space$&
f89d2485 11607.vindex "&$spool_space$&"
168e428f
PH
11608The amount of free space (as a number of kilobytes) in the disk partition where
11609Exim's spool files are being written. The value is recalculated whenever the
11610variable is referenced. If the operating system does not have the ability to
11611find the amount of free space (only true for experimental systems), the space
11612value is -1. For example, to check in an ACL that there is at least 50
11613megabytes free on the spool, you could write:
9b371988
PH
11614.code
11615condition = ${if > {$spool_space}{50000}}
11616.endd
11617See also the &%check_spool_space%& option.
11618
11619
11620.vitem &$thisaddress$&
f89d2485 11621.vindex "&$thisaddress$&"
9b371988
PH
11622This variable is set only during the processing of the &%foranyaddress%&
11623command in a filter file. Its use is explained in the description of that
11624command, which can be found in the separate document entitled &'Exim's
11625interfaces to mail filtering'&.
11626
11627.vitem &$tls_certificate_verified$&
f89d2485 11628.vindex "&$tls_certificate_verified$&"
9b371988
PH
11629This variable is set to &"1"& if a TLS certificate was verified when the
11630message was received, and &"0"& otherwise.
11631
11632.vitem &$tls_cipher$&
f89d2485 11633.vindex "&$tls_cipher$&"
168e428f
PH
11634When a message is received from a remote host over an encrypted SMTP
11635connection, this variable is set to the cipher suite that was negotiated, for
11636example DES-CBC3-SHA. In other circumstances, in particular, for message
595028e4
PH
11637received over unencrypted connections, the variable is empty. Testing
11638&$tls_cipher$& for emptiness is one way of distinguishing between encrypted and
11639non-encrypted connections during ACL processing.
11640
11641The &$tls_cipher$& variable retains its value during message delivery, except
11642when an outward SMTP delivery takes place via the &(smtp)& transport. In this
11643case, &$tls_cipher$& is cleared before any outgoing SMTP connection is made,
11644and then set to the outgoing cipher suite if one is negotiated. See chapter
11645&<<CHAPTLS>>& for details of TLS support and chapter &<<CHAPsmtptrans>>& for
11646details of the &(smtp)& transport.
168e428f 11647
9b371988 11648.vitem &$tls_peerdn$&
f89d2485 11649.vindex "&$tls_peerdn$&"
068aaea8 11650When a message is received from a remote host over an encrypted SMTP
168e428f
PH
11651connection, and Exim is configured to request a certificate from the client,
11652the value of the Distinguished Name of the certificate is made available in the
7d0ab55c 11653&$tls_peerdn$& during subsequent processing. Like &$tls_cipher$&, the
595028e4 11654value is retained during message delivery, except during outbound SMTP
7d0ab55c 11655deliveries.
168e428f 11656
9b371988 11657.vitem &$tod_bsdinbox$&
f89d2485 11658.vindex "&$tod_bsdinbox$&"
9b371988
PH
11659The time of day and the date, in the format required for BSD-style mailbox
11660files, for example: Thu Oct 17 17:14:09 1995.
168e428f 11661
9b371988 11662.vitem &$tod_epoch$&
f89d2485 11663.vindex "&$tod_epoch$&"
168e428f
PH
11664The time and date as a number of seconds since the start of the Unix epoch.
11665
9b371988 11666.vitem &$tod_full$&
f89d2485 11667.vindex "&$tod_full$&"
168e428f
PH
11668A full version of the time and date, for example: Wed, 16 Oct 1995 09:51:40
11669+0100. The timezone is always given as a numerical offset from UTC, with
11670positive values used for timezones that are ahead (east) of UTC, and negative
11671values for those that are behind (west).
11672
9b371988 11673.vitem &$tod_log$&
f89d2485 11674.vindex "&$tod_log$&"
168e428f
PH
11675The time and date in the format used for writing Exim's log files, for example:
116761995-10-12 15:32:29, but without a timezone.
11677
9b371988 11678.vitem &$tod_logfile$&
f89d2485 11679.vindex "&$tod_logfile$&"
168e428f 11680This variable contains the date in the format yyyymmdd. This is the format that
9b371988 11681is used for datestamping log files when &%log_file_path%& contains the &`%D`&
168e428f
PH
11682flag.
11683
9b371988 11684.vitem &$tod_zone$&
f89d2485 11685.vindex "&$tod_zone$&"
168e428f
PH
11686This variable contains the numerical value of the local timezone, for example:
11687-0500.
11688
9b371988 11689.vitem &$tod_zulu$&
f89d2485 11690.vindex "&$tod_zulu$&"
9b371988
PH
11691This variable contains the UTC date and time in &"Zulu"& format, as specified
11692by ISO 8601, for example: 20030221154023Z.
168e428f 11693
9b371988 11694.vitem &$value$&
f89d2485 11695.vindex "&$value$&"
168e428f 11696This variable contains the result of an expansion lookup, extraction operation,
595028e4
PH
11697or external command, as described above. It is also used during a
11698&*reduce*& expansion.
168e428f 11699
9b371988 11700.vitem &$version_number$&
f89d2485 11701.vindex "&$version_number$&"
168e428f
PH
11702The version number of Exim.
11703
9b371988 11704.vitem &$warn_message_delay$&
f89d2485 11705.vindex "&$warn_message_delay$&"
168e428f 11706This variable is set only during the creation of a message warning about a
9b371988 11707delivery delay. Details of its use are explained in section &<<SECTcustwarn>>&.
168e428f 11708
9b371988 11709.vitem &$warn_message_recipients$&
f89d2485 11710.vindex "&$warn_message_recipients$&"
168e428f 11711This variable is set only during the creation of a message warning about a
9b371988
PH
11712delivery delay. Details of its use are explained in section &<<SECTcustwarn>>&.
11713.endlist
4f578862 11714.ecindex IIDstrexp
168e428f
PH
11715
11716
11717
9b371988
PH
11718. ////////////////////////////////////////////////////////////////////////////
11719. ////////////////////////////////////////////////////////////////////////////
168e428f 11720
9b371988 11721.chapter "Embedded Perl" "CHAPperl"
4f578862 11722.scindex IIDperl "Perl" "calling from Exim"
168e428f
PH
11723Exim can be built to include an embedded Perl interpreter. When this is done,
11724Perl subroutines can be called as part of the string expansion process. To make
11725use of the Perl support, you need version 5.004 or later of Perl installed on
11726your system. To include the embedded interpreter in the Exim binary, include
11727the line
9b371988
PH
11728.code
11729EXIM_PERL = perl.o
11730.endd
11731in your &_Local/Makefile_& and then build Exim in the normal way.
168e428f
PH
11732
11733
f89d2485 11734.section "Setting up so Perl can be used" "SECID85"
0a4e3112 11735.oindex "&%perl_startup%&"
168e428f 11736Access to Perl subroutines is via a global configuration option called
9b371988
PH
11737&%perl_startup%& and an expansion string operator &%${perl ...}%&. If there is
11738no &%perl_startup%& option in the Exim configuration file then no Perl
168e428f 11739interpreter is started and there is almost no overhead for Exim (since none of
9b371988 11740the Perl library will be paged in unless used). If there is a &%perl_startup%&
168e428f
PH
11741option then the associated value is taken to be Perl code which is executed in
11742a newly created Perl interpreter.
11743
9b371988 11744The value of &%perl_startup%& is not expanded in the Exim sense, so you do not
168e428f
PH
11745need backslashes before any characters to escape special meanings. The option
11746should usually be something like
9b371988
PH
11747.code
11748perl_startup = do '/etc/exim.pl'
11749.endd
11750where &_/etc/exim.pl_& is Perl code which defines any subroutines you want to
168e428f
PH
11751use from Exim. Exim can be configured either to start up a Perl interpreter as
11752soon as it is entered, or to wait until the first time it is needed. Starting
11753the interpreter at the beginning ensures that it is done while Exim still has
11754its setuid privilege, but can impose an unnecessary overhead if Perl is not in
11755fact used in a particular run. Also, note that this does not mean that Exim is
11756necessarily running as root when Perl is called at a later time. By default,
11757the interpreter is started only when it is needed, but this can be changed in
11758two ways:
11759
9b371988 11760.ilist
0a4e3112 11761.oindex "&%perl_at_start%&"
9b371988 11762Setting &%perl_at_start%& (a boolean option) in the configuration requests
168e428f 11763a startup when Exim is entered.
9b371988
PH
11764.next
11765The command line option &%-ps%& also requests a startup when Exim is entered,
11766overriding the setting of &%perl_at_start%&.
11767.endlist
168e428f 11768
9b371988
PH
11769There is also a command line option &%-pd%& (for delay) which suppresses the
11770initial startup, even if &%perl_at_start%& is set.
168e428f 11771
168e428f 11772
f89d2485 11773.section "Calling Perl subroutines" "SECID86"
9b371988 11774When the configuration file includes a &%perl_startup%& option you can make use
168e428f 11775of the string expansion item to call the Perl subroutines that are defined
9b371988 11776by the &%perl_startup%& code. The operator is used in any of the following
168e428f 11777forms:
9b371988
PH
11778.code
11779${perl{foo}}
11780${perl{foo}{argument}}
11781${perl{foo}{argument1}{argument2} ... }
11782.endd
11783which calls the subroutine &%foo%& with the given arguments. A maximum of eight
168e428f
PH
11784arguments may be passed. Passing more than this results in an expansion failure
11785with an error message of the form
9b371988
PH
11786.code
11787Too many arguments passed to Perl subroutine "foo" (max is 8)
11788.endd
168e428f
PH
11789The return value of the Perl subroutine is evaluated in a scalar context before
11790it is passed back to Exim to be inserted into the expanded string. If the
9b371988
PH
11791return value is &'undef'&, the expansion is forced to fail in the same way as
11792an explicit &"fail"& on an &%if%& or &%lookup%& item. If the subroutine aborts
11793by obeying Perl's &%die%& function, the expansion fails with the error message
11794that was passed to &%die%&.
168e428f
PH
11795
11796
f89d2485 11797.section "Calling Exim functions from Perl" "SECID87"
9b371988 11798Within any Perl code called from Exim, the function &'Exim::expand_string()'&
168e428f
PH
11799is available to call back into Exim's string expansion function. For example,
11800the Perl code
9b371988
PH
11801.code
11802my $lp = Exim::expand_string('$local_part');
11803.endd
11804makes the current Exim &$local_part$& available in the Perl variable &$lp$&.
168e428f 11805Note those are single quotes and not double quotes to protect against
9b371988 11806&$local_part$& being interpolated as a Perl variable.
168e428f 11807
9b371988
PH
11808If the string expansion is forced to fail by a &"fail"& item, the result of
11809&'Exim::expand_string()'& is &%undef%&. If there is a syntax error in the
168e428f 11810expansion string, the Perl call from the original expansion string fails with
9b371988 11811an appropriate error message, in the same way as if &%die%& were used.
168e428f 11812
9b371988
PH
11813.cindex "debugging" "from embedded Perl"
11814.cindex "log" "writing from embedded Perl"
168e428f 11815Two other Exim functions are available for use from within Perl code.
9b371988
PH
11816&'Exim::debug_write()'& writes a string to the standard error stream if Exim's
11817debugging is enabled. If you want a newline at the end, you must supply it.
11818&'Exim::log_write()'& writes a string to Exim's main log, adding a leading
11819timestamp. In this case, you should not supply a terminating newline.
168e428f
PH
11820
11821
f89d2485 11822.section "Use of standard output and error by Perl" "SECID88"
9b371988 11823.cindex "Perl" "standard output and error"
168e428f
PH
11824You should not write to the standard error or output streams from within your
11825Perl code, as it is not defined how these are set up. In versions of Exim
11826before 4.50, it is possible for the standard output or error to refer to the
11827SMTP connection during message reception via the daemon. Writing to this stream
11828is certain to cause chaos. From Exim 4.50 onwards, the standard output and
9b371988 11829error streams are connected to &_/dev/null_& in the daemon. The chaos is
168e428f
PH
11830avoided, but the output is lost.
11831
9b371988
PH
11832.cindex "Perl" "use of &%warn%&"
11833The Perl &%warn%& statement writes to the standard error stream by default.
11834Calls to &%warn%& may be embedded in Perl modules that you use, but over which
11835you have no control. When Exim starts up the Perl interpreter, it arranges for
11836output from the &%warn%& statement to be written to the Exim main log. You can
11837change this by including appropriate Perl magic somewhere in your Perl code.
11838For example, to discard &%warn%& output completely, you need this:
11839.code
11840$SIG{__WARN__} = sub { };
11841.endd
11842Whenever a &%warn%& is obeyed, the anonymous subroutine is called. In this
168e428f 11843example, the code for the subroutine is empty, so it does nothing, but you can
9b371988 11844include any Perl code that you like. The text of the &%warn%& message is passed
168e428f 11845as the first subroutine argument.
4f578862 11846.ecindex IIDperl
168e428f
PH
11847
11848
9b371988
PH
11849. ////////////////////////////////////////////////////////////////////////////
11850. ////////////////////////////////////////////////////////////////////////////
168e428f 11851
9b371988
PH
11852.chapter "Starting the daemon and the use of network interfaces" &&&
11853 "CHAPinterfaces" &&&
11854 "Starting the daemon"
11855.cindex "daemon" "starting"
11856.cindex "interface" "listening"
11857.cindex "network interface"
11858.cindex "interface" "network"
11859.cindex "IP address" "for listening"
11860.cindex "daemon" "listening IP addresses"
11861.cindex "TCP/IP" "setting listening interfaces"
11862.cindex "TCP/IP" "setting listening ports"
168e428f
PH
11863A host that is connected to a TCP/IP network may have one or more physical
11864hardware network interfaces. Each of these interfaces may be configured as one
9b371988 11865or more &"logical"& interfaces, which are the entities that a program actually
168e428f 11866works with. Each of these logical interfaces is associated with an IP address.
9b371988
PH
11867In addition, TCP/IP software supports &"loopback"& interfaces (127.0.0.1 in
11868IPv4 and ::1 in IPv6), which do not use any physical hardware. Exim requires
168e428f
PH
11869knowledge about the host's interfaces for use in three different circumstances:
11870
9b371988
PH
11871.olist
11872When a listening daemon is started, Exim needs to know which interfaces
168e428f 11873and ports to listen on.
9b371988
PH
11874.next
11875When Exim is routing an address, it needs to know which IP addresses
168e428f
PH
11876are associated with local interfaces. This is required for the correct
11877processing of MX lists by removing the local host and others with the
11878same or higher priority values. Also, Exim needs to detect cases
11879when an address is routed to an IP address that in fact belongs to the
9b371988 11880local host. Unless the &%self%& router option or the &%allow_localhost%&
168e428f
PH
11881option of the smtp transport is set (as appropriate), this is treated
11882as an error situation.
9b371988
PH
11883.next
11884When Exim connects to a remote host, it may need to know which interface to use
168e428f 11885for the outgoing connection.
9b371988 11886.endlist
168e428f
PH
11887
11888
11889Exim's default behaviour is likely to be appropriate in the vast majority
11890of cases. If your host has only one interface, and you want all its IP
11891addresses to be treated in the same way, and you are using only the
11892standard SMTP port, you should not need to take any special action. The
11893rest of this chapter does not apply to you.
11894
11895In a more complicated situation you may want to listen only on certain
11896interfaces, or on different ports, and for this reason there are a number of
11897options that can be used to influence Exim's behaviour. The rest of this
11898chapter describes how they operate.
11899
11900When a message is received over TCP/IP, the interface and port that were
3cb1b51e 11901actually used are set in &$received_ip_address$& and &$received_port$&.
168e428f
PH
11902
11903
11904
f89d2485 11905.section "Starting a listening daemon" "SECID89"
9b371988 11906When a listening daemon is started (by means of the &%-bd%& command line
168e428f
PH
11907option), the interfaces and ports on which it listens are controlled by the
11908following options:
11909
9b371988
PH
11910.ilist
11911&%daemon_smtp_ports%& contains a list of default ports. (For backward
168e428f 11912compatibility, this option can also be specified in the singular.)
9b371988
PH
11913.next
11914&%local_interfaces%& contains list of interface IP addresses on which to
168e428f 11915listen. Each item may optionally also specify a port.
9b371988 11916.endlist
168e428f
PH
11917
11918The default list separator in both cases is a colon, but this can be changed as
9b371988
PH
11919described in section &<<SECTlistconstruct>>&. When IPv6 addresses are involved,
11920it is usually best to change the separator to avoid having to double all the
168e428f 11921colons. For example:
9b371988 11922.code
168e428f
PH
11923local_interfaces = <; 127.0.0.1 ; \
11924 192.168.23.65 ; \
11925 ::1 ; \
11926 3ffe:ffff:836f::fe86:a061
9b371988 11927.endd
168e428f 11928There are two different formats for specifying a port along with an IP address
9b371988 11929in &%local_interfaces%&:
168e428f 11930
9b371988
PH
11931.olist
11932The port is added onto the address with a dot separator. For example, to listen
168e428f 11933on port 1234 on two different IP addresses:
9b371988 11934.code
168e428f
PH
11935local_interfaces = <; 192.168.23.65.1234 ; \
11936 3ffe:ffff:836f::fe86:a061.1234
9b371988
PH
11937.endd
11938.next
11939The IP address is enclosed in square brackets, and the port is added
168e428f 11940with a colon separator, for example:
9b371988 11941.code
168e428f
PH
11942local_interfaces = <; [192.168.23.65]:1234 ; \
11943 [3ffe:ffff:836f::fe86:a061]:1234
9b371988
PH
11944.endd
11945.endlist
168e428f 11946
9b371988 11947When a port is not specified, the value of &%daemon_smtp_ports%& is used. The
168e428f 11948default setting contains just one port:
9b371988
PH
11949.code
11950daemon_smtp_ports = smtp
11951.endd
168e428f
PH
11952If more than one port is listed, each interface that does not have its own port
11953specified listens on all of them. Ports that are listed in
9b371988
PH
11954&%daemon_smtp_ports%& can be identified either by name (defined in
11955&_/etc/services_&) or by number. However, when ports are given with individual
11956IP addresses in &%local_interfaces%&, only numbers (not names) can be used.
168e428f
PH
11957
11958
11959
f89d2485 11960.section "Special IP listening addresses" "SECID90"
168e428f 11961The addresses 0.0.0.0 and ::0 are treated specially. They are interpreted
9b371988
PH
11962as &"all IPv4 interfaces"& and &"all IPv6 interfaces"&, respectively. In each
11963case, Exim tells the TCP/IP stack to &"listen on all IPv&'x'& interfaces"&
168e428f 11964instead of setting up separate listening sockets for each interface. The
9b371988
PH
11965default value of &%local_interfaces%& is
11966.code
11967local_interfaces = 0.0.0.0
11968.endd
168e428f 11969when Exim is built without IPv6 support; otherwise it is:
9b371988
PH
11970.code
11971local_interfaces = <; ::0 ; 0.0.0.0
11972.endd
168e428f
PH
11973Thus, by default, Exim listens on all available interfaces, on the SMTP port.
11974
11975
11976
f89d2485 11977.section "Overriding local_interfaces and daemon_smtp_ports" "SECID91"
9b371988
PH
11978The &%-oX%& command line option can be used to override the values of
11979&%daemon_smtp_ports%& and/or &%local_interfaces%& for a particular daemon
11980instance. Another way of doing this would be to use macros and the &%-D%&
11981option. However, &%-oX%& can be used by any admin user, whereas modification of
11982the runtime configuration by &%-D%& is allowed only when the caller is root or
168e428f
PH
11983exim.
11984
9b371988 11985The value of &%-oX%& is a list of items. The default colon separator can be
168e428f
PH
11986changed in the usual way if required. If there are any items that do not
11987contain dots or colons (that is, are not IP addresses), the value of
9b371988
PH
11988&%daemon_smtp_ports%& is replaced by the list of those items. If there are any
11989items that do contain dots or colons, the value of &%local_interfaces%& is
168e428f 11990replaced by those items. Thus, for example,
9b371988
PH
11991.code
11992-oX 1225
11993.endd
11994overrides &%daemon_smtp_ports%&, but leaves &%local_interfaces%& unchanged,
168e428f 11995whereas
9b371988
PH
11996.code
11997-oX 192.168.34.5.1125
11998.endd
11999overrides &%local_interfaces%&, leaving &%daemon_smtp_ports%& unchanged.
12000(However, since &%local_interfaces%& now contains no items without ports, the
12001value of &%daemon_smtp_ports%& is no longer relevant in this example.)
168e428f
PH
12002
12003
12004
9b371988
PH
12005.section "Support for the obsolete SSMTP (or SMTPS) protocol" "SECTsupobssmt"
12006.cindex "ssmtp protocol"
12007.cindex "smtps protocol"
12008.cindex "SMTP" "ssmtp protocol"
12009.cindex "SMTP" "smtps protocol"
168e428f
PH
12010Exim supports the obsolete SSMTP protocol (also known as SMTPS) that was used
12011before the STARTTLS command was standardized for SMTP. Some legacy clients
9b371988 12012still use this protocol. If the &%tls_on_connect_ports%& option is set to a
168e428f
PH
12013list of port numbers, connections to those ports must use SSMTP. The most
12014common use of this option is expected to be
9b371988
PH
12015.code
12016tls_on_connect_ports = 465
12017.endd
168e428f 12018because 465 is the usual port number used by the legacy clients. There is also
9b371988 12019a command line option &%-tls-on-connect%&, which forces all ports to behave in
168e428f
PH
12020this way when a daemon is started.
12021
9b371988 12022&*Warning*&: Setting &%tls_on_connect_ports%& does not of itself cause the
168e428f 12023daemon to listen on those ports. You must still specify them in
9b371988
PH
12024&%daemon_smtp_ports%&, &%local_interfaces%&, or the &%-oX%& option. (This is
12025because &%tls_on_connect_ports%& applies to &%inetd%& connections as well as to
168e428f
PH
12026connections via the daemon.)
12027
12028
12029
12030
f89d2485 12031.section "IPv6 address scopes" "SECID92"
4f578862 12032.cindex "IPv6" "address scopes"
9b371988 12033IPv6 addresses have &"scopes"&, and a host with multiple hardware interfaces
168e428f
PH
12034can, in principle, have the same link-local IPv6 address on different
12035interfaces. Thus, additional information is needed, over and above the IP
12036address, to distinguish individual interfaces. A convention of using a
12037percent sign followed by something (often the interface name) has been
12038adopted in some cases, leading to addresses like this:
9b371988
PH
12039.code
12040fe80::202:b3ff:fe03:45c1%eth0
12041.endd
168e428f 12042To accommodate this usage, a percent sign followed by an arbitrary string is
9b371988 12043allowed at the end of an IPv6 address. By default, Exim calls &[getaddrinfo()]&
168e428f
PH
12044to convert a textual IPv6 address for actual use. This function recognizes the
12045percent convention in operating systems that support it, and it processes the
12046address appropriately. Unfortunately, some older libraries have problems with
9b371988
PH
12047&[getaddrinfo()]&. If
12048.code
12049IPV6_USE_INET_PTON=yes
12050.endd
12051is set in &_Local/Makefile_& (or an OS-dependent Makefile) when Exim is built,
12052Exim uses &'inet_pton()'& to convert a textual IPv6 address for actual use,
12053instead of &[getaddrinfo()]&. (Before version 4.14, it always used this
168e428f 12054function.) Of course, this means that the additional functionality of
9b371988 12055&[getaddrinfo()]& &-- recognizing scoped addresses &-- is lost.
168e428f 12056
f89d2485 12057.section "Disabling IPv6" "SECID93"
4f578862
PH
12058.cindex "IPv6" "disabling"
12059Sometimes it happens that an Exim binary that was compiled with IPv6 support is
12060run on a host whose kernel does not support IPv6. The binary will fall back to
12061using IPv4, but it may waste resources looking up AAAA records, and trying to
12062connect to IPv6 addresses, causing delays to mail delivery. If you set the
12063.oindex "&%disable_ipv6%&"
12064&%disable_ipv6%& option true, even if the Exim binary has IPv6 support, no IPv6
12065activities take place. AAAA records are never looked up, and any IPv6 addresses
12066that are listed in &%local_interfaces%&, data for the &(manualroute)& router,
12067etc. are ignored. If IP literals are enabled, the &(ipliteral)& router declines
12068to handle IPv6 literal addresses.
12069
12070On the other hand, when IPv6 is in use, there may be times when you want to
12071disable it for certain hosts or domains. You can use the &%dns_ipv4_lookup%&
12072option to globally suppress the lookup of AAAA records for specified domains,
12073and you can use the &%ignore_target_hosts%& generic router option to ignore
12074IPv6 addresses in an individual router.
4f578862 12075
168e428f
PH
12076
12077
f89d2485 12078.section "Examples of starting a listening daemon" "SECID94"
168e428f 12079The default case in an IPv6 environment is
9b371988
PH
12080.code
12081daemon_smtp_ports = smtp
12082local_interfaces = <; ::0 ; 0.0.0.0
12083.endd
168e428f
PH
12084This specifies listening on the smtp port on all IPv6 and IPv4 interfaces.
12085Either one or two sockets may be used, depending on the characteristics of
12086the TCP/IP stack. (This is complicated and messy; for more information,
9b371988 12087read the comments in the &_daemon.c_& source file.)
168e428f
PH
12088
12089To specify listening on ports 25 and 26 on all interfaces:
9b371988
PH
12090.code
12091daemon_smtp_ports = 25 : 26
12092.endd
12093(leaving &%local_interfaces%& at the default setting) or, more explicitly:
12094.code
168e428f
PH
12095local_interfaces = <; ::0.25 ; ::0.26 \
12096 0.0.0.0.25 ; 0.0.0.0.26
9b371988 12097.endd
168e428f
PH
12098To listen on the default port on all IPv4 interfaces, and on port 26 on the
12099IPv4 loopback address only:
9b371988
PH
12100.code
12101local_interfaces = 0.0.0.0 : 127.0.0.1.26
12102.endd
168e428f 12103To specify listening on the default port on specific interfaces only:
9b371988
PH
12104.code
12105local_interfaces = 192.168.34.67 : 192.168.34.67
12106.endd
12107&*Warning*&: Such a setting excludes listening on the loopback interfaces.
168e428f 12108
168e428f 12109
168e428f 12110
f89d2485 12111.section "Recognizing the local host" "SECTreclocipadd"
9b371988 12112The &%local_interfaces%& option is also used when Exim needs to determine
168e428f
PH
12113whether or not an IP address refers to the local host. That is, the IP
12114addresses of all the interfaces on which a daemon is listening are always
12115treated as local.
12116
9b371988 12117For this usage, port numbers in &%local_interfaces%& are ignored. If either of
168e428f
PH
12118the items 0.0.0.0 or ::0 are encountered, Exim gets a complete list of
12119available interfaces from the operating system, and extracts the relevant
12120(that is, IPv4 or IPv6) addresses to use for checking.
12121
12122Some systems set up large numbers of virtual interfaces in order to provide
12123many virtual web servers. In this situation, you may want to listen for
12124email on only a few of the available interfaces, but nevertheless treat all
12125interfaces as local when routing. You can do this by setting
9b371988
PH
12126&%extra_local_interfaces%& to a list of IP addresses, possibly including the
12127&"all"& wildcard values. These addresses are recognized as local, but are not
168e428f 12128used for listening. Consider this example:
9b371988 12129.code
168e428f
PH
12130local_interfaces = <; 127.0.0.1 ; ::1 ; \
12131 192.168.53.235 ; \
12132 3ffe:2101:12:1:a00:20ff:fe86:a061
12133
12134extra_local_interfaces = <; ::0 ; 0.0.0.0
9b371988 12135.endd
168e428f
PH
12136The daemon listens on the loopback interfaces and just one IPv4 and one IPv6
12137address, but all available interface addresses are treated as local when
12138Exim is routing.
12139
12140In some environments the local host name may be in an MX list, but with an IP
12141address that is not assigned to any local interface. In other cases it may be
12142desirable to treat other host names as if they referred to the local host. Both
9b371988 12143these cases can be handled by setting the &%hosts_treat_as_local%& option.
168e428f
PH
12144This contains host names rather than IP addresses. When a host is referenced
12145during routing, either via an MX record or directly, it is treated as the local
9b371988
PH
12146host if its name matches &%hosts_treat_as_local%&, or if any of its IP
12147addresses match &%local_interfaces%& or &%extra_local_interfaces%&.
168e428f
PH
12148
12149
12150
f89d2485 12151.section "Delivering to a remote host" "SECID95"
168e428f
PH
12152Delivery to a remote host is handled by the smtp transport. By default, it
12153allows the system's TCP/IP functions to choose which interface to use (if
12154there is more than one) when connecting to a remote host. However, the
9b371988
PH
12155&%interface%& option can be set to specify which interface is used. See the
12156description of the smtp transport in chapter &<<CHAPsmtptrans>>& for more
12157details.
168e428f
PH
12158
12159
12160
12161
9b371988
PH
12162. ////////////////////////////////////////////////////////////////////////////
12163. ////////////////////////////////////////////////////////////////////////////
168e428f 12164
9b371988 12165.chapter "Main configuration" "CHAPmainconfig"
4f578862
PH
12166.scindex IIDconfima "configuration file" "main section"
12167.scindex IIDmaiconf "main configuration"
168e428f
PH
12168The first part of the run time configuration file contains three types of item:
12169
9b371988
PH
12170.ilist
12171Macro definitions: These lines start with an upper case letter. See section
12172&<<SECTmacrodefs>>& for details of macro processing.
12173.next
12174Named list definitions: These lines start with one of the words &"domainlist"&,
12175&"hostlist"&, &"addresslist"&, or &"localpartlist"&. Their use is described in
12176section &<<SECTnamedlists>>&.
12177.next
12178Main configuration settings: Each setting occupies one line of the file
168e428f 12179(with possible continuations). If any setting is preceded by the word
9b371988
PH
12180&"hide"&, the &%-bP%& command line option displays its value to admin users
12181only. See section &<<SECTcos>>& for a description of the syntax of these option
12182settings.
12183.endlist
168e428f
PH
12184
12185This chapter specifies all the main configuration options, along with their
12186types and default values. For ease of finding a particular option, they appear
9b371988
PH
12187in alphabetical order in section &<<SECTalomo>>& below. However, because there
12188are now so many options, they are first listed briefly in functional groups, as
12189an aid to finding the name of the option you are looking for. Some options are
168e428f
PH
12190listed in more than one group.
12191
f89d2485 12192.section "Miscellaneous" "SECID96"
9b371988
PH
12193.table2
12194.row &%bi_command%& "to run for &%-bi%& command line option"
4f578862 12195.row &%disable_ipv6%& "do no IPv6 processing"
9b371988
PH
12196.row &%keep_malformed%& "for broken files &-- should not happen"
12197.row &%localhost_number%& "for unique message ids in clusters"
7d0ab55c 12198.row &%message_body_newlines%& "retain newlines in &$message_body$&"
9b371988
PH
12199.row &%message_body_visible%& "how much to show in &$message_body$&"
12200.row &%mua_wrapper%& "run in &""MUA wrapper""& mode"
12201.row &%print_topbitchars%& "top-bit characters are printing"
12202.row &%timezone%& "force time zone"
12203.endtable
12204
12205
f89d2485 12206.section "Exim parameters" "SECID97"
9b371988
PH
12207.table2
12208.row &%exim_group%& "override compiled-in value"
12209.row &%exim_path%& "override compiled-in value"
12210.row &%exim_user%& "override compiled-in value"
12211.row &%primary_hostname%& "default from &[uname()]&"
12212.row &%split_spool_directory%& "use multiple directories"
12213.row &%spool_directory%& "override compiled-in value"
12214.endtable
12215
12216
12217
f89d2485 12218.section "Privilege controls" "SECID98"
9b371988
PH
12219.table2
12220.row &%admin_groups%& "groups that are Exim admin users"
12221.row &%deliver_drop_privilege%& "drop root for delivery processes"
12222.row &%local_from_check%& "insert &'Sender:'& if necessary"
12223.row &%local_from_prefix%& "for testing &'From:'& for local sender"
12224.row &%local_from_suffix%& "for testing &'From:'& for local sender"
12225.row &%local_sender_retain%& "keep &'Sender:'& from untrusted user"
12226.row &%never_users%& "do not run deliveries as these"
12227.row &%prod_requires_admin%& "forced delivery requires admin user"
12228.row &%queue_list_requires_admin%& "queue listing requires admin user"
12229.row &%trusted_groups%& "groups that are trusted"
12230.row &%trusted_users%& "users that are trusted"
12231.endtable
12232
12233
12234
f89d2485 12235.section "Logging" "SECID99"
9b371988
PH
12236.table2
12237.row &%hosts_connection_nolog%& "exemption from connect logging"
12238.row &%log_file_path%& "override compiled-in value"
12239.row &%log_selector%& "set/unset optional logging"
12240.row &%log_timezone%& "add timezone to log lines"
12241.row &%message_logs%& "create per-message logs"
12242.row &%preserve_message_logs%& "after message completion"
12243.row &%process_log_path%& "for SIGUSR1 and &'exiwhat'&"
12244.row &%syslog_duplication%& "controls duplicate log lines on syslog"
12245.row &%syslog_facility%& "set syslog &""facility""& field"
12246.row &%syslog_processname%& "set syslog &""ident""& field"
12247.row &%syslog_timestamp%& "timestamp syslog lines"
12248.row &%write_rejectlog%& "control use of message log"
12249.endtable
12250
12251
12252
f89d2485 12253.section "Frozen messages" "SECID100"
9b371988
PH
12254.table2
12255.row &%auto_thaw%& "sets time for retrying frozen messages"
12256.row &%freeze_tell%& "send message when freezing"
12257.row &%move_frozen_messages%& "to another directory"
12258.row &%timeout_frozen_after%& "keep frozen messages only so long"
12259.endtable
12260
12261
12262
f89d2485 12263.section "Data lookups" "SECID101"
9b371988 12264.table2
7d0ab55c 12265.row &%ibase_servers%& "InterBase servers"
9b371988
PH
12266.row &%ldap_default_servers%& "used if no server in query"
12267.row &%ldap_version%& "set protocol version"
12268.row &%lookup_open_max%& "lookup files held open"
7d0ab55c
TF
12269.row &%mysql_servers%& "default MySQL servers"
12270.row &%oracle_servers%& "Oracle servers"
12271.row &%pgsql_servers%& "default PostgreSQL servers"
9b371988
PH
12272.row &%sqlite_lock_timeout%& "as it says"
12273.endtable
12274
12275
12276
f89d2485 12277.section "Message ids" "SECID102"
9b371988
PH
12278.table2
12279.row &%message_id_header_domain%& "used to build &'Message-ID:'& header"
12280.row &%message_id_header_text%& "ditto"
12281.endtable
12282
12283
12284
f89d2485 12285.section "Embedded Perl Startup" "SECID103"
9b371988
PH
12286.table2
12287.row &%perl_at_start%& "always start the interpreter"
12288.row &%perl_startup%& "code to obey when starting Perl"
12289.endtable
12290
12291
12292
f89d2485 12293.section "Daemon" "SECID104"
9b371988
PH
12294.table2
12295.row &%daemon_smtp_ports%& "default ports"
12296.row &%daemon_startup_retries%& "number of times to retry"
12297.row &%daemon_startup_sleep%& "time to sleep between tries"
12298.row &%extra_local_interfaces%& "not necessarily listened on"
12299.row &%local_interfaces%& "on which to listen, with optional ports"
12300.row &%pid_file_path%& "override compiled-in value"
12301.row &%queue_run_max%& "maximum simultaneous queue runners"
12302.endtable
12303
12304
12305
f89d2485 12306.section "Resource control" "SECID105"
9b371988
PH
12307.table2
12308.row &%check_log_inodes%& "before accepting a message"
12309.row &%check_log_space%& "before accepting a message"
12310.row &%check_spool_inodes%& "before accepting a message"
12311.row &%check_spool_space%& "before accepting a message"
12312.row &%deliver_queue_load_max%& "no queue deliveries if load high"
12313.row &%queue_only_load%& "queue incoming if load high"
7d0ab55c 12314.row &%queue_only_load_latch%& "don't re-evaluate load for each message"
9b371988
PH
12315.row &%queue_run_max%& "maximum simultaneous queue runners"
12316.row &%remote_max_parallel%& "parallel SMTP delivery per message"
12317.row &%smtp_accept_max%& "simultaneous incoming connections"
3cb1b51e 12318.row &%smtp_accept_max_nonmail%& "non-mail commands"
9b371988
PH
12319.row &%smtp_accept_max_nonmail_hosts%& "hosts to which the limit applies"
12320.row &%smtp_accept_max_per_connection%& "messages per connection"
12321.row &%smtp_accept_max_per_host%& "connections from one host"
12322.row &%smtp_accept_queue%& "queue mail if more connections"
12323.row &%smtp_accept_queue_per_connection%& "queue if more messages per &&&
12324 connection"
12325.row &%smtp_accept_reserve%& "only reserve hosts if more connections"
12326.row &%smtp_check_spool_space%& "from SIZE on MAIL command"
12327.row &%smtp_connect_backlog%& "passed to TCP/IP stack"
12328.row &%smtp_load_reserve%& "SMTP from reserved hosts if load high"
12329.row &%smtp_reserve_hosts%& "these are the reserve hosts"
12330.endtable
12331
12332
12333
f89d2485 12334.section "Policy controls" "SECID106"
9b371988
PH
12335.table2
12336.row &%acl_not_smtp%& "ACL for non-SMTP messages"
12337.row &%acl_not_smtp_mime%& "ACL for non-SMTP MIME parts"
5d00f546 12338.row &%acl_not_smtp_start%& "ACL for start of non-SMTP message"
9b371988
PH
12339.row &%acl_smtp_auth%& "ACL for AUTH"
12340.row &%acl_smtp_connect%& "ACL for connection"
12341.row &%acl_smtp_data%& "ACL for DATA"
12342.row &%acl_smtp_etrn%& "ACL for ETRN"
12343.row &%acl_smtp_expn%& "ACL for EXPN"
12344.row &%acl_smtp_helo%& "ACL for EHLO or HELO"
12345.row &%acl_smtp_mail%& "ACL for MAIL"
12346.row &%acl_smtp_mailauth%& "ACL for AUTH on MAIL command"
12347.row &%acl_smtp_mime%& "ACL for MIME parts"
12348.row &%acl_smtp_predata%& "ACL for start of data"
12349.row &%acl_smtp_quit%& "ACL for QUIT"
12350.row &%acl_smtp_rcpt%& "ACL for RCPT"
12351.row &%acl_smtp_starttls%& "ACL for STARTTLS"
12352.row &%acl_smtp_vrfy%& "ACL for VRFY"
12353.row &%av_scanner%& "specify virus scanner"
12354.row &%check_rfc2047_length%& "check length of RFC 2047 &""encoded &&&
12355 words""&"
12356.row &%dns_csa_search_limit%& "control CSA parent search depth"
12357.row &%dns_csa_use_reverse%& "en/disable CSA IP reverse search"
12358.row &%header_maxsize%& "total size of message header"
12359.row &%header_line_maxsize%& "individual header line limit"
12360.row &%helo_accept_junk_hosts%& "allow syntactic junk from these hosts"
12361.row &%helo_allow_chars%& "allow illegal chars in HELO names"
12362.row &%helo_lookup_domains%& "lookup hostname for these HELO names"
12363.row &%helo_try_verify_hosts%& "HELO soft-checked for these hosts"
12364.row &%helo_verify_hosts%& "HELO hard-checked for these hosts"
12365.row &%host_lookup%& "host name looked up for these hosts"
12366.row &%host_lookup_order%& "order of DNS and local name lookups"
12367.row &%host_reject_connection%& "reject connection from these hosts"
12368.row &%hosts_treat_as_local%& "useful in some cluster configurations"
12369.row &%local_scan_timeout%& "timeout for &[local_scan()]&"
12370.row &%message_size_limit%& "for all messages"
12371.row &%percent_hack_domains%& "recognize %-hack for these domains"
12372.row &%spamd_address%& "set interface to SpamAssassin"
3cb1b51e 12373.row &%strict_acl_vars%& "object to unset ACL variables"
9b371988
PH
12374.endtable
12375
12376
12377
f89d2485 12378.section "Callout cache" "SECID107"
9b371988
PH
12379.table2
12380.row &%callout_domain_negative_expire%& "timeout for negative domain cache &&&
12381 item"
12382.row &%callout_domain_positive_expire%& "timeout for positive domain cache &&&
12383 item"
12384.row &%callout_negative_expire%& "timeout for negative address cache item"
12385.row &%callout_positive_expire%& "timeout for positive address cache item"
12386.row &%callout_random_local_part%& "string to use for &""random""& testing"
12387.endtable
12388
12389
12390
f89d2485 12391.section "TLS" "SECID108"
9b371988 12392.table2
595028e4
PH
12393.row &%gnutls_require_kx%& "control GnuTLS key exchanges"
12394.row &%gnutls_require_mac%& "control GnuTLS MAC algorithms"
12395.row &%gnutls_require_protocols%& "control GnuTLS protocols"
e6060e2c 12396.row &%gnutls_compat_mode%& "use GnuTLS compatibility mode"
9b371988
PH
12397.row &%tls_advertise_hosts%& "advertise TLS to these hosts"
12398.row &%tls_certificate%& "location of server certificate"
12399.row &%tls_crl%& "certificate revocation list"
12400.row &%tls_dhparam%& "DH parameters for server"
12401.row &%tls_on_connect_ports%& "specify SSMTP (SMTPS) ports"
12402.row &%tls_privatekey%& "location of server private key"
12403.row &%tls_remember_esmtp%& "don't reset after starting TLS"
f89d2485 12404.row &%tls_require_ciphers%& "specify acceptable ciphers"
9b371988
PH
12405.row &%tls_try_verify_hosts%& "try to verify client certificate"
12406.row &%tls_verify_certificates%& "expected client certificates"
12407.row &%tls_verify_hosts%& "insist on client certificate verify"
12408.endtable
12409
12410
12411
f89d2485 12412.section "Local user handling" "SECID109"
9b371988
PH
12413.table2
12414.row &%finduser_retries%& "useful in NIS environments"
12415.row &%gecos_name%& "used when creating &'Sender:'&"
12416.row &%gecos_pattern%& "ditto"
12417.row &%max_username_length%& "for systems that truncate"
12418.row &%unknown_login%& "used when no login name found"
12419.row &%unknown_username%& "ditto"
12420.row &%uucp_from_pattern%& "for recognizing &""From ""& lines"
12421.row &%uucp_from_sender%& "ditto"
12422.endtable
12423
12424
12425
f89d2485 12426.section "All incoming messages (SMTP and non-SMTP)" "SECID110"
9b371988
PH
12427.table2
12428.row &%header_maxsize%& "total size of message header"
12429.row &%header_line_maxsize%& "individual header line limit"
12430.row &%message_size_limit%& "applies to all messages"
12431.row &%percent_hack_domains%& "recognize %-hack for these domains"
12432.row &%received_header_text%& "expanded to make &'Received:'&"
12433.row &%received_headers_max%& "for mail loop detection"
12434.row &%recipients_max%& "limit per message"
f89d2485 12435.row &%recipients_max_reject%& "permanently reject excess recipients"
9b371988
PH
12436.endtable
12437
12438
12439
12440
f89d2485 12441.section "Non-SMTP incoming messages" "SECID111"
9b371988
PH
12442.table2
12443.row &%receive_timeout%& "for non-SMTP messages"
12444.endtable
12445
12446
12447
12448
12449
f89d2485 12450.section "Incoming SMTP messages" "SECID112"
9b371988
PH
12451See also the &'Policy controls'& section above.
12452
12453.table2
12454.row &%host_lookup%& "host name looked up for these hosts"
12455.row &%host_lookup_order%& "order of DNS and local name lookups"
12456.row &%recipient_unqualified_hosts%& "may send unqualified recipients"
12457.row &%rfc1413_hosts%& "make ident calls to these hosts"
12458.row &%rfc1413_query_timeout%& "zero disables ident calls"
12459.row &%sender_unqualified_hosts%& "may send unqualified senders"
12460.row &%smtp_accept_keepalive%& "some TCP/IP magic"
12461.row &%smtp_accept_max%& "simultaneous incoming connections"
12462.row &%smtp_accept_max_nonmail%& "non-mail commands"
12463.row &%smtp_accept_max_nonmail_hosts%& "hosts to which the limit applies"
12464.row &%smtp_accept_max_per_connection%& "messages per connection"
12465.row &%smtp_accept_max_per_host%& "connections from one host"
12466.row &%smtp_accept_queue%& "queue mail if more connections"
12467.row &%smtp_accept_queue_per_connection%& "queue if more messages per &&&
12468 connection"
12469.row &%smtp_accept_reserve%& "only reserve hosts if more connections"
12470.row &%smtp_active_hostname%& "host name to use in messages"
12471.row &%smtp_banner%& "text for welcome banner"
12472.row &%smtp_check_spool_space%& "from SIZE on MAIL command"
12473.row &%smtp_connect_backlog%& "passed to TCP/IP stack"
12474.row &%smtp_enforce_sync%& "of SMTP command/responses"
12475.row &%smtp_etrn_command%& "what to run for ETRN"
12476.row &%smtp_etrn_serialize%& "only one at once"
12477.row &%smtp_load_reserve%& "only reserve hosts if this load"
12478.row &%smtp_max_unknown_commands%& "before dropping connection"
12479.row &%smtp_ratelimit_hosts%& "apply ratelimiting to these hosts"
12480.row &%smtp_ratelimit_mail%& "ratelimit for MAIL commands"
12481.row &%smtp_ratelimit_rcpt%& "ratelimit for RCPT commands"
12482.row &%smtp_receive_timeout%& "per command or data line"
12483.row &%smtp_reserve_hosts%& "these are the reserve hosts"
12484.row &%smtp_return_error_details%& "give detail on rejections"
12485.endtable
12486
12487
12488
f89d2485 12489.section "SMTP extensions" "SECID113"
9b371988
PH
12490.table2
12491.row &%accept_8bitmime%& "advertise 8BITMIME"
12492.row &%auth_advertise_hosts%& "advertise AUTH to these hosts"
12493.row &%ignore_fromline_hosts%& "allow &""From ""& from these hosts"
12494.row &%ignore_fromline_local%& "allow &""From ""& from local SMTP"
12495.row &%pipelining_advertise_hosts%& "advertise pipelining to these hosts"
12496.row &%tls_advertise_hosts%& "advertise TLS to these hosts"
12497.endtable
12498
12499
12500
f89d2485 12501.section "Processing messages" "SECID114"
9b371988
PH
12502.table2
12503.row &%allow_domain_literals%& "recognize domain literal syntax"
12504.row &%allow_mx_to_ip%& "allow MX to point to IP address"
12505.row &%allow_utf8_domains%& "in addresses"
12506.row &%check_rfc2047_length%& "check length of RFC 2047 &""encoded &&&
12507 words""&"
12508.row &%delivery_date_remove%& "from incoming messages"
db9452a9 12509.row &%envelope_to_remove%& "from incoming messages"
9b371988
PH
12510.row &%extract_addresses_remove_arguments%& "affects &%-t%& processing"
12511.row &%headers_charset%& "default for translations"
12512.row &%qualify_domain%& "default for senders"
12513.row &%qualify_recipient%& "default for recipients"
12514.row &%return_path_remove%& "from incoming messages"
12515.row &%strip_excess_angle_brackets%& "in addresses"
12516.row &%strip_trailing_dot%& "at end of addresses"
12517.row &%untrusted_set_sender%& "untrusted can set envelope sender"
12518.endtable
12519
12520
12521
f89d2485 12522.section "System filter" "SECID115"
9b371988
PH
12523.table2
12524.row &%system_filter%& "locate system filter"
12525.row &%system_filter_directory_transport%& "transport for delivery to a &&&
12526 directory"
12527.row &%system_filter_file_transport%& "transport for delivery to a file"
12528.row &%system_filter_group%& "group for filter running"
12529.row &%system_filter_pipe_transport%& "transport for delivery to a pipe"
12530.row &%system_filter_reply_transport%& "transport for autoreply delivery"
12531.row &%system_filter_user%& "user for filter running"
12532.endtable
12533
12534
12535
f89d2485 12536.section "Routing and delivery" "SECID116"
9b371988 12537.table2
4f578862 12538.row &%disable_ipv6%& "do no IPv6 processing"
9b371988
PH
12539.row &%dns_again_means_nonexist%& "for broken domains"
12540.row &%dns_check_names_pattern%& "pre-DNS syntax check"
12541.row &%dns_ipv4_lookup%& "only v4 lookup for these domains"
12542.row &%dns_retrans%& "parameter for resolver"
12543.row &%dns_retry%& "parameter for resolver"
12544.row &%hold_domains%& "hold delivery for these domains"
12545.row &%local_interfaces%& "for routing checks"
12546.row &%queue_domains%& "no immediate delivery for these"
12547.row &%queue_only%& "no immediate delivery at all"
12548.row &%queue_only_file%& "no immediate delivery if file exists"
12549.row &%queue_only_load%& "no immediate delivery if load is high"
7d0ab55c 12550.row &%queue_only_load_latch%& "don't re-evaluate load for each message"
9b371988
PH
12551.row &%queue_only_override%& "allow command line to override"
12552.row &%queue_run_in_order%& "order of arrival"
12553.row &%queue_run_max%& "of simultaneous queue runners"
12554.row &%queue_smtp_domains%& "no immediate SMTP delivery for these"
12555.row &%remote_max_parallel%& "parallel SMTP delivery per message"
12556.row &%remote_sort_domains%& "order of remote deliveries"
12557.row &%retry_data_expire%& "timeout for retry data"
12558.row &%retry_interval_max%& "safety net for retry rules"
12559.endtable
12560
12561
12562
f89d2485 12563.section "Bounce and warning messages" "SECID117"
9b371988
PH
12564.table2
12565.row &%bounce_message_file%& "content of bounce"
12566.row &%bounce_message_text%& "content of bounce"
12567.row &%bounce_return_body%& "include body if returning message"
12568.row &%bounce_return_message%& "include original message in bounce"
12569.row &%bounce_return_size_limit%& "limit on returned message"
12570.row &%bounce_sender_authentication%& "send authenticated sender with bounce"
595028e4 12571.row &%dsn_from%& "set &'From:'& contents in bounces"
9b371988
PH
12572.row &%errors_copy%& "copy bounce messages"
12573.row &%errors_reply_to%& "&'Reply-to:'& in bounces"
12574.row &%delay_warning%& "time schedule"
12575.row &%delay_warning_condition%& "condition for warning messages"
12576.row &%ignore_bounce_errors_after%& "discard undeliverable bounces"
12577.row &%smtp_return_error_details%& "give detail on rejections"
12578.row &%warn_message_file%& "content of warning message"
12579.endtable
12580
12581
12582
12583.section "Alphabetical list of main options" "SECTalomo"
12584Those options that undergo string expansion before use are marked with
12585&dagger;.
12586
12587.option accept_8bitmime main boolean false
12588.cindex "8BITMIME"
12589.cindex "8-bit characters"
168e428f
PH
12590This option causes Exim to send 8BITMIME in its response to an SMTP
12591EHLO command, and to accept the BODY= parameter on MAIL commands.
12592However, though Exim is 8-bit clean, it is not a protocol converter, and it
12593takes no steps to do anything special with messages received by this route.
12594Consequently, this option is turned off by default.
12595
9b371988
PH
12596.option acl_not_smtp main string&!! unset
12597.cindex "&ACL;" "for non-SMTP messages"
12598.cindex "non-SMTP messages" "ACLs for"
5d00f546
TF
12599This option defines the ACL that is run when a non-SMTP message has been
12600read and is on the point of being accepted. See chapter &<<CHAPACL>>& for
12601further details.
068aaea8 12602
9b371988 12603.option acl_not_smtp_mime main string&!! unset
068aaea8 12604This option defines the ACL that is run for individual MIME parts of non-SMTP
9b371988 12605messages. It operates in exactly the same way as &%acl_smtp_mime%& operates for
068aaea8
PH
12606SMTP messages.
12607
5d00f546
TF
12608.option acl_not_smtp_start main string&!! unset
12609.cindex "&ACL;" "at start of non-SMTP message"
12610.cindex "non-SMTP messages" "ACLs for"
12611This option defines the ACL that is run before Exim starts reading a
12612non-SMTP message. See chapter &<<CHAPACL>>& for further details.
12613
9b371988
PH
12614.option acl_smtp_auth main string&!! unset
12615.cindex "&ACL;" "setting up for SMTP commands"
12616.cindex "AUTH" "ACL for"
168e428f 12617This option defines the ACL that is run when an SMTP AUTH command is
9b371988 12618received. See chapter &<<CHAPACL>>& for further details.
168e428f 12619
9b371988
PH
12620.option acl_smtp_connect main string&!! unset
12621.cindex "&ACL;" "on SMTP connection"
168e428f 12622This option defines the ACL that is run when an SMTP connection is received.
9b371988 12623See chapter &<<CHAPACL>>& for further details.
168e428f 12624
9b371988
PH
12625.option acl_smtp_data main string&!! unset
12626.cindex "DATA" "ACL for"
168e428f
PH
12627This option defines the ACL that is run after an SMTP DATA command has been
12628processed and the message itself has been received, but before the final
f89d2485 12629acknowledgment is sent. See chapter &<<CHAPACL>>& for further details.
168e428f 12630
9b371988
PH
12631.option acl_smtp_etrn main string&!! unset
12632.cindex "ETRN" "ACL for"
168e428f 12633This option defines the ACL that is run when an SMTP ETRN command is
9b371988 12634received. See chapter &<<CHAPACL>>& for further details.
168e428f 12635
9b371988
PH
12636.option acl_smtp_expn main string&!! unset
12637.cindex "EXPN" "ACL for"
168e428f 12638This option defines the ACL that is run when an SMTP EXPN command is
9b371988 12639received. See chapter &<<CHAPACL>>& for further details.
168e428f 12640
9b371988
PH
12641.option acl_smtp_helo main string&!! unset
12642.cindex "EHLO" "ACL for"
12643.cindex "HELO" "ACL for"
168e428f 12644This option defines the ACL that is run when an SMTP EHLO or HELO
9b371988 12645command is received. See chapter &<<CHAPACL>>& for further details.
168e428f 12646
168e428f 12647
9b371988
PH
12648.option acl_smtp_mail main string&!! unset
12649.cindex "MAIL" "ACL for"
168e428f 12650This option defines the ACL that is run when an SMTP MAIL command is
9b371988 12651received. See chapter &<<CHAPACL>>& for further details.
168e428f 12652
9b371988
PH
12653.option acl_smtp_mailauth main string&!! unset
12654.cindex "AUTH" "on MAIL command"
168e428f 12655This option defines the ACL that is run when there is an AUTH parameter on
9b371988
PH
12656a MAIL command. See chapter &<<CHAPACL>>& for details of ACLs, and chapter
12657&<<CHAPSMTPAUTH>>& for details of authentication.
168e428f 12658
9b371988
PH
12659.option acl_smtp_mime main string&!! unset
12660.cindex "MIME content scanning" "ACL for"
168e428f
PH
12661This option is available when Exim is built with the content-scanning
12662extension. It defines the ACL that is run for each MIME part in a message. See
9b371988 12663section &<<SECTscanmimepart>>& for details.
168e428f 12664
9b371988 12665.option acl_smtp_predata main string&!! unset
168e428f 12666This option defines the ACL that is run when an SMTP DATA command is
9b371988 12667received, before the message itself is received. See chapter &<<CHAPACL>>& for
168e428f
PH
12668further details.
12669
9b371988 12670.option acl_smtp_quit main string&!! unset
f89d2485 12671.cindex "QUIT, ACL for"
168e428f 12672This option defines the ACL that is run when an SMTP QUIT command is
9b371988 12673received. See chapter &<<CHAPACL>>& for further details.
168e428f 12674
9b371988
PH
12675.option acl_smtp_rcpt main string&!! unset
12676.cindex "RCPT" "ACL for"
168e428f 12677This option defines the ACL that is run when an SMTP RCPT command is
9b371988 12678received. See chapter &<<CHAPACL>>& for further details.
168e428f 12679
9b371988 12680.option acl_smtp_starttls main string&!! unset
f89d2485 12681.cindex "STARTTLS, ACL for"
168e428f 12682This option defines the ACL that is run when an SMTP STARTTLS command is
9b371988 12683received. See chapter &<<CHAPACL>>& for further details.
168e428f 12684
9b371988
PH
12685.option acl_smtp_vrfy main string&!! unset
12686.cindex "VRFY" "ACL for"
168e428f 12687This option defines the ACL that is run when an SMTP VRFY command is
9b371988 12688received. See chapter &<<CHAPACL>>& for further details.
168e428f 12689
9b371988
PH
12690.option admin_groups main "string list&!!" unset
12691.cindex "admin user"
068aaea8
PH
12692This option is expanded just once, at the start of Exim's processing. If the
12693current group or any of the supplementary groups of an Exim caller is in this
12694colon-separated list, the caller has admin privileges. If all your system
168e428f 12695programmers are in a specific group, for example, you can give them all Exim
9b371988 12696admin privileges by putting that group in &%admin_groups%&. However, this does
168e428f
PH
12697not permit them to read Exim's spool files (whose group owner is the Exim gid).
12698To permit this, you have to add individuals to the Exim group.
12699
9b371988
PH
12700.option allow_domain_literals main boolean false
12701.cindex "domain literal"
168e428f
PH
12702If this option is set, the RFC 2822 domain literal format is permitted in
12703email addresses. The option is not set by default, because the domain literal
12704format is not normally required these days, and few people know about it. It
12705has, however, been exploited by mail abusers.
12706
12707Unfortunately, it seems that some DNS black list maintainers are using this
12708format to report black listing to postmasters. If you want to accept messages
12709addressed to your hosts by IP address, you need to set
9b371988
PH
12710&%allow_domain_literals%& true, and also to add &`@[]`& to the list of local
12711domains (defined in the named domain list &%local_domains%& in the default
12712configuration). This &"magic string"& matches the domain literal form of all
12713the local host's IP addresses.
168e428f 12714
168e428f 12715
9b371988
PH
12716.option allow_mx_to_ip main boolean false
12717.cindex "MX record" "pointing to IP address"
168e428f
PH
12718It appears that more and more DNS zone administrators are breaking the rules
12719and putting domain names that look like IP addresses on the right hand side of
12720MX records. Exim follows the rules and rejects this, giving an error message
12721that explains the mis-configuration. However, some other MTAs support this
9b371988
PH
12722practice, so to avoid &"Why can't Exim do this?"& complaints,
12723&%allow_mx_to_ip%& exists, in order to enable this heinous activity. It is not
12724recommended, except when you have no other choice.
168e428f 12725
9b371988
PH
12726.option allow_utf8_domains main boolean false
12727.cindex "domain" "UTF-8 characters in"
12728.cindex "UTF-8" "in domain name"
168e428f
PH
12729Lots of discussion is going on about internationalized domain names. One
12730camp is strongly in favour of just using UTF-8 characters, and it seems
12731that at least two other MTAs permit this. This option allows Exim users to
12732experiment if they wish.
12733
12734If it is set true, Exim's domain parsing function allows valid
12735UTF-8 multicharacters to appear in domain name components, in addition to
12736letters, digits, and hyphens. However, just setting this option is not
12737enough; if you want to look up these domain names in the DNS, you must also
9b371988 12738adjust the value of &%dns_check_names_pattern%& to match the extended form. A
168e428f 12739suitable setting is:
9b371988 12740.code
168e428f
PH
12741dns_check_names_pattern = (?i)^(?>(?(1)\.|())[a-z0-9\xc0-\xff]\
12742 (?>[-a-z0-9\x80-\xff]*[a-z0-9\x80-\xbf])?)+$
9b371988 12743.endd
168e428f 12744Alternatively, you can just disable this feature by setting
9b371988
PH
12745.code
12746dns_check_names_pattern =
12747.endd
168e428f
PH
12748That is, set the option to an empty string so that no check is done.
12749
12750
9b371988
PH
12751.option auth_advertise_hosts main "host list&!!" *
12752.cindex "authentication" "advertising"
12753.cindex "AUTH" "advertising"
168e428f
PH
12754If any server authentication mechanisms are configured, Exim advertises them in
12755response to an EHLO command only if the calling host matches this list.
12756Otherwise, Exim does not advertise AUTH.
12757Exim does not accept AUTH commands from clients to which it has not
12758advertised the availability of AUTH. The advertising of individual
12759authentication mechanisms can be controlled by the use of the
9b371988
PH
12760&%server_advertise_condition%& generic authenticator option on the individual
12761authenticators. See chapter &<<CHAPSMTPAUTH>>& for further details.
168e428f
PH
12762
12763Certain mail clients (for example, Netscape) require the user to provide a name
12764and password for authentication if AUTH is advertised, even though it may
12765not be needed (the host may accept messages from hosts on its local LAN without
9b371988 12766authentication, for example). The &%auth_advertise_hosts%& option can be used
168e428f
PH
12767to make these clients more friendly by excluding them from the set of hosts to
12768which Exim advertises AUTH.
12769
9b371988 12770.cindex "AUTH" "advertising when encrypted"
168e428f
PH
12771If you want to advertise the availability of AUTH only when the connection
12772is encrypted using TLS, you can make use of the fact that the value of this
12773option is expanded, with a setting like this:
9b371988
PH
12774.code
12775auth_advertise_hosts = ${if eq{$tls_cipher}{}{}{*}}
12776.endd
f89d2485 12777.vindex "&$tls_cipher$&"
9b371988 12778If &$tls_cipher$& is empty, the session is not encrypted, and the result of
168e428f 12779the expansion is empty, thus matching no hosts. Otherwise, the result of the
9b371988 12780expansion is *, which matches all hosts.
168e428f 12781
168e428f 12782
9b371988 12783.option auto_thaw main time 0s
9b371988
PH
12784.cindex "thawing messages"
12785.cindex "unfreezing messages"
168e428f 12786If this option is set to a time greater than zero, a queue runner will try a
068aaea8
PH
12787new delivery attempt on any frozen message, other than a bounce message, if
12788this much time has passed since it was frozen. This may result in the message
12789being re-frozen if nothing has changed since the last attempt. It is a way of
9b371988 12790saying &"keep on trying, even though there are big problems"&.
068aaea8 12791
9b371988
PH
12792&*Note*&: This is an old option, which predates &%timeout_frozen_after%& and
12793&%ignore_bounce_errors_after%&. It is retained for compatibility, but it is not
068aaea8 12794thought to be very useful any more, and its use should probably be avoided.
168e428f 12795
9b371988 12796.option av_scanner main string "see below"
168e428f
PH
12797This option is available if Exim is built with the content-scanning extension.
12798It specifies which anti-virus scanner to use. The default value is:
9b371988
PH
12799.code
12800sophie:/var/run/sophie
12801.endd
12802If the value of &%av_scanner%& starts with dollar character, it is expanded
12803before use. See section &<<SECTscanvirus>>& for further details.
168e428f
PH
12804
12805
168e428f 12806
9b371988 12807.option bi_command main string unset
f89d2485 12808.oindex "&%-bi%&"
168e428f 12809This option supplies the name of a command that is run when Exim is called with
9b371988
PH
12810the &%-bi%& option (see chapter &<<CHAPcommandline>>&). The string value is
12811just the command name, it is not a complete command line. If an argument is
12812required, it must come from the &%-oA%& command line option.
168e428f
PH
12813
12814
9b371988
PH
12815.option bounce_message_file main string unset
12816.cindex "bounce message" "customizing"
12817.cindex "customizing" "bounce message"
168e428f
PH
12818This option defines a template file containing paragraphs of text to be used
12819for constructing bounce messages. Details of the file's contents are given in
9b371988 12820chapter &<<CHAPemsgcust>>&. See also &%warn_message_file%&.
168e428f 12821
168e428f 12822
9b371988 12823.option bounce_message_text main string unset
168e428f 12824When this option is set, its contents are included in the default bounce
9b371988
PH
12825message immediately after &"This message was created automatically by mail
12826delivery software."& It is not used if &%bounce_message_file%& is set.
168e428f 12827
9b371988
PH
12828.option bounce_return_body main boolean true
12829.cindex "bounce message" "including body"
168e428f 12830This option controls whether the body of an incoming message is included in a
4f578862
PH
12831bounce message when &%bounce_return_message%& is true. The default setting
12832causes the entire message, both header and body, to be returned (subject to the
12833value of &%bounce_return_size_limit%&). If this option is false, only the
12834message header is included. In the case of a non-SMTP message containing an
12835error that is detected during reception, only those header lines preceding the
12836point at which the error was detected are returned.
9b371988 12837.cindex "bounce message" "including original"
168e428f 12838
9b371988 12839.option bounce_return_message main boolean true
4f578862
PH
12840If this option is set false, none of the original message is included in
12841bounce messages generated by Exim. See also &%bounce_return_size_limit%& and
12842&%bounce_return_body%&.
168e428f 12843
168e428f 12844
9b371988 12845.option bounce_return_size_limit main integer 100K
f89d2485 12846.cindex "size" "of bounce, limit"
9b371988
PH
12847.cindex "bounce message" "size limit"
12848.cindex "limit" "bounce message size"
168e428f 12849This option sets a limit in bytes on the size of messages that are returned to
9b371988
PH
12850senders as part of bounce messages when &%bounce_return_message%& is true. The
12851limit should be less than the value of the global &%message_size_limit%& and of
12852any &%message_size_limit%& settings on transports, to allow for the bounce text
168e428f
PH
12853that Exim generates. If this option is set to zero there is no limit.
12854
12855When the body of any message that is to be included in a bounce message is
12856greater than the limit, it is truncated, and a comment pointing this out is
12857added at the top. The actual cutoff may be greater than the value given, owing
12858to the use of buffering for transferring the message in chunks (typically 8K in
12859size). The idea is to save bandwidth on those undeliverable 15-megabyte
12860messages.
12861
9b371988
PH
12862.option bounce_sender_authentication main string unset
12863.cindex "bounce message" "sender authentication"
12864.cindex "authentication" "bounce message"
12865.cindex "AUTH" "on bounce message"
168e428f
PH
12866This option provides an authenticated sender address that is sent with any
12867bounce messages generated by Exim that are sent over an authenticated SMTP
12868connection. A typical setting might be:
9b371988
PH
12869.code
12870bounce_sender_authentication = mailer-daemon@my.domain.example
12871.endd
168e428f 12872which would cause bounce messages to be sent using the SMTP command:
9b371988
PH
12873.code
12874MAIL FROM:<> AUTH=mailer-daemon@my.domain.example
12875.endd
12876The value of &%bounce_sender_authentication%& must always be a complete email
168e428f
PH
12877address.
12878
9b371988
PH
12879.option callout_domain_negative_expire main time 3h
12880.cindex "caching" "callout timeouts"
12881.cindex "callout" "caching timeouts"
168e428f 12882This option specifies the expiry time for negative callout cache data for a
9b371988
PH
12883domain. See section &<<SECTcallver>>& for details of callout verification, and
12884section &<<SECTcallvercache>>& for details of the caching.
168e428f 12885
168e428f 12886
9b371988 12887.option callout_domain_positive_expire main time 7d
168e428f 12888This option specifies the expiry time for positive callout cache data for a
9b371988
PH
12889domain. See section &<<SECTcallver>>& for details of callout verification, and
12890section &<<SECTcallvercache>>& for details of the caching.
168e428f
PH
12891
12892
9b371988 12893.option callout_negative_expire main time 2h
168e428f 12894This option specifies the expiry time for negative callout cache data for an
9b371988
PH
12895address. See section &<<SECTcallver>>& for details of callout verification, and
12896section &<<SECTcallvercache>>& for details of the caching.
168e428f 12897
168e428f 12898
9b371988 12899.option callout_positive_expire main time 24h
168e428f 12900This option specifies the expiry time for positive callout cache data for an
9b371988
PH
12901address. See section &<<SECTcallver>>& for details of callout verification, and
12902section &<<SECTcallvercache>>& for details of the caching.
168e428f 12903
168e428f 12904
9b371988
PH
12905.option callout_random_local_part main string&!! "see below"
12906This option defines the &"random"& local part that can be used as part of
12907callout verification. The default value is
12908.code
12909$primary_host_name-$tod_epoch-testing
12910.endd
12911See section &<<CALLaddparcall>>& for details of how this value is used.
168e428f 12912
168e428f 12913
9b371988
PH
12914.option check_log_inodes main integer 0
12915See &%check_spool_space%& below.
168e428f
PH
12916
12917
9b371988
PH
12918.option check_log_space main integer 0
12919See &%check_spool_space%& below.
d1e83bff 12920
9b371988
PH
12921.oindex "&%check_rfc2047_length%&"
12922.cindex "RFC 2047" "disabling length check"
f89d2485 12923.option check_rfc2047_length main boolean true
d1e83bff 12924RFC 2047 defines a way of encoding non-ASCII characters in headers using a
9b371988 12925system of &"encoded words"&. The RFC specifies a maximum length for an encoded
d1e83bff
PH
12926word; strings to be encoded that exceed this length are supposed to use
12927multiple encoded words. By default, Exim does not recognize encoded words that
12928exceed the maximum length. However, it seems that some software, in violation
9b371988
PH
12929of the RFC, generates overlong encoded words. If &%check_rfc2047_length%& is
12930set false, Exim recognizes encoded words of any length.
168e428f 12931
168e428f 12932
9b371988
PH
12933.option check_spool_inodes main integer 0
12934See &%check_spool_space%& below.
168e428f
PH
12935
12936
9b371988
PH
12937.option check_spool_space main integer 0
12938.cindex "checking disk space"
f89d2485 12939.cindex "disk space, checking"
9b371988
PH
12940.cindex "spool directory" "checking space"
12941The four &%check_...%& options allow for checking of disk resources before a
168e428f
PH
12942message is accepted.
12943
f89d2485
PH
12944.vindex "&$log_inodes$&"
12945.vindex "&$log_space$&"
12946.vindex "&$spool_inodes$&"
12947.vindex "&$spool_space$&"
168e428f 12948When any of these options are set, they apply to all incoming messages. If you
068aaea8 12949want to apply different checks to different kinds of message, you can do so by
3cb1b51e 12950testing the variables &$log_inodes$&, &$log_space$&, &$spool_inodes$&, and
9b371988 12951&$spool_space$& in an ACL with appropriate additional conditions.
168e428f
PH
12952
12953
9b371988 12954&%check_spool_space%& and &%check_spool_inodes%& check the spool partition if
168e428f 12955either value is greater than zero, for example:
9b371988
PH
12956.code
12957check_spool_space = 10M
12958check_spool_inodes = 100
12959.endd
168e428f 12960The spool partition is the one that contains the directory defined by
9b371988 12961SPOOL_DIRECTORY in &_Local/Makefile_&. It is used for holding messages in
168e428f
PH
12962transit.
12963
9b371988 12964&%check_log_space%& and &%check_log_inodes%& check the partition in which log
168e428f 12965files are written if either is greater than zero. These should be set only if
9b371988 12966&%log_file_path%& and &%spool_directory%& refer to different partitions.
168e428f
PH
12967
12968If there is less space or fewer inodes than requested, Exim refuses to accept
12969incoming mail. In the case of SMTP input this is done by giving a 452 temporary
12970error response to the MAIL command. If ESMTP is in use and there was a
12971SIZE parameter on the MAIL command, its value is added to the
9b371988
PH
12972&%check_spool_space%& value, and the check is performed even if
12973&%check_spool_space%& is zero, unless &%no_smtp_check_spool_space%& is set.
168e428f 12974
9b371988 12975The values for &%check_spool_space%& and &%check_log_space%& are held as a
168e428f
PH
12976number of kilobytes. If a non-multiple of 1024 is specified, it is rounded up.
12977
12978For non-SMTP input and for batched SMTP input, the test is done at start-up; on
12979failure a message is written to stderr and Exim exits with a non-zero code, as
12980it obviously cannot send an error message of any kind.
12981
9b371988
PH
12982.option daemon_smtp_ports main string &`smtp`&
12983.cindex "port" "for daemon"
12984.cindex "TCP/IP" "setting listening ports"
168e428f 12985This option specifies one or more default SMTP ports on which the Exim daemon
9b371988
PH
12986listens. See chapter &<<CHAPinterfaces>>& for details of how it is used. For
12987backward compatibility, &%daemon_smtp_port%& (singular) is a synonym.
068aaea8 12988
9b371988 12989.option daemon_startup_retries main integer 9
f89d2485 12990.cindex "daemon startup, retrying"
9b371988 12991This option, along with &%daemon_startup_sleep%&, controls the retrying done by
068aaea8 12992the daemon at startup when it cannot immediately bind a listening socket
9b371988 12993(typically because the socket is already in use): &%daemon_startup_retries%&
068aaea8 12994defines the number of retries after the first failure, and
9b371988 12995&%daemon_startup_sleep%& defines the length of time to wait between retries.
068aaea8 12996
9b371988
PH
12997.option daemon_startup_sleep main time 30s
12998See &%daemon_startup_retries%&.
068aaea8 12999
9b371988
PH
13000.option delay_warning main "time list" 24h
13001.cindex "warning of delay"
f89d2485 13002.cindex "delay warning, specifying"
168e428f
PH
13003When a message is delayed, Exim sends a warning message to the sender at
13004intervals specified by this option. The data is a colon-separated list of times
9b371988
PH
13005after which to send warning messages. If the value of the option is an empty
13006string or a zero time, no warnings are sent. Up to 10 times may be given. If a
13007message has been on the queue for longer than the last time, the last interval
13008between the times is used to compute subsequent warning times. For example,
13009with
13010.code
13011delay_warning = 4h:8h:24h
13012.endd
168e428f
PH
13013the first message is sent after 4 hours, the second after 8 hours, and
13014the third one after 24 hours. After that, messages are sent every 16 hours,
13015because that is the interval between the last two times on the list. If you set
13016just one time, it specifies the repeat interval. For example, with:
9b371988
PH
13017.code
13018delay_warning = 6h
13019.endd
168e428f
PH
13020messages are repeated every six hours. To stop warnings after a given time, set
13021a very large time at the end of the list. For example:
9b371988
PH
13022.code
13023delay_warning = 2h:12h:99d
13024.endd
168e428f 13025
9b371988 13026.option delay_warning_condition main string&!! "see below"
f89d2485 13027.vindex "&$domain$&"
168e428f 13028The string is expanded at the time a warning message might be sent. If all the
9b371988
PH
13029deferred addresses have the same domain, it is set in &$domain$& during the
13030expansion. Otherwise &$domain$& is empty. If the result of the expansion is a
13031forced failure, an empty string, or a string matching any of &"0"&, &"no"& or
13032&"false"& (the comparison being done caselessly) then the warning message is
db9452a9 13033not sent. The default is:
9b371988 13034.code
db9452a9
PH
13035delay_warning_condition = ${if or {\
13036 { !eq{$h_list-id:$h_list-post:$h_list-subscribe:}{} }\
13037 { match{$h_precedence:}{(?i)bulk|list|junk} }\
13038 { match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }\
13039 } {no}{yes}}
9b371988 13040.endd
db9452a9
PH
13041This suppresses the sending of warnings for messages that contain &'List-ID:'&,
13042&'List-Post:'&, or &'List-Subscribe:'& headers, or have &"bulk"&, &"list"& or
13043&"junk"& in a &'Precedence:'& header, or have &"auto-generated"& or
13044&"auto-replied"& in an &'Auto-Submitted:'& header.
168e428f 13045
9b371988
PH
13046.option deliver_drop_privilege main boolean false
13047.cindex "unprivileged delivery"
13048.cindex "delivery" "unprivileged"
168e428f
PH
13049If this option is set true, Exim drops its root privilege at the start of a
13050delivery process, and runs as the Exim user throughout. This severely restricts
13051the kinds of local delivery that are possible, but is viable in certain types
13052of configuration. There is a discussion about the use of root privilege in
9b371988 13053chapter &<<CHAPsecurity>>&.
168e428f 13054
9b371988
PH
13055.option deliver_queue_load_max main fixed-point unset
13056.cindex "load average"
13057.cindex "queue runner" "abandoning"
168e428f
PH
13058When this option is set, a queue run is abandoned if the system load average
13059becomes greater than the value of the option. The option has no effect on
13060ancient operating systems on which Exim cannot determine the load average.
9b371988 13061See also &%queue_only_load%& and &%smtp_load_reserve%&.
168e428f 13062
168e428f 13063
9b371988
PH
13064.option delivery_date_remove main boolean true
13065.cindex "&'Delivery-date:'& header line"
13066Exim's transports have an option for adding a &'Delivery-date:'& header to a
13067message when it is delivered, in exactly the same way as &'Return-path:'& is
13068handled. &'Delivery-date:'& records the actual time of delivery. Such headers
168e428f
PH
13069should not be present in incoming messages, and this option causes them to be
13070removed at the time the message is received, to avoid any problems that might
13071occur when a delivered message is subsequently sent on to some other recipient.
13072
a591010f 13073.option disable_fsync main boolean false
f89d2485
PH
13074.cindex "&[fsync()]&, disabling"
13075This option is available only if Exim was built with the compile-time option
13076ENABLE_DISABLE_FSYNC. When this is not set, a reference to &%disable_fsync%& in
13077a runtime configuration generates an &"unknown option"& error. You should not
13078build Exim with ENABLE_DISABLE_FSYNC or set &%disable_fsync%& unless you
13079really, really, really understand what you are doing. &'No pre-compiled
13080distributions of Exim should ever make this option available.'&
13081
13082When &%disable_fsync%& is set true, Exim no longer calls &[fsync()]& to force
13083updated files' data to be written to disc before continuing. Unexpected events
13084such as crashes and power outages may cause data to be lost or scrambled.
13085Here be Dragons. &*Beware.*&
f89d2485 13086
4f578862 13087
4f578862
PH
13088.option disable_ipv6 main boolean false
13089.cindex "IPv6" "disabling"
13090If this option is set true, even if the Exim binary has IPv6 support, no IPv6
13091activities take place. AAAA records are never looked up, and any IPv6 addresses
13092that are listed in &%local_interfaces%&, data for the &%manualroute%& router,
13093etc. are ignored. If IP literals are enabled, the &(ipliteral)& router declines
13094to handle IPv6 literal addresses.
4f578862
PH
13095
13096
9b371988
PH
13097.option dns_again_means_nonexist main "domain list&!!" unset
13098.cindex "DNS" "&""try again""& response; overriding"
13099DNS lookups give a &"try again"& response for the DNS errors
13100&"non-authoritative host not found"& and &"SERVERFAIL"&. This can cause Exim to
13101keep trying to deliver a message, or to give repeated temporary errors to
13102incoming mail. Sometimes the effect is caused by a badly set up name server and
13103may persist for a long time. If a domain which exhibits this problem matches
13104anything in &%dns_again_means_nonexist%&, it is treated as if it did not exist.
13105This option should be used with care. You can make it apply to reverse lookups
13106by a setting such as this:
13107.code
13108dns_again_means_nonexist = *.in-addr.arpa
13109.endd
4f578862
PH
13110This option applies to all DNS lookups that Exim does. It also applies when the
13111&[gethostbyname()]& or &[getipnodebyname()]& functions give temporary errors,
13112since these are most likely to be caused by DNS lookup problems. The
13113&(dnslookup)& router has some options of its own for controlling what happens
13114when lookups for MX or SRV records give temporary errors. These more specific
13115options are applied after this global option.
168e428f 13116
9b371988
PH
13117.option dns_check_names_pattern main string "see below"
13118.cindex "DNS" "pre-check of name syntax"
168e428f 13119When this option is set to a non-empty string, it causes Exim to check domain
4f578862
PH
13120names for characters that are not allowed in host names before handing them to
13121the DNS resolver, because some resolvers give temporary errors for names that
13122contain unusual characters. If a domain name contains any unwanted characters,
13123a &"not found"& result is forced, and the resolver is not called. The check is
13124done by matching the domain name against a regular expression, which is the
13125value of this option. The default pattern is
9b371988 13126.code
168e428f 13127dns_check_names_pattern = \
4f578862 13128 (?i)^(?>(?(1)\.|())[^\W_](?>[a-z0-9/-]*[^\W_])?)+$
9b371988 13129.endd
4f578862 13130which permits only letters, digits, slashes, and hyphens in components, but
7d0ab55c 13131they must start and end with a letter or digit. Slashes are not, in fact,
4f578862
PH
13132permitted in host names, but they are found in certain NS records (which can be
13133accessed in Exim by using a &%dnsdb%& lookup). If you set
13134&%allow_utf8_domains%&, you must modify this pattern, or set the option to an
13135empty string.
168e428f 13136
9b371988 13137.option dns_csa_search_limit main integer 5
068aaea8 13138This option controls the depth of parental searching for CSA SRV records in the
9b371988 13139DNS, as described in more detail in section &<<SECTverifyCSA>>&.
068aaea8 13140
9b371988 13141.option dns_csa_use_reverse main boolean true
068aaea8
PH
13142This option controls whether or not an IP address, given as a CSA domain, is
13143reversed and looked up in the reverse DNS, as described in more detail in
9b371988 13144section &<<SECTverifyCSA>>&.
068aaea8 13145
9b371988
PH
13146.option dns_ipv4_lookup main "domain list&!!" unset
13147.cindex "IPv6" "DNS lookup for AAAA records"
13148.cindex "DNS" "IPv6 lookup for AAAA records"
4f578862
PH
13149When Exim is compiled with IPv6 support and &%disable_ipv6%& is not set, it
13150looks for IPv6 address records (AAAA records) as well as IPv4 address records
13151(A records) when trying to find IP addresses for hosts, unless the host's
13152domain matches this list.
168e428f
PH
13153
13154This is a fudge to help with name servers that give big delays or otherwise do
4f578862
PH
13155not work for the AAAA record type. In due course, when the world's name
13156servers have all been upgraded, there should be no need for this option.
168e428f
PH
13157
13158
9b371988
PH
13159.option dns_retrans main time 0s
13160.cindex "DNS" "resolver options"
13161The options &%dns_retrans%& and &%dns_retry%& can be used to set the
168e428f
PH
13162retransmission and retry parameters for DNS lookups. Values of zero (the
13163defaults) leave the system default settings unchanged. The first value is the
13164time between retries, and the second is the number of retries. It isn't
13165totally clear exactly how these settings affect the total time a DNS lookup may
13166take. I haven't found any documentation about timeouts on DNS lookups; these
13167parameter values are available in the external resolver interface structure,
13168but nowhere does it seem to describe how they are used or what you might want
13169to set in them.
13170
13171
9b371988
PH
13172.option dns_retry main integer 0
13173See &%dns_retrans%& above.
168e428f 13174
168e428f 13175
9b371988 13176.option drop_cr main boolean false
168e428f
PH
13177This is an obsolete option that is now a no-op. It used to affect the way Exim
13178handled CR and LF characters in incoming messages. What happens now is
9b371988 13179described in section &<<SECTlineendings>>&.
168e428f 13180
f89d2485
PH
13181.option dsn_from main "string&!!" "see below"
13182.cindex "&'From:'& header line" "in bounces"
13183.cindex "bounce messages" "&'From:'& line, specifying"
13184This option can be used to vary the contents of &'From:'& header lines in
13185bounces and other automatically generated messages (&"Delivery Status
13186Notifications"& &-- hence the name of the option). The default setting is:
13187.code
13188dsn_from = Mail Delivery System <Mailer-Daemon@$qualify_domain>
13189.endd
13190The value is expanded every time it is needed. If the expansion fails, a
13191panic is logged, and the default value is used.
168e428f 13192
9b371988
PH
13193.option envelope_to_remove main boolean true
13194.cindex "&'Envelope-to:'& header line"
13195Exim's transports have an option for adding an &'Envelope-to:'& header to a
13196message when it is delivered, in exactly the same way as &'Return-path:'& is
13197handled. &'Envelope-to:'& records the original recipient address from the
168e428f
PH
13198messages's envelope that caused the delivery to happen. Such headers should not
13199be present in incoming messages, and this option causes them to be removed at
13200the time the message is received, to avoid any problems that might occur when a
13201delivered message is subsequently sent on to some other recipient.
13202
13203
9b371988
PH
13204.option errors_copy main "string list&!!" unset
13205.cindex "bounce message" "copy to other address"
13206.cindex "copy of bounce message"
168e428f 13207Setting this option causes Exim to send bcc copies of bounce messages that it
9b371988 13208generates to other addresses. &*Note*&: This does not apply to bounce messages
168e428f
PH
13209coming from elsewhere. The value of the option is a colon-separated list of
13210items. Each item consists of a pattern, terminated by white space, followed by
13211a comma-separated list of email addresses. If a pattern contains spaces, it
13212must be enclosed in double quotes.
13213
13214Each pattern is processed in the same way as a single item in an address list
9b371988
PH
13215(see section &<<SECTaddresslist>>&). When a pattern matches the recipient of
13216the bounce message, the message is copied to the addresses on the list. The
13217items are scanned in order, and once a matching one is found, no further items
13218are examined. For example:
13219.code
168e428f
PH
13220errors_copy = spqr@mydomain postmaster@mydomain.example :\
13221 rqps@mydomain hostmaster@mydomain.example,\
13222 postmaster@mydomain.example
9b371988 13223.endd
f89d2485
PH
13224.vindex "&$domain$&"
13225.vindex "&$local_part$&"
9b371988
PH
13226The address list is expanded before use. The expansion variables &$local_part$&
13227and &$domain$& are set from the original recipient of the error message, and if
13228there was any wildcard matching in the pattern, the expansion
13229.cindex "numerical variables (&$1$& &$2$& etc)" "in &%errors_copy%&"
13230variables &$0$&, &$1$&, etc. are set in the normal way.
13231
13232
13233.option errors_reply_to main string unset
13234.cindex "bounce message" "&'Reply-to:'& in"
4f578862 13235By default, Exim's bounce and delivery warning messages contain the header line
9b371988
PH
13236.display
13237&`From: Mail Delivery System <Mailer-Daemon@`&&'qualify-domain'&&`>`&
13238.endd
4f578862 13239.oindex &%quota_warn_message%&
9b371988 13240where &'qualify-domain'& is the value of the &%qualify_domain%& option.
4f578862
PH
13241A warning message that is generated by the &%quota_warn_message%& option in an
13242&(appendfile)& transport may contain its own &'From:'& header line that
13243overrides the default.
13244
168e428f 13245Experience shows that people reply to bounce messages. If the
9b371988
PH
13246&%errors_reply_to%& option is set, a &'Reply-To:'& header is added to bounce
13247and warning messages. For example:
13248.code
13249errors_reply_to = postmaster@my.domain.example
13250.endd
168e428f 13251The value of the option is not expanded. It must specify a valid RFC 2822
4f578862
PH
13252address. However, if a warning message that is generated by the
13253&%quota_warn_message%& option in an &(appendfile)& transport contain its
13254own &'Reply-To:'& header line, the value of the &%errors_reply_to%& option is
13255not used.
168e428f
PH
13256
13257
9b371988
PH
13258.option exim_group main string "compile-time configured"
13259.cindex "gid (group id)" "Exim's own"
13260.cindex "Exim group"
168e428f
PH
13261This option changes the gid under which Exim runs when it gives up root
13262privilege. The default value is compiled into the binary. The value of this
9b371988
PH
13263option is used only when &%exim_user%& is also set. Unless it consists entirely
13264of digits, the string is looked up using &[getgrnam()]&, and failure causes a
13265configuration error. See chapter &<<CHAPsecurity>>& for a discussion of
13266security issues.
168e428f 13267
168e428f 13268
9b371988 13269.option exim_path main string "see below"
f89d2485 13270.cindex "Exim binary, path name"
168e428f 13271This option specifies the path name of the Exim binary, which is used when Exim
9b371988 13272needs to re-exec itself. The default is set up to point to the file &'exim'& in
168e428f 13273the directory configured at compile time by the BIN_DIRECTORY setting. It
9b371988 13274is necessary to change &%exim_path%& if, exceptionally, Exim is run from some
168e428f 13275other place.
9b371988 13276&*Warning*&: Do not use a macro to define the value of this option, because
168e428f 13277you will break those Exim utilities that scan the configuration file to find
9b371988
PH
13278where the binary is. (They then use the &%-bP%& option to extract option
13279settings such as the value of &%spool_directory%&.)
168e428f
PH
13280
13281
9b371988
PH
13282.option exim_user main string "compile-time configured"
13283.cindex "uid (user id)" "Exim's own"
13284.cindex "Exim user"
168e428f
PH
13285This option changes the uid under which Exim runs when it gives up root
13286privilege. The default value is compiled into the binary. Ownership of the run
9b371988
PH
13287time configuration file and the use of the &%-C%& and &%-D%& command line
13288options is checked against the values in the binary, not what is set here.
168e428f
PH
13289
13290Unless it consists entirely of digits, the string is looked up using
9b371988
PH
13291&[getpwnam()]&, and failure causes a configuration error. If &%exim_group%& is
13292not also supplied, the gid is taken from the result of &[getpwnam()]& if it is
13293used. See chapter &<<CHAPsecurity>>& for a discussion of security issues.
168e428f 13294
168e428f 13295
9b371988 13296.option extra_local_interfaces main "string list" unset
168e428f
PH
13297This option defines network interfaces that are to be considered local when
13298routing, but which are not used for listening by the daemon. See section
9b371988 13299&<<SECTreclocipadd>>& for details.
168e428f 13300
168e428f 13301
0a4e3112
PH
13302. Allow this long option name to split; give it unsplit as a fifth argument
13303. for the automatic .oindex that is generated by .option.
f89d2485 13304
0a4e3112
PH
13305.option "extract_addresses_remove_ &~&~arguments" main boolean true &&&
13306 extract_addresses_remove_arguments
f89d2485 13307.oindex "&%-t%&"
9b371988
PH
13308.cindex "command line" "addresses with &%-t%&"
13309.cindex "Sendmail compatibility" "&%-t%& option"
168e428f 13310According to some Sendmail documentation (Sun, IRIX, HP-UX), if any addresses
9b371988
PH
13311are present on the command line when the &%-t%& option is used to build an
13312envelope from a message's &'To:'&, &'Cc:'& and &'Bcc:'& headers, the command
13313line addresses are removed from the recipients list. This is also how Smail
13314behaves. However, other Sendmail documentation (the O'Reilly book) states that
13315command line addresses are added to those obtained from the header lines. When
13316&%extract_addresses_remove_arguments%& is true (the default), Exim subtracts
168e428f
PH
13317argument headers. If it is set false, Exim adds rather than removes argument
13318addresses.
13319
13320
9b371988 13321.option finduser_retries main integer 0
f89d2485 13322.cindex "NIS, retrying user lookups"
168e428f 13323On systems running NIS or other schemes in which user and group information is
9b371988 13324distributed from a remote system, there can be times when &[getpwnam()]& and
168e428f 13325related functions fail, even when given valid data, because things time out.
9b371988
PH
13326Unfortunately these failures cannot be distinguished from genuine &"not found"&
13327errors. If &%finduser_retries%& is set greater than zero, Exim will try that
168e428f
PH
13328many extra times to find a user or a group, waiting for one second between
13329retries.
13330
9b371988 13331.cindex "&_/etc/passwd_&" "multiple reading of"
168e428f 13332You should not set this option greater than zero if your user information is in
9b371988 13333a traditional &_/etc/passwd_& file, because it will cause Exim needlessly to
168e428f
PH
13334search the file multiple times for non-existent users, and also cause delay.
13335
13336
13337
9b371988
PH
13338.option freeze_tell main "string list, comma separated" unset
13339.cindex "freezing messages" "sending a message when freezing"
168e428f 13340On encountering certain errors, or when configured to do so in a system filter,
9b371988
PH
13341ACL, or special router, Exim freezes a message. This means that no further
13342delivery attempts take place until an administrator thaws the message, or the
13343&%auto_thaw%&, &%ignore_bounce_errors_after%&, or &%timeout_frozen_after%&
13344feature cause it to be processed. If &%freeze_tell%& is set, Exim generates a
13345warning message whenever it freezes something, unless the message it is
13346freezing is a locally-generated bounce message. (Without this exception there
13347is the possibility of looping.) The warning message is sent to the addresses
13348supplied as the comma-separated value of this option. If several of the
13349message's addresses cause freezing, only a single message is sent. If the
13350freezing was automatic, the reason(s) for freezing can be found in the message
13351log. If you configure freezing in a filter or ACL, you must arrange for any
13352logging that you require.
13353
13354
13355.option gecos_name main string&!! unset
13356.cindex "HP-UX"
f89d2485 13357.cindex "&""gecos""& field, parsing"
9b371988 13358Some operating systems, notably HP-UX, use the &"gecos"& field in the system
168e428f 13359password file to hold other information in addition to users' real names. Exim
9b371988
PH
13360looks up this field for use when it is creating &'Sender:'& or &'From:'&
13361headers. If either &%gecos_pattern%& or &%gecos_name%& are unset, the contents
13362of the field are used unchanged, except that, if an ampersand is encountered,
13363it is replaced by the user's login name with the first character forced to
168e428f
PH
13364upper case, since this is a convention that is observed on many systems.
13365
9b371988
PH
13366When these options are set, &%gecos_pattern%& is treated as a regular
13367expression that is to be applied to the field (again with && replaced by the
13368login name), and if it matches, &%gecos_name%& is expanded and used as the
13369user's name.
168e428f 13370
9b371988
PH
13371.cindex "numerical variables (&$1$& &$2$& etc)" "in &%gecos_name%&"
13372Numeric variables such as &$1$&, &$2$&, etc. can be used in the expansion to
168e428f
PH
13373pick up sub-fields that were matched by the pattern. In HP-UX, where the user's
13374name terminates at the first comma, the following can be used:
9b371988
PH
13375.code
13376gecos_pattern = ([^,]*)
13377gecos_name = $1
13378.endd
168e428f 13379
9b371988
PH
13380.option gecos_pattern main string unset
13381See &%gecos_name%& above.
168e428f
PH
13382
13383
f89d2485
PH
13384.option gnutls_require_kx main string unset
13385This option controls the key exchange mechanisms when GnuTLS is used in an Exim
13386server. For details, see section &<<SECTreqciphgnu>>&.
13387
13388.option gnutls_require_mac main string unset
13389This option controls the MAC algorithms when GnuTLS is used in an Exim
13390server. For details, see section &<<SECTreqciphgnu>>&.
13391
13392.option gnutls_require_protocols main string unset
13393This option controls the protocols when GnuTLS is used in an Exim
13394server. For details, see section &<<SECTreqciphgnu>>&.
f89d2485 13395
71e1673f 13396.new
e6060e2c
NM
13397.option gnutls_compat_mode main boolean unset
13398This option controls whether GnuTLS is used in compatibility mode in an Exim
13399server. This reduces security slightly, but improves interworking with older
13400implementations of TLS.
71e1673f 13401.wen
f89d2485 13402
9b371988 13403.option headers_charset main string "see below"
168e428f 13404This option sets a default character set for translating from encoded MIME
9b371988
PH
13405&"words"& in header lines, when referenced by an &$h_xxx$& expansion item. The
13406default is the value of HEADERS_CHARSET in &_Local/Makefile_&. The
168e428f 13407ultimate default is ISO-8859-1. For more details see the description of header
9b371988 13408insertions in section &<<SECTexpansionitems>>&.
168e428f
PH
13409
13410
168e428f 13411
9b371988
PH
13412.option header_maxsize main integer "see below"
13413.cindex "header section" "maximum size of"
13414.cindex "limit" "size of message header section"
168e428f
PH
13415This option controls the overall maximum size of a message's header
13416section. The default is the value of HEADER_MAXSIZE in
9b371988 13417&_Local/Makefile_&; the default for that is 1M. Messages with larger header
168e428f
PH
13418sections are rejected.
13419
13420
9b371988
PH
13421.option header_line_maxsize main integer 0
13422.cindex "header lines" "maximum size of"
13423.cindex "limit" "size of one header line"
168e428f
PH
13424This option limits the length of any individual header line in a message, after
13425all the continuations have been joined together. Messages with individual
13426header lines that are longer than the limit are rejected. The default value of
9b371988 13427zero means &"no limit"&.
168e428f
PH
13428
13429
13430
13431
9b371988
PH
13432.option helo_accept_junk_hosts main "host list&!!" unset
13433.cindex "HELO" "accepting junk data"
13434.cindex "EHLO" "accepting junk data"
168e428f
PH
13435Exim checks the syntax of HELO and EHLO commands for incoming SMTP
13436mail, and gives an error response for invalid data. Unfortunately, there are
13437some SMTP clients that send syntactic junk. They can be accommodated by setting
9b371988 13438this option. Note that this is a syntax check only. See &%helo_verify_hosts%&
168e428f 13439if you want to do semantic checking.
9b371988 13440See also &%helo_allow_chars%& for a way of extending the permitted character
168e428f
PH
13441set.
13442
13443
9b371988
PH
13444.option helo_allow_chars main string unset
13445.cindex "HELO" "underscores in"
13446.cindex "EHLO" "underscores in"
13447.cindex "underscore in EHLO/HELO"
168e428f
PH
13448This option can be set to a string of rogue characters that are permitted in
13449all EHLO and HELO names in addition to the standard letters, digits,
13450hyphens, and dots. If you really must allow underscores, you can set
9b371988
PH
13451.code
13452helo_allow_chars = _
13453.endd
168e428f
PH
13454Note that the value is one string, not a list.
13455
13456
9b371988
PH
13457.option helo_lookup_domains main "domain list&!!" &`@:@[]`&
13458.cindex "HELO" "forcing reverse lookup"
13459.cindex "EHLO" "forcing reverse lookup"
168e428f
PH
13460If the domain given by a client in a HELO or EHLO command matches this
13461list, a reverse lookup is done in order to establish the host's true name. The
13462default forces a lookup if the client host gives the server's name or any of
13463its IP addresses (in brackets), something that broken clients have been seen to
13464do.
13465
13466
9b371988 13467.option helo_try_verify_hosts main "host list&!!" unset
9b371988 13468.cindex "HELO verifying" "optional"
f89d2485 13469.cindex "EHLO" "verifying, optional"
068aaea8 13470By default, Exim just checks the syntax of HELO and EHLO commands (see
9b371988
PH
13471&%helo_accept_junk_hosts%& and &%helo_allow_chars%&). However, some sites like
13472to do more extensive checking of the data supplied by these commands. The ACL
400eda43 13473condition &`verify = helo`& is provided to make this possible.
9b371988
PH
13474Formerly, it was necessary also to set this option (&%helo_try_verify_hosts%&)
13475to force the check to occur. From release 4.53 onwards, this is no longer
9c2b45c9 13476necessary. If the check has not been done before &`verify = helo`& is
9b371988
PH
13477encountered, it is done at that time. Consequently, this option is obsolete.
13478Its specification is retained here for backwards compatibility.
13479
068aaea8 13480When an EHLO or HELO command is received, if the calling host matches
9b371988 13481&%helo_try_verify_hosts%&, Exim checks that the host name given in the HELO or
068aaea8 13482EHLO command either:
168e428f 13483
9b371988
PH
13484.ilist
13485is an IP literal matching the calling address of the host, or
13486.next
13487.cindex "DNS" "reverse lookup"
13488.cindex "reverse DNS lookup"
168e428f
PH
13489matches the host name that Exim obtains by doing a reverse lookup of the
13490calling host address, or
9b371988
PH
13491.next
13492when looked up using &[gethostbyname()]& (or &[getipnodebyname()]& when
168e428f 13493available) yields the calling host address.
9b371988 13494.endlist
168e428f
PH
13495
13496However, the EHLO or HELO command is not rejected if any of the checks
13497fail. Processing continues, but the result of the check is remembered, and can
9c2b45c9 13498be detected later in an ACL by the &`verify = helo`& condition.
168e428f 13499
9b371988
PH
13500.option helo_verify_hosts main "host list&!!" unset
13501.cindex "HELO verifying" "mandatory"
f89d2485 13502.cindex "EHLO" "verifying, mandatory"
9b371988 13503Like &%helo_try_verify_hosts%&, this option is obsolete, and retained only for
068aaea8 13504backwards compatibility. For hosts that match this option, Exim checks the host
9b371988
PH
13505name given in the HELO or EHLO in the same way as for
13506&%helo_try_verify_hosts%&. If the check fails, the HELO or EHLO command is
13507rejected with a 550 error, and entries are written to the main and reject logs.
13508If a MAIL command is received before EHLO or HELO, it is rejected with a 503
13509error.
168e428f 13510
9b371988
PH
13511.option hold_domains main "domain list&!!" unset
13512.cindex "domain" "delaying delivery"
13513.cindex "delivery" "delaying certain domains"
168e428f
PH
13514This option allows mail for particular domains to be held on the queue
13515manually. The option is overridden if a message delivery is forced with the
9b371988
PH
13516&%-M%&, &%-qf%&, &%-Rf%& or &%-Sf%& options, and also while testing or
13517verifying addresses using &%-bt%& or &%-bv%&. Otherwise, if a domain matches an
13518item in &%hold_domains%&, no routing or delivery for that address is done, and
13519it is deferred every time the message is looked at.
168e428f
PH
13520
13521This option is intended as a temporary operational measure for delaying the
13522delivery of mail while some problem is being sorted out, or some new
13523configuration tested. If you just want to delay the processing of some
9b371988
PH
13524domains until a queue run occurs, you should use &%queue_domains%& or
13525&%queue_smtp_domains%&, not &%hold_domains%&.
168e428f 13526
9b371988 13527A setting of &%hold_domains%& does not override Exim's code for removing
168e428f
PH
13528messages from the queue if they have been there longer than the longest retry
13529time in any retry rule. If you want to hold messages for longer than the normal
13530retry times, insert a dummy retry rule with a long retry time.
13531
13532
9b371988 13533.option host_lookup main "host list&!!" unset
f89d2485 13534.cindex "host name" "lookup, forcing"
168e428f
PH
13535Exim does not look up the name of a calling host from its IP address unless it
13536is required to compare against some host list, or the host matches
9b371988 13537&%helo_try_verify_hosts%& or &%helo_verify_hosts%&, or the host matches this
168e428f
PH
13538option (which normally contains IP addresses rather than host names). The
13539default configuration file contains
9b371988
PH
13540.code
13541host_lookup = *
13542.endd
168e428f
PH
13543which causes a lookup to happen for all hosts. If the expense of these lookups
13544is felt to be too great, the setting can be changed or removed.
13545
13546After a successful reverse lookup, Exim does a forward lookup on the name it
13547has obtained, to verify that it yields the IP address that it started with. If
13548this check fails, Exim behaves as if the name lookup failed.
13549
f89d2485
PH
13550.vindex "&$host_lookup_failed$&"
13551.vindex "&$sender_host_name$&"
9b371988
PH
13552After any kind of failure, the host name (in &$sender_host_name$&) remains
13553unset, and &$host_lookup_failed$& is set to the string &"1"&. See also
9c2b45c9
NM
13554&%dns_again_means_nonexist%&, &%helo_lookup_domains%&, and
13555&`verify = reverse_host_lookup`& in ACLs.
168e428f
PH
13556
13557
9b371988 13558.option host_lookup_order main "string list" &`bydns:byaddr`&
168e428f
PH
13559This option specifies the order of different lookup methods when Exim is trying
13560to find a host name from an IP address. The default is to do a DNS lookup
9b371988 13561first, and then to try a local lookup (using &[gethostbyaddr()]& or equivalent)
168e428f
PH
13562if that fails. You can change the order of these lookups, or omit one entirely,
13563if you want.
13564
9b371988 13565&*Warning*&: The &"byaddr"& method does not always yield aliases when there are
168e428f 13566multiple PTR records in the DNS and the IP address is not listed in
9b371988 13567&_/etc/hosts_&. Different operating systems give different results in this
168e428f
PH
13568case. That is why the default tries a DNS lookup first.
13569
13570
13571
9b371988
PH
13572.option host_reject_connection main "host list&!!" unset
13573.cindex "host" "rejecting connections from"
168e428f
PH
13574If this option is set, incoming SMTP calls from the hosts listed are rejected
13575as soon as the connection is made.
13576This option is obsolete, and retained only for backward compatibility, because
9b371988 13577nowadays the ACL specified by &%acl_smtp_connect%& can also reject incoming
168e428f
PH
13578connections immediately.
13579
13580The ability to give an immediate rejection (either by this option or using an
13581ACL) is provided for use in unusual cases. Many hosts will just try again,
13582sometimes without much delay. Normally, it is better to use an ACL to reject
13583incoming messages at a later stage, such as after RCPT commands. See
9b371988 13584chapter &<<CHAPACL>>&.
168e428f
PH
13585
13586
9b371988
PH
13587.option hosts_connection_nolog main "host list&!!" unset
13588.cindex "host" "not logging connections from"
168e428f 13589This option defines a list of hosts for which connection logging does not
9b371988 13590happen, even though the &%smtp_connection%& log selector is set. For example,
168e428f
PH
13591you might want not to log SMTP connections from local processes, or from
13592127.0.0.1, or from your local LAN. This option is consulted in the main loop of
13593the daemon; you should therefore strive to restrict its value to a short inline
13594list of IP addresses and networks. To disable logging SMTP connections from
13595local processes, you must create a host list with an empty item. For example:
9b371988
PH
13596.code
13597hosts_connection_nolog = :
13598.endd
13599If the &%smtp_connection%& log selector is not set, this option has no effect.
168e428f
PH
13600
13601
13602
9b371988
PH
13603.option hosts_treat_as_local main "domain list&!!" unset
13604.cindex "local host" "domains treated as"
13605.cindex "host" "treated as local"
168e428f
PH
13606If this option is set, any host names that match the domain list are treated as
13607if they were the local host when Exim is scanning host lists obtained from MX
13608records
13609or other sources. Note that the value of this option is a domain list, not a
13610host list, because it is always used to check host names, not IP addresses.
13611
13612This option also applies when Exim is matching the special items
9b371988
PH
13613&`@mx_any`&, &`@mx_primary`&, and &`@mx_secondary`& in a domain list (see
13614section &<<SECTdomainlist>>&), and when checking the &%hosts%& option in the
13615&(smtp)& transport for the local host (see the &%allow_localhost%& option in
13616that transport). See also &%local_interfaces%&, &%extra_local_interfaces%&, and
13617chapter &<<CHAPinterfaces>>&, which contains a discussion about local network
f89d2485 13618interfaces and recognizing the local host.
9b371988
PH
13619
13620
595028e4
PH
13621.option ibase_servers main "string list" unset
13622.cindex "InterBase" "server list"
13623This option provides a list of InterBase servers and associated connection data,
13624to be used in conjunction with &(ibase)& lookups (see section &<<SECID72>>&).
13625The option is available only if Exim has been built with InterBase support.
595028e4
PH
13626
13627
13628
9b371988
PH
13629.option ignore_bounce_errors_after main time 10w
13630.cindex "bounce message" "discarding"
13631.cindex "discarding bounce message"
168e428f
PH
13632This option affects the processing of bounce messages that cannot be delivered,
13633that is, those that suffer a permanent delivery failure. (Bounce messages that
13634suffer temporary delivery failures are of course retried in the usual way.)
13635
13636After a permanent delivery failure, bounce messages are frozen,
13637because there is no sender to whom they can be returned. When a frozen bounce
13638message has been on the queue for more than the given time, it is unfrozen at
13639the next queue run, and a further delivery is attempted. If delivery fails
13640again, the bounce message is discarded. This makes it possible to keep failed
13641bounce messages around for a shorter time than the normal maximum retry time
13642for frozen messages. For example,
9b371988
PH
13643.code
13644ignore_bounce_errors_after = 12h
13645.endd
168e428f
PH
13646retries failed bounce message deliveries after 12 hours, discarding any further
13647failures. If the value of this option is set to a zero time period, bounce
13648failures are discarded immediately. Setting a very long time (as in the default
13649value) has the effect of disabling this option. For ways of automatically
9b371988
PH
13650dealing with other kinds of frozen message, see &%auto_thaw%& and
13651&%timeout_frozen_after%&.
168e428f
PH
13652
13653
9b371988
PH
13654.option ignore_fromline_hosts main "host list&!!" unset
13655.cindex "&""From""& line"
13656.cindex "UUCP" "&""From""& line"
13657Some broken SMTP clients insist on sending a UUCP-like &"From&~"& line before
13658the headers of a message. By default this is treated as the start of the
13659message's body, which means that any following headers are not recognized as
13660such. Exim can be made to ignore it by setting &%ignore_fromline_hosts%& to
13661match those hosts that insist on sending it. If the sender is actually a local
13662process rather than a remote host, and is using &%-bs%& to inject the messages,
13663&%ignore_fromline_local%& must be set to achieve this effect.
168e428f 13664
168e428f 13665
9b371988
PH
13666.option ignore_fromline_local main boolean false
13667See &%ignore_fromline_hosts%& above.
168e428f 13668
168e428f 13669
9b371988 13670.option keep_malformed main time 4d
168e428f
PH
13671This option specifies the length of time to keep messages whose spool files
13672have been corrupted in some way. This should, of course, never happen. At the
13673next attempt to deliver such a message, it gets removed. The incident is
13674logged.
13675
13676
9b371988
PH
13677.option ldap_default_servers main "string list" unset
13678.cindex "LDAP" "default servers"
168e428f 13679This option provides a list of LDAP servers which are tried in turn when an
9b371988
PH
13680LDAP query does not contain a server. See section &<<SECTforldaque>>& for
13681details of LDAP queries. This option is available only when Exim has been built
13682with LDAP support.
168e428f 13683
168e428f 13684
9b371988 13685.option ldap_version main integer unset
f89d2485 13686.cindex "LDAP" "protocol version, forcing"
168e428f 13687This option can be used to force Exim to set a specific protocol version for
9b371988 13688LDAP. If it option is unset, it is shown by the &%-bP%& command line option as
168e428f
PH
13689-1. When this is the case, the default is 3 if LDAP_VERSION3 is defined in
13690the LDAP headers; otherwise it is 2. This option is available only when Exim
13691has been built with LDAP support.
13692
13693
13694
9b371988
PH
13695.option local_from_check main boolean true
13696.cindex "&'Sender:'& header line" "disabling addition of"
13697.cindex "&'From:'& header line" "disabling checking of"
168e428f 13698When a message is submitted locally (that is, not over a TCP/IP connection) by
9b371988
PH
13699an untrusted user, Exim removes any existing &'Sender:'& header line, and
13700checks that the &'From:'& header line matches the login of the calling user and
13701the domain specified by &%qualify_domain%&.
168e428f 13702
9b371988 13703&*Note*&: An unqualified address (no domain) in the &'From:'& header in a
168e428f 13704locally submitted message is automatically qualified by Exim, unless the
9b371988 13705&%-bnq%& command line option is used.
168e428f 13706
9b371988
PH
13707You can use &%local_from_prefix%& and &%local_from_suffix%& to permit affixes
13708on the local part. If the &'From:'& header line does not match, Exim adds a
13709&'Sender:'& header with an address constructed from the calling user's login
13710and the default qualify domain.
168e428f 13711
9b371988
PH
13712If &%local_from_check%& is set false, the &'From:'& header check is disabled,
13713and no &'Sender:'& header is ever added. If, in addition, you want to retain
13714&'Sender:'& header lines supplied by untrusted users, you must also set
13715&%local_sender_retain%& to be true.
168e428f 13716
9b371988 13717.cindex "envelope sender"
168e428f
PH
13718These options affect only the header lines in the message. The envelope sender
13719is still forced to be the login id at the qualify domain unless
9b371988 13720&%untrusted_set_sender%& permits the user to supply an envelope sender.
168e428f 13721
9b371988
PH
13722For messages received over TCP/IP, an ACL can specify &"submission mode"& to
13723request similar header line checking. See section &<<SECTthesenhea>>&, which
13724has more details about &'Sender:'& processing.
168e428f
PH
13725
13726
13727
13728
9b371988
PH
13729.option local_from_prefix main string unset
13730When Exim checks the &'From:'& header line of locally submitted messages for
13731matching the login id (see &%local_from_check%& above), it can be configured to
168e428f 13732ignore certain prefixes and suffixes in the local part of the address. This is
9b371988
PH
13733done by setting &%local_from_prefix%& and/or &%local_from_suffix%& to
13734appropriate lists, in the same form as the &%local_part_prefix%& and
13735&%local_part_suffix%& router options (see chapter &<<CHAProutergeneric>>&). For
168e428f 13736example, if
9b371988
PH
13737.code
13738local_from_prefix = *-
13739.endd
13740is set, a &'From:'& line containing
13741.code
13742From: anything-user@your.domain.example
13743.endd
13744will not cause a &'Sender:'& header to be added if &'user@your.domain.example'&
168e428f
PH
13745matches the actual sender address that is constructed from the login name and
13746qualify domain.
13747
13748
9b371988
PH
13749.option local_from_suffix main string unset
13750See &%local_from_prefix%& above.
168e428f
PH
13751
13752
9b371988 13753.option local_interfaces main "string list" "see below"
168e428f
PH
13754This option controls which network interfaces are used by the daemon for
13755listening; they are also used to identify the local host when routing. Chapter
9b371988
PH
13756&<<CHAPinterfaces>>& contains a full description of this option and the related
13757options &%daemon_smtp_ports%&, &%extra_local_interfaces%&,
13758&%hosts_treat_as_local%&, and &%tls_on_connect_ports%&. The default value for
13759&%local_interfaces%& is
13760.code
13761local_interfaces = 0.0.0.0
13762.endd
168e428f 13763when Exim is built without IPv6 support; otherwise it is
9b371988
PH
13764.code
13765local_interfaces = <; ::0 ; 0.0.0.0
13766.endd
168e428f 13767
9b371988
PH
13768.option local_scan_timeout main time 5m
13769.cindex "timeout" "for &[local_scan()]& function"
13770.cindex "&[local_scan()]& function" "timeout"
13771This timeout applies to the &[local_scan()]& function (see chapter
13772&<<CHAPlocalscan>>&). Zero means &"no timeout"&. If the timeout is exceeded,
13773the incoming message is rejected with a temporary error if it is an SMTP
13774message. For a non-SMTP message, the message is dropped and Exim ends with a
13775non-zero code. The incident is logged on the main and reject logs.
168e428f
PH
13776
13777
168e428f 13778
9b371988
PH
13779.option local_sender_retain main boolean false
13780.cindex "&'Sender:'& header line" "retaining from local submission"
168e428f 13781When a message is submitted locally (that is, not over a TCP/IP connection) by
9b371988
PH
13782an untrusted user, Exim removes any existing &'Sender:'& header line. If you
13783do not want this to happen, you must set &%local_sender_retain%&, and you must
13784also set &%local_from_check%& to be false (Exim will complain if you do not).
13785See also the ACL modifier &`control = suppress_local_fixups`&. Section
13786&<<SECTthesenhea>>& has more details about &'Sender:'& processing.
168e428f
PH
13787
13788
13789
168e428f 13790
9b371988
PH
13791.option localhost_number main string&!! unset
13792.cindex "host" "locally unique number for"
13793.cindex "message ids" "with multiple hosts"
f89d2485 13794.vindex "&$localhost_number$&"
168e428f
PH
13795Exim's message ids are normally unique only within the local host. If
13796uniqueness among a set of hosts is required, each host must set a different
9b371988 13797value for the &%localhost_number%& option. The string is expanded immediately
168e428f
PH
13798after reading the configuration file (so that a number can be computed from the
13799host name, for example) and the result of the expansion must be a number in the
9b371988
PH
13800range 0&--16 (or 0&--10 on operating systems with case-insensitive file
13801systems). This is available in subsequent string expansions via the variable
13802&$localhost_number$&. When &%localhost_number is set%&, the final two
168e428f
PH
13803characters of the message id, instead of just being a fractional part of the
13804time, are computed from the time and the local host number as described in
9b371988 13805section &<<SECTmessiden>>&.
168e428f
PH
13806
13807
13808
9b371988
PH
13809.option log_file_path main "string list&!!" "set at compile time"
13810.cindex "log" "file path for"
168e428f
PH
13811This option sets the path which is used to determine the names of Exim's log
13812files, or indicates that logging is to be to syslog, or both. It is expanded
13813when Exim is entered, so it can, for example, contain a reference to the host
13814name. If no specific path is set for the log files at compile or run time, they
9b371988
PH
13815are written in a sub-directory called &_log_& in Exim's spool directory.
13816Chapter &<<CHAPlog>>& contains further details about Exim's logging, and
13817section &<<SECTwhelogwri>>& describes how the contents of &%log_file_path%& are
13818used. If this string is fixed at your installation (contains no expansion
13819variables) it is recommended that you do not set this option in the
13820configuration file, but instead supply the path using LOG_FILE_PATH in
13821&_Local/Makefile_& so that it is available to Exim for logging errors detected
13822early on &-- in particular, failure to read the configuration file.
13823
13824
13825.option log_selector main string unset
13826.cindex "log" "selectors"
168e428f
PH
13827This option can be used to reduce or increase the number of things that Exim
13828writes to its log files. Its argument is made up of names preceded by plus or
13829minus characters. For example:
9b371988
PH
13830.code
13831log_selector = +arguments -retry_defer
13832.endd
168e428f 13833A list of possible names and what they control is given in the chapter on
9b371988 13834logging, in section &<<SECTlogselector>>&.
168e428f
PH
13835
13836
9b371988
PH
13837.option log_timezone main boolean false
13838.cindex "log" "timezone for entries"
f89d2485
PH
13839.vindex "&$tod_log$&"
13840.vindex "&$tod_zone$&"
168e428f
PH
13841By default, the timestamps on log lines are in local time without the
13842timezone. This means that if your timezone changes twice a year, the timestamps
13843in log lines are ambiguous for an hour when the clocks go back. One way of
13844avoiding this problem is to set the timezone to UTC. An alternative is to set
9b371988 13845&%log_timezone%& true. This turns on the addition of the timezone offset to
168e428f
PH
13846timestamps in log lines. Turning on this option can add quite a lot to the size
13847of log files because each line is extended by 6 characters. Note that the
9b371988
PH
13848&$tod_log$& variable contains the log timestamp without the zone, but there is
13849another variable called &$tod_zone$& that contains just the timezone offset.
168e428f 13850
168e428f 13851
9b371988
PH
13852.option lookup_open_max main integer 25
13853.cindex "too many open files"
f89d2485 13854.cindex "open files, too many"
9b371988
PH
13855.cindex "file" "too many open"
13856.cindex "lookup" "maximum open files"
13857.cindex "limit" "open files for lookups"
168e428f 13858This option limits the number of simultaneously open files for single-key
9b371988
PH
13859lookups that use regular files (that is, &(lsearch)&, &(dbm)&, and &(cdb)&).
13860Exim normally keeps these files open during routing, because often the same
13861file is required several times. If the limit is reached, Exim closes the least
13862recently used file. Note that if you are using the &'ndbm'& library, it
13863actually opens two files for each logical DBM database, though it still counts
13864as one for the purposes of &%lookup_open_max%&. If you are getting &"too many
13865open files"& errors with NDBM, you need to reduce the value of
13866&%lookup_open_max%&.
13867
13868
13869.option max_username_length main integer 0
f89d2485 13870.cindex "length of login name"
9b371988
PH
13871.cindex "user name" "maximum length"
13872.cindex "limit" "user name length"
168e428f 13873Some operating systems are broken in that they truncate long arguments to
9b371988
PH
13874&[getpwnam()]& to eight characters, instead of returning &"no such user"&. If
13875this option is set greater than zero, any attempt to call &[getpwnam()]& with
13876an argument that is longer behaves as if &[getpwnam()]& failed.
168e428f
PH
13877
13878
595028e4
PH
13879.option message_body_newlines main bool false
13880.cindex "message body" "newlines in variables"
13881.cindex "newline" "in message body variables"
13882.vindex "&$message_body$&"
13883.vindex "&$message_body_end$&"
13884By default, newlines in the message body are replaced by spaces when setting
13885the &$message_body$& and &$message_body_end$& expansion variables. If this
13886option is set true, this no longer happens.
595028e4 13887
168e428f 13888
9b371988
PH
13889.option message_body_visible main integer 500
13890.cindex "body of message" "visible size"
13891.cindex "message body" "visible size"
f89d2485
PH
13892.vindex "&$message_body$&"
13893.vindex "&$message_body_end$&"
168e428f 13894This option specifies how much of a message's body is to be included in the
9b371988 13895&$message_body$& and &$message_body_end$& expansion variables.
168e428f
PH
13896
13897
9b371988
PH
13898.option message_id_header_domain main string&!! unset
13899.cindex "&'Message-ID:'& header line"
168e428f 13900If this option is set, the string is expanded and used as the right hand side
9b371988
PH
13901(domain) of the &'Message-ID:'& header that Exim creates if a
13902locally-originated incoming message does not have one. &"Locally-originated"&
13903means &"not received over TCP/IP."&
168e428f
PH
13904Otherwise, the primary host name is used.
13905Only letters, digits, dot and hyphen are accepted; any other characters are
13906replaced by hyphens. If the expansion is forced to fail, or if the result is an
13907empty string, the option is ignored.
13908
13909
9b371988 13910.option message_id_header_text main string&!! unset
168e428f 13911If this variable is set, the string is expanded and used to augment the text of
9b371988 13912the &'Message-id:'& header that Exim creates if a locally-originated incoming
068aaea8
PH
13913message does not have one. The text of this header is required by RFC 2822 to
13914take the form of an address. By default, Exim uses its internal message id as
13915the local part, and the primary host name as the domain. If this option is set,
13916it is expanded, and provided the expansion is not forced to fail, and does not
13917yield an empty string, the result is inserted into the header immediately
13918before the @, separated from the internal message id by a dot. Any characters
13919that are illegal in an address are automatically converted into hyphens. This
9b371988 13920means that variables such as &$tod_log$& can be used, because the spaces and
068aaea8 13921colons will become hyphens.
168e428f
PH
13922
13923
9b371988 13924.option message_logs main boolean true
f89d2485 13925.cindex "message logs" "disabling"
9b371988 13926.cindex "log" "message log; disabling"
168e428f 13927If this option is turned off, per-message log files are not created in the
9b371988 13928&_msglog_& spool sub-directory. This reduces the amount of disk I/O required by
168e428f
PH
13929Exim, by reducing the number of files involved in handling a message from a
13930minimum of four (header spool file, body spool file, delivery journal, and
13931per-message log) to three. The other major I/O activity is Exim's main log,
13932which is not affected by this option.
13933
13934
9b371988
PH
13935.option message_size_limit main string&!! 50M
13936.cindex "message" "size limit"
13937.cindex "limit" "message size"
f89d2485 13938.cindex "size" "of message, limit"
168e428f 13939This option limits the maximum size of message that Exim will process. The
ad268134
PH
13940value is expanded for each incoming connection so, for example, it can be made
13941to depend on the IP address of the remote host for messages arriving via
f89d2485
PH
13942TCP/IP. After expansion, the value must be a sequence of decimal digits,
13943optionally followed by K or M.
ad268134
PH
13944
13945&*Note*&: This limit cannot be made to depend on a message's sender or any
13946other properties of an individual message, because it has to be advertised in
13947the server's response to EHLO. String expansion failure causes a temporary
13948error. A value of zero means no limit, but its use is not recommended. See also
13949&%bounce_return_size_limit%&.
168e428f
PH
13950
13951Incoming SMTP messages are failed with a 552 error if the limit is
13952exceeded; locally-generated messages either get a stderr message or a delivery
9b371988
PH
13953failure message to the sender, depending on the &%-oe%& setting. Rejection of
13954an oversized message is logged in both the main and the reject logs. See also
13955the generic transport option &%message_size_limit%&, which limits the size of
168e428f
PH
13956message that an individual transport can process.
13957
13958
9b371988
PH
13959.option move_frozen_messages main boolean false
13960.cindex "frozen messages" "moving"
168e428f 13961This option, which is available only if Exim has been built with the setting
9b371988
PH
13962.code
13963SUPPORT_MOVE_FROZEN_MESSAGES=yes
13964.endd
13965in &_Local/Makefile_&, causes frozen messages and their message logs to be
13966moved from the &_input_& and &_msglog_& directories on the spool to &_Finput_&
13967and &_Fmsglog_&, respectively. There is currently no support in Exim or the
168e428f 13968standard utilities for handling such moved messages, and they do not show up in
9b371988 13969lists generated by &%-bp%& or by the Exim monitor.
168e428f 13970
168e428f 13971
9b371988 13972.option mua_wrapper main boolean false
168e428f 13973Setting this option true causes Exim to run in a very restrictive mode in which
9b371988 13974it passes messages synchronously to a smart host. Chapter &<<CHAPnonqueueing>>&
168e428f
PH
13975contains a full description of this facility.
13976
13977
13978
9b371988
PH
13979.option mysql_servers main "string list" unset
13980.cindex "MySQL" "server list"
168e428f 13981This option provides a list of MySQL servers and associated connection data, to
595028e4 13982be used in conjunction with &(mysql)& lookups (see section &<<SECID72>>&). The
168e428f
PH
13983option is available only if Exim has been built with MySQL support.
13984
13985
9b371988 13986.option never_users main "string list&!!" unset
068aaea8
PH
13987This option is expanded just once, at the start of Exim's processing. Local
13988message deliveries are normally run in processes that are setuid to the
168e428f
PH
13989recipient, and remote deliveries are normally run under Exim's own uid and gid.
13990It is usually desirable to prevent any deliveries from running as root, as a
13991safety precaution.
13992
13993When Exim is built, an option called FIXED_NEVER_USERS can be set to a
13994list of users that must not be used for local deliveries. This list is fixed in
13995the binary and cannot be overridden by the configuration file. By default, it
9b371988 13996contains just the single user name &"root"&. The &%never_users%& runtime option
168e428f
PH
13997can be used to add more users to the fixed list.
13998
13999If a message is to be delivered as one of the users on the fixed list or the
9b371988 14000&%never_users%& list, an error occurs, and delivery is deferred. A common
168e428f 14001example is
9b371988
PH
14002.code
14003never_users = root:daemon:bin
14004.endd
168e428f 14005Including root is redundant if it is also on the fixed list, but it does no
9b371988 14006harm. This option overrides the &%pipe_as_creator%& option of the &(pipe)&
168e428f
PH
14007transport driver.
14008
14009
9b371988
PH
14010.option oracle_servers main "string list" unset
14011.cindex "Oracle" "server list"
168e428f 14012This option provides a list of Oracle servers and associated connection data,
595028e4 14013to be used in conjunction with &(oracle)& lookups (see section &<<SECID72>>&).
9b371988
PH
14014The option is available only if Exim has been built with Oracle support.
14015
14016
14017.option percent_hack_domains main "domain list&!!" unset
14018.cindex "&""percent hack""&"
14019.cindex "source routing" "in email address"
14020.cindex "address" "source-routed"
14021The &"percent hack"& is the convention whereby a local part containing a
14022percent sign is re-interpreted as a new email address, with the percent
14023replaced by @. This is sometimes called &"source routing"&, though that term is
14024also applied to RFC 2822 addresses that begin with an @ character. If this
14025option is set, Exim implements the percent facility for those domains listed,
14026but no others. This happens before an incoming SMTP address is tested against
14027an ACL.
14028
14029&*Warning*&: The &"percent hack"& has often been abused by people who are
168e428f
PH
14030trying to get round relaying restrictions. For this reason, it is best avoided
14031if at all possible. Unfortunately, a number of less security-conscious MTAs
14032implement it unconditionally. If you are running Exim on a gateway host, and
14033routing mail through to internal MTAs without processing the local parts, it is
14034a good idea to reject recipient addresses with percent characters in their
14035local parts. Exim's default configuration does this.
14036
14037
9b371988 14038.option perl_at_start main boolean false
168e428f 14039This option is available only when Exim is built with an embedded Perl
9b371988 14040interpreter. See chapter &<<CHAPperl>>& for details of its use.
168e428f 14041
168e428f 14042
9b371988 14043.option perl_startup main string unset
168e428f 14044This option is available only when Exim is built with an embedded Perl
9b371988 14045interpreter. See chapter &<<CHAPperl>>& for details of its use.
168e428f
PH
14046
14047
9b371988
PH
14048.option pgsql_servers main "string list" unset
14049.cindex "PostgreSQL lookup type" "server list"
168e428f 14050This option provides a list of PostgreSQL servers and associated connection
9b371988 14051data, to be used in conjunction with &(pgsql)& lookups (see section
595028e4 14052&<<SECID72>>&). The option is available only if Exim has been built with
9b371988 14053PostgreSQL support.
168e428f 14054
168e428f 14055
9b371988
PH
14056.option pid_file_path main string&!! "set at compile time"
14057.cindex "daemon" "pid file path"
f89d2485 14058.cindex "pid file, path for"
168e428f
PH
14059This option sets the name of the file to which the Exim daemon writes its
14060process id. The string is expanded, so it can contain, for example, references
14061to the host name:
9b371988
PH
14062.code
14063pid_file_path = /var/log/$primary_hostname/exim.pid
14064.endd
14065If no path is set, the pid is written to the file &_exim-daemon.pid_& in Exim's
168e428f 14066spool directory.
9b371988
PH
14067The value set by the option can be overridden by the &%-oP%& command line
14068option. A pid file is not written if a &"non-standard"& daemon is run by means
14069of the &%-oX%& option, unless a path is explicitly supplied by &%-oP%&.
168e428f 14070
168e428f 14071
9b371988 14072.option pipelining_advertise_hosts main "host list&!!" *
f89d2485 14073.cindex "PIPELINING" "suppressing advertising"
168e428f 14074This option can be used to suppress the advertisement of the SMTP
595028e4
PH
14075PIPELINING extension to specific hosts. See also the &*no_pipelining*&
14076control in section &<<SECTcontrols>>&. When PIPELINING is not advertised and
f89d2485
PH
14077&%smtp_enforce_sync%& is true, an Exim server enforces strict synchronization
14078for each SMTP command and response. When PIPELINING is advertised, Exim assumes
14079that clients will use it; &"out of order"& commands that are &"expected"& do
14080not count as protocol errors (see &%smtp_max_synprot_errors%&).
168e428f
PH
14081
14082
9b371988
PH
14083.option preserve_message_logs main boolean false
14084.cindex "message logs" "preserving"
168e428f
PH
14085If this option is set, message log files are not deleted when messages are
14086completed. Instead, they are moved to a sub-directory of the spool directory
9b371988 14087called &_msglog.OLD_&, where they remain available for statistical or debugging
168e428f
PH
14088purposes. This is a dangerous option to set on systems with any appreciable
14089volume of mail. Use with care!
14090
14091
9b371988
PH
14092.option primary_hostname main string "see below"
14093.cindex "name" "of local host"
14094.cindex "host" "name of local"
14095.cindex "local host" "name of"
f89d2485 14096.vindex "&$primary_hostname$&"
068aaea8 14097This specifies the name of the current host. It is used in the default EHLO or
9b371988
PH
14098HELO command for outgoing SMTP messages (changeable via the &%helo_data%&
14099option in the &(smtp)& transport), and as the default for &%qualify_domain%&.
14100The value is also used by default in some SMTP response messages from an Exim
14101server. This can be changed dynamically by setting &%smtp_active_hostname%&.
14102
14103If &%primary_hostname%& is not set, Exim calls &[uname()]& to find the host
14104name. If this fails, Exim panics and dies. If the name returned by &[uname()]&
14105contains only one component, Exim passes it to &[gethostbyname()]& (or
14106&[getipnodebyname()]& when available) in order to obtain the fully qualified
14107version. The variable &$primary_hostname$& contains the host name, whether set
14108explicitly by this option, or defaulted.
14109
14110
14111.option print_topbitchars main boolean false
14112.cindex "printing characters"
14113.cindex "8-bit characters"
168e428f 14114By default, Exim considers only those characters whose codes lie in the range
9b371988 1411532&--126 to be printing characters. In a number of circumstances (for example,
168e428f 14116when writing log entries) non-printing characters are converted into escape
9b371988
PH
14117sequences, primarily to avoid messing up the layout. If &%print_topbitchars%&
14118is set, code values of 128 and above are also considered to be printing
168e428f
PH
14119characters.
14120
8c44ad5f
TF
14121This option also affects the header syntax checks performed by the
14122&(autoreply)& transport, and whether Exim uses RFC 2047 encoding of
14123the user's full name when constructing From: and Sender: addresses (as
14124described in section &<<SECTconstr>>&). Setting this option can cause
14125Exim to generate eight bit message headers that do not conform to the
14126standards.
14127
168e428f 14128
9b371988
PH
14129.option process_log_path main string unset
14130.cindex "process log path"
14131.cindex "log" "process log"
14132.cindex "&'exiwhat'&"
168e428f 14133This option sets the name of the file to which an Exim process writes its
9b371988
PH
14134&"process log"& when sent a USR1 signal. This is used by the &'exiwhat'&
14135utility script. If this option is unset, the file called &_exim-process.info_&
14136in Exim's spool directory is used. The ability to specify the name explicitly
14137can be useful in environments where two different Exims are running, using
168e428f
PH
14138different spool directories.
14139
14140
9b371988 14141.option prod_requires_admin main boolean true
f89d2485
PH
14142.oindex "&%-M%&"
14143.oindex "&%-R%&"
14144.oindex "&%-q%&"
9b371988
PH
14145The &%-M%&, &%-R%&, and &%-q%& command-line options require the caller to be an
14146admin user unless &%prod_requires_admin%& is set false. See also
14147&%queue_list_requires_admin%&.
168e428f 14148
168e428f 14149
9b371988
PH
14150.option qualify_domain main string "see below"
14151.cindex "domain" "for qualifying addresses"
14152.cindex "address" "qualification"
168e428f
PH
14153This option specifies the domain name that is added to any envelope sender
14154addresses that do not have a domain qualification. It also applies to
9b371988
PH
14155recipient addresses if &%qualify_recipient%& is not set. Unqualified addresses
14156are accepted by default only for locally-generated messages. Qualification is
14157also applied to addresses in header lines such as &'From:'& and &'To:'& for
14158locally-generated messages, unless the &%-bnq%& command line option is used.
168e428f
PH
14159
14160Messages from external sources must always contain fully qualified addresses,
9b371988
PH
14161unless the sending host matches &%sender_unqualified_hosts%& or
14162&%recipient_unqualified_hosts%& (as appropriate), in which case incoming
14163addresses are qualified with &%qualify_domain%& or &%qualify_recipient%& as
168e428f 14164necessary. Internally, Exim always works with fully qualified envelope
9b371988
PH
14165addresses. If &%qualify_domain%& is not set, it defaults to the
14166&%primary_hostname%& value.
168e428f
PH
14167
14168
9b371988 14169.option qualify_recipient main string "see below"
168e428f 14170This option allows you to specify a different domain for qualifying recipient
9b371988 14171addresses to the one that is used for senders. See &%qualify_domain%& above.
168e428f
PH
14172
14173
168e428f 14174
9b371988
PH
14175.option queue_domains main "domain list&!!" unset
14176.cindex "domain" "specifying non-immediate delivery"
14177.cindex "queueing incoming messages"
14178.cindex "message" "queueing certain domains"
168e428f
PH
14179This option lists domains for which immediate delivery is not required.
14180A delivery process is started whenever a message is received, but only those
14181domains that do not match are processed. All other deliveries wait until the
9b371988 14182next queue run. See also &%hold_domains%& and &%queue_smtp_domains%&.
168e428f 14183
168e428f 14184
9b371988 14185.option queue_list_requires_admin main boolean true
f89d2485 14186.oindex "&%-bp%&"
9b371988
PH
14187The &%-bp%& command-line option, which lists the messages that are on the
14188queue, requires the caller to be an admin user unless
14189&%queue_list_requires_admin%& is set false. See also &%prod_requires_admin%&.
168e428f
PH
14190
14191
9b371988
PH
14192.option queue_only main boolean false
14193.cindex "queueing incoming messages"
14194.cindex "message" "queueing unconditionally"
14195If &%queue_only%& is set, a delivery process is not automatically started
168e428f 14196whenever a message is received. Instead, the message waits on the queue for the
9b371988 14197next queue run. Even if &%queue_only%& is false, incoming messages may not get
168e428f
PH
14198delivered immediately when certain conditions (such as heavy load) occur.
14199
9b371988
PH
14200The &%-odq%& command line has the same effect as &%queue_only%&. The &%-odb%&
14201and &%-odi%& command line options override &%queue_only%& unless
14202&%queue_only_override%& is set false. See also &%queue_only_file%&,
14203&%queue_only_load%&, and &%smtp_accept_queue%&.
168e428f 14204
168e428f 14205
9b371988
PH
14206.option queue_only_file main string unset
14207.cindex "queueing incoming messages"
14208.cindex "message" "queueing by file existence"
168e428f 14209This option can be set to a colon-separated list of absolute path names, each
9b371988
PH
14210one optionally preceded by &"smtp"&. When Exim is receiving a message,
14211it tests for the existence of each listed path using a call to &[stat()]&. For
f89d2485 14212each path that exists, the corresponding queueing option is set.
9b371988
PH
14213For paths with no prefix, &%queue_only%& is set; for paths prefixed by
14214&"smtp"&, &%queue_smtp_domains%& is set to match all domains. So, for example,
14215.code
14216queue_only_file = smtp/some/file
14217.endd
14218causes Exim to behave as if &%queue_smtp_domains%& were set to &"*"& whenever
14219&_/some/file_& exists.
14220
14221
14222.option queue_only_load main fixed-point unset
14223.cindex "load average"
14224.cindex "queueing incoming messages"
14225.cindex "message" "queueing by load"
168e428f
PH
14226If the system load average is higher than this value, incoming messages from
14227all sources are queued, and no automatic deliveries are started. If this
595028e4
PH
14228happens during local or remote SMTP input, all subsequent messages received on
14229the same SMTP connection are queued by default, whatever happens to the load in
14230the meantime, but this can be changed by setting &%queue_only_load_latch%&
14231false.
595028e4
PH
14232
14233Deliveries will subsequently be performed by queue runner processes. This
14234option has no effect on ancient operating systems on which Exim cannot
14235determine the load average. See also &%deliver_queue_load_max%& and
14236&%smtp_load_reserve%&.
14237
14238
595028e4
PH
14239.option queue_only_load_latch main boolean true
14240.cindex "load average" "re-evaluating per message"
14241When this option is true (the default), once one message has been queued
14242because the load average is higher than the value set by &%queue_only_load%&,
14243all subsequent messages received on the same SMTP connection are also queued.
14244This is a deliberate choice; even though the load average may fall below the
14245threshold, it doesn't seem right to deliver later messages on the same
14246connection when not delivering earlier ones. However, there are special
14247circumstances such as very long-lived connections from scanning appliances
14248where this is not the best strategy. In such cases, &%queue_only_load_latch%&
14249should be set false. This causes the value of the load average to be
14250re-evaluated for each message.
168e428f 14251
168e428f 14252
9b371988
PH
14253.option queue_only_override main boolean true
14254.cindex "queueing incoming messages"
14255When this option is true, the &%-od%&&'x'& command line options override the
14256setting of &%queue_only%& or &%queue_only_file%& in the configuration file. If
14257&%queue_only_override%& is set false, the &%-od%&&'x'& options cannot be used
14258to override; they are accepted, but ignored.
168e428f
PH
14259
14260
9b371988
PH
14261.option queue_run_in_order main boolean false
14262.cindex "queue runner" "processing messages in order"
168e428f
PH
14263If this option is set, queue runs happen in order of message arrival instead of
14264in an arbitrary order. For this to happen, a complete list of the entire queue
14265must be set up before the deliveries start. When the queue is all held in a
c0712871
PH
14266single directory (the default), a single list is created for both the ordered
14267and the non-ordered cases. However, if &%split_spool_directory%& is set, a
14268single list is not created when &%queue_run_in_order%& is false. In this case,
14269the sub-directories are processed one at a time (in a random order), and this
14270avoids setting up one huge list for the whole queue. Thus, setting
14271&%queue_run_in_order%& with &%split_spool_directory%& may degrade performance
14272when the queue is large, because of the extra work in setting up the single,
14273large list. In most situations, &%queue_run_in_order%& should not be set.
168e428f
PH
14274
14275
168e428f 14276
9b371988
PH
14277.option queue_run_max main integer 5
14278.cindex "queue runner" "maximum number of"
168e428f
PH
14279This controls the maximum number of queue runner processes that an Exim daemon
14280can run simultaneously. This does not mean that it starts them all at once,
14281but rather that if the maximum number are still running when the time comes to
14282start another one, it refrains from starting another one. This can happen with
14283very large queues and/or very sluggish deliveries. This option does not,
14284however, interlock with other processes, so additional queue runners can be
14285started by other means, or by killing and restarting the daemon.
14286
068aaea8
PH
14287Setting this option to zero does not suppress queue runs; rather, it disables
14288the limit, allowing any number of simultaneous queue runner processes to be
9b371988
PH
14289run. If you do not want queue runs to occur, omit the &%-q%&&'xx'& setting on
14290the daemon's command line.
168e428f 14291
9b371988
PH
14292.option queue_smtp_domains main "domain list&!!" unset
14293.cindex "queueing incoming messages"
14294.cindex "message" "queueing remote deliveries"
168e428f
PH
14295When this option is set, a delivery process is started whenever a message is
14296received, routing is performed, and local deliveries take place.
14297However, if any SMTP deliveries are required for domains that match
9b371988 14298&%queue_smtp_domains%&, they are not immediately delivered, but instead the
168e428f
PH
14299message waits on the queue for the next queue run. Since routing of the message
14300has taken place, Exim knows to which remote hosts it must be delivered, and so
14301when the queue run happens, multiple messages for the same host are delivered
9b371988
PH
14302over a single SMTP connection. The &%-odqs%& command line option causes all
14303SMTP deliveries to be queued in this way, and is equivalent to setting
14304&%queue_smtp_domains%& to &"*"&. See also &%hold_domains%& and
14305&%queue_domains%&.
168e428f 14306
168e428f 14307
9b371988
PH
14308.option receive_timeout main time 0s
14309.cindex "timeout" "for non-SMTP input"
168e428f
PH
14310This option sets the timeout for accepting a non-SMTP message, that is, the
14311maximum time that Exim waits when reading a message on the standard input. If
14312the value is zero, it will wait for ever. This setting is overridden by the
9b371988
PH
14313&%-or%& command line option. The timeout for incoming SMTP messages is
14314controlled by &%smtp_receive_timeout%&.
168e428f 14315
9b371988
PH
14316.option received_header_text main string&!! "see below"
14317.cindex "customizing" "&'Received:'& header"
14318.cindex "&'Received:'& header line" "customizing"
14319This string defines the contents of the &'Received:'& message header that is
168e428f
PH
14320added to each message, except for the timestamp, which is automatically added
14321on at the end (preceded by a semicolon). The string is expanded each time it is
9b371988 14322used. If the expansion yields an empty string, no &'Received:'& header line is
168e428f 14323added to the message. Otherwise, the string should start with the text
9b371988
PH
14324&"Received:"& and conform to the RFC 2822 specification for &'Received:'&
14325header lines. The default setting is:
168e428f 14326
9b371988 14327.code
168e428f 14328received_header_text = Received: \
d1e83bff 14329 ${if def:sender_rcvhost {from $sender_rcvhost\n\t}\
9b371988 14330 {${if def:sender_ident \
4f578862 14331 {from ${quote_local_part:$sender_ident} }}\
d1e83bff
PH
14332 ${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}\
14333 by $primary_hostname \
14334 ${if def:received_protocol {with $received_protocol}} \
14335 ${if def:tls_cipher {($tls_cipher)\n\t}}\
14336 (Exim $version_number)\n\t\
9b371988
PH
14337 ${if def:sender_address \
14338 {(envelope-from <$sender_address>)\n\t}}\
d1e83bff
PH
14339 id $message_exim_id\
14340 ${if def:received_for {\n\tfor $received_for}}
9b371988 14341.endd
168e428f 14342
d1e83bff
PH
14343The reference to the TLS cipher is omitted when Exim is built without TLS
14344support. The use of conditional expansions ensures that this works for both
14345locally generated messages and messages received from remote hosts, giving
14346header lines such as the following:
9b371988
PH
14347.code
14348Received: from scrooge.carol.example ([192.168.12.25] ident=root)
14349by marley.carol.example with esmtp (Exim 4.00)
14350(envelope-from <bob@carol.example>)
14351id 16IOWa-00019l-00
14352for chas@dickens.example; Tue, 25 Dec 2001 14:43:44 +0000
14353Received: by scrooge.carol.example with local (Exim 4.00)
14354id 16IOWW-000083-00; Tue, 25 Dec 2001 14:43:41 +0000
14355.endd
168e428f
PH
14356Until the body of the message has been received, the timestamp is the time when
14357the message started to be received. Once the body has arrived, and all policy
14358checks have taken place, the timestamp is updated to the time at which the
14359message was accepted.
14360
14361
9b371988
PH
14362.option received_headers_max main integer 30
14363.cindex "loop" "prevention"
14364.cindex "mail loop prevention"
14365.cindex "&'Received:'& header line" "counting"
14366When a message is to be delivered, the number of &'Received:'& headers is
168e428f
PH
14367counted, and if it is greater than this parameter, a mail loop is assumed to
14368have occurred, the delivery is abandoned, and an error message is generated.
14369This applies to both local and remote deliveries.
14370
14371
9b371988
PH
14372.option recipient_unqualified_hosts main "host list&!!" unset
14373.cindex "unqualified addresses"
14374.cindex "host" "unqualified addresses from"
168e428f
PH
14375This option lists those hosts from which Exim is prepared to accept unqualified
14376recipient addresses in message envelopes. The addresses are made fully
9b371988 14377qualified by the addition of the &%qualify_recipient%& value. This option also
168e428f
PH
14378affects message header lines. Exim does not reject unqualified recipient
14379addresses in headers, but it qualifies them only if the message came from a
9b371988
PH
14380host that matches &%recipient_unqualified_hosts%&,
14381or if the message was submitted locally (not using TCP/IP), and the &%-bnq%&
168e428f
PH
14382option was not set.
14383
14384
9b371988
PH
14385.option recipients_max main integer 0
14386.cindex "limit" "number of recipients"
14387.cindex "recipient" "maximum number"
168e428f
PH
14388If this option is set greater than zero, it specifies the maximum number of
14389original recipients for any message. Additional recipients that are generated
14390by aliasing or forwarding do not count. SMTP messages get a 452 response for
14391all recipients over the limit; earlier recipients are delivered as normal.
14392Non-SMTP messages with too many recipients are failed, and no deliveries are
14393done.
14394
9b371988
PH
14395.cindex "RCPT" "maximum number of incoming"
14396&*Note*&: The RFCs specify that an SMTP server should accept at least 100
168e428f
PH
14397RCPT commands in a single message.
14398
14399
9b371988 14400.option recipients_max_reject main boolean false
168e428f
PH
14401If this option is set true, Exim rejects SMTP messages containing too many
14402recipients by giving 552 errors to the surplus RCPT commands, and a 554
14403error to the eventual DATA command. Otherwise (the default) it gives a 452
14404error to the surplus RCPT commands and accepts the message on behalf of the
14405initial set of recipients. The remote server should then re-send the message
14406for the remaining recipients at a later time.
14407
14408
9b371988
PH
14409.option remote_max_parallel main integer 2
14410.cindex "delivery" "parallelism for remote"
168e428f
PH
14411This option controls parallel delivery of one message to a number of remote
14412hosts. If the value is less than 2, parallel delivery is disabled, and Exim
14413does all the remote deliveries for a message one by one. Otherwise, if a single
14414message has to be delivered to more than one remote host, or if several copies
9b371988
PH
14415have to be sent to the same remote host, up to &%remote_max_parallel%&
14416deliveries are done simultaneously. If more than &%remote_max_parallel%&
168e428f
PH
14417deliveries are required, the maximum number of processes are started, and as
14418each one finishes, another is begun. The order of starting processes is the
14419same as if sequential delivery were being done, and can be controlled by the
9b371988 14420&%remote_sort_domains%& option. If parallel delivery takes place while running
168e428f
PH
14421with debugging turned on, the debugging output from each delivery process is
14422tagged with its process id.
14423
14424This option controls only the maximum number of parallel deliveries for one
14425message in one Exim delivery process. Because Exim has no central queue
14426manager, there is no way of controlling the total number of simultaneous
14427deliveries if the configuration allows a delivery attempt as soon as a message
14428is received.
14429
9b371988
PH
14430.cindex "number of deliveries"
14431.cindex "delivery" "maximum number of"
168e428f 14432If you want to control the total number of deliveries on the system, you
9b371988 14433need to set the &%queue_only%& option. This ensures that all incoming messages
168e428f
PH
14434are added to the queue without starting a delivery process. Then set up an Exim
14435daemon to start queue runner processes at appropriate intervals (probably
14436fairly often, for example, every minute), and limit the total number of queue
9b371988 14437runners by setting the &%queue_run_max%& parameter. Because each queue runner
168e428f 14438delivers only one message at a time, the maximum number of deliveries that can
9b371988
PH
14439then take place at once is &%queue_run_max%& multiplied by
14440&%remote_max_parallel%&.
168e428f
PH
14441
14442If it is purely remote deliveries you want to control, use
9b371988 14443&%queue_smtp_domains%& instead of &%queue_only%&. This has the added benefit of
f89d2485 14444doing the SMTP routing before queueing, so that several messages for the same
168e428f
PH
14445host will eventually get delivered down the same connection.
14446
14447
9b371988
PH
14448.option remote_sort_domains main "domain list&!!" unset
14449.cindex "sorting remote deliveries"
14450.cindex "delivery" "sorting remote"
168e428f
PH
14451When there are a number of remote deliveries for a message, they are sorted by
14452domain into the order given by this list. For example,
9b371988
PH
14453.code
14454remote_sort_domains = *.cam.ac.uk:*.uk
14455.endd
14456would attempt to deliver to all addresses in the &'cam.ac.uk'& domain first,
14457then to those in the &%uk%& domain, then to any others.
168e428f 14458
168e428f 14459
9b371988
PH
14460.option retry_data_expire main time 7d
14461.cindex "hints database" "data expiry"
14462This option sets a &"use before"& time on retry information in Exim's hints
168e428f
PH
14463database. Any older retry data is ignored. This means that, for example, once a
14464host has not been tried for 7 days, Exim behaves as if it has no knowledge of
14465past failures.
14466
14467
9b371988
PH
14468.option retry_interval_max main time 24h
14469.cindex "retry" "limit on interval"
14470.cindex "limit" "on retry interval"
14471Chapter &<<CHAPretry>>& describes Exim's mechanisms for controlling the
14472intervals between delivery attempts for messages that cannot be delivered
14473straight away. This option sets an overall limit to the length of time between
4f578862
PH
14474retries. It cannot be set greater than 24 hours; any attempt to do so forces
14475the default value.
168e428f
PH
14476
14477
9b371988
PH
14478.option return_path_remove main boolean true
14479.cindex "&'Return-path:'& header line" "removing"
14480RFC 2821, section 4.4, states that an SMTP server must insert a
14481&'Return-path:'& header line into a message when it makes a &"final delivery"&.
14482The &'Return-path:'& header preserves the sender address as received in the
14483MAIL command. This description implies that this header should not be present
14484in an incoming message. If &%return_path_remove%& is true, any existing
14485&'Return-path:'& headers are removed from messages at the time they are
14486received. Exim's transports have options for adding &'Return-path:'& headers at
14487the time of delivery. They are normally used only for final local deliveries.
168e428f 14488
168e428f 14489
9b371988
PH
14490.option return_size_limit main integer 100K
14491This option is an obsolete synonym for &%bounce_return_size_limit%&.
168e428f 14492
168e428f 14493
9b371988
PH
14494.option rfc1413_hosts main "host list&!!" *
14495.cindex "RFC 1413"
14496.cindex "host" "for RFC 1413 calls"
168e428f
PH
14497RFC 1413 identification calls are made to any client host which matches an item
14498in the list.
14499
4f578862 14500.option rfc1413_query_timeout main time 5s
9b371988
PH
14501.cindex "RFC 1413" "query timeout"
14502.cindex "timeout" "for RFC 1413 call"
168e428f
PH
14503This sets the timeout on RFC 1413 identification calls. If it is set to zero,
14504no RFC 1413 calls are ever made.
14505
14506
9b371988
PH
14507.option sender_unqualified_hosts main "host list&!!" unset
14508.cindex "unqualified addresses"
14509.cindex "host" "unqualified addresses from"
168e428f
PH
14510This option lists those hosts from which Exim is prepared to accept unqualified
14511sender addresses. The addresses are made fully qualified by the addition of
9b371988
PH
14512&%qualify_domain%&. This option also affects message header lines. Exim does
14513not reject unqualified addresses in headers that contain sender addresses, but
14514it qualifies them only if the message came from a host that matches
14515&%sender_unqualified_hosts%&, or if the message was submitted locally (not
14516using TCP/IP), and the &%-bnq%& option was not set.
168e428f
PH
14517
14518
9b371988
PH
14519.option smtp_accept_keepalive main boolean true
14520.cindex "keepalive" "on incoming connection"
168e428f
PH
14521This option controls the setting of the SO_KEEPALIVE option on incoming
14522TCP/IP socket connections. When set, it causes the kernel to probe idle
9b371988 14523connections periodically, by sending packets with &"old"& sequence numbers. The
f89d2485 14524other end of the connection should send an acknowledgment if the connection is
168e428f
PH
14525still okay or a reset if the connection has been aborted. The reason for doing
14526this is that it has the beneficial effect of freeing up certain types of
14527connection that can get stuck when the remote host is disconnected without
14528tidying up the TCP/IP call properly. The keepalive mechanism takes several
14529hours to detect unreachable hosts.
14530
14531
14532
9b371988
PH
14533.option smtp_accept_max main integer 20
14534.cindex "limit" "incoming SMTP connections"
14535.cindex "SMTP" "incoming connection count"
14536.cindex "inetd"
168e428f
PH
14537This option specifies the maximum number of simultaneous incoming SMTP calls
14538that Exim will accept. It applies only to the listening daemon; there is no
9b371988
PH
14539control (in Exim) when incoming SMTP is being handled by &'inetd'&. If the
14540value is set to zero, no limit is applied. However, it is required to be
14541non-zero if either &%smtp_accept_max_per_host%& or &%smtp_accept_queue%& is
f89d2485 14542set. See also &%smtp_accept_reserve%& and &%smtp_load_reserve%&.
168e428f 14543
f89d2485
PH
14544A new SMTP connection is immediately rejected if the &%smtp_accept_max%& limit
14545has been reached. If not, Exim first checks &%smtp_accept_max_per_host%&. If
14546that limit has not been reached for the client host, &%smtp_accept_reserve%&
14547and &%smtp_load_reserve%& are then checked before accepting the connection.
168e428f 14548
168e428f 14549
9b371988
PH
14550.option smtp_accept_max_nonmail main integer 10
14551.cindex "limit" "non-mail SMTP commands"
14552.cindex "SMTP" "limiting non-mail commands"
14553Exim counts the number of &"non-mail"& commands in an SMTP session, and drops
14554the connection if there are too many. This option defines &"too many"&. The
14555check catches some denial-of-service attacks, repeated failing AUTHs, or a mad
168e428f 14556client looping sending EHLO, for example. The check is applied only if the
9b371988 14557client host matches &%smtp_accept_max_nonmail_hosts%&.
168e428f
PH
14558
14559When a new message is expected, one occurrence of RSET is not counted. This
14560allows a client to send one RSET between messages (this is not necessary,
f89d2485 14561but some clients do it). Exim also allows one uncounted occurrence of HELO
168e428f
PH
14562or EHLO, and one occurrence of STARTTLS between messages. After
14563starting up a TLS session, another EHLO is expected, and so it too is not
14564counted. The first occurrence of AUTH in a connection, or immediately
14565following STARTTLS is not counted. Otherwise, all commands other than
14566MAIL, RCPT, DATA, and QUIT are counted.
14567
14568
9b371988
PH
14569.option smtp_accept_max_nonmail_hosts main "host list&!!" *
14570You can control which hosts are subject to the &%smtp_accept_max_nonmail%&
168e428f
PH
14571check by setting this option. The default value makes it apply to all hosts. By
14572changing the value, you can exclude any badly-behaved hosts that you have to
14573live with.
14574
14575
0a4e3112
PH
14576. Allow this long option name to split; give it unsplit as a fifth argument
14577. for the automatic .oindex that is generated by .option.
168e428f 14578
0a4e3112
PH
14579.option "smtp_accept_max_per_ &~&~connection" main integer 1000 &&&
14580 smtp_accept_max_per_connection
f89d2485 14581.cindex "SMTP" "limiting incoming message count"
9b371988 14582.cindex "limit" "messages per SMTP connection"
168e428f
PH
14583The value of this option limits the number of MAIL commands that Exim is
14584prepared to accept over a single SMTP connection, whether or not each command
14585results in the transfer of a message. After the limit is reached, a 421
14586response is given to subsequent MAIL commands. This limit is a safety
14587precaution against a client that goes mad (incidents of this type have been
14588seen).
14589
14590
9b371988
PH
14591.option smtp_accept_max_per_host main string&!! unset
14592.cindex "limit" "SMTP connections from one host"
14593.cindex "host" "limiting SMTP connections from"
168e428f
PH
14594This option restricts the number of simultaneous IP connections from a single
14595host (strictly, from a single IP address) to the Exim daemon. The option is
14596expanded, to enable different limits to be applied to different hosts by
9b371988 14597reference to &$sender_host_address$&. Once the limit is reached, additional
f89d2485
PH
14598connection attempts from the same host are rejected with error code 421. This
14599is entirely independent of &%smtp_accept_reserve%&. The option's default value
14600of zero imposes no limit. If this option is set greater than zero, it is
14601required that &%smtp_accept_max%& be non-zero.
168e428f 14602
9b371988 14603&*Warning*&: When setting this option you should not use any expansion
168e428f
PH
14604constructions that take an appreciable amount of time. The expansion and test
14605happen in the main daemon loop, in order to reject additional connections
14606without forking additional processes (otherwise a denial-of-service attack
14607could cause a vast number or processes to be created). While the daemon is
14608doing this processing, it cannot accept any other incoming connections.
14609
14610
14611
9b371988
PH
14612.option smtp_accept_queue main integer 0
14613.cindex "SMTP" "incoming connection count"
14614.cindex "queueing incoming messages"
14615.cindex "message" "queueing by SMTP connection count"
595028e4
PH
14616If the number of simultaneous incoming SMTP connections being handled via the
14617listening daemon exceeds this value, messages received by SMTP are just placed
14618on the queue; no delivery processes are started automatically. The count is
14619fixed at the start of an SMTP connection. It cannot be updated in the
14620subprocess that receives messages, and so the queueing or not queueing applies
14621to all messages received in the same connection.
595028e4
PH
14622
14623A value of zero implies no limit, and clearly any non-zero value is useful only
14624if it is less than the &%smtp_accept_max%& value (unless that is zero). See
14625also &%queue_only%&, &%queue_only_load%&, &%queue_smtp_domains%&, and the
14626various &%-od%&&'x'& command line options.
168e428f 14627
168e428f 14628
0a4e3112
PH
14629. Allow this long option name to split; give it unsplit as a fifth argument
14630. for the automatic .oindex that is generated by .option.
f89d2485 14631
0a4e3112
PH
14632.option "smtp_accept_queue_per_ &~&~connection" main integer 10 &&&
14633 smtp_accept_queue_per_connection
9b371988
PH
14634.cindex "queueing incoming messages"
14635.cindex "message" "queueing by message count"
168e428f
PH
14636This option limits the number of delivery processes that Exim starts
14637automatically when receiving messages via SMTP, whether via the daemon or by
9b371988 14638the use of &%-bs%& or &%-bS%&. If the value of the option is greater than zero,
168e428f
PH
14639and the number of messages received in a single SMTP session exceeds this
14640number, subsequent messages are placed on the queue, but no delivery processes
14641are started. This helps to limit the number of Exim processes when a server
14642restarts after downtime and there is a lot of mail waiting for it on other
14643systems. On large systems, the default should probably be increased, and on
14644dial-in client systems it should probably be set to zero (that is, disabled).
14645
14646
9b371988
PH
14647.option smtp_accept_reserve main integer 0
14648.cindex "SMTP" "incoming call count"
14649.cindex "host" "reserved"
14650When &%smtp_accept_max%& is set greater than zero, this option specifies a
168e428f 14651number of SMTP connections that are reserved for connections from the hosts
9b371988
PH
14652that are specified in &%smtp_reserve_hosts%&. The value set in
14653&%smtp_accept_max%& includes this reserve pool. The specified hosts are not
168e428f 14654restricted to this number of connections; the option specifies a minimum number
f89d2485 14655of connection slots for them, not a maximum. It is a guarantee that this group
595028e4
PH
14656of hosts can always get at least &%smtp_accept_reserve%& connections. However,
14657the limit specified by &%smtp_accept_max_per_host%& is still applied to each
14658individual host.
168e428f 14659
9b371988 14660For example, if &%smtp_accept_max%& is set to 50 and &%smtp_accept_reserve%& is
168e428f 14661set to 5, once there are 45 active connections (from any hosts), new
f89d2485 14662connections are accepted only from hosts listed in &%smtp_reserve_hosts%&,
595028e4 14663provided the other criteria for acceptance are met.
168e428f
PH
14664
14665
9b371988
PH
14666.option smtp_active_hostname main string&!! unset
14667.cindex "host" "name in SMTP responses"
14668.cindex "SMTP" "host name in responses"
f89d2485 14669.vindex "&$primary_hostname$&"
168e428f 14670This option is provided for multi-homed servers that want to masquerade as
3cb1b51e
PH
14671several different hosts. At the start of an incoming SMTP connection, its value
14672is expanded and used instead of the value of &$primary_hostname$& in SMTP
168e428f
PH
14673responses. For example, it is used as domain name in the response to an
14674incoming HELO or EHLO command.
14675
f89d2485 14676.vindex "&$smtp_active_hostname$&"
3cb1b51e
PH
14677The active hostname is placed in the &$smtp_active_hostname$& variable, which
14678is saved with any messages that are received. It is therefore available for use
14679in routers and transports when the message is later delivered.
168e428f
PH
14680
14681If this option is unset, or if its expansion is forced to fail, or if the
9b371988 14682expansion results in an empty string, the value of &$primary_hostname$& is
168e428f
PH
14683used. Other expansion failures cause a message to be written to the main and
14684panic logs, and the SMTP command receives a temporary error. Typically, the
9b371988 14685value of &%smtp_active_hostname%& depends on the incoming interface address.
168e428f 14686For example:
9b371988 14687.code
3cb1b51e 14688smtp_active_hostname = ${if eq{$received_ip_address}{10.0.0.1}\
168e428f 14689 {cox.mydomain}{box.mydomain}}
9b371988 14690.endd
168e428f 14691
3cb1b51e
PH
14692Although &$smtp_active_hostname$& is primarily concerned with incoming
14693messages, it is also used as the default for HELO commands in callout
14694verification if there is no remote transport from which to obtain a
14695&%helo_data%& value.
3cb1b51e 14696
9b371988
PH
14697.option smtp_banner main string&!! "see below"
14698.cindex "SMTP" "welcome banner"
14699.cindex "banner for SMTP"
14700.cindex "welcome banner for SMTP"
14701.cindex "customizing" "SMTP banner"
168e428f
PH
14702This string, which is expanded every time it is used, is output as the initial
14703positive response to an SMTP connection. The default setting is:
9b371988 14704.code
168e428f
PH
14705smtp_banner = $smtp_active_hostname ESMTP Exim \
14706 $version_number $tod_full
9b371988 14707.endd
168e428f 14708Failure to expand the string causes a panic error. If you want to create a
9b371988 14709multiline response to the initial SMTP connection, use &"\n"& in the string at
168e428f
PH
14710appropriate points, but not at the end. Note that the 220 code is not included
14711in this string. Exim adds it automatically (several times in the case of a
14712multiline response).
14713
14714
9b371988
PH
14715.option smtp_check_spool_space main boolean true
14716.cindex "checking disk space"
f89d2485 14717.cindex "disk space, checking"
9b371988 14718.cindex "spool directory" "checking space"
168e428f
PH
14719When this option is set, if an incoming SMTP session encounters the SIZE
14720option on a MAIL command, it checks that there is enough space in the
14721spool directory's partition to accept a message of that size, while still
9b371988 14722leaving free the amount specified by &%check_spool_space%& (even if that value
168e428f
PH
14723is zero). If there isn't enough space, a temporary error code is returned.
14724
14725
9b371988
PH
14726.option smtp_connect_backlog main integer 20
14727.cindex "connection backlog"
14728.cindex "SMTP" "connection backlog"
14729.cindex "backlog of connections"
168e428f
PH
14730This option specifies a maximum number of waiting SMTP connections. Exim passes
14731this value to the TCP/IP system when it sets up its listener. Once this number
14732of connections are waiting for the daemon's attention, subsequent connection
14733attempts are refused at the TCP/IP level. At least, that is what the manuals
14734say; in some circumstances such connection attempts have been observed to time
14735out instead. For large systems it is probably a good idea to increase the
14736value (to 50, say). It also gives some protection against denial-of-service
14737attacks by SYN flooding.
14738
14739
9b371988
PH
14740.option smtp_enforce_sync main boolean true
14741.cindex "SMTP" "synchronization checking"
14742.cindex "synchronization checking in SMTP"
168e428f
PH
14743The SMTP protocol specification requires the client to wait for a response from
14744the server at certain points in the dialogue. Without PIPELINING these
14745synchronization points are after every command; with PIPELINING they are
14746fewer, but they still exist.
14747
14748Some spamming sites send out a complete set of SMTP commands without waiting
14749for any response. Exim protects against this by rejecting a message if the
9b371988
PH
14750client has sent further input when it should not have. The error response &"554
14751SMTP synchronization error"& is sent, and the connection is dropped. Testing
14752for this error cannot be perfect because of transmission delays (unexpected
14753input may be on its way but not yet received when Exim checks). However, it
14754does detect many instances.
168e428f 14755
9b371988 14756The check can be globally disabled by setting &%smtp_enforce_sync%& false.
168e428f 14757If you want to disable the check selectively (for example, only for certain
9b371988
PH
14758hosts), you can do so by an appropriate use of a &%control%& modifier in an ACL
14759(see section &<<SECTcontrols>>&). See also &%pipelining_advertise_hosts%&.
168e428f
PH
14760
14761
14762
9b371988
PH
14763.option smtp_etrn_command main string&!! unset
14764.cindex "ETRN" "command to be run"
f89d2485 14765.vindex "&$domain$&"
168e428f
PH
14766If this option is set, the given command is run whenever an SMTP ETRN
14767command is received from a host that is permitted to issue such commands (see
9b371988
PH
14768chapter &<<CHAPACL>>&). The string is split up into separate arguments which
14769are independently expanded. The expansion variable &$domain$& is set to the
168e428f
PH
14770argument of the ETRN command, and no syntax checking is done on it. For
14771example:
9b371988
PH
14772.code
14773smtp_etrn_command = /etc/etrn_command $domain \
14774 $sender_host_address
14775.endd
168e428f
PH
14776A new process is created to run the command, but Exim does not wait for it to
14777complete. Consequently, its status cannot be checked. If the command cannot be
14778run, a line is written to the panic log, but the ETRN caller still receives
14779a 250 success response. Exim is normally running under its own uid when
14780receiving SMTP, so it is not possible for it to change the uid before running
14781the command.
14782
14783
9b371988
PH
14784.option smtp_etrn_serialize main boolean true
14785.cindex "ETRN" "serializing"
168e428f
PH
14786When this option is set, it prevents the simultaneous execution of more than
14787one identical command as a result of ETRN in an SMTP connection. See
9b371988 14788section &<<SECTETRN>>& for details.
168e428f 14789
168e428f 14790
9b371988
PH
14791.option smtp_load_reserve main fixed-point unset
14792.cindex "load average"
168e428f 14793If the system load average ever gets higher than this, incoming SMTP calls are
9b371988
PH
14794accepted only from those hosts that match an entry in &%smtp_reserve_hosts%&.
14795If &%smtp_reserve_hosts%& is not set, no incoming SMTP calls are accepted when
168e428f
PH
14796the load is over the limit. The option has no effect on ancient operating
14797systems on which Exim cannot determine the load average. See also
9b371988 14798&%deliver_queue_load_max%& and &%queue_only_load%&.
168e428f
PH
14799
14800
14801
9b371988
PH
14802.option smtp_max_synprot_errors main integer 3
14803.cindex "SMTP" "limiting syntax and protocol errors"
14804.cindex "limit" "SMTP syntax and protocol errors"
168e428f
PH
14805Exim rejects SMTP commands that contain syntax or protocol errors. In
14806particular, a syntactically invalid email address, as in this command:
9b371988
PH
14807.code
14808RCPT TO:<abc xyz@a.b.c>
14809.endd
168e428f
PH
14810causes immediate rejection of the command, before any other tests are done.
14811(The ACL cannot be run if there is no valid address to set up for it.) An
14812example of a protocol error is receiving RCPT before MAIL. If there are
14813too many syntax or protocol errors in one SMTP session, the connection is
14814dropped. The limit is set by this option.
14815
9b371988 14816.cindex "PIPELINING" "expected errors"
168e428f 14817When the PIPELINING extension to SMTP is in use, some protocol errors are
9b371988 14818&"expected"&, for instance, a RCPT command after a rejected MAIL command.
168e428f 14819Exim assumes that PIPELINING will be used if it advertises it (see
9b371988 14820&%pipelining_advertise_hosts%&), and in this situation, &"expected"& errors do
168e428f
PH
14821not count towards the limit.
14822
14823
14824
9b371988
PH
14825.option smtp_max_unknown_commands main integer 3
14826.cindex "SMTP" "limiting unknown commands"
14827.cindex "limit" "unknown SMTP commands"
168e428f
PH
14828If there are too many unrecognized commands in an incoming SMTP session, an
14829Exim server drops the connection. This is a defence against some kinds of abuse
14830that subvert web
14831clients
14832into making connections to SMTP ports; in these circumstances, a number of
14833non-SMTP command lines are sent first.
14834
14835
14836
9b371988
PH
14837.option smtp_ratelimit_hosts main "host list&!!" unset
14838.cindex "SMTP" "rate limiting"
14839.cindex "limit" "rate of message arrival"
14840.cindex "RCPT" "rate limiting"
168e428f
PH
14841Some sites find it helpful to be able to limit the rate at which certain hosts
14842can send them messages, and the rate at which an individual message can specify
9b371988
PH
14843recipients.
14844
9b371988
PH
14845Exim has two rate-limiting facilities. This section describes the older
14846facility, which can limit rates within a single connection. The newer
14847&%ratelimit%& ACL condition can limit rates across all connections. See section
14848&<<SECTratelimiting>>& for details of the newer facility.
9b371988
PH
14849
14850When a host matches &%smtp_ratelimit_hosts%&, the values of
14851&%smtp_ratelimit_mail%& and &%smtp_ratelimit_rcpt%& are used to control the
168e428f
PH
14852rate of acceptance of MAIL and RCPT commands in a single SMTP session,
14853respectively. Each option, if set, must contain a set of four comma-separated
14854values:
14855
9b371988
PH
14856.ilist
14857A threshold, before which there is no rate limiting.
14858.next
14859An initial time delay. Unlike other times in Exim, numbers with decimal
168e428f 14860fractional parts are allowed here.
9b371988
PH
14861.next
14862A factor by which to increase the delay each time.
14863.next
14864A maximum value for the delay. This should normally be less than 5 minutes,
168e428f 14865because after that time, the client is liable to timeout the SMTP command.
9b371988 14866.endlist
168e428f
PH
14867
14868For example, these settings have been used successfully at the site which
14869first suggested this feature, for controlling mail from their customers:
9b371988
PH
14870.code
14871smtp_ratelimit_mail = 2,0.5s,1.05,4m
14872smtp_ratelimit_rcpt = 4,0.25s,1.015,4m
14873.endd
168e428f
PH
14874The first setting specifies delays that are applied to MAIL commands after
14875two have been received over a single connection. The initial delay is 0.5
14876seconds, increasing by a factor of 1.05 each time. The second setting applies
14877delays to RCPT commands when more than four occur in a single message.
14878
168e428f 14879
9b371988
PH
14880.option smtp_ratelimit_mail main string unset
14881See &%smtp_ratelimit_hosts%& above.
168e428f
PH
14882
14883
9b371988
PH
14884.option smtp_ratelimit_rcpt main string unset
14885See &%smtp_ratelimit_hosts%& above.
168e428f 14886
168e428f 14887
9b371988
PH
14888.option smtp_receive_timeout main time 5m
14889.cindex "timeout" "for SMTP input"
f89d2485 14890.cindex "SMTP" "input timeout"
168e428f
PH
14891This sets a timeout value for SMTP reception. It applies to all forms of SMTP
14892input, including batch SMTP. If a line of input (either an SMTP command or a
14893data line) is not received within this time, the SMTP connection is dropped and
14894the message is abandoned.
14895A line is written to the log containing one of the following messages:
9b371988
PH
14896.code
14897SMTP command timeout on connection from...
14898SMTP data timeout on connection from...
14899.endd
168e428f
PH
14900The former means that Exim was expecting to read an SMTP command; the latter
14901means that it was in the DATA phase, reading the contents of a message.
14902
14903
f89d2485 14904.oindex "&%-os%&"
168e428f 14905The value set by this option can be overridden by the
9b371988 14906&%-os%& command-line option. A setting of zero time disables the timeout, but
168e428f 14907this should never be used for SMTP over TCP/IP. (It can be useful in some cases
9b371988
PH
14908of local input using &%-bs%& or &%-bS%&.) For non-SMTP input, the reception
14909timeout is controlled by &%receive_timeout%& and &%-or%&.
168e428f 14910
168e428f 14911
9b371988 14912.option smtp_reserve_hosts main "host list&!!" unset
168e428f 14913This option defines hosts for which SMTP connections are reserved; see
9b371988 14914&%smtp_accept_reserve%& and &%smtp_load_reserve%& above.
168e428f
PH
14915
14916
9b371988
PH
14917.option smtp_return_error_details main boolean false
14918.cindex "SMTP" "details policy failures"
f89d2485 14919.cindex "policy control" "rejection, returning details"
168e428f 14920In the default state, Exim uses bland messages such as
9b371988 14921&"Administrative prohibition"& when it rejects SMTP commands for policy
168e428f 14922reasons. Many sysadmins like this because it gives away little information
f89d2485 14923to spammers. However, some other sysadmins who are applying strict checking
168e428f 14924policies want to give out much fuller information about failures. Setting
9b371988
PH
14925&%smtp_return_error_details%& true causes Exim to be more forthcoming. For
14926example, instead of &"Administrative prohibition"&, it might give:
14927.code
14928550-Rejected after DATA: '>' missing at end of address:
14929550 failing address in "From" header is: <user@dom.ain
14930.endd
14931
14932.option spamd_address main string "see below"
168e428f 14933This option is available when Exim is compiled with the content-scanning
9b371988
PH
14934extension. It specifies how Exim connects to SpamAssassin's &%spamd%& daemon.
14935The default value is
14936.code
14937127.0.0.1 783
14938.endd
14939See section &<<SECTscanspamass>>& for more details.
168e428f
PH
14940
14941
14942
9b371988
PH
14943.option split_spool_directory main boolean false
14944.cindex "multiple spool directories"
14945.cindex "spool directory" "split"
f89d2485 14946.cindex "directories, multiple"
168e428f
PH
14947If this option is set, it causes Exim to split its input directory into 62
14948subdirectories, each with a single alphanumeric character as its name. The
14949sixth character of the message id is used to allocate messages to
14950subdirectories; this is the least significant base-62 digit of the time of
14951arrival of the message.
14952
14953Splitting up the spool in this way may provide better performance on systems
14954where there are long mail queues, by reducing the number of files in any one
14955directory. The msglog directory is also split up in a similar way to the input
9b371988
PH
14956directory; however, if &%preserve_message_logs%& is set, all old msglog files
14957are still placed in the single directory &_msglog.OLD_&.
168e428f
PH
14958
14959It is not necessary to take any special action for existing messages when
9b371988
PH
14960changing &%split_spool_directory%&. Exim notices messages that are in the
14961&"wrong"& place, and continues to process them. If the option is turned off
14962after a period of being on, the subdirectories will eventually empty and be
168e428f
PH
14963automatically deleted.
14964
9b371988 14965When &%split_spool_directory%& is set, the behaviour of queue runner processes
168e428f
PH
14966changes. Instead of creating a list of all messages in the queue, and then
14967trying to deliver each one in turn, it constructs a list of those in one
14968sub-directory and tries to deliver them, before moving on to the next
14969sub-directory. The sub-directories are processed in a random order. This
14970spreads out the scanning of the input directories, and uses less memory. It is
14971particularly beneficial when there are lots of messages on the queue. However,
9b371988 14972if &%queue_run_in_order%& is set, none of this new processing happens. The
168e428f
PH
14973entire queue has to be scanned and sorted before any deliveries can start.
14974
14975
9b371988
PH
14976.option spool_directory main string&!! "set at compile time"
14977.cindex "spool directory" "path to"
168e428f
PH
14978This defines the directory in which Exim keeps its spool, that is, the messages
14979it is waiting to deliver. The default value is taken from the compile-time
14980configuration setting, if there is one. If not, this option must be set. The
14981string is expanded, so it can contain, for example, a reference to
9b371988 14982&$primary_hostname$&.
168e428f
PH
14983
14984If the spool directory name is fixed on your installation, it is recommended
14985that you set it at build time rather than from this option, particularly if the
9b371988 14986log files are being written to the spool directory (see &%log_file_path%&).
168e428f
PH
14987Otherwise log files cannot be used for errors that are detected early on, such
14988as failures in the configuration file.
14989
14990By using this option to override the compiled-in path, it is possible to run
14991tests of Exim without using the standard spool.
14992
9b371988 14993.option sqlite_lock_timeout main time 5s
f89d2485 14994.cindex "sqlite lookup type" "lock timeout"
9b371988
PH
14995This option controls the timeout that the &(sqlite)& lookup uses when trying to
14996access an SQLite database. See section &<<SECTsqlite>>& for more details.
9b371988 14997
3cb1b51e 14998.option strict_acl_vars main boolean false
f89d2485 14999.cindex "&ACL;" "variables, handling unset"
3cb1b51e
PH
15000This option controls what happens if a syntactically valid but undefined ACL
15001variable is referenced. If it is false (the default), an empty string
15002is substituted; if it is true, an error is generated. See section
15003&<<SECTaclvariables>>& for details of ACL variables.
3cb1b51e 15004
9b371988 15005.option strip_excess_angle_brackets main boolean false
f89d2485 15006.cindex "angle brackets, excess"
9b371988
PH
15007If this option is set, redundant pairs of angle brackets round &"route-addr"&
15008items in addresses are stripped. For example, &'<<xxx@a.b.c.d>>'& is
15009treated as &'<xxx@a.b.c.d>'&. If this is in the envelope and the message is
15010passed on to another MTA, the excess angle brackets are not passed on. If this
15011option is not set, multiple pairs of angle brackets cause a syntax error.
15012
15013
15014.option strip_trailing_dot main boolean false
15015.cindex "trailing dot on domain"
15016.cindex "dot" "trailing on domain"
168e428f
PH
15017If this option is set, a trailing dot at the end of a domain in an address is
15018ignored. If this is in the envelope and the message is passed on to another
15019MTA, the dot is not passed on. If this option is not set, a dot at the end of a
15020domain causes a syntax error.
15021However, addresses in header lines are checked only when an ACL requests header
15022syntax checking.
15023
15024
9b371988
PH
15025.option syslog_duplication main boolean true
15026.cindex "syslog" "duplicate log lines; suppressing"
168e428f
PH
15027When Exim is logging to syslog, it writes the log lines for its three
15028separate logs at different syslog priorities so that they can in principle
15029be separated on the logging hosts. Some installations do not require this
15030separation, and in those cases, the duplication of certain log lines is a
9b371988 15031nuisance. If &%syslog_duplication%& is set false, only one copy of any
168e428f
PH
15032particular log line is written to syslog. For lines that normally go to
15033both the main log and the reject log, the reject log version (possibly
15034containing message header lines) is written, at LOG_NOTICE priority.
15035Lines that normally go to both the main and the panic log are written at
15036the LOG_ALERT priority.
15037
15038
9b371988
PH
15039.option syslog_facility main string unset
15040.cindex "syslog" "facility; setting"
15041This option sets the syslog &"facility"& name, used when Exim is logging to
15042syslog. The value must be one of the strings &"mail"&, &"user"&, &"news"&,
15043&"uucp"&, &"daemon"&, or &"local&'x'&"& where &'x'& is a digit between 0 and 7.
15044If this option is unset, &"mail"& is used. See chapter &<<CHAPlog>>& for
15045details of Exim's logging.
168e428f 15046
168e428f 15047
168e428f 15048
9b371988
PH
15049.option syslog_processname main string &`exim`&
15050.cindex "syslog" "process name; setting"
15051This option sets the syslog &"ident"& name, used when Exim is logging to
15052syslog. The value must be no longer than 32 characters. See chapter
15053&<<CHAPlog>>& for details of Exim's logging.
168e428f
PH
15054
15055
168e428f 15056
9b371988
PH
15057.option syslog_timestamp main boolean true
15058.cindex "syslog" "timestamps"
15059If &%syslog_timestamp%& is set false, the timestamps on Exim's log lines are
15060omitted when these lines are sent to syslog. See chapter &<<CHAPlog>>& for
168e428f
PH
15061details of Exim's logging.
15062
15063
9b371988
PH
15064.option system_filter main string&!! unset
15065.cindex "filter" "system filter"
15066.cindex "system filter" "specifying"
15067.cindex "Sieve filter" "not available for system filter"
168e428f
PH
15068This option specifies an Exim filter file that is applied to all messages at
15069the start of each delivery attempt, before any routing is done. System filters
15070must be Exim filters; they cannot be Sieve filters. If the system filter
15071generates any deliveries to files or pipes, or any new mail messages, the
9b371988 15072appropriate &%system_filter_..._transport%& option(s) must be set, to define
168e428f 15073which transports are to be used. Details of this facility are given in chapter
9b371988 15074&<<CHAPsystemfilter>>&.
168e428f 15075
168e428f 15076
9b371988 15077.option system_filter_directory_transport main string&!! unset
f89d2485 15078.vindex "&$address_file$&"
168e428f 15079This sets the name of the transport driver that is to be used when the
9b371988 15080&%save%& command in a system message filter specifies a path ending in &"/"&,
168e428f 15081implying delivery of each message into a separate file in some directory.
9b371988 15082During the delivery, the variable &$address_file$& contains the path name.
168e428f
PH
15083
15084
9b371988
PH
15085.option system_filter_file_transport main string&!! unset
15086.cindex "file" "transport for system filter"
15087This sets the name of the transport driver that is to be used when the &%save%&
15088command in a system message filter specifies a path not ending in &"/"&. During
15089the delivery, the variable &$address_file$& contains the path name.
168e428f 15090
9b371988
PH
15091.option system_filter_group main string unset
15092.cindex "gid (group id)" "system filter"
15093This option is used only when &%system_filter_user%& is also set. It sets the
168e428f
PH
15094gid under which the system filter is run, overriding any gid that is associated
15095with the user. The value may be numerical or symbolic.
15096
9b371988
PH
15097.option system_filter_pipe_transport main string&!! unset
15098.cindex "&(pipe)& transport" "for system filter"
f89d2485 15099.vindex "&$address_pipe$&"
9b371988
PH
15100This specifies the transport driver that is to be used when a &%pipe%& command
15101is used in a system filter. During the delivery, the variable &$address_pipe$&
168e428f
PH
15102contains the pipe command.
15103
15104
9b371988
PH
15105.option system_filter_reply_transport main string&!! unset
15106.cindex "&(autoreply)& transport" "for system filter"
15107This specifies the transport driver that is to be used when a &%mail%& command
15108is used in a system filter.
168e428f 15109
9b371988
PH
15110.option system_filter_user main string unset
15111.cindex "uid (user id)" "system filter"
168e428f
PH
15112If this option is not set, the system filter is run in the main Exim delivery
15113process, as root. When the option is set, the system filter runs in a separate
15114process, as the given user. Unless the string consists entirely of digits, it
15115is looked up in the password data. Failure to find the named user causes a
15116configuration error. The gid is either taken from the password data, or
9b371988
PH
15117specified by &%system_filter_group%&. When the uid is specified numerically,
15118&%system_filter_group%& is required to be set.
168e428f
PH
15119
15120If the system filter generates any pipe, file, or reply deliveries, the uid
15121under which the filter is run is used when transporting them, unless a
9b371988 15122transport option overrides. Normally you should set &%system_filter_user%& if
168e428f
PH
15123your system filter generates these kinds of delivery.
15124
15125
9b371988
PH
15126.option tcp_nodelay main boolean true
15127.cindex "daemon" "TCP_NODELAY on sockets"
15128.cindex "Nagle algorithm"
15129.cindex "TCP_NODELAY on listening sockets"
168e428f
PH
15130If this option is set false, it stops the Exim daemon setting the
15131TCP_NODELAY option on its listening sockets. Setting TCP_NODELAY
9b371988 15132turns off the &"Nagle algorithm"&, which is a way of improving network
168e428f
PH
15133performance in interactive (character-by-character) situations. Turning it off
15134should improve Exim's performance a bit, so that is what happens by default.
15135However, it appears that some broken clients cannot cope, and time out. Hence
15136this option. It affects only those sockets that are set up for listening by the
15137daemon. Sockets created by the smtp transport for delivering mail always set
15138TCP_NODELAY.
15139
15140
9b371988
PH
15141.option timeout_frozen_after main time 0s
15142.cindex "frozen messages" "timing out"
15143.cindex "timeout" "frozen messages"
15144If &%timeout_frozen_after%& is set to a time greater than zero, a frozen
3cb1b51e
PH
15145message of any kind that has been on the queue for longer than the given time
15146is automatically cancelled at the next queue run. If the frozen message is a
15147bounce message, it is just discarded; otherwise, a bounce is sent to the
15148sender, in a similar manner to cancellation by the &%-Mg%& command line option.
15149If you want to timeout frozen bounce messages earlier than other kinds of
15150frozen message, see &%ignore_bounce_errors_after%&.
15151
3cb1b51e
PH
15152&*Note:*& the default value of zero means no timeouts; with this setting,
15153frozen messages remain on the queue forever (except for any frozen bounce
15154messages that are released by &%ignore_bounce_errors_after%&).
168e428f 15155
168e428f 15156
9b371988 15157.option timezone main string unset
f89d2485 15158.cindex "timezone, setting"
9b371988 15159The value of &%timezone%& is used to set the environment variable TZ while
168e428f
PH
15160running Exim (if it is different on entry). This ensures that all timestamps
15161created by Exim are in the required timezone. If you want all your timestamps
15162to be in UTC (aka GMT) you should set
9b371988
PH
15163.code
15164timezone = UTC
15165.endd
15166The default value is taken from TIMEZONE_DEFAULT in &_Local/Makefile_&,
168e428f 15167or, if that is not set, from the value of the TZ environment variable when Exim
9b371988 15168is built. If &%timezone%& is set to the empty string, either at build or run
168e428f
PH
15169time, any existing TZ variable is removed from the environment when Exim
15170runs. This is appropriate behaviour for obtaining wall-clock time on some, but
15171unfortunately not all, operating systems.
15172
15173
9b371988
PH
15174.option tls_advertise_hosts main "host list&!!" unset
15175.cindex "TLS" "advertising"
15176.cindex "encryption" "on SMTP connection"
15177.cindex "SMTP" "encrypted connection"
168e428f
PH
15178When Exim is built with support for TLS encrypted connections, the availability
15179of the STARTTLS command to set up an encrypted session is advertised in
15180response to EHLO only to those client hosts that match this option. See
9b371988 15181chapter &<<CHAPTLS>>& for details of Exim's support for TLS.
168e428f
PH
15182
15183
9b371988
PH
15184.option tls_certificate main string&!! unset
15185.cindex "TLS" "server certificate; location of"
f89d2485 15186.cindex "certificate" "server, location of"
168e428f
PH
15187The value of this option is expanded, and must then be the absolute path to a
15188file which contains the server's certificates. The server's private key is also
9b371988
PH
15189assumed to be in this file if &%tls_privatekey%& is unset. See chapter
15190&<<CHAPTLS>>& for further details.
168e428f 15191
9b371988 15192&*Note*&: The certificates defined by this option are used only when Exim is
168e428f 15193receiving incoming messages as a server. If you want to supply certificates for
9b371988
PH
15194use when sending messages as a client, you must set the &%tls_certificate%&
15195option in the relevant &(smtp)& transport.
168e428f 15196
168e428f 15197
9b371988
PH
15198.option tls_crl main string&!! unset
15199.cindex "TLS" "server certificate revocation list"
15200.cindex "certificate" "revocation list for server"
168e428f
PH
15201This option specifies a certificate revocation list. The expanded value must
15202be the name of a file that contains a CRL in PEM format.
15203
15204
9b371988
PH
15205.option tls_dhparam main string&!! unset
15206.cindex "TLS" "D-H parameters for server"
168e428f
PH
15207The value of this option is expanded, and must then be the absolute path to
15208a file which contains the server's DH parameter values.
15209This is used only for OpenSSL. When Exim is linked with GnuTLS, this option is
9b371988 15210ignored. See section &<<SECTopenvsgnu>>& for further details.
168e428f
PH
15211
15212
9b371988 15213.option tls_on_connect_ports main "string list" unset
168e428f
PH
15214This option specifies a list of incoming SSMTP (aka SMTPS) ports that should
15215operate the obsolete SSMTP (SMTPS) protocol, where a TLS session is immediately
15216set up without waiting for the client to issue a STARTTLS command. For
9b371988 15217further details, see section &<<SECTsupobssmt>>&.
168e428f
PH
15218
15219
168e428f 15220
9b371988
PH
15221.option tls_privatekey main string&!! unset
15222.cindex "TLS" "server private key; location of"
168e428f 15223The value of this option is expanded, and must then be the absolute path to a
4f578862
PH
15224file which contains the server's private key. If this option is unset, or if
15225the expansion is forced to fail, or the result is an empty string, the private
15226key is assumed to be in the same file as the server's certificates. See chapter
15227&<<CHAPTLS>>& for further details.
168e428f 15228
168e428f 15229
9b371988
PH
15230.option tls_remember_esmtp main boolean false
15231.cindex "TLS" "esmtp state; remembering"
15232.cindex "TLS" "broken clients"
168e428f 15233If this option is set true, Exim violates the RFCs by remembering that it is in
9b371988 15234&"esmtp"& state after successfully negotiating a TLS session. This provides
168e428f
PH
15235support for broken clients that fail to send a new EHLO after starting a
15236TLS session.
15237
15238
9b371988
PH
15239.option tls_require_ciphers main string&!! unset
15240.cindex "TLS" "requiring specific ciphers"
15241.cindex "cipher" "requiring specific"
168e428f 15242This option controls which ciphers can be used for incoming TLS connections.
9b371988 15243The &(smtp)& transport has an option of the same name for controlling outgoing
168e428f
PH
15244connections. This option is expanded for each connection, so can be varied for
15245different clients if required. The value of this option must be a list of
15246permitted cipher suites. The OpenSSL and GnuTLS libraries handle cipher control
9b371988
PH
15247in somewhat different ways. If GnuTLS is being used, the client controls the
15248preference order of the available ciphers. Details are given in sections
15249&<<SECTreqciphssl>>& and &<<SECTreqciphgnu>>&.
168e428f 15250
168e428f 15251
9b371988
PH
15252.option tls_try_verify_hosts main "host list&!!" unset
15253.cindex "TLS" "client certificate verification"
15254.cindex "certificate" "verification of client"
15255See &%tls_verify_hosts%& below.
168e428f 15256
168e428f 15257
9b371988
PH
15258.option tls_verify_certificates main string&!! unset
15259.cindex "TLS" "client certificate verification"
15260.cindex "certificate" "verification of client"
168e428f
PH
15261The value of this option is expanded, and must then be the absolute path to
15262a file containing permitted certificates for clients that
9b371988
PH
15263match &%tls_verify_hosts%& or &%tls_try_verify_hosts%&. Alternatively, if you
15264are using OpenSSL, you can set &%tls_verify_certificates%& to the name of a
168e428f
PH
15265directory containing certificate files. This does not work with GnuTLS; the
15266option must be set to the name of a single file if you are using GnuTLS.
15267
15268
9b371988
PH
15269.option tls_verify_hosts main "host list&!!" unset
15270.cindex "TLS" "client certificate verification"
15271.cindex "certificate" "verification of client"
15272This option, along with &%tls_try_verify_hosts%&, controls the checking of
595028e4
PH
15273certificates from clients. The expected certificates are defined by
15274&%tls_verify_certificates%&, which must be set. A configuration error occurs if
15275either &%tls_verify_hosts%& or &%tls_try_verify_hosts%& is set and
15276&%tls_verify_certificates%& is not set.
168e428f 15277
9b371988 15278Any client that matches &%tls_verify_hosts%& is constrained by
595028e4
PH
15279&%tls_verify_certificates%&. When the client initiates a TLS session, it must
15280present one of the listed certificates. If it does not, the connection is
15281aborted. &*Warning*&: Including a host in &%tls_verify_hosts%& does not require
15282the host to use TLS. It can still send SMTP commands through unencrypted
15283connections. Forcing a client to use TLS has to be done separately using an
15284ACL to reject inappropriate commands when the connection is not encrypted.
168e428f 15285
9b371988
PH
15286A weaker form of checking is provided by &%tls_try_verify_hosts%&. If a client
15287matches this option (but not &%tls_verify_hosts%&), Exim requests a
15288certificate and checks it against &%tls_verify_certificates%&, but does not
168e428f
PH
15289abort the connection if there is no certificate or if it does not match. This
15290state can be detected in an ACL, which makes it possible to implement policies
9b371988
PH
15291such as &"accept for relay only if a verified certificate has been received,
15292but accept for local delivery if encrypted, even without a verified
15293certificate"&.
168e428f
PH
15294
15295Client hosts that match neither of these lists are not asked to present
15296certificates.
15297
15298
9b371988 15299.option trusted_groups main "string list&!!" unset
f89d2485
PH
15300.cindex "trusted groups"
15301.cindex "groups" "trusted"
068aaea8
PH
15302This option is expanded just once, at the start of Exim's processing. If this
15303option is set, any process that is running in one of the listed groups, or
15304which has one of them as a supplementary group, is trusted. The groups can be
9b371988
PH
15305specified numerically or by name. See section &<<SECTtrustedadmin>>& for
15306details of what trusted callers are permitted to do. If neither
15307&%trusted_groups%& nor &%trusted_users%& is set, only root and the Exim user
15308are trusted.
9b371988
PH
15309
15310.option trusted_users main "string list&!!" unset
f89d2485 15311.cindex "trusted users"
9b371988 15312.cindex "user" "trusted"
068aaea8
PH
15313This option is expanded just once, at the start of Exim's processing. If this
15314option is set, any process that is running as one of the listed users is
15315trusted. The users can be specified numerically or by name. See section
9b371988
PH
15316&<<SECTtrustedadmin>>& for details of what trusted callers are permitted to do.
15317If neither &%trusted_groups%& nor &%trusted_users%& is set, only root and the
15318Exim user are trusted.
9b371988
PH
15319
15320.option unknown_login main string&!! unset
15321.cindex "uid (user id)" "unknown caller"
f89d2485 15322.vindex "&$caller_uid$&"
168e428f 15323This is a specialized feature for use in unusual configurations. By default, if
9b371988
PH
15324the uid of the caller of Exim cannot be looked up using &[getpwuid()]&, Exim
15325gives up. The &%unknown_login%& option can be used to set a login name to be
15326used in this circumstance. It is expanded, so values like &%user$caller_uid%&
15327can be set. When &%unknown_login%& is used, the value of &%unknown_username%&
15328is used for the user's real name (gecos field), unless this has been set by the
15329&%-F%& option.
15330
15331.option unknown_username main string unset
15332See &%unknown_login%&.
15333
15334.option untrusted_set_sender main "address list&!!" unset
f89d2485 15335.cindex "trusted users"
9b371988 15336.cindex "sender" "setting by untrusted user"
f89d2485 15337.cindex "untrusted user setting sender"
9b371988
PH
15338.cindex "user" "untrusted setting sender"
15339.cindex "envelope sender"
168e428f
PH
15340When an untrusted user submits a message to Exim using the standard input, Exim
15341normally creates an envelope sender address from the user's login and the
9b371988
PH
15342default qualification domain. Data from the &%-f%& option (for setting envelope
15343senders on non-SMTP messages) or the SMTP MAIL command (if &%-bs%& or &%-bS%&
168e428f
PH
15344is used) is ignored.
15345
15346However, untrusted users are permitted to set an empty envelope sender address,
15347to declare that a message should never generate any bounces. For example:
9b371988
PH
15348.code
15349exim -f '<>' user@domain.example
15350.endd
f89d2485 15351.vindex "&$sender_ident$&"
9b371988 15352The &%untrusted_set_sender%& option allows you to permit untrusted users to set
168e428f
PH
15353other envelope sender addresses in a controlled way. When it is set, untrusted
15354users are allowed to set envelope sender addresses that match any of the
15355patterns in the list. Like all address lists, the string is expanded. The
9b371988 15356identity of the user is in &$sender_ident$&, so you can, for example, restrict
168e428f
PH
15357users to setting senders that start with their login ids
15358followed by a hyphen
15359by a setting like this:
9b371988
PH
15360.code
15361untrusted_set_sender = ^$sender_ident-
15362.endd
168e428f
PH
15363If you want to allow untrusted users to set envelope sender addresses without
15364restriction, you can use
9b371988
PH
15365.code
15366untrusted_set_sender = *
15367.endd
15368The &%untrusted_set_sender%& option applies to all forms of local input, but
168e428f
PH
15369only to the setting of the envelope sender. It does not permit untrusted users
15370to use the other options which trusted user can use to override message
15371parameters. Furthermore, it does not stop Exim from removing an existing
9b371988
PH
15372&'Sender:'& header in the message, or from adding a &'Sender:'& header if
15373necessary. See &%local_sender_retain%& and &%local_from_check%& for ways of
15374overriding these actions. The handling of the &'Sender:'& header is also
15375described in section &<<SECTthesenhea>>&.
168e428f 15376
9b371988
PH
15377The log line for a message's arrival shows the envelope sender following
15378&"<="&. For local messages, the user's login always follows, after &"U="&. In
15379&%-bp%& displays, and in the Exim monitor, if an untrusted user sets an
15380envelope sender address, the user's login is shown in parentheses after the
15381sender address.
168e428f 15382
168e428f 15383
9b371988
PH
15384.option uucp_from_pattern main string "see below"
15385.cindex "&""From""& line"
15386.cindex "UUCP" "&""From""& line"
168e428f 15387Some applications that pass messages to an MTA via a command line interface use
9b371988 15388an initial line starting with &"From&~"& to pass the envelope sender. In
168e428f 15389particular, this is used by UUCP software. Exim recognizes such a line by means
9b371988 15390of a regular expression that is set in &%uucp_from_pattern%&. When the pattern
168e428f 15391matches, the sender address is constructed by expanding the contents of
9b371988 15392&%uucp_from_sender%&, provided that the caller of Exim is a trusted user. The
168e428f 15393default pattern recognizes lines in the following two forms:
9b371988
PH
15394.code
15395From ph10 Fri Jan 5 12:35 GMT 1996
15396From ph10 Fri, 7 Jan 97 14:00:00 GMT
15397.endd
168e428f 15398The pattern can be seen by running
9b371988
PH
15399.code
15400exim -bP uucp_from_pattern
15401.endd
168e428f 15402It checks only up to the hours and minutes, and allows for a 2-digit or 4-digit
9b371988
PH
15403year in the second case. The first word after &"From&~"& is matched in the
15404regular expression by a parenthesized subpattern. The default value for
15405&%uucp_from_sender%& is &"$1"&, which therefore just uses this first word
15406(&"ph10"& in the example above) as the message's sender. See also
15407&%ignore_fromline_hosts%&.
168e428f
PH
15408
15409
9b371988
PH
15410.option uucp_from_sender main string&!! &`$1`&
15411See &%uucp_from_pattern%& above.
168e428f 15412
168e428f 15413
9b371988
PH
15414.option warn_message_file main string unset
15415.cindex "warning of delay" "customizing the message"
15416.cindex "customizing" "warning message"
168e428f
PH
15417This option defines a template file containing paragraphs of text to be used
15418for constructing the warning message which is sent by Exim when a message has
15419been on the queue for a specified amount of time, as specified by
9b371988
PH
15420&%delay_warning%&. Details of the file's contents are given in chapter
15421&<<CHAPemsgcust>>&. See also &%bounce_message_file%&.
168e428f
PH
15422
15423
9b371988
PH
15424.option write_rejectlog main boolean true
15425.cindex "reject log" "disabling"
168e428f 15426If this option is set false, Exim no longer writes anything to the reject log.
9b371988 15427See chapter &<<CHAPlog>>& for details of what Exim writes to its logs.
4f578862
PH
15428.ecindex IIDconfima
15429.ecindex IIDmaiconf
168e428f
PH
15430
15431
15432
15433
9b371988
PH
15434. ////////////////////////////////////////////////////////////////////////////
15435. ////////////////////////////////////////////////////////////////////////////
168e428f 15436
9b371988 15437.chapter "Generic options for routers" "CHAProutergeneric"
4f578862
PH
15438.scindex IIDgenoprou1 "options" "generic; for routers"
15439.scindex IIDgenoprou2 "generic options" "router"
168e428f 15440This chapter describes the generic options that apply to all routers.
9b371988 15441Those that are preconditions are marked with &Dagger; in the &"use"& field.
168e428f
PH
15442
15443For a general description of how a router operates, see sections
9b371988 15444&<<SECTrunindrou>>& and &<<SECTrouprecon>>&. The latter specifies the order in
168e428f 15445which the preconditions are tested. The order of expansion of the options that
9b371988
PH
15446provide data for a transport is: &%errors_to%&, &%headers_add%&,
15447&%headers_remove%&, &%transport%&.
168e428f
PH
15448
15449
168e428f 15450
9b371988
PH
15451.option address_data routers string&!! unset
15452.cindex "router" "data attached to address"
168e428f
PH
15453The string is expanded just before the router is run, that is, after all the
15454precondition tests have succeeded. If the expansion is forced to fail, the
9b371988
PH
15455router declines, the value of &%address_data%& remains unchanged, and the
15456&%more%& option controls what happens next. Other expansion failures cause
15457delivery of the address to be deferred.
168e428f 15458
f89d2485 15459.vindex "&$address_data$&"
168e428f 15460When the expansion succeeds, the value is retained with the address, and can be
9b371988 15461accessed using the variable &$address_data$& in the current router, subsequent
168e428f
PH
15462routers, and the eventual transport.
15463
9b371988
PH
15464&*Warning*&: If the current or any subsequent router is a &(redirect)& router
15465that runs a user's filter file, the contents of &$address_data$& are accessible
068aaea8 15466in the filter. This is not normally a problem, because such data is usually
9b371988
PH
15467either not confidential or it &"belongs"& to the current user, but if you do
15468put confidential data into &$address_data$& you need to remember this point.
168e428f 15469
9b371988
PH
15470Even if the router declines or passes, the value of &$address_data$& remains
15471with the address, though it can be changed by another &%address_data%& setting
168e428f 15472on a subsequent router. If a router generates child addresses, the value of
9b371988
PH
15473&$address_data$& propagates to them. This also applies to the special kind of
15474&"child"& that is generated by a router with the &%unseen%& option.
15475
15476The idea of &%address_data%& is that you can use it to look up a lot of data
15477for the address once, and then pick out parts of the data later. For example,
15478you could use a single LDAP lookup to return a string of the form
15479.code
15480uid=1234 gid=5678 mailbox=/mail/xyz forward=/home/xyz/.forward
15481.endd
168e428f 15482In the transport you could pick out the mailbox by a setting such as
9b371988
PH
15483.code
15484file = ${extract{mailbox}{$address_data}}
15485.endd
168e428f
PH
15486This makes the configuration file less messy, and also reduces the number of
15487lookups (though Exim does cache lookups).
15488
f89d2485
PH
15489.vindex "&$sender_address_data$&"
15490.vindex "&$address_data$&"
595028e4
PH
15491The &%address_data%& facility is also useful as a means of passing information
15492from one router to another, and from a router to a transport. In addition, if
15493&$address_data$& is set by a router when verifying a recipient address from an
15494ACL, it remains available for use in the rest of the ACL statement. After
15495verifying a sender, the value is transferred to &$sender_address_data$&.
168e428f
PH
15496
15497
168e428f 15498
9b371988 15499.option address_test routers&!? boolean true
f89d2485 15500.oindex "&%-bt%&"
9b371988 15501.cindex "router" "skipping when address testing"
168e428f 15502If this option is set false, the router is skipped when routing is being tested
9b371988
PH
15503by means of the &%-bt%& command line option. This can be a convenience when
15504your first router sends messages to an external scanner, because it saves you
15505having to set the &"already scanned"& indicator when testing real address
168e428f
PH
15506routing.
15507
15508
15509
9b371988
PH
15510.option cannot_route_message routers string&!! unset
15511.cindex "router" "customizing &""cannot route""& message"
15512.cindex "customizing" "&""cannot route""& message"
168e428f 15513This option specifies a text message that is used when an address cannot be
9b371988
PH
15514routed because Exim has run out of routers. The default message is
15515&"Unrouteable address"&. This option is useful only on routers that have
15516&%more%& set false, or on the very last router in a configuration, because the
4f578862 15517value that is used is taken from the last router that is considered. This
9b371988 15518includes a router that is skipped because its preconditions are not met, as
4f578862 15519well as a router that declines. For example, using the default configuration,
9b371988
PH
15520you could put:
15521.code
15522cannot_route_message = Remote domain not found in DNS
15523.endd
15524on the first router, which is a &(dnslookup)& router with &%more%& set false,
15525and
15526.code
15527cannot_route_message = Unknown local user
15528.endd
15529on the final router that checks for local users. If string expansion fails for
15530this option, the default message is used. Unless the expansion failure was
15531explicitly forced, a message about the failure is written to the main and panic
15532logs, in addition to the normal message about the routing failure.
15533
15534
15535.option caseful_local_part routers boolean false
15536.cindex "case of local parts"
15537.cindex "router" "case of local parts"
168e428f
PH
15538By default, routers handle the local parts of addresses in a case-insensitive
15539manner, though the actual case is preserved for transmission with the message.
15540If you want the case of letters to be significant in a router, you must set
15541this option true. For individual router options that contain address or local
9b371988
PH
15542part lists (for example, &%local_parts%&), case-sensitive matching can be
15543turned on by &"+caseful"& as a list item. See section &<<SECTcasletadd>>& for
15544more details.
15545
f89d2485
PH
15546.vindex "&$local_part$&"
15547.vindex "&$original_local_part$&"
15548.vindex "&$parent_local_part$&"
9b371988
PH
15549The value of the &$local_part$& variable is forced to lower case while a
15550router is running unless &%caseful_local_part%& is set. When a router assigns
15551an address to a transport, the value of &$local_part$& when the transport runs
168e428f 15552is the same as it was in the router. Similarly, when a router generates child
9b371988
PH
15553addresses by aliasing or forwarding, the values of &$original_local_part$&
15554and &$parent_local_part$& are those that were used by the redirecting router.
168e428f
PH
15555
15556This option applies to the processing of an address by a router. When a
9b371988 15557recipient address is being processed in an ACL, there is a separate &%control%&
168e428f 15558modifier that can be used to specify case-sensitive processing within the ACL
9b371988 15559(see section &<<SECTcontrols>>&).
168e428f
PH
15560
15561
15562
9b371988 15563.option check_local_user routers&!? boolean false
f89d2485 15564.cindex "local user, checking in router"
9b371988
PH
15565.cindex "router" "checking for local user"
15566.cindex "&_/etc/passwd_&"
f89d2485 15567.vindex "&$home$&"
168e428f
PH
15568When this option is true, Exim checks that the local part of the recipient
15569address (with affixes removed if relevant) is the name of an account on the
9b371988
PH
15570local system. The check is done by calling the &[getpwnam()]& function rather
15571than trying to read &_/etc/passwd_& directly. This means that other methods of
168e428f 15572holding password data (such as NIS) are supported. If the local part is a local
9b371988 15573user, &$home$& is set from the password data, and can be tested in other
168e428f 15574preconditions that are evaluated after this one (the order of evaluation is
9b371988
PH
15575given in section &<<SECTrouprecon>>&). However, the value of &$home$& can be
15576overridden by &%router_home_directory%&. If the local part is not a local user,
168e428f
PH
15577the router is skipped.
15578
15579If you want to check that the local part is either the name of a local user
9b371988
PH
15580or matches something else, you cannot combine &%check_local_user%& with a
15581setting of &%local_parts%&, because that specifies the logical &'and'& of the
15582two conditions. However, you can use a &(passwd)& lookup in a &%local_parts%&
168e428f 15583setting to achieve this. For example:
9b371988
PH
15584.code
15585local_parts = passwd;$local_part : lsearch;/etc/other/users
15586.endd
15587Note, however, that the side effects of &%check_local_user%& (such as setting
15588up a home directory) do not occur when a &(passwd)& lookup is used in a
15589&%local_parts%& (or any other) precondition.
168e428f 15590
168e428f
PH
15591
15592
9b371988
PH
15593.option condition routers&!? string&!! unset
15594.cindex "router" "customized precondition"
168e428f 15595This option specifies a general precondition test that has to succeed for the
9b371988
PH
15596router to be called. The &%condition%& option is the last precondition to be
15597evaluated (see section &<<SECTrouprecon>>&). The string is expanded, and if the
15598result is a forced failure, or an empty string, or one of the strings &"0"& or
15599&"no"& or &"false"& (checked without regard to the case of the letters), the
15600router is skipped, and the address is offered to the next one.
168e428f
PH
15601
15602If the result is any other value, the router is run (as this is the last
15603precondition to be evaluated, all the other preconditions must be true).
15604
9b371988 15605The &%condition%& option provides a means of applying custom conditions to the
168e428f
PH
15606running of routers. Note that in the case of a simple conditional expansion,
15607the default expansion values are exactly what is wanted. For example:
9b371988
PH
15608.code
15609condition = ${if >{$message_age}{600}}
15610.endd
168e428f 15611Because of the default behaviour of the string expansion, this is equivalent to
9b371988
PH
15612.code
15613condition = ${if >{$message_age}{600}{true}{}}
15614.endd
168e428f
PH
15615If the expansion fails (other than forced failure) delivery is deferred. Some
15616of the other precondition options are common special cases that could in fact
9b371988 15617be specified using &%condition%&.
168e428f
PH
15618
15619
168e428f 15620
9b371988
PH
15621.option debug_print routers string&!! unset
15622.cindex "testing" "variables in drivers"
15623If this option is set and debugging is enabled (see the &%-d%& command line
168e428f
PH
15624option), the string is expanded and included in the debugging output.
15625If expansion of the string fails, the error message is written to the debugging
15626output, and Exim carries on processing.
15627This option is provided to help with checking out the values of variables and
9b371988
PH
15628so on when debugging router configurations. For example, if a &%condition%&
15629option appears not to be working, &%debug_print%& can be used to output the
15630variables it references. The output happens after checks for &%domains%&,
15631&%local_parts%&, and &%check_local_user%& but before any other preconditions
15632are tested. A newline is added to the text if it does not end with one.
168e428f
PH
15633
15634
15635
9b371988 15636.option disable_logging routers boolean false
168e428f
PH
15637If this option is set true, nothing is logged for any routing errors
15638or for any deliveries caused by this router. You should not set this option
15639unless you really, really know what you are doing. See also the generic
15640transport option of the same name.
15641
15642
9b371988
PH
15643.option domains routers&!? "domain list&!!" unset
15644.cindex "router" "restricting to specific domains"
f89d2485 15645.vindex "&$domain_data$&"
168e428f
PH
15646If this option is set, the router is skipped unless the current domain matches
15647the list. If the match is achieved by means of a file lookup, the data that the
9b371988
PH
15648lookup returned for the domain is placed in &$domain_data$& for use in string
15649expansions of the driver's private options. See section &<<SECTrouprecon>>& for
15650a list of the order in which preconditions are evaluated.
168e428f
PH
15651
15652
15653
9b371988 15654.option driver routers string unset
168e428f
PH
15655This option must always be set. It specifies which of the available routers is
15656to be used.
15657
15658
15659
9b371988
PH
15660.option errors_to routers string&!! unset
15661.cindex "envelope sender"
15662.cindex "router" "changing address for errors"
4f578862
PH
15663If a router successfully handles an address, it may assign the address to a
15664transport for delivery or it may generate child addresses. In both cases, if
15665there is a delivery problem during later processing, the resulting bounce
15666message is sent to the address that results from expanding this string,
15667provided that the address verifies successfully. The &%errors_to%& option is
15668expanded before &%headers_add%&, &%headers_remove%&, and &%transport%&.
15669
15670The &%errors_to%& setting associated with an address can be overridden if it
15671subsequently passes through other routers that have their own &%errors_to%&
15672settings, or if the message is delivered by a transport with a &%return_path%&
15673setting.
15674
15675If &%errors_to%& is unset, or the expansion is forced to fail, or the result of
168e428f
PH
15676the expansion fails to verify, the errors address associated with the incoming
15677address is used. At top level, this is the envelope sender. A non-forced
15678expansion failure causes delivery to be deferred.
15679
9b371988
PH
15680If an address for which &%errors_to%& has been set ends up being delivered over
15681SMTP, the envelope sender for that delivery is the &%errors_to%& value, so that
168e428f 15682any bounces that are generated by other MTAs on the delivery route are also
4f578862
PH
15683sent there. You can set &%errors_to%& to the empty string by either of these
15684settings:
9b371988
PH
15685.code
15686errors_to =
4f578862 15687errors_to = ""
9b371988 15688.endd
168e428f
PH
15689An expansion item that yields an empty string has the same effect. If you do
15690this, a locally detected delivery error for addresses processed by this router
15691no longer gives rise to a bounce message; the error is discarded. If the
9b371988
PH
15692address is delivered to a remote host, the return path is set to &`<>`&, unless
15693overridden by the &%return_path%& option on the transport.
168e428f 15694
f89d2485 15695.vindex "&$address_data$&"
168e428f
PH
15696If for some reason you want to discard local errors, but use a non-empty
15697MAIL command for remote delivery, you can preserve the original return
9b371988
PH
15698path in &$address_data$& in the router, and reinstate it in the transport by
15699setting &%return_path%&.
168e428f 15700
4f578862
PH
15701The most common use of &%errors_to%& is to direct mailing list bounces to the
15702manager of the list, as described in section &<<SECTmailinglists>>&, or to
15703implement VERP (Variable Envelope Return Paths) (see section &<<SECTverp>>&).
15704
168e428f
PH
15705
15706
9b371988
PH
15707.option expn routers&!? boolean true
15708.cindex "address" "testing"
15709.cindex "testing" "addresses"
15710.cindex "EXPN" "router skipping"
15711.cindex "router" "skipping for EXPN"
168e428f
PH
15712If this option is turned off, the router is skipped when testing an address
15713as a result of processing an SMTP EXPN command. You might, for example,
9b371988 15714want to turn it off on a router for users' &_.forward_& files, while leaving it
168e428f 15715on for the system alias file.
9b371988 15716See section &<<SECTrouprecon>>& for a list of the order in which preconditions
168e428f
PH
15717are evaluated.
15718
15719The use of the SMTP EXPN command is controlled by an ACL (see chapter
9b371988
PH
15720&<<CHAPACL>>&). When Exim is running an EXPN command, it is similar to testing
15721an address with &%-bt%&. Compare VRFY, whose counterpart is &%-bv%&.
168e428f
PH
15722
15723
168e428f 15724
9b371988
PH
15725.option fail_verify routers boolean false
15726.cindex "router" "forcing verification failure"
15727Setting this option has the effect of setting both &%fail_verify_sender%& and
15728&%fail_verify_recipient%& to the same value.
168e428f
PH
15729
15730
15731
9b371988 15732.option fail_verify_recipient routers boolean false
168e428f
PH
15733If this option is true and an address is accepted by this router when
15734verifying a recipient, verification fails.
15735
15736
15737
9b371988 15738.option fail_verify_sender routers boolean false
168e428f
PH
15739If this option is true and an address is accepted by this router when
15740verifying a sender, verification fails.
15741
15742
15743
9b371988 15744.option fallback_hosts routers "string list" unset
9b371988
PH
15745.cindex "router" "fallback hosts"
15746.cindex "fallback" "hosts specified on router"
168e428f 15747String expansion is not applied to this option. The argument must be a
068aaea8 15748colon-separated list of host names or IP addresses. The list separator can be
9b371988 15749changed (see section &<<SECTlistconstruct>>&), and a port can be specified with
068aaea8 15750each name or address. In fact, the format of each item is exactly the same as
9b371988
PH
15751defined for the list of hosts in a &(manualroute)& router (see section
15752&<<SECTformatonehostitem>>&).
068aaea8
PH
15753
15754If a router queues an address for a remote transport, this host list is
15755associated with the address, and used instead of the transport's fallback host
9b371988
PH
15756list. If &%hosts_randomize%& is set on the transport, the order of the list is
15757randomized for each use. See the &%fallback_hosts%& option of the &(smtp)&
068aaea8 15758transport for further details.
168e428f
PH
15759
15760
9b371988
PH
15761.option group routers string&!! "see below"
15762.cindex "gid (group id)" "local delivery"
15763.cindex "local transports" "uid and gid"
15764.cindex "transport" "local"
15765.cindex "router" "setting group"
168e428f
PH
15766When a router queues an address for a transport, and the transport does not
15767specify a group, the group given here is used when running the delivery
15768process.
15769The group may be specified numerically or by name. If expansion fails, the
15770error is logged and delivery is deferred.
9b371988
PH
15771The default is unset, unless &%check_local_user%& is set, when the default
15772is taken from the password information. See also &%initgroups%& and &%user%&
15773and the discussion in chapter &<<CHAPenvironment>>&.
168e428f
PH
15774
15775
15776
9b371988 15777.option headers_add routers string&!! unset
9b371988
PH
15778.cindex "header lines" "adding"
15779.cindex "router" "adding header lines"
168e428f
PH
15780This option specifies a string of text that is expanded at routing time, and
15781associated with any addresses that are accepted by the router. However, this
15782option has no effect when an address is just being verified. The way in which
15783the text is used to add header lines at transport time is described in section
9b371988 15784&<<SECTheadersaddrem>>&. New header lines are not actually added until the
d1e83bff
PH
15785message is in the process of being transported. This means that references to
15786header lines in string expansions in the transport's configuration do not
9b371988 15787&"see"& the added header lines.
168e428f 15788
9b371988
PH
15789The &%headers_add%& option is expanded after &%errors_to%&, but before
15790&%headers_remove%& and &%transport%&. If the expanded string is empty, or if
15791the expansion is forced to fail, the option has no effect. Other expansion
15792failures are treated as configuration errors.
168e428f 15793
9b371988
PH
15794&*Warning 1*&: The &%headers_add%& option cannot be used for a &(redirect)&
15795router that has the &%one_time%& option set.
068aaea8 15796
0a4e3112
PH
15797.cindex "duplicate addresses"
15798.oindex "&%unseen%&"
9b371988
PH
15799&*Warning 2*&: If the &%unseen%& option is set on the router, all header
15800additions are deleted when the address is passed on to subsequent routers.
0a4e3112
PH
15801For a &%redirect%& router, if a generated address is the same as the incoming
15802address, this can lead to duplicate addresses with different header
15803modifications. Exim does not do duplicate deliveries (except, in certain
15804circumstances, to pipes -- see section &<<SECTdupaddr>>&), but it is undefined
15805which of the duplicates is discarded, so this ambiguous situation should be
15806avoided. The &%repeat_use%& option of the &%redirect%& router may be of help.
168e428f
PH
15807
15808
15809
9b371988 15810.option headers_remove routers string&!! unset
9b371988
PH
15811.cindex "header lines" "removing"
15812.cindex "router" "removing header lines"
168e428f
PH
15813This option specifies a string of text that is expanded at routing time, and
15814associated with any addresses that are accepted by the router. However, this
15815option has no effect when an address is just being verified. The way in which
15816the text is used to remove header lines at transport time is described in
9b371988
PH
15817section &<<SECTheadersaddrem>>&. Header lines are not actually removed until
15818the message is in the process of being transported. This means that references
15819to header lines in string expansions in the transport's configuration still
15820&"see"& the original header lines.
9b371988
PH
15821
15822The &%headers_remove%& option is expanded after &%errors_to%& and
15823&%headers_add%&, but before &%transport%&. If the expansion is forced to fail,
15824the option has no effect. Other expansion failures are treated as configuration
15825errors.
168e428f 15826
9b371988
PH
15827&*Warning 1*&: The &%headers_remove%& option cannot be used for a &(redirect)&
15828router that has the &%one_time%& option set.
168e428f 15829
9b371988
PH
15830&*Warning 2*&: If the &%unseen%& option is set on the router, all header
15831removal requests are deleted when the address is passed on to subsequent
0a4e3112
PH
15832routers, and this can lead to problems with duplicates -- see the similar
15833warning for &%headers_add%& above.
168e428f 15834
168e428f 15835
9b371988
PH
15836.option ignore_target_hosts routers "host list&!!" unset
15837.cindex "IP address" "discarding"
15838.cindex "router" "discarding IP addresses"
168e428f
PH
15839Although this option is a host list, it should normally contain IP address
15840entries rather than names. If any host that is looked up by the router has an
15841IP address that matches an item in this list, Exim behaves as if that IP
15842address did not exist. This option allows you to cope with rogue DNS entries
15843like
9b371988
PH
15844.code
15845remote.domain.example. A 127.0.0.1
15846.endd
168e428f 15847by setting
9b371988
PH
15848.code
15849ignore_target_hosts = 127.0.0.1
15850.endd
15851on the relevant router. If all the hosts found by a &(dnslookup)& router are
168e428f 15852discarded in this way, the router declines. In a conventional configuration, an
9b371988
PH
15853attempt to mail to such a domain would normally provoke the &"unrouteable
15854domain"& error, and an attempt to verify an address in the domain would fail.
15855Similarly, if &%ignore_target_hosts%& is set on an &(ipliteral)& router, the
168e428f
PH
15856router declines if presented with one of the listed addresses.
15857
9b371988
PH
15858You can use this option to disable the use of IPv4 or IPv6 for mail delivery by
15859means of the first or the second of the following settings, respectively:
15860.code
15861ignore_target_hosts = 0.0.0.0/0
15862ignore_target_hosts = <; 0::0/0
15863.endd
15864The pattern in the first line matches all IPv4 addresses, whereas the pattern
15865in the second line matches all IPv6 addresses.
9b371988 15866
168e428f 15867This option may also be useful for ignoring link-local and site-local IPv6
9b371988 15868addresses. Because, like all host lists, the value of &%ignore_target_hosts%&
168e428f
PH
15869is expanded before use as a list, it is possible to make it dependent on the
15870domain that is being routed.
15871
f89d2485 15872.vindex "&$host_address$&"
9b371988 15873During its expansion, &$host_address$& is set to the IP address that is being
168e428f
PH
15874checked.
15875
9b371988
PH
15876.option initgroups routers boolean false
15877.cindex "additional groups"
15878.cindex "groups" "additional"
15879.cindex "local transports" "uid and gid"
15880.cindex "transport" "local"
168e428f
PH
15881If the router queues an address for a transport, and this option is true, and
15882the uid supplied by the router is not overridden by the transport, the
9b371988
PH
15883&[initgroups()]& function is called when running the transport to ensure that
15884any additional groups associated with the uid are set up. See also &%group%&
15885and &%user%& and the discussion in chapter &<<CHAPenvironment>>&.
168e428f
PH
15886
15887
168e428f 15888
9b371988
PH
15889.option local_part_prefix routers&!? "string list" unset
15890.cindex "router" "prefix for local part"
f89d2485 15891.cindex "prefix" "for local part, used in router"
068aaea8 15892If this option is set, the router is skipped unless the local part starts with
9b371988
PH
15893one of the given strings, or &%local_part_prefix_optional%& is true. See
15894section &<<SECTrouprecon>>& for a list of the order in which preconditions are
15895evaluated.
168e428f
PH
15896
15897The list is scanned from left to right, and the first prefix that matches is
15898used. A limited form of wildcard is available; if the prefix begins with an
15899asterisk, it matches the longest possible sequence of arbitrary characters at
15900the start of the local part. An asterisk should therefore always be followed by
15901some character that does not occur in normal local parts.
9b371988
PH
15902.cindex "multiple mailboxes"
15903.cindex "mailbox" "multiple"
168e428f 15904Wildcarding can be used to set up multiple user mailboxes, as described in
9b371988 15905section &<<SECTmulbox>>&.
168e428f 15906
f89d2485
PH
15907.vindex "&$local_part$&"
15908.vindex "&$local_part_prefix$&"
9b371988 15909During the testing of the &%local_parts%& option, and while the router is
168e428f 15910running, the prefix is removed from the local part, and is available in the
9b371988 15911expansion variable &$local_part_prefix$&. When a message is being delivered, if
068aaea8
PH
15912the router accepts the address, this remains true during subsequent delivery by
15913a transport. In particular, the local part that is transmitted in the RCPT
15914command for LMTP, SMTP, and BSMTP deliveries has the prefix removed by default.
9b371988
PH
15915This behaviour can be overridden by setting &%rcpt_include_affixes%& true on
15916the relevant transport.
168e428f 15917
9b371988 15918When an address is being verified, &%local_part_prefix%& affects only the
068aaea8
PH
15919behaviour of the router. If the callout feature of verification is in use, this
15920means that the full address, including the prefix, will be used during the
15921callout.
15922
168e428f 15923The prefix facility is commonly used to handle local parts of the form
9b371988
PH
15924&%owner-something%&. Another common use is to support local parts of the form
15925&%real-username%& to bypass a user's &_.forward_& file &-- helpful when trying
15926to tell a user their forwarding is broken &-- by placing a router like this one
15927immediately before the router that handles &_.forward_& files:
15928.code
15929real_localuser:
15930 driver = accept
15931 local_part_prefix = real-
15932 check_local_user
15933 transport = local_delivery
15934.endd
595028e4
PH
15935For security, it would probably be a good idea to restrict the use of this
15936router to locally-generated messages, using a condition such as this:
15937.code
15938 condition = ${if match {$sender_host_address}\
15939 {\N^(|127\.0\.0\.1)$\N}}
15940.endd
595028e4 15941
9b371988 15942If both &%local_part_prefix%& and &%local_part_suffix%& are set for a router,
168e428f
PH
15943both conditions must be met if not optional. Care must be taken if wildcards
15944are used in both a prefix and a suffix on the same router. Different
15945separator characters must be used to avoid ambiguity.
15946
15947
9b371988
PH
15948.option local_part_prefix_optional routers boolean false
15949See &%local_part_prefix%& above.
168e428f
PH
15950
15951
168e428f 15952
9b371988
PH
15953.option local_part_suffix routers&!? "string list" unset
15954.cindex "router" "suffix for local part"
15955.cindex "suffix for local part" "used in router"
15956This option operates in the same way as &%local_part_prefix%&, except that the
168e428f 15957local part must end (rather than start) with the given string, the
9b371988
PH
15958&%local_part_suffix_optional%& option determines whether the suffix is
15959mandatory, and the wildcard * character, if present, must be the last
168e428f 15960character of the suffix. This option facility is commonly used to handle local
9b371988
PH
15961parts of the form &%something-request%& and multiple user mailboxes of the form
15962&%username-foo%&.
168e428f
PH
15963
15964
9b371988
PH
15965.option local_part_suffix_optional routers boolean false
15966See &%local_part_suffix%& above.
168e428f 15967
168e428f
PH
15968
15969
9b371988
PH
15970.option local_parts routers&!? "local part list&!!" unset
15971.cindex "router" "restricting to specific local parts"
15972.cindex "local part" "checking in router"
168e428f 15973The router is run only if the local part of the address matches the list.
9b371988 15974See section &<<SECTrouprecon>>& for a list of the order in which preconditions
168e428f 15975are evaluated, and
9b371988 15976section &<<SECTlocparlis>>& for a discussion of local part lists. Because the
168e428f
PH
15977string is expanded, it is possible to make it depend on the domain, for
15978example:
9b371988
PH
15979.code
15980local_parts = dbm;/usr/local/specials/$domain
15981.endd
f89d2485 15982.vindex "&$local_part_data$&"
168e428f 15983If the match is achieved by a lookup, the data that the lookup returned
9b371988 15984for the local part is placed in the variable &$local_part_data$& for use in
168e428f
PH
15985expansions of the router's private options. You might use this option, for
15986example, if you have a large number of local virtual domains, and you want to
15987send all postmaster mail to the same place without having to set up an alias in
15988each virtual domain:
9b371988
PH
15989.code
15990postmaster:
15991 driver = redirect
15992 local_parts = postmaster
15993 data = postmaster@real.domain.example
15994.endd
168e428f 15995
168e428f 15996
9b371988
PH
15997.option log_as_local routers boolean "see below"
15998.cindex "log" "delivery line"
15999.cindex "delivery" "log line format"
168e428f 16000Exim has two logging styles for delivery, the idea being to make local
9b371988 16001deliveries stand out more visibly from remote ones. In the &"local"& style, the
168e428f 16002recipient address is given just as the local part, without a domain. The use of
9b371988 16003this style is controlled by this option. It defaults to true for the &(accept)&
4f578862 16004router, and false for all the others. This option applies only when a
9b371988 16005router assigns an address to a transport. It has no effect on routers that
4f578862 16006redirect addresses.
168e428f
PH
16007
16008
168e428f 16009
9b371988 16010.option more routers boolean&!! true
168e428f 16011The result of string expansion for this option must be a valid boolean value,
9b371988 16012that is, one of the strings &"yes"&, &"no"&, &"true"&, or &"false"&. Any other
168e428f
PH
16013result causes an error, and delivery is deferred. If the expansion is forced to
16014fail, the default value for the option (true) is used. Other failures cause
16015delivery to be deferred.
16016
068aaea8
PH
16017If this option is set false, and the router declines to handle the address, no
16018further routers are tried, routing fails, and the address is bounced.
0a4e3112 16019.oindex "&%self%&"
9b371988
PH
16020However, if the router explicitly passes an address to the following router by
16021means of the setting
16022.code
16023self = pass
16024.endd
16025or otherwise, the setting of &%more%& is ignored. Also, the setting of &%more%&
168e428f
PH
16026does not affect the behaviour if one of the precondition tests fails. In that
16027case, the address is always passed to the next router.
16028
9b371988
PH
16029Note that &%address_data%& is not considered to be a precondition. If its
16030expansion is forced to fail, the router declines, and the value of &%more%&
068aaea8
PH
16031controls what happens next.
16032
168e428f 16033
9b371988
PH
16034.option pass_on_timeout routers boolean false
16035.cindex "timeout" "of router"
16036.cindex "router" "timeout"
168e428f 16037If a router times out during a host lookup, it normally causes deferral of the
9b371988
PH
16038address. If &%pass_on_timeout%& is set, the address is passed on to the next
16039router, overriding &%no_more%&. This may be helpful for systems that are
168e428f
PH
16040intermittently connected to the Internet, or those that want to pass to a smart
16041host any messages that cannot immediately be delivered.
16042
16043There are occasional other temporary errors that can occur while doing DNS
16044lookups. They are treated in the same way as a timeout, and this option
16045applies to all of them.
16046
16047
16048
9b371988
PH
16049.option pass_router routers string unset
16050.cindex "router" "go to after &""pass""&"
595028e4
PH
16051Routers that recognize the generic &%self%& option (&(dnslookup)&,
16052&(ipliteral)&, and &(manualroute)&) are able to return &"pass"&, forcing
16053routing to continue, and overriding a false setting of &%more%&. When one of
16054these routers returns &"pass"&, the address is normally handed on to the next
9b371988
PH
16055router in sequence. This can be changed by setting &%pass_router%& to the name
16056of another router. However (unlike &%redirect_router%&) the named router must
16057be below the current router, to avoid loops. Note that this option applies only
16058to the special case of &"pass"&. It does not apply when a router returns
595028e4 16059&"decline"& because it cannot handle an address.
168e428f
PH
16060
16061
168e428f 16062
9b371988
PH
16063.option redirect_router routers string unset
16064.cindex "router" "start at after redirection"
168e428f
PH
16065Sometimes an administrator knows that it is pointless to reprocess addresses
16066generated from alias or forward files with the same router again. For
16067example, if an alias file translates real names into login ids there is no
16068point searching the alias file a second time, especially if it is a large file.
16069
9b371988
PH
16070The &%redirect_router%& option can be set to the name of any router instance.
16071It causes the routing of any generated addresses to start at the named router
168e428f
PH
16072instead of at the first router. This option has no effect if the router in
16073which it is set does not generate new addresses.
16074
16075
16076
9b371988
PH
16077.option require_files routers&!? "string list&!!" unset
16078.cindex "file" "requiring for router"
16079.cindex "router" "requiring file existence"
168e428f
PH
16080This option provides a general mechanism for predicating the running of a
16081router on the existence or non-existence of certain files or directories.
16082Before running a router, as one of its precondition tests, Exim works its way
9b371988 16083through the &%require_files%& list, expanding each item separately.
168e428f
PH
16084
16085Because the list is split before expansion, any colons in expansion items must
16086be doubled, or the facility for using a different list separator must be used.
16087If any expansion is forced to fail, the item is ignored. Other expansion
16088failures cause routing of the address to be deferred.
16089
16090If any expanded string is empty, it is ignored. Otherwise, except as described
16091below, each string must be a fully qualified file path, optionally preceded by
9b371988
PH
16092&"!"&. The paths are passed to the &[stat()]& function to test for the
16093existence of the files or directories. The router is skipped if any paths not
16094preceded by &"!"& do not exist, or if any paths preceded by &"!"& do exist.
168e428f 16095
9b371988
PH
16096.cindex "NFS"
16097If &[stat()]& cannot determine whether a file exists or not, delivery of
168e428f
PH
16098the message is deferred. This can happen when NFS-mounted filesystems are
16099unavailable.
16100
9b371988 16101This option is checked after the &%domains%&, &%local_parts%&, and &%senders%&
168e428f 16102options, so you cannot use it to check for the existence of a file in which to
9b371988 16103look up a domain, local part, or sender. (See section &<<SECTrouprecon>>& for a
168e428f 16104full list of the order in which preconditions are evaluated.) However, as
9b371988
PH
16105these options are all expanded, you can use the &%exists%& expansion condition
16106to make such tests. The &%require_files%& option is intended for checking files
168e428f 16107that the router may be going to use internally, or which are needed by a
9b371988 16108transport (for example &_.procmailrc_&).
168e428f 16109
9b371988 16110During delivery, the &[stat()]& function is run as root, but there is a
168e428f 16111facility for some checking of the accessibility of a file by another user.
9b371988 16112This is not a proper permissions check, but just a &"rough"& check that
168e428f
PH
16113operates as follows:
16114
9b371988 16115If an item in a &%require_files%& list does not contain any forward slash
168e428f
PH
16116characters, it is taken to be the user (and optional group, separated by a
16117comma) to be checked for subsequent files in the list. If no group is specified
16118but the user is specified symbolically, the gid associated with the uid is
16119used. For example:
9b371988
PH
16120.code
16121require_files = mail:/some/file
16122require_files = $local_part:$home/.procmailrc
16123.endd
16124If a user or group name in a &%require_files%& list does not exist, the
16125&%require_files%& condition fails.
168e428f
PH
16126
16127Exim performs the check by scanning along the components of the file path, and
9b371988
PH
16128checking the access for the given uid and gid. It checks for &"x"& access on
16129directories, and &"r"& access on the final file. Note that this means that file
168e428f
PH
16130access control lists, if the operating system has them, are ignored.
16131
9b371988 16132&*Warning 1*&: When the router is being run to verify addresses for an
168e428f 16133incoming SMTP message, Exim is not running as root, but under its own uid. This
9b371988
PH
16134may affect the result of a &%require_files%& check. In particular, &[stat()]&
16135may yield the error EACCES (&"Permission denied"&). This means that the Exim
168e428f
PH
16136user is not permitted to read one of the directories on the file's path.
16137
9b371988
PH
16138&*Warning 2*&: Even when Exim is running as root while delivering a message,
16139&[stat()]& can yield EACCES for a file in an NFS directory that is mounted
16140without root access. In this case, if a check for access by a particular user
16141is requested, Exim creates a subprocess that runs as that user, and tries the
16142check again in that process.
168e428f
PH
16143
16144The default action for handling an unresolved EACCES is to consider it to
9b371988
PH
16145be caused by a configuration error, and routing is deferred because the
16146existence or non-existence of the file cannot be determined. However, in some
16147circumstances it may be desirable to treat this condition as if the file did
16148not exist. If the file name (or the exclamation mark that precedes the file
16149name for non-existence) is preceded by a plus sign, the EACCES error is treated
16150as if the file did not exist. For example:
16151.code
16152require_files = +/some/file
16153.endd
168e428f 16154If the router is not an essential part of verification (for example, it
9b371988 16155handles users' &_.forward_& files), another solution is to set the &%verify%&
168e428f
PH
16156option false so that the router is skipped when verifying.
16157
16158
16159
9b371988
PH
16160.option retry_use_local_part routers boolean "see below"
16161.cindex "hints database" "retry keys"
16162.cindex "local part" "in retry keys"
168e428f
PH
16163When a delivery suffers a temporary routing failure, a retry record is created
16164in Exim's hints database. For addresses whose routing depends only on the
16165domain, the key for the retry record should not involve the local part, but for
16166other addresses, both the domain and the local part should be included.
16167Usually, remote routing is of the former kind, and local routing is of the
16168latter kind.
16169
16170This option controls whether the local part is used to form the key for retry
16171hints for addresses that suffer temporary errors while being handled by this
9b371988 16172router. The default value is true for any router that has &%check_local_user%&
168e428f
PH
16173set, and false otherwise. Note that this option does not apply to hints keys
16174for transport delays; they are controlled by a generic transport option of the
16175same name.
16176
9b371988 16177The setting of &%retry_use_local_part%& applies only to the router on which it
168e428f
PH
16178appears. If the router generates child addresses, they are routed
16179independently; this setting does not become attached to them.
16180
16181
16182
9b371988
PH
16183.option router_home_directory routers string&!! unset
16184.cindex "router" "home directory for"
16185.cindex "home directory" "for router"
f89d2485 16186.vindex "&$home$&"
168e428f 16187This option sets a home directory for use while the router is running. (Compare
9b371988
PH
16188&%transport_home_directory%&, which sets a home directory for later
16189transporting.) In particular, if used on a &(redirect)& router, this option
16190sets a value for &$home$& while a filter is running. The value is expanded;
16191forced expansion failure causes the option to be ignored &-- other failures
168e428f
PH
16192cause the router to defer.
16193
9b371988
PH
16194Expansion of &%router_home_directory%& happens immediately after the
16195&%check_local_user%& test (if configured), before any further expansions take
168e428f 16196place.
9b371988 16197(See section &<<SECTrouprecon>>& for a list of the order in which preconditions
168e428f 16198are evaluated.)
9b371988
PH
16199While the router is running, &%router_home_directory%& overrides the value of
16200&$home$& that came from &%check_local_user%&.
168e428f 16201
4f578862
PH
16202When a router accepts an address and assigns it to a local transport (including
16203the cases when a &(redirect)& router generates a pipe, file, or autoreply
16204delivery), the home directory setting for the transport is taken from the first
16205of these values that is set:
168e428f 16206
9b371988
PH
16207.ilist
16208The &%home_directory%& option on the transport;
16209.next
16210The &%transport_home_directory%& option on the router;
16211.next
16212The password data if &%check_local_user%& is set on the router;
16213.next
16214The &%router_home_directory%& option on the router.
16215.endlist
16216
16217In other words, &%router_home_directory%& overrides the password data for the
168e428f
PH
16218router, but not for the transport.
16219
16220
16221
9b371988
PH
16222.option self routers string freeze
16223.cindex "MX record" "pointing to local host"
16224.cindex "local host" "MX pointing to"
168e428f 16225This option applies to those routers that use a recipient address to find a
9b371988
PH
16226list of remote hosts. Currently, these are the &(dnslookup)&, &(ipliteral)&,
16227and &(manualroute)& routers.
16228Certain configurations of the &(queryprogram)& router can also specify a list
168e428f
PH
16229of remote hosts.
16230Usually such routers are configured to send the message to a remote host via an
9b371988 16231&(smtp)& transport. The &%self%& option specifies what happens when the first
168e428f
PH
16232host on the list turns out to be the local host.
16233The way in which Exim checks for the local host is described in section
9b371988 16234&<<SECTreclocipadd>>&.
168e428f
PH
16235
16236Normally this situation indicates either an error in Exim's configuration (for
16237example, the router should be configured not to process this domain), or an
16238error in the DNS (for example, the MX should not point to this host). For this
16239reason, the default action is to log the incident, defer the address, and
16240freeze the message. The following alternatives are provided for use in special
16241cases:
16242
9b371988
PH
16243.vlist
16244.vitem &%defer%&
168e428f
PH
16245Delivery of the message is tried again later, but the message is not frozen.
16246
9b371988 16247.vitem "&%reroute%&: <&'domain'&>"
168e428f
PH
16248The domain is changed to the given domain, and the address is passed back to
16249be reprocessed by the routers. No rewriting of headers takes place. This
16250behaviour is essentially a redirection.
16251
9b371988 16252.vitem "&%reroute: rewrite:%& <&'domain'&>"
168e428f
PH
16253The domain is changed to the given domain, and the address is passed back to be
16254reprocessed by the routers. Any headers that contain the original domain are
16255rewritten.
16256
9b371988 16257.vitem &%pass%&
0a4e3112 16258.oindex "&%more%&"
f89d2485 16259.vindex "&$self_hostname$&"
168e428f 16260The router passes the address to the next router, or to the router named in the
9b371988
PH
16261&%pass_router%& option if it is set. This overrides &%no_more%&. During
16262subsequent routing and delivery, the variable &$self_hostname$& contains the
16263name of the local host that the router encountered. This can be used to
168e428f
PH
16264distinguish between different cases for hosts with multiple names. The
16265combination
9b371988
PH
16266.code
16267self = pass
16268no_more
16269.endd
168e428f 16270ensures that only those addresses that routed to the local host are passed on.
9b371988 16271Without &%no_more%&, addresses that were declined for other reasons would also
168e428f
PH
16272be passed to the next router.
16273
9b371988 16274.vitem &%fail%&
168e428f
PH
16275Delivery fails and an error report is generated.
16276
9b371988
PH
16277.vitem &%send%&
16278.cindex "local host" "sending to"
168e428f 16279The anomaly is ignored and the address is queued for the transport. This
9b371988
PH
16280setting should be used with extreme caution. For an &(smtp)& transport, it
16281makes sense only in cases where the program that is listening on the SMTP port
16282is not this version of Exim. That is, it must be some other MTA, or Exim with a
168e428f 16283different configuration file that handles the domain in another way.
9b371988 16284.endlist
168e428f
PH
16285
16286
16287
9b371988
PH
16288.option senders routers&!? "address list&!!" unset
16289.cindex "router" "checking senders"
168e428f
PH
16290If this option is set, the router is skipped unless the message's sender
16291address matches something on the list.
9b371988 16292See section &<<SECTrouprecon>>& for a list of the order in which preconditions
168e428f
PH
16293are evaluated.
16294
16295There are issues concerning verification when the running of routers is
9b371988
PH
16296dependent on the sender. When Exim is verifying the address in an &%errors_to%&
16297setting, it sets the sender to the null string. When using the &%-bt%& option
16298to check a configuration file, it is necessary also to use the &%-f%& option to
16299set an appropriate sender. For incoming mail, the sender is unset when
16300verifying the sender, but is available when verifying any recipients. If the
16301SMTP VRFY command is enabled, it must be used after MAIL if the sender address
16302matters.
16303
16304
16305.option translate_ip_address routers string&!! unset
16306.cindex "IP address" "translating"
16307.cindex "packet radio"
16308.cindex "router" "IP address translation"
168e428f
PH
16309There exist some rare networking situations (for example, packet radio) where
16310it is helpful to be able to translate IP addresses generated by normal routing
16311mechanisms into other IP addresses, thus performing a kind of manual IP
16312routing. This should be done only if the normal IP routing of the TCP/IP stack
16313is inadequate or broken. Because this is an extremely uncommon requirement, the
16314code to support this option is not included in the Exim binary unless
9b371988 16315SUPPORT_TRANSLATE_IP_ADDRESS=yes is set in &_Local/Makefile_&.
168e428f 16316
f89d2485 16317.vindex "&$host_address$&"
9b371988
PH
16318The &%translate_ip_address%& string is expanded for every IP address generated
16319by the router, with the generated address set in &$host_address$&. If the
168e428f
PH
16320expansion is forced to fail, no action is taken.
16321For any other expansion error, delivery of the message is deferred.
16322If the result of the expansion is an IP address, that replaces the original
9b371988
PH
16323address; otherwise the result is assumed to be a host name &-- this is looked
16324up using &[gethostbyname()]& (or &[getipnodebyname()]& when available) to
16325produce one or more replacement IP addresses. For example, to subvert all IP
16326addresses in some specific networks, this could be added to a router:
16327.code
168e428f 16328translate_ip_address = \
9b371988
PH
16329 ${lookup{${mask:$host_address/26}}lsearch{/some/file}\
16330 {$value}fail}}
16331.endd
168e428f 16332The file would contain lines like
9b371988
PH
16333.code
1633410.2.3.128/26 some.host
1633510.8.4.34/26 10.44.8.15
16336.endd
168e428f
PH
16337You should not make use of this facility unless you really understand what you
16338are doing.
16339
16340
16341
9b371988 16342.option transport routers string&!! unset
168e428f
PH
16343This option specifies the transport to be used when a router accepts an address
16344and sets it up for delivery. A transport is never needed if a router is used
16345only for verification. The value of the option is expanded at routing time,
9b371988
PH
16346after the expansion of &%errors_to%&, &%headers_add%&, and &%headers_remove%&,
16347and result must be the name of one of the configured transports. If it is not,
168e428f
PH
16348delivery is deferred.
16349
9b371988
PH
16350The &%transport%& option is not used by the &(redirect)& router, but it does
16351have some private options that set up transports for pipe and file deliveries
16352(see chapter &<<CHAPredirect>>&).
168e428f
PH
16353
16354
16355
9b371988
PH
16356.option transport_current_directory routers string&!! unset
16357.cindex "current directory for local transport"
168e428f
PH
16358This option associates a current directory with any address that is routed
16359to a local transport. This can happen either because a transport is
16360explicitly configured for the router, or because it generates a delivery to a
16361file or a pipe. During the delivery process (that is, at transport time), this
16362option string is expanded and is set as the current directory, unless
16363overridden by a setting on the transport.
16364If the expansion fails for any reason, including forced failure, an error is
16365logged, and delivery is deferred.
9b371988
PH
16366See chapter &<<CHAPenvironment>>& for details of the local delivery
16367environment.
168e428f
PH
16368
16369
16370
168e428f 16371
9b371988
PH
16372.option transport_home_directory routers string&!! "see below"
16373.cindex "home directory" "for local transport"
168e428f
PH
16374This option associates a home directory with any address that is routed to a
16375local transport. This can happen either because a transport is explicitly
16376configured for the router, or because it generates a delivery to a file or a
16377pipe. During the delivery process (that is, at transport time), the option
16378string is expanded and is set as the home directory, unless overridden by a
9b371988 16379setting of &%home_directory%& on the transport.
168e428f
PH
16380If the expansion fails for any reason, including forced failure, an error is
16381logged, and delivery is deferred.
16382
16383If the transport does not specify a home directory, and
9b371988 16384&%transport_home_directory%& is not set for the router, the home directory for
f89d2485 16385the transport is taken from the password data if &%check_local_user%& is set for
9b371988 16386the router. Otherwise it is taken from &%router_home_directory%& if that option
168e428f
PH
16387is set; if not, no home directory is set for the transport.
16388
9b371988 16389See chapter &<<CHAPenvironment>>& for further details of the local delivery
168e428f
PH
16390environment.
16391
16392
16393
16394
9b371988
PH
16395.option unseen routers boolean&!! false
16396.cindex "router" "carrying on after success"
168e428f 16397The result of string expansion for this option must be a valid boolean value,
9b371988 16398that is, one of the strings &"yes"&, &"no"&, &"true"&, or &"false"&. Any other
068aaea8
PH
16399result causes an error, and delivery is deferred. If the expansion is forced to
16400fail, the default value for the option (false) is used. Other failures cause
16401delivery to be deferred.
16402
168e428f
PH
16403When this option is set true, routing does not cease if the router accepts the
16404address. Instead, a copy of the incoming address is passed to the next router,
9b371988
PH
16405overriding a false setting of &%more%&. There is little point in setting
16406&%more%& false if &%unseen%& is always true, but it may be useful in cases when
16407the value of &%unseen%& contains expansion items (and therefore, presumably, is
16408sometimes true and sometimes false).
16409
9b371988 16410.cindex "copy of message (&%unseen%& option)"
0a4e3112
PH
16411Setting the &%unseen%& option has a similar effect to the &%unseen%& command
16412qualifier in filter files. It can be used to cause copies of messages to be
16413delivered to some other destination, while also carrying out a normal delivery.
16414In effect, the current address is made into a &"parent"& that has two children
16415&-- one that is delivered as specified by this router, and a clone that goes on
16416to be routed further. For this reason, &%unseen%& may not be combined with the
9b371988 16417&%one_time%& option in a &(redirect)& router.
9b371988
PH
16418
16419&*Warning*&: Header lines added to the address (or specified for removal) by
16420this router or by previous routers affect the &"unseen"& copy of the message
16421only. The clone that continues to be processed by further routers starts with
0a4e3112
PH
16422no added headers and none specified for removal. For a &%redirect%& router, if
16423a generated address is the same as the incoming address, this can lead to
16424duplicate addresses with different header modifications. Exim does not do
16425duplicate deliveries (except, in certain circumstances, to pipes -- see section
16426&<<SECTdupaddr>>&), but it is undefined which of the duplicates is discarded,
16427so this ambiguous situation should be avoided. The &%repeat_use%& option of the
16428&%redirect%& router may be of help.
16429
16430Unlike the handling of header modifications, any data that was set by the
16431&%address_data%& option in the current or previous routers &'is'& passed on to
16432subsequent routers.
168e428f
PH
16433
16434
9b371988
PH
16435.option user routers string&!! "see below"
16436.cindex "uid (user id)" "local delivery"
16437.cindex "local transports" "uid and gid"
16438.cindex "transport" "local"
16439.cindex "router" "user for filter processing"
16440.cindex "filter" "user for processing"
168e428f
PH
16441When a router queues an address for a transport, and the transport does not
16442specify a user, the user given here is used when running the delivery process.
16443The user may be specified numerically or by name. If expansion fails, the
16444error is logged and delivery is deferred.
9b371988
PH
16445This user is also used by the &(redirect)& router when running a filter file.
16446The default is unset, except when &%check_local_user%& is set. In this case,
168e428f 16447the default is taken from the password information. If the user is specified as
9b371988
PH
16448a name, and &%group%& is not set, the group associated with the user is used.
16449See also &%initgroups%& and &%group%& and the discussion in chapter
16450&<<CHAPenvironment>>&.
168e428f
PH
16451
16452
168e428f 16453
9b371988
PH
16454.option verify routers&!? boolean true
16455Setting this option has the effect of setting &%verify_sender%& and
16456&%verify_recipient%& to the same value.
168e428f
PH
16457
16458
9b371988
PH
16459.option verify_only routers&!? boolean false
16460.cindex "EXPN" "with &%verify_only%&"
f89d2485 16461.oindex "&%-bv%&"
9b371988 16462.cindex "router" "used only when verifying"
168e428f 16463If this option is set, the router is used only when verifying an address or
9b371988
PH
16464testing with the &%-bv%& option, not when actually doing a delivery, testing
16465with the &%-bt%& option, or running the SMTP EXPN command. It can be further
16466restricted to verifying only senders or recipients by means of
16467&%verify_sender%& and &%verify_recipient%&.
168e428f 16468
9b371988 16469&*Warning*&: When the router is being run to verify addresses for an incoming
168e428f
PH
16470SMTP message, Exim is not running as root, but under its own uid. If the router
16471accesses any files, you need to make sure that they are accessible to the Exim
16472user or group.
16473
16474
9b371988 16475.option verify_recipient routers&!? boolean true
168e428f
PH
16476If this option is false, the router is skipped when verifying recipient
16477addresses
9b371988
PH
16478or testing recipient verification using &%-bv%&.
16479See section &<<SECTrouprecon>>& for a list of the order in which preconditions
168e428f
PH
16480are evaluated.
16481
16482
9b371988 16483.option verify_sender routers&!? boolean true
168e428f 16484If this option is false, the router is skipped when verifying sender addresses
9b371988
PH
16485or testing sender verification using &%-bvs%&.
16486See section &<<SECTrouprecon>>& for a list of the order in which preconditions
168e428f 16487are evaluated.
4f578862
PH
16488.ecindex IIDgenoprou1
16489.ecindex IIDgenoprou2
168e428f
PH
16490
16491
16492
16493
16494
16495
9b371988
PH
16496. ////////////////////////////////////////////////////////////////////////////
16497. ////////////////////////////////////////////////////////////////////////////
168e428f 16498
f89d2485 16499.chapter "The accept router" "CHID4"
9b371988
PH
16500.cindex "&(accept)& router"
16501.cindex "routers" "&(accept)&"
16502The &(accept)& router has no private options of its own. Unless it is being
16503used purely for verification (see &%verify_only%&) a transport is required to
16504be defined by the generic &%transport%& option. If the preconditions that are
168e428f
PH
16505specified by generic options are met, the router accepts the address and queues
16506it for the given transport. The most common use of this router is for setting
16507up deliveries to local mailboxes. For example:
9b371988
PH
16508.code
16509localusers:
16510 driver = accept
16511 domains = mydomain.example
16512 check_local_user
16513 transport = local_delivery
16514.endd
16515The &%domains%& condition in this example checks the domain of the address, and
16516&%check_local_user%& checks that the local part is the login of a local user.
16517When both preconditions are met, the &(accept)& router runs, and queues the
16518address for the &(local_delivery)& transport.
168e428f
PH
16519
16520
16521
16522
16523
16524
9b371988
PH
16525. ////////////////////////////////////////////////////////////////////////////
16526. ////////////////////////////////////////////////////////////////////////////
168e428f 16527
9b371988 16528.chapter "The dnslookup router" "CHAPdnslookup"
4f578862
PH
16529.scindex IIDdnsrou1 "&(dnslookup)& router"
16530.scindex IIDdnsrou2 "routers" "&(dnslookup)&"
9b371988 16531The &(dnslookup)& router looks up the hosts that handle mail for the
168e428f 16532recipient's domain in the DNS. A transport must always be set for this router,
9b371988 16533unless &%verify_only%& is set.
168e428f 16534
9b371988 16535If SRV support is configured (see &%check_srv%& below), Exim first searches for
168e428f
PH
16536SRV records. If none are found, or if SRV support is not configured,
16537MX records are looked up. If no MX records exist, address records are sought.
9b371988
PH
16538However, &%mx_domains%& can be set to disable the direct use of address
16539records.
168e428f
PH
16540
16541MX records of equal priority are sorted by Exim into a random order. Exim then
16542looks for address records for the host names obtained from MX or SRV records.
16543When a host has more than one IP address, they are sorted into a random order,
16544except that IPv6 addresses are always sorted before IPv4 addresses. If all the
9b371988 16545IP addresses found are discarded by a setting of the &%ignore_target_hosts%&
168e428f
PH
16546generic option, the router declines.
16547
16548Unless they have the highest priority (lowest MX value), MX records that point
9b371988 16549to the local host, or to any host name that matches &%hosts_treat_as_local%&,
168e428f
PH
16550are discarded, together with any other MX records of equal or lower priority.
16551
9b371988
PH
16552.cindex "MX record" "pointing to local host"
16553.cindex "local host" "MX pointing to"
0a4e3112 16554.oindex "&%self%&" "in &(dnslookup)& router"
168e428f 16555If the host pointed to by the highest priority MX record, or looked up as an
9b371988
PH
16556address record, is the local host, or matches &%hosts_treat_as_local%&, what
16557happens is controlled by the generic &%self%& option.
168e428f
PH
16558
16559
9b371988 16560.section "Problems with DNS lookups" "SECTprowitdnsloo"
168e428f
PH
16561There have been problems with DNS servers when SRV records are looked up.
16562Some mis-behaving servers return a DNS error or timeout when a non-existent
16563SRV record is sought. Similar problems have in the past been reported for
9b371988 16564MX records. The global &%dns_again_means_nonexist%& option can help with this
168e428f
PH
16565problem, but it is heavy-handed because it is a global option.
16566
9b371988
PH
16567For this reason, there are two options, &%srv_fail_domains%& and
16568&%mx_fail_domains%&, that control what happens when a DNS lookup in a
16569&(dnslookup)& router results in a DNS failure or a &"try again"& response. If
16570an attempt to look up an SRV or MX record causes one of these results, and the
16571domain matches the relevant list, Exim behaves as if the DNS had responded &"no
16572such record"&. In the case of an SRV lookup, this means that the router
16573proceeds to look for MX records; in the case of an MX lookup, it proceeds to
16574look for A or AAAA records, unless the domain matches &%mx_domains%&, in which
16575case routing fails.
168e428f
PH
16576
16577
16578
168e428f 16579
f89d2485 16580.section "Private options for dnslookup" "SECID118"
9b371988
PH
16581.cindex "options" "&(dnslookup)& router"
16582The private options for the &(dnslookup)& router are as follows:
168e428f 16583
9b371988
PH
16584.option check_secondary_mx dnslookup boolean false
16585.cindex "MX record" "checking for secondary"
168e428f
PH
16586If this option is set, the router declines unless the local host is found in
16587(and removed from) the list of hosts obtained by MX lookup. This can be used to
16588process domains for which the local host is a secondary mail exchanger
16589differently to other domains. The way in which Exim decides whether a host is
9b371988 16590the local host is described in section &<<SECTreclocipadd>>&.
168e428f
PH
16591
16592
9b371988
PH
16593.option check_srv dnslookup string&!! unset
16594.cindex "SRV record" "enabling use of"
16595The &(dnslookup)& router supports the use of SRV records (see RFC 2782) in
168e428f 16596addition to MX and address records. The support is disabled by default. To
9b371988 16597enable SRV support, set the &%check_srv%& option to the name of the service
168e428f 16598required. For example,
9b371988
PH
16599.code
16600check_srv = smtp
16601.endd
168e428f
PH
16602looks for SRV records that refer to the normal smtp service. The option is
16603expanded, so the service name can vary from message to message or address
16604to address. This might be helpful if SRV records are being used for a
9b371988 16605submission service. If the expansion is forced to fail, the &%check_srv%&
168e428f
PH
16606option is ignored, and the router proceeds to look for MX records in the
16607normal way.
16608
16609When the expansion succeeds, the router searches first for SRV records for
16610the given service (it assumes TCP protocol). A single SRV record with a
9b371988
PH
16611host name that consists of just a single dot indicates &"no such service for
16612this domain"&; if this is encountered, the router declines. If other kinds of
168e428f
PH
16613SRV record are found, they are used to construct a host list for delivery
16614according to the rules of RFC 2782. MX records are not sought in this case.
16615
16616When no SRV records are found, MX records (and address records) are sought in
16617the traditional way. In other words, SRV records take precedence over MX
16618records, just as MX records take precedence over address records. Note that
16619this behaviour is not sanctioned by RFC 2782, though a previous draft RFC
16620defined it. It is apparently believed that MX records are sufficient for email
16621and that SRV records should not be used for this purpose. However, SRV records
9b371988 16622have an additional &"weight"& feature which some people might find useful when
168e428f
PH
16623trying to split an SMTP load between hosts of different power.
16624
9b371988
PH
16625See section &<<SECTprowitdnsloo>>& above for a discussion of Exim's behaviour
16626when there is a DNS lookup error.
168e428f
PH
16627
16628
168e428f 16629
9b371988
PH
16630.option mx_domains dnslookup "domain list&!!" unset
16631.cindex "MX record" "required to exist"
16632.cindex "SRV record" "required to exist"
16633A domain that matches &%mx_domains%& is required to have either an MX or an SRV
f89d2485 16634record in order to be recognized. (The name of this option could be improved.)
9b371988
PH
16635For example, if all the mail hosts in &'fict.example'& are known to have MX
16636records, except for those in &'discworld.fict.example'&, you could use this
168e428f 16637setting:
9b371988
PH
16638.code
16639mx_domains = ! *.discworld.fict.example : *.fict.example
16640.endd
168e428f
PH
16641This specifies that messages addressed to a domain that matches the list but
16642has no MX record should be bounced immediately instead of being routed using
16643the address record.
16644
16645
9b371988 16646.option mx_fail_domains dnslookup "domain list&!!" unset
168e428f
PH
16647If the DNS lookup for MX records for one of the domains in this list causes a
16648DNS lookup error, Exim behaves as if no MX records were found. See section
9b371988 16649&<<SECTprowitdnsloo>>& for more discussion.
168e428f
PH
16650
16651
16652
168e428f 16653
9b371988
PH
16654.option qualify_single dnslookup boolean true
16655.cindex "DNS" "resolver options"
16656.cindex "DNS" "qualifying single-component names"
168e428f
PH
16657When this option is true, the resolver option RES_DEFNAMES is set for DNS
16658lookups. Typically, but not standardly, this causes the resolver to qualify
16659single-component names with the default domain. For example, on a machine
9b371988
PH
16660called &'dictionary.ref.example'&, the domain &'thesaurus'& would be changed to
16661&'thesaurus.ref.example'& inside the resolver. For details of what your
16662resolver actually does, consult your man pages for &'resolver'& and
16663&'resolv.conf'&.
168e428f
PH
16664
16665
16666
9b371988
PH
16667.option rewrite_headers dnslookup boolean true
16668.cindex "rewriting" "header lines"
16669.cindex "header lines" "rewriting"
168e428f
PH
16670If the domain name in the address that is being processed is not fully
16671qualified, it may be expanded to its full form by a DNS lookup. For example, if
9b371988
PH
16672an address is specified as &'dormouse@teaparty'&, the domain might be
16673expanded to &'teaparty.wonderland.fict.example'&. Domain expansion can also
16674occur as a result of setting the &%widen_domains%& option. If
16675&%rewrite_headers%& is true, all occurrences of the abbreviated domain name in
16676any &'Bcc:'&, &'Cc:'&, &'From:'&, &'Reply-to:'&, &'Sender:'&, and &'To:'&
16677header lines of the message are rewritten with the full domain name.
168e428f
PH
16678
16679This option should be turned off only when it is known that no message is
16680ever going to be sent outside an environment where the abbreviation makes
16681sense.
16682
16683When an MX record is looked up in the DNS and matches a wildcard record, name
16684servers normally return a record containing the name that has been looked up,
16685making it impossible to detect whether a wildcard was present or not. However,
16686some name servers have recently been seen to return the wildcard entry. If the
16687name returned by a DNS lookup begins with an asterisk, it is not used for
16688header rewriting.
16689
16690
9b371988
PH
16691.option same_domain_copy_routing dnslookup boolean false
16692.cindex "address" "copying routing"
16693Addresses with the same domain are normally routed by the &(dnslookup)& router
168e428f
PH
16694to the same list of hosts. However, this cannot be presumed, because the router
16695options and preconditions may refer to the local part of the address. By
16696default, therefore, Exim routes each address in a message independently. DNS
16697servers run caches, so repeated DNS lookups are not normally expensive, and in
16698any case, personal messages rarely have more than a few recipients.
16699
16700If you are running mailing lists with large numbers of subscribers at the same
9b371988
PH
16701domain, and you are using a &(dnslookup)& router which is independent of the
16702local part, you can set &%same_domain_copy_routing%& to bypass repeated DNS
16703lookups for identical domains in one message. In this case, when &(dnslookup)&
168e428f
PH
16704routes an address to a remote transport, any other unrouted addresses in the
16705message that have the same domain are automatically given the same routing
16706without processing them independently,
16707provided the following conditions are met:
16708
9b371988
PH
16709.ilist
16710No router that processed the address specified &%headers_add%& or
16711&%headers_remove%&.
16712.next
16713The router did not change the address in any way, for example, by &"widening"&
168e428f 16714the domain.
9b371988 16715.endlist
168e428f
PH
16716
16717
16718
16719
9b371988
PH
16720.option search_parents dnslookup boolean false
16721.cindex "DNS" "resolver options"
168e428f 16722When this option is true, the resolver option RES_DNSRCH is set for DNS
9b371988
PH
16723lookups. This is different from the &%qualify_single%& option in that it
16724applies to domains containing dots. Typically, but not standardly, it causes
16725the resolver to search for the name in the current domain and in parent
16726domains. For example, on a machine in the &'fict.example'& domain, if looking
16727up &'teaparty.wonderland'& failed, the resolver would try
16728&'teaparty.wonderland.fict.example'&. For details of what your resolver
16729actually does, consult your man pages for &'resolver'& and &'resolv.conf'&.
168e428f
PH
16730
16731Setting this option true can cause problems in domains that have a wildcard MX
16732record, because any domain that does not have its own MX record matches the
16733local wildcard.
16734
16735
16736
9b371988 16737.option srv_fail_domains dnslookup "domain list&!!" unset
168e428f
PH
16738If the DNS lookup for SRV records for one of the domains in this list causes a
16739DNS lookup error, Exim behaves as if no SRV records were found. See section
9b371988 16740&<<SECTprowitdnsloo>>& for more discussion.
168e428f
PH
16741
16742
16743
168e428f 16744
9b371988
PH
16745.option widen_domains dnslookup "string list" unset
16746.cindex "domain" "partial; widening"
168e428f
PH
16747If a DNS lookup fails and this option is set, each of its strings in turn is
16748added onto the end of the domain, and the lookup is tried again. For example,
16749if
9b371988
PH
16750.code
16751widen_domains = fict.example:ref.example
16752.endd
16753is set and a lookup of &'klingon.dictionary'& fails,
16754&'klingon.dictionary.fict.example'& is looked up, and if this fails,
16755&'klingon.dictionary.ref.example'& is tried. Note that the &%qualify_single%&
16756and &%search_parents%& options can cause some widening to be undertaken inside
4f578862
PH
16757the DNS resolver. &%widen_domains%& is not applied to sender addresses
16758when verifying, unless &%rewrite_headers%& is false (not the default).
9b371988
PH
16759
16760
f89d2485 16761.section "Effect of qualify_single and search_parents" "SECID119"
168e428f 16762When a domain from an envelope recipient is changed by the resolver as a result
9b371988
PH
16763of the &%qualify_single%& or &%search_parents%& options, Exim rewrites the
16764corresponding address in the message's header lines unless &%rewrite_headers%&
168e428f
PH
16765is set false. Exim then re-routes the address, using the full domain.
16766
16767These two options affect only the DNS lookup that takes place inside the router
16768for the domain of the address that is being routed. They do not affect lookups
16769such as that implied by
9b371988
PH
16770.code
16771domains = @mx_any
16772.endd
168e428f
PH
16773that may happen while processing a router precondition before the router is
16774entered. No widening ever takes place for these lookups.
4f578862
PH
16775.ecindex IIDdnsrou1
16776.ecindex IIDdnsrou2
168e428f
PH
16777
16778
16779
16780
16781
16782
16783
16784
16785
9b371988
PH
16786. ////////////////////////////////////////////////////////////////////////////
16787. ////////////////////////////////////////////////////////////////////////////
168e428f 16788
f89d2485 16789.chapter "The ipliteral router" "CHID5"
9b371988
PH
16790.cindex "&(ipliteral)& router"
16791.cindex "domain literal" "routing"
16792.cindex "routers" "&(ipliteral)&"
168e428f 16793This router has no private options. Unless it is being used purely for
9b371988
PH
16794verification (see &%verify_only%&) a transport is required to be defined by the
16795generic &%transport%& option. The router accepts the address if its domain part
4f578862
PH
16796takes the form of an RFC 2822 domain literal. For example, the &(ipliteral)&
16797router handles the address
9b371988
PH
16798.code
16799root@[192.168.1.1]
16800.endd
4f578862
PH
16801by setting up delivery to the host with that IP address. IPv4 domain literals
16802consist of an IPv4 address enclosed in square brackets. IPv6 domain literals
16803are similar, but the address is preceded by &`ipv6:`&. For example:
16804.code
16805postmaster@[ipv6:fe80::a00:20ff:fe86:a061.5678]
16806.endd
16807Exim allows &`ipv4:`& before IPv4 addresses, for consistency, and on the
16808grounds that sooner or later somebody will try it.
168e428f 16809
0a4e3112 16810.oindex "&%self%&" "in &(ipliteral)& router"
9b371988 16811If the IP address matches something in &%ignore_target_hosts%&, the router
168e428f 16812declines. If an IP literal turns out to refer to the local host, the generic
9b371988 16813&%self%& option determines what happens.
168e428f
PH
16814
16815The RFCs require support for domain literals; however, their use is
16816controversial in today's Internet. If you want to use this router, you must
9b371988 16817also set the main configuration option &%allow_domain_literals%&. Otherwise,
168e428f
PH
16818Exim will not recognize the domain literal syntax in addresses.
16819
16820
16821
9b371988
PH
16822. ////////////////////////////////////////////////////////////////////////////
16823. ////////////////////////////////////////////////////////////////////////////
168e428f 16824
f89d2485 16825.chapter "The iplookup router" "CHID6"
9b371988
PH
16826.cindex "&(iplookup)& router"
16827.cindex "routers" "&(iplookup)&"
16828The &(iplookup)& router was written to fulfil a specific requirement in
168e428f
PH
16829Cambridge University (which in fact no longer exists). For this reason, it is
16830not included in the binary of Exim by default. If you want to include it, you
16831must set
9b371988
PH
16832.code
16833ROUTER_IPLOOKUP=yes
16834.endd
16835in your &_Local/Makefile_& configuration file.
168e428f 16836
9b371988 16837The &(iplookup)& router routes an address by sending it over a TCP or UDP
168e428f 16838connection to one or more specific hosts. The host can then return the same or
9b371988 16839a different address &-- in effect rewriting the recipient address in the
168e428f
PH
16840message's envelope. The new address is then passed on to subsequent routers. If
16841this process fails, the address can be passed on to other routers, or delivery
9b371988
PH
16842can be deferred. Since &(iplookup)& is just a rewriting router, a transport
16843must not be specified for it.
168e428f 16844
9b371988
PH
16845.cindex "options" "&(iplookup)& router"
16846.option hosts iplookup string unset
168e428f 16847This option must be supplied. Its value is a colon-separated list of host
9b371988
PH
16848names. The hosts are looked up using &[gethostbyname()]&
16849(or &[getipnodebyname()]& when available)
168e428f 16850and are tried in order until one responds to the query. If none respond, what
9b371988 16851happens is controlled by &%optional%&.
168e428f
PH
16852
16853
9b371988
PH
16854.option optional iplookup boolean false
16855If &%optional%& is true, if no response is obtained from any host, the address
16856is passed to the next router, overriding &%no_more%&. If &%optional%& is false,
168e428f
PH
16857delivery to the address is deferred.
16858
16859
9b371988
PH
16860.option port iplookup integer 0
16861.cindex "port" "&(iplookup)& router"
168e428f
PH
16862This option must be supplied. It specifies the port number for the TCP or UDP
16863call.
16864
16865
9b371988
PH
16866.option protocol iplookup string udp
16867This option can be set to &"udp"& or &"tcp"& to specify which of the two
16868protocols is to be used.
168e428f 16869
168e428f 16870
f89d2485 16871.option query iplookup string&!! "see below"
168e428f 16872This defines the content of the query that is sent to the remote hosts. The
f89d2485
PH
16873default value is:
16874.code
16875$local_part@$domain $local_part@$domain
16876.endd
16877The repetition serves as a way of checking that a response is to the correct
16878query in the default case (see &%response_pattern%& below).
168e428f
PH
16879
16880
9b371988 16881.option reroute iplookup string&!! unset
168e428f
PH
16882If this option is not set, the rerouted address is precisely the byte string
16883returned by the remote host, up to the first white space, if any. If set, the
16884string is expanded to form the rerouted address. It can include parts matched
9b371988
PH
16885in the response by &%response_pattern%& by means of numeric variables such as
16886&$1$&, &$2$&, etc. The variable &$0$& refers to the entire input string,
168e428f 16887whether or not a pattern is in use. In all cases, the rerouted address must end
9b371988 16888up in the form &'local_part@domain'&.
168e428f 16889
168e428f 16890
9b371988 16891.option response_pattern iplookup string unset
168e428f
PH
16892This option can be set to a regular expression that is applied to the string
16893returned from the remote host. If the pattern does not match the response, the
9b371988
PH
16894router declines. If &%response_pattern%& is not set, no checking of the
16895response is done, unless the query was defaulted, in which case there is a
16896check that the text returned after the first white space is the original
16897address. This checks that the answer that has been received is in response to
16898the correct question. For example, if the response is just a new domain, the
16899following could be used:
16900.code
16901response_pattern = ^([^@]+)$
16902reroute = $local_part@$1
16903.endd
16904
16905.option timeout iplookup time 5s
168e428f 16906This specifies the amount of time to wait for a response from the remote
9b371988 16907machine. The same timeout is used for the &[connect()]& function for a TCP
168e428f
PH
16908call. It does not apply to UDP.
16909
16910
16911
16912
9b371988
PH
16913. ////////////////////////////////////////////////////////////////////////////
16914. ////////////////////////////////////////////////////////////////////////////
168e428f 16915
f89d2485 16916.chapter "The manualroute router" "CHID7"
4f578862
PH
16917.scindex IIDmanrou1 "&(manualroute)& router"
16918.scindex IIDmanrou2 "routers" "&(manualroute)&"
9b371988
PH
16919.cindex "domain" "manually routing"
16920The &(manualroute)& router is so-called because it provides a way of manually
168e428f
PH
16921routing an address according to its domain. It is mainly used when you want to
16922route addresses to remote hosts according to your own rules, bypassing the
9b371988 16923normal DNS routing that looks up MX records. However, &(manualroute)& can also
168e428f
PH
16924route to local transports, a facility that may be useful if you want to save
16925messages for dial-in hosts in local files.
16926
9b371988
PH
16927The &(manualroute)& router compares a list of domain patterns with the domain
16928it is trying to route. If there is no match, the router declines. Each pattern
16929has associated with it a list of hosts and some other optional data, which may
168e428f 16930include a transport. The combination of a pattern and its data is called a
9b371988
PH
16931&"routing rule"&. For patterns that do not have an associated transport, the
16932generic &%transport%& option must specify a transport, unless the router is
16933being used purely for verification (see &%verify_only%&).
168e428f 16934
f89d2485 16935.vindex "&$host$&"
168e428f
PH
16936In the case of verification, matching the domain pattern is sufficient for the
16937router to accept the address. When actually routing an address for delivery,
16938an address that matches a domain pattern is queued for the associated
16939transport. If the transport is not a local one, a host list must be associated
16940with the pattern; IP addresses are looked up for the hosts, and these are
16941passed to the transport along with the mail address. For local transports, a
9b371988 16942host list is optional. If it is present, it is passed in &$host$& as a single
168e428f
PH
16943text string.
16944
9b371988
PH
16945The list of routing rules can be provided as an inline string in
16946&%route_list%&, or the data can be obtained by looking up the domain in a file
16947or database by setting &%route_data%&. Only one of these settings may appear in
16948any one instance of &(manualroute)&. The format of routing rules is described
16949below, following the list of private options.
168e428f 16950
168e428f 16951
9b371988 16952.section "Private options for manualroute" "SECTprioptman"
168e428f 16953
9b371988
PH
16954.cindex "options" "&(manualroute)& router"
16955The private options for the &(manualroute)& router are as follows:
168e428f 16956
f89d2485
PH
16957.option host_all_ignored manualroute string defer
16958See &%host_find_failed%&.
168e428f 16959
9b371988
PH
16960.option host_find_failed manualroute string freeze
16961This option controls what happens when &(manualroute)& tries to find an IP
168e428f 16962address for a host, and the host does not exist. The option can be set to one
f89d2485 16963of the following values:
9b371988
PH
16964.code
16965decline
16966defer
16967fail
16968freeze
f89d2485 16969ignore
9b371988
PH
16970pass
16971.endd
f89d2485
PH
16972The default (&"freeze"&) assumes that this state is a serious configuration
16973error. The difference between &"pass"& and &"decline"& is that the former
16974forces the address to be passed to the next router (or the router defined by
9b371988 16975&%pass_router%&),
0a4e3112 16976.oindex "&%more%&"
9b371988
PH
16977overriding &%no_more%&, whereas the latter passes the address to the next
16978router only if &%more%& is true.
168e428f 16979
f89d2485
PH
16980The value &"ignore"& causes Exim to completely ignore a host whose IP address
16981cannot be found. If all the hosts in the list are ignored, the behaviour is
16982controlled by the &%host_all_ignored%& option. This takes the same values
16983as &%host_find_failed%&, except that it cannot be set to &"ignore"&.
16984
16985The &%host_find_failed%& option applies only to a definite &"does not exist"&
16986state; if a host lookup gets a temporary error, delivery is deferred unless the
16987generic &%pass_on_timeout%& option is set.
168e428f 16988
168e428f 16989
9b371988
PH
16990.option hosts_randomize manualroute boolean false
16991.cindex "randomized host list"
16992.cindex "host" "list of; randomized"
168e428f
PH
16993If this option is set, the order of the items in a host list in a routing rule
16994is randomized each time the list is used, unless an option in the routing rule
16995overrides (see below). Randomizing the order of a host list can be used to do
16996crude load sharing. However, if more than one mail address is routed by the
16997same router to the same host list, the host lists are considered to be the same
16998(even though they may be randomized into different orders) for the purpose of
16999deciding whether to batch the deliveries into a single SMTP transaction.
17000
9b371988 17001When &%hosts_randomize%& is true, a host list may be split
168e428f
PH
17002into groups whose order is separately randomized. This makes it possible to
17003set up MX-like behaviour. The boundaries between groups are indicated by an
9b371988
PH
17004item that is just &`+`& in the host list. For example:
17005.code
17006route_list = * host1:host2:host3:+:host4:host5
17007.endd
168e428f
PH
17008The order of the first three hosts and the order of the last two hosts is
17009randomized for each use, but the first three always end up before the last two.
9b371988
PH
17010If &%hosts_randomize%& is not set, a &`+`& item in the list is ignored. If a
17011randomized host list is passed to an &(smtp)& transport that also has
17012&%hosts_randomize set%&, the list is not re-randomized.
168e428f
PH
17013
17014
9b371988 17015.option route_data manualroute string&!! unset
168e428f
PH
17016If this option is set, it must expand to yield the data part of a routing rule.
17017Typically, the expansion string includes a lookup based on the domain. For
17018example:
9b371988
PH
17019.code
17020route_data = ${lookup{$domain}dbm{/etc/routes}}
17021.endd
168e428f
PH
17022If the expansion is forced to fail, or the result is an empty string, the
17023router declines. Other kinds of expansion failure cause delivery to be
17024deferred.
17025
17026
0a4e3112 17027.option route_list manualroute "string list" unset
168e428f
PH
17028This string is a list of routing rules, in the form defined below. Note that,
17029unlike most string lists, the items are separated by semicolons. This is so
17030that they may contain colon-separated host lists.
17031
17032
9b371988
PH
17033.option same_domain_copy_routing manualroute boolean false
17034.cindex "address" "copying routing"
17035Addresses with the same domain are normally routed by the &(manualroute)&
17036router to the same list of hosts. However, this cannot be presumed, because the
17037router options and preconditions may refer to the local part of the address. By
168e428f
PH
17038default, therefore, Exim routes each address in a message independently. DNS
17039servers run caches, so repeated DNS lookups are not normally expensive, and in
17040any case, personal messages rarely have more than a few recipients.
17041
17042If you are running mailing lists with large numbers of subscribers at the same
9b371988
PH
17043domain, and you are using a &(manualroute)& router which is independent of the
17044local part, you can set &%same_domain_copy_routing%& to bypass repeated DNS
17045lookups for identical domains in one message. In this case, when
17046&(manualroute)& routes an address to a remote transport, any other unrouted
17047addresses in the message that have the same domain are automatically given the
17048same routing without processing them independently. However, this is only done
17049if &%headers_add%& and &%headers_remove%& are unset.
168e428f
PH
17050
17051
17052
17053
f89d2485 17054.section "Routing rules in route_list" "SECID120"
9b371988 17055The value of &%route_list%& is a string consisting of a sequence of routing
168e428f 17056rules, separated by semicolons. If a semicolon is needed in a rule, it can be
068aaea8 17057entered as two semicolons. Alternatively, the list separator can be changed as
9b371988 17058described (for colon-separated lists) in section &<<SECTlistconstruct>>&.
068aaea8 17059Empty rules are ignored. The format of each rule is
9b371988
PH
17060.display
17061<&'domain pattern'&> <&'list of hosts'&> <&'options'&>
17062.endd
168e428f
PH
17063The following example contains two rules, each with a simple domain pattern and
17064no options:
9b371988 17065.code
168e428f
PH
17066route_list = \
17067 dict.ref.example mail-1.ref.example:mail-2.ref.example ; \
17068 thes.ref.example mail-3.ref.example:mail-4.ref.example
9b371988 17069.endd
168e428f
PH
17070The three parts of a rule are separated by white space. The pattern and the
17071list of hosts can be enclosed in quotes if necessary, and if they are, the
9b371988 17072usual quoting rules apply. Each rule in a &%route_list%& must start with a
168e428f
PH
17073single domain pattern, which is the only mandatory item in the rule. The
17074pattern is in the same format as one item in a domain list (see section
9b371988 17075&<<SECTdomainlist>>&),
168e428f
PH
17076except that it may not be the name of an interpolated file.
17077That is, it may be wildcarded, or a regular expression, or a file or database
17078lookup (with semicolons doubled, because of the use of semicolon as a separator
9b371988 17079in a &%route_list%&).
168e428f 17080
9b371988 17081The rules in &%route_list%& are searched in order until one of the patterns
168e428f
PH
17082matches the domain that is being routed. The list of hosts and then options are
17083then used as described below. If there is no match, the router declines. When
9b371988 17084&%route_list%& is set, &%route_data%& must not be set.
168e428f
PH
17085
17086
17087
f89d2485 17088.section "Routing rules in route_data" "SECID121"
9b371988 17089The use of &%route_list%& is convenient when there are only a small number of
168e428f 17090routing rules. For larger numbers, it is easier to use a file or database to
9b371988
PH
17091hold the routing information, and use the &%route_data%& option instead.
17092The value of &%route_data%& is a list of hosts, followed by (optional) options.
17093Most commonly, &%route_data%& is set as a string that contains an
168e428f
PH
17094expansion lookup. For example, suppose we place two routing rules in a file
17095like this:
9b371988
PH
17096.code
17097dict.ref.example: mail-1.ref.example:mail-2.ref.example
17098thes.ref.example: mail-3.ref.example:mail-4.ref.example
17099.endd
168e428f 17100This data can be accessed by setting
9b371988
PH
17101.code
17102route_data = ${lookup{$domain}lsearch{/the/file/name}}
17103.endd
168e428f 17104Failure of the lookup results in an empty string, causing the router to
9b371988 17105decline. However, you do not have to use a lookup in &%route_data%&. The only
168e428f
PH
17106requirement is that the result of expanding the string is a list of hosts,
17107possibly followed by options, separated by white space. The list of hosts must
17108be enclosed in quotes if it contains white space.
17109
17110
17111
17112
f89d2485 17113.section "Format of the list of hosts" "SECID122"
9b371988
PH
17114A list of hosts, whether obtained via &%route_data%& or &%route_list%&, is
17115always separately expanded before use. If the expansion fails, the router
17116declines. The result of the expansion must be a colon-separated list of names
17117and/or IP addresses, optionally also including ports. The format of each item
17118in the list is described in the next section. The list separator can be changed
17119as described in section &<<SECTlistconstruct>>&.
168e428f 17120
9b371988 17121If the list of hosts was obtained from a &%route_list%& item, the following
168e428f
PH
17122variables are set during its expansion:
17123
9b371988
PH
17124.ilist
17125.cindex "numerical variables (&$1$& &$2$& etc)" "in &(manualroute)& router"
168e428f 17126If the domain was matched against a regular expression, the numeric variables
9b371988
PH
17127&$1$&, &$2$&, etc. may be set. For example:
17128.code
17129route_list = ^domain(\d+) host-$1.text.example
17130.endd
17131.next
17132&$0$& is always set to the entire domain.
17133.next
17134&$1$& is also set when partial matching is done in a file lookup.
17135
17136.next
f89d2485 17137.vindex "&$value$&"
168e428f 17138If the pattern that matched the domain was a lookup item, the data that was
9b371988
PH
17139looked up is available in the expansion variable &$value$&. For example:
17140.code
17141route_list = lsearch;;/some/file.routes $value
17142.endd
17143.endlist
068aaea8
PH
17144
17145Note the doubling of the semicolon in the pattern that is necessary because
17146semicolon is the default route list separator.
17147
17148
17149
9b371988 17150.section "Format of one host item" "SECTformatonehostitem"
068aaea8
PH
17151Each item in the list of hosts is either a host name or an IP address,
17152optionally with an attached port number. When no port is given, an IP address
17153is not enclosed in brackets. When a port is specified, it overrides the port
17154specification on the transport. The port is separated from the name or address
17155by a colon. This leads to some complications:
168e428f 17156
9b371988
PH
17157.ilist
17158Because colon is the default separator for the list of hosts, either
068aaea8
PH
17159the colon that specifies a port must be doubled, or the list separator must
17160be changed. The following two examples have the same effect:
9b371988
PH
17161.code
17162route_list = * "host1.tld::1225 : host2.tld::1226"
17163route_list = * "<+ host1.tld:1225 + host2.tld:1226"
17164.endd
17165.next
17166When IPv6 addresses are involved, it gets worse, because they contain
068aaea8
PH
17167colons of their own. To make this case easier, it is permitted to
17168enclose an IP address (either v4 or v6) in square brackets if a port
17169number follows. For example:
9b371988
PH
17170.code
17171route_list = * "</ [10.1.1.1]:1225 / [::1]:1226"
17172.endd
17173.endlist
9b371988
PH
17174
17175.section "How the list of hosts is used" "SECThostshowused"
17176When an address is routed to an &(smtp)& transport by &(manualroute)&, each of
168e428f 17177the hosts is tried, in the order specified, when carrying out the SMTP
9b371988
PH
17178delivery. However, the order can be changed by setting the &%hosts_randomize%&
17179option, either on the router (see section &<<SECTprioptman>>& above), or on the
168e428f
PH
17180transport.
17181
17182Hosts may be listed by name or by IP address. An unadorned name in the list of
9b371988 17183hosts is interpreted as a host name. A name that is followed by &`/MX`& is
168e428f
PH
17184interpreted as an indirection to a sublist of hosts obtained by looking up MX
17185records in the DNS. For example:
9b371988
PH
17186.code
17187route_list = * x.y.z:p.q.r/MX:e.f.g
17188.endd
068aaea8
PH
17189If this feature is used with a port specifier, the port must come last. For
17190example:
9b371988
PH
17191.code
17192route_list = * dom1.tld/mx::1225
17193.endd
9b371988 17194If the &%hosts_randomize%& option is set, the order of the items in the list is
168e428f 17195randomized before any lookups are done. Exim then scans the list; for any name
9b371988 17196that is not followed by &`/MX`& it looks up an IP address. If this turns out to
168e428f
PH
17197be an interface on the local host and the item is not the first in the list,
17198Exim discards it and any subsequent items. If it is the first item, what
17199happens is controlled by the
0a4e3112 17200.oindex "&%self%&" "in &(manualroute)& router"
9b371988 17201&%self%& option of the router.
168e428f 17202
9b371988 17203A name on the list that is followed by &`/MX`& is replaced with the list of
168e428f 17204hosts obtained by looking up MX records for the name. This is always a DNS
9b371988
PH
17205lookup; the &%bydns%& and &%byname%& options (see section &<<SECThowoptused>>&
17206below) are not relevant here. The order of these hosts is determined by the
17207preference values in the MX records, according to the usual rules. Because
17208randomizing happens before the MX lookup, it does not affect the order that is
17209defined by MX preferences.
168e428f
PH
17210
17211If the local host is present in the sublist obtained from MX records, but is
17212not the most preferred host in that list, it and any equally or less
17213preferred hosts are removed before the sublist is inserted into the main list.
17214
17215If the local host is the most preferred host in the MX list, what happens
9b371988 17216depends on where in the original list of hosts the &`/MX`& item appears. If it
168e428f
PH
17217is not the first item (that is, there are previous hosts in the main list),
17218Exim discards this name and any subsequent items in the main list.
17219
17220If the MX item is first in the list of hosts, and the local host is the
9b371988 17221most preferred host, what happens is controlled by the &%self%& option of the
168e428f
PH
17222router.
17223
17224DNS failures when lookup up the MX records are treated in the same way as DNS
9b371988
PH
17225failures when looking up IP addresses: &%pass_on_timeout%& and
17226&%host_find_failed%& are used when relevant.
168e428f 17227
9b371988 17228The generic &%ignore_target_hosts%& option applies to all hosts in the list,
168e428f
PH
17229whether obtained from an MX lookup or not.
17230
17231
17232
9b371988 17233.section "How the options are used" "SECThowoptused"
168e428f
PH
17234The options are a sequence of words; in practice no more than three are ever
17235present. One of the words can be the name of a transport; this overrides the
9b371988 17236&%transport%& option on the router for this particular routing rule only. The
168e428f
PH
17237other words (if present) control randomization of the list of hosts on a
17238per-rule basis, and how the IP addresses of the hosts are to be found when
17239routing to a remote transport. These options are as follows:
17240
9b371988
PH
17241.ilist
17242&%randomize%&: randomize the order of the hosts in this list, overriding the
17243setting of &%hosts_randomize%& for this routing rule only.
17244.next
17245&%no_randomize%&: do not randomize the order of the hosts in this list,
17246overriding the setting of &%hosts_randomize%& for this routing rule only.
17247.next
17248&%byname%&: use &[getipnodebyname()]& (&[gethostbyname()]& on older systems) to
168e428f 17249find IP addresses. This function may ultimately cause a DNS lookup, but it may
9b371988
PH
17250also look in &_/etc/hosts_& or other sources of information.
17251.next
17252&%bydns%&: look up address records for the hosts directly in the DNS; fail if
168e428f
PH
17253no address records are found. If there is a temporary DNS error (such as a
17254timeout), delivery is deferred.
9b371988 17255.endlist
168e428f
PH
17256
17257For example:
9b371988 17258.code
168e428f
PH
17259route_list = domain1 host1:host2:host3 randomize bydns;\
17260 domain2 host4:host5
9b371988
PH
17261.endd
17262If neither &%byname%& nor &%bydns%& is given, Exim behaves as follows: First, a
17263DNS lookup is done. If this yields anything other than HOST_NOT_FOUND, that
17264result is used. Otherwise, Exim goes on to try a call to &[getipnodebyname()]&
17265or &[gethostbyname()]&, and the result of the lookup is the result of that
168e428f
PH
17266call.
17267
9b371988
PH
17268&*Warning*&: It has been discovered that on some systems, if a DNS lookup
17269called via &[getipnodebyname()]& times out, HOST_NOT_FOUND is returned
168e428f 17270instead of TRY_AGAIN. That is why the default action is to try a DNS
9b371988 17271lookup first. Only if that gives a definite &"no such host"& is the local
168e428f
PH
17272function called.
17273
17274
17275
17276If no IP address for a host can be found, what happens is controlled by the
9b371988 17277&%host_find_failed%& option.
168e428f 17278
f89d2485 17279.vindex "&$host$&"
168e428f 17280When an address is routed to a local transport, IP addresses are not looked up.
9b371988 17281The host list is passed to the transport in the &$host$& variable.
168e428f
PH
17282
17283
17284
f89d2485 17285.section "Manualroute examples" "SECID123"
9b371988 17286In some of the examples that follow, the presence of the &%remote_smtp%&
168e428f
PH
17287transport, as defined in the default configuration file, is assumed:
17288
9b371988
PH
17289.ilist
17290.cindex "smart host" "example router"
17291The &(manualroute)& router can be used to forward all external mail to a
17292&'smart host'&. If you have set up, in the main part of the configuration, a
17293named domain list that contains your local domains, for example:
17294.code
17295domainlist local_domains = my.domain.example
17296.endd
17297You can arrange for all other domains to be routed to a smart host by making
168e428f 17298your first router something like this:
9b371988
PH
17299.code
17300smart_route:
17301 driver = manualroute
17302 domains = !+local_domains
17303 transport = remote_smtp
17304 route_list = * smarthost.ref.example
17305.endd
168e428f 17306This causes all non-local addresses to be sent to the single host
9b371988 17307&'smarthost.ref.example'&. If a colon-separated list of smart hosts is given,
168e428f 17308they are tried in order
9b371988 17309(but you can use &%hosts_randomize%& to vary the order each time).
168e428f 17310Another way of configuring the same thing is this:
9b371988
PH
17311.code
17312smart_route:
17313 driver = manualroute
17314 transport = remote_smtp
17315 route_list = !+local_domains smarthost.ref.example
17316.endd
168e428f 17317There is no difference in behaviour between these two routers as they stand.
9b371988
PH
17318However, they behave differently if &%no_more%& is added to them. In the first
17319example, the router is skipped if the domain does not match the &%domains%&
168e428f 17320precondition; the following router is always tried. If the router runs, it
9b371988
PH
17321always matches the domain and so can never decline. Therefore, &%no_more%&
17322would have no effect. In the second case, the router is never skipped; it
17323always runs. However, if it doesn't match the domain, it declines. In this case
17324&%no_more%& would prevent subsequent routers from running.
17325
17326.next
17327.cindex "mail hub example"
17328A &'mail hub'& is a host which receives mail for a number of domains via MX
168e428f
PH
17329records in the DNS and delivers it via its own private routing mechanism. Often
17330the final destinations are behind a firewall, with the mail hub being the one
17331machine that can connect to machines both inside and outside the firewall. The
9b371988 17332&(manualroute)& router is usually used on a mail hub to route incoming messages
168e428f 17333to the correct hosts. For a small number of domains, the routing can be inline,
9b371988 17334using the &%route_list%& option, but for a larger number a file or database
168e428f 17335lookup is easier to manage.
9b371988 17336
168e428f
PH
17337If the domain names are in fact the names of the machines to which the mail is
17338to be sent by the mail hub, the configuration can be quite simple. For
9b371988
PH
17339example:
17340.code
17341hub_route:
17342 driver = manualroute
17343 transport = remote_smtp
17344 route_list = *.rhodes.tvs.example $domain
17345.endd
17346This configuration routes domains that match &`*.rhodes.tvs.example`& to hosts
168e428f
PH
17347whose names are the same as the mail domains. A similar approach can be taken
17348if the host name can be obtained from the domain name by a string manipulation
17349that the expansion facilities can handle. Otherwise, a lookup based on the
17350domain can be used to find the host:
9b371988
PH
17351.code
17352through_firewall:
17353 driver = manualroute
17354 transport = remote_smtp
17355 route_data = ${lookup {$domain} cdb {/internal/host/routes}}
17356.endd
168e428f
PH
17357The result of the lookup must be the name or IP address of the host (or
17358hosts) to which the address is to be routed. If the lookup fails, the route
17359data is empty, causing the router to decline. The address then passes to the
17360next router.
17361
9b371988
PH
17362.next
17363.cindex "batched SMTP output example"
17364.cindex "SMTP" "batched outgoing; example"
17365You can use &(manualroute)& to deliver messages to pipes or files in batched
168e428f
PH
17366SMTP format for onward transportation by some other means. This is one way of
17367storing mail for a dial-up host when it is not connected. The route list entry
17368can be as simple as a single domain name in a configuration like this:
9b371988
PH
17369.code
17370save_in_file:
17371 driver = manualroute
17372 transport = batchsmtp_appendfile
17373 route_list = saved.domain.example
17374.endd
168e428f
PH
17375though often a pattern is used to pick up more than one domain. If there are
17376several domains or groups of domains with different transport requirements,
17377different transports can be listed in the routing information:
9b371988 17378.code
168e428f
PH
17379save_in_file:
17380 driver = manualroute
17381 route_list = \
17382 *.saved.domain1.example $domain batch_appendfile; \
17383 *.saved.domain2.example \
17384 ${lookup{$domain}dbm{/domain2/hosts}{$value}fail} \
17385 batch_pipe
9b371988 17386.endd
f89d2485
PH
17387.vindex "&$domain$&"
17388.vindex "&$host$&"
9b371988
PH
17389The first of these just passes the domain in the &$host$& variable, which
17390doesn't achieve much (since it is also in &$domain$&), but the second does a
168e428f
PH
17391file lookup to find a value to pass, causing the router to decline to handle
17392the address if the lookup fails.
17393
9b371988
PH
17394.next
17395.cindex "UUCP" "example of router for"
168e428f 17396Routing mail directly to UUCP software is a specific case of the use of
9b371988 17397&(manualroute)& in a gateway to another mail environment. This is an example of
168e428f 17398one way it can be done:
9b371988 17399.code
168e428f
PH
17400# Transport
17401uucp:
17402 driver = pipe
17403 user = nobody
17404 command = /usr/local/bin/uux -r - \
17405 ${substr_-5:$host}!rmail ${local_part}
17406 return_fail_output = true
17407
17408# Router
17409uucphost:
17410 transport = uucp
17411 driver = manualroute
17412 route_data = \
17413 ${lookup{$domain}lsearch{/usr/local/exim/uucphosts}}
9b371988
PH
17414.endd
17415The file &_/usr/local/exim/uucphosts_& contains entries like
17416.code
17417darksite.ethereal.example: darksite.UUCP
17418.endd
17419It can be set up more simply without adding and removing &".UUCP"& but this way
168e428f 17420makes clear the distinction between the domain name
9b371988
PH
17421&'darksite.ethereal.example'& and the UUCP host name &'darksite'&.
17422.endlist
4f578862
PH
17423.ecindex IIDmanrou1
17424.ecindex IIDmanrou2
168e428f
PH
17425
17426
17427
17428
17429
17430
17431
17432
9b371988
PH
17433. ////////////////////////////////////////////////////////////////////////////
17434. ////////////////////////////////////////////////////////////////////////////
168e428f 17435
9b371988 17436.chapter "The queryprogram router" "CHAPdriverlast"
4f578862
PH
17437.scindex IIDquerou1 "&(queryprogram)& router"
17438.scindex IIDquerou2 "routers" "&(queryprogram)&"
9b371988
PH
17439.cindex "routing" "by external program"
17440The &(queryprogram)& router routes an address by running an external command
17441and acting on its output. This is an expensive way to route, and is intended
17442mainly for use in lightly-loaded systems, or for performing experiments.
17443However, if it is possible to use the precondition options (&%domains%&,
17444&%local_parts%&, etc) to skip this router for most addresses, it could sensibly
17445be used in special cases, even on a busy host. There are the following private
17446options:
17447.cindex "options" "&(queryprogram)& router"
168e428f 17448
9b371988 17449.option command queryprogram string&!! unset
168e428f
PH
17450This option must be set. It specifies the command that is to be run. The
17451command is split up into a command name and arguments, and then each is
9b371988
PH
17452expanded separately (exactly as for a &(pipe)& transport, described in chapter
17453&<<CHAPpipetransport>>&).
168e428f 17454
168e428f 17455
9b371988
PH
17456.option command_group queryprogram string unset
17457.cindex "gid (group id)" "in &(queryprogram)& router"
4f578862
PH
17458This option specifies a gid to be set when running the command while routing an
17459address for deliver. It must be set if &%command_user%& specifies a numerical
17460uid. If it begins with a digit, it is interpreted as the numerical value of the
17461gid. Otherwise it is looked up using &[getgrnam()]&.
168e428f
PH
17462
17463
9b371988
PH
17464.option command_user queryprogram string unset
17465.cindex "uid (user id)" "for &(queryprogram)&"
168e428f 17466This option must be set. It specifies the uid which is set when running the
4f578862
PH
17467command while routing an address for delivery. If the value begins with a digit,
17468it is interpreted as the numerical value of the uid. Otherwise, it is looked up
17469using &[getpwnam()]& to obtain a value for the uid and, if &%command_group%& is
17470not set, a value for the gid also.
17471
17472&*Warning:*& Changing uid and gid is possible only when Exim is running as
17473root, which it does during a normal delivery in a conventional configuration.
17474However, when an address is being verified during message reception, Exim is
17475usually running as the Exim user, not as root. If the &(queryprogram)& router
17476is called from a non-root process, Exim cannot change uid or gid before running
17477the command. In this circumstance the command runs under the current uid and
17478gid.
168e428f 17479
168e428f 17480
9b371988 17481.option current_directory queryprogram string /
168e428f
PH
17482This option specifies an absolute path which is made the current directory
17483before running the command.
17484
17485
9b371988 17486.option timeout queryprogram time 1h
168e428f
PH
17487If the command does not complete within the timeout period, its process group
17488is killed and the message is frozen. A value of zero time specifies no
17489timeout.
17490
17491
17492The standard output of the command is connected to a pipe, which is read when
17493the command terminates. It should consist of a single line of output,
17494containing up to five fields, separated by white space. The maximum length of
17495the line is 1023 characters. Longer lines are silently truncated. The first
17496field is one of the following words (case-insensitive):
17497
9b371988
PH
17498.ilist
17499&'Accept'&: routing succeeded; the remaining fields specify what to do (see
168e428f 17500below).
9b371988
PH
17501.next
17502&'Decline'&: the router declines; pass the address to the next router, unless
17503&%no_more%& is set.
17504.next
17505&'Fail'&: routing failed; do not pass the address to any more routers. Any
168e428f
PH
17506subsequent text on the line is an error message. If the router is run as part
17507of address verification during an incoming SMTP message, the message is
17508included in the SMTP response.
9b371988
PH
17509.next
17510&'Defer'&: routing could not be completed at this time; try again later. Any
168e428f
PH
17511subsequent text on the line is an error message which is logged. It is not
17512included in any SMTP response.
9b371988
PH
17513.next
17514&'Freeze'&: the same as &'defer'&, except that the message is frozen.
17515.next
17516&'Pass'&: pass the address to the next router (or the router specified by
17517&%pass_router%&), overriding &%no_more%&.
17518.next
17519&'Redirect'&: the message is redirected. The remainder of the line is a list of
168e428f 17520new addresses, which are routed independently, starting with the first router,
9b371988
PH
17521or the router specified by &%redirect_router%&, if set.
17522.endlist
168e428f 17523
9b371988 17524When the first word is &'accept'&, the remainder of the line consists of a
168e428f
PH
17525number of keyed data values, as follows (split into two lines here, to fit on
17526the page):
9b371988
PH
17527.code
17528ACCEPT TRANSPORT=<transport> HOSTS=<list of hosts>
17529LOOKUP=byname|bydns DATA=<text>
17530.endd
168e428f 17531The data items can be given in any order, and all are optional. If no transport
9b371988
PH
17532is included, the transport specified by the generic &%transport%& option is
17533used. The list of hosts and the lookup type are needed only if the transport is
17534an &(smtp)& transport that does not itself supply a list of hosts.
168e428f 17535
9b371988 17536The format of the list of hosts is the same as for the &(manualroute)& router.
068aaea8 17537As well as host names and IP addresses with optional port numbers, as described
9b371988
PH
17538in section &<<SECTformatonehostitem>>&, it may contain names followed by
17539&`/MX`& to specify sublists of hosts that are obtained by looking up MX records
17540(see section &<<SECThostshowused>>&).
168e428f
PH
17541
17542If the lookup type is not specified, Exim behaves as follows when trying to
17543find an IP address for each host: First, a DNS lookup is done. If this yields
17544anything other than HOST_NOT_FOUND, that result is used. Otherwise, Exim
9b371988 17545goes on to try a call to &[getipnodebyname()]& or &[gethostbyname()]&, and the
168e428f
PH
17546result of the lookup is the result of that call.
17547
f89d2485 17548.vindex "&$address_data$&"
9b371988 17549If the DATA field is set, its value is placed in the &$address_data$&
168e428f 17550variable. For example, this return line
9b371988
PH
17551.code
17552accept hosts=x1.y.example:x2.y.example data="rule1"
17553.endd
168e428f 17554routes the address to the default transport, passing a list of two hosts. When
9b371988 17555the transport runs, the string &"rule1"& is in &$address_data$&.
4f578862
PH
17556.ecindex IIDquerou1
17557.ecindex IIDquerou2
168e428f
PH
17558
17559
17560
17561
9b371988
PH
17562. ////////////////////////////////////////////////////////////////////////////
17563. ////////////////////////////////////////////////////////////////////////////
168e428f 17564
9b371988 17565.chapter "The redirect router" "CHAPredirect"
4f578862
PH
17566.scindex IIDredrou1 "&(redirect)& router"
17567.scindex IIDredrou2 "routers" "&(redirect)&"
9b371988
PH
17568.cindex "alias file" "in a &(redirect)& router"
17569.cindex "address redirection" "&(redirect)& router"
17570The &(redirect)& router handles several kinds of address redirection. Its most
168e428f 17571common uses are for resolving local part aliases from a central alias file
9b371988 17572(usually called &_/etc/aliases_&) and for handling users' personal &_.forward_&
168e428f
PH
17573files, but it has many other potential uses. The incoming address can be
17574redirected in several different ways:
17575
9b371988
PH
17576.ilist
17577It can be replaced by one or more new addresses which are themselves routed
168e428f 17578independently.
9b371988
PH
17579.next
17580It can be routed to be delivered to a given file or directory.
17581.next
17582It can be routed to be delivered to a specified pipe command.
17583.next
17584It can cause an automatic reply to be generated.
17585.next
f89d2485 17586It can be forced to fail, optionally with a custom error message.
9b371988 17587.next
f89d2485 17588It can be temporarily deferred, optionally with a custom message.
9b371988
PH
17589.next
17590It can be discarded.
17591.endlist
17592
17593The generic &%transport%& option must not be set for &(redirect)& routers.
168e428f 17594However, there are some private options which define transports for delivery to
9b371988
PH
17595files and pipes, and for generating autoreplies. See the &%file_transport%&,
17596&%pipe_transport%& and &%reply_transport%& descriptions below.
168e428f
PH
17597
17598
17599
f89d2485 17600.section "Redirection data" "SECID124"
168e428f 17601The router operates by interpreting a text string which it obtains either by
9b371988
PH
17602expanding the contents of the &%data%& option, or by reading the entire
17603contents of a file whose name is given in the &%file%& option. These two
17604options are mutually exclusive. The first is commonly used for handling system
17605aliases, in a configuration like this:
17606.code
17607system_aliases:
17608 driver = redirect
17609 data = ${lookup{$local_part}lsearch{/etc/aliases}}
17610.endd
168e428f 17611If the lookup fails, the expanded string in this example is empty. When the
9b371988 17612expansion of &%data%& results in an empty string, the router declines. A forced
168e428f
PH
17613expansion failure also causes the router to decline; other expansion failures
17614cause delivery to be deferred.
17615
9b371988
PH
17616A configuration using &%file%& is commonly used for handling users'
17617&_.forward_& files, like this:
17618.code
17619userforward:
17620 driver = redirect
17621 check_local_user
17622 file = $home/.forward
17623 no_verify
17624.endd
168e428f 17625If the file does not exist, or causes no action to be taken (for example, it is
9b371988 17626empty or consists only of comments), the router declines. &*Warning*&: This
168e428f
PH
17627is not the case when the file contains syntactically valid items that happen to
17628yield empty addresses, for example, items containing only RFC 2822 address
17629comments.
17630
17631
17632
f89d2485 17633.section "Forward files and address verification" "SECID125"
9b371988
PH
17634.cindex "address redirection" "while verifying"
17635It is usual to set &%no_verify%& on &(redirect)& routers which handle users'
17636&_.forward_& files, as in the example above. There are two reasons for this:
168e428f 17637
9b371988
PH
17638.ilist
17639When Exim is receiving an incoming SMTP message from a remote host, it is
db9452a9
PH
17640running under the Exim uid, not as root. Exim is unable to change uid to read
17641the file as the user, and it may not be able to read it as the Exim user. So in
17642practice the router may not be able to operate.
9b371988
PH
17643.next
17644However, even when the router can operate, the existence of a &_.forward_& file
168e428f
PH
17645is unimportant when verifying an address. What should be checked is whether the
17646local part is a valid user name or not. Cutting out the redirection processing
17647saves some resources.
9b371988 17648.endlist
168e428f
PH
17649
17650
17651
17652
17653
17654
f89d2485 17655.section "Interpreting redirection data" "SECID126"
9b371988
PH
17656.cindex "Sieve filter" "specifying in redirection data"
17657.cindex "filter" "specifying in redirection data"
17658The contents of the data string, whether obtained from &%data%& or &%file%&,
17659can be interpreted in two different ways:
168e428f 17660
9b371988
PH
17661.ilist
17662If the &%allow_filter%& option is set true, and the data begins with the text
17663&"#Exim filter"& or &"#Sieve filter"&, it is interpreted as a list of
17664&'filtering'& instructions in the form of an Exim or Sieve filter file,
168e428f 17665respectively. Details of the syntax and semantics of filter files are described
9b371988 17666in a separate document entitled &'Exim's interfaces to mail filtering'&; this
168e428f 17667document is intended for use by end users.
9b371988
PH
17668.next
17669Otherwise, the data must be a comma-separated list of redirection items, as
168e428f 17670described in the next section.
9b371988 17671.endlist
168e428f 17672
9b371988 17673When a message is redirected to a file (a &"mail folder"&), the file name given
168e428f 17674in a non-filter redirection list must always be an absolute path. A filter may
9b371988
PH
17675generate a relative path &-- how this is handled depends on the transport's
17676configuration. See section &<<SECTfildiropt>>& for a discussion of this issue
17677for the &(appendfile)& transport.
168e428f
PH
17678
17679
17680
9b371988
PH
17681.section "Items in a non-filter redirection list" "SECTitenonfilred"
17682.cindex "address redirection" "non-filter list items"
168e428f
PH
17683When the redirection data is not an Exim or Sieve filter, for example, if it
17684comes from a conventional alias or forward file, it consists of a list of
17685addresses, file names, pipe commands, or certain special items (see section
9b371988
PH
17686&<<SECTspecitredli>>& below). The special items can be individually enabled or
17687disabled by means of options whose names begin with &%allow_%& or &%forbid_%&,
168e428f
PH
17688depending on their default values. The items in the list are separated by
17689commas or newlines.
17690If a comma is required in an item, the entire item must be enclosed in double
17691quotes.
17692
17693Lines starting with a # character are comments, and are ignored, and # may
17694also appear following a comma, in which case everything between the # and the
17695next newline character is ignored.
17696
17697If an item is entirely enclosed in double quotes, these are removed. Otherwise
17698double quotes are retained because some forms of mail address require their use
068aaea8 17699(but never to enclose the entire address). In the following description,
9b371988 17700&"item"& refers to what remains after any surrounding double quotes have been
068aaea8 17701removed.
168e428f 17702
f89d2485 17703.vindex "&$local_part$&"
9b371988
PH
17704&*Warning*&: If you use an Exim expansion to construct a redirection address,
17705and the expansion contains a reference to &$local_part$&, you should make use
17706of the &%quote_local_part%& expansion operator, in case the local part contains
068aaea8 17707special characters. For example, to redirect all mail for the domain
9b371988 17708&'obsolete.example'&, retaining the existing local part, you could use this
168e428f 17709setting:
9b371988
PH
17710.code
17711data = ${quote_local_part:$local_part}@newdomain.example
17712.endd
168e428f
PH
17713
17714
9b371988
PH
17715.section "Redirecting to a local mailbox" "SECTredlocmai"
17716.cindex "routing" "loops in"
f89d2485 17717.cindex "loop" "while routing, avoidance of"
9b371988 17718.cindex "address redirection" "to local mailbox"
168e428f
PH
17719A redirection item may safely be the same as the address currently under
17720consideration. This does not cause a routing loop, because a router is
17721automatically skipped if any ancestor of the address that is being processed
17722is the same as the current address and was processed by the current router.
17723Such an address is therefore passed to the following routers, so it is handled
17724as if there were no redirection. When making this loop-avoidance test, the
17725complete local part, including any prefix or suffix, is used.
17726
9b371988 17727.cindex "address redirection" "local part without domain"
168e428f
PH
17728Specifying the same local part without a domain is a common usage in personal
17729filter files when the user wants to have messages delivered to the local
17730mailbox and also forwarded elsewhere. For example, the user whose login is
9b371988
PH
17731&'cleo'& might have a &_.forward_& file containing this:
17732.code
17733cleo, cleopatra@egypt.example
17734.endd
17735.cindex "backslash in alias file"
17736.cindex "alias file" "backslash in"
168e428f 17737For compatibility with other MTAs, such unqualified local parts may be
f89d2485 17738preceded by &"\"&, but this is not a requirement for loop prevention. However,
168e428f
PH
17739it does make a difference if more than one domain is being handled
17740synonymously.
17741
9b371988
PH
17742If an item begins with &"\"& and the rest of the item parses as a valid RFC
177432822 address that does not include a domain, the item is qualified using the
17744domain of the incoming address. In the absence of a leading &"\"&, unqualified
17745addresses are qualified using the value in &%qualify_recipient%&, but you can
17746force the incoming domain to be used by setting &%qualify_preserve_domain%&.
168e428f
PH
17747
17748Care must be taken if there are alias names for local users.
17749Consider an MTA handling a single local domain where the system alias file
17750contains:
9b371988
PH
17751.code
17752Sam.Reman: spqr
17753.endd
17754Now suppose that Sam (whose login id is &'spqr'&) wants to save copies of
168e428f
PH
17755messages in the local mailbox, and also forward copies elsewhere. He creates
17756this forward file:
9b371988
PH
17757.code
17758Sam.Reman, spqr@reme.elsewhere.example
17759.endd
17760With these settings, an incoming message addressed to &'Sam.Reman'& fails. The
17761&(redirect)& router for system aliases does not process &'Sam.Reman'& the
168e428f
PH
17762second time round, because it has previously routed it,
17763and the following routers presumably cannot handle the alias. The forward file
17764should really contain
9b371988
PH
17765.code
17766spqr, spqr@reme.elsewhere.example
17767.endd
17768but because this is such a common error, the &%check_ancestor%& option (see
168e428f 17769below) exists to provide a way to get round it. This is normally set on a
9b371988 17770&(redirect)& router that is handling users' &_.forward_& files.
168e428f
PH
17771
17772
17773
9b371988 17774.section "Special items in redirection lists" "SECTspecitredli"
168e428f
PH
17775In addition to addresses, the following types of item may appear in redirection
17776lists (that is, in non-filter redirection data):
17777
9b371988
PH
17778.ilist
17779.cindex "pipe" "in redirection list"
17780.cindex "address redirection" "to pipe"
17781An item is treated as a pipe command if it begins with &"|"& and does not parse
168e428f 17782as a valid RFC 2822 address that includes a domain. A transport for running the
9b371988 17783command must be specified by the &%pipe_transport%& option.
168e428f
PH
17784Normally, either the router or the transport specifies a user and a group under
17785which to run the delivery. The default is to use the Exim user and group.
9b371988 17786
168e428f
PH
17787Single or double quotes can be used for enclosing the individual arguments of
17788the pipe command; no interpretation of escapes is done for single quotes. If
17789the command contains a comma character, it is necessary to put the whole item
17790in double quotes, for example:
9b371988
PH
17791.code
17792"|/some/command ready,steady,go"
17793.endd
168e428f
PH
17794since items in redirection lists are terminated by commas. Do not, however,
17795quote just the command. An item such as
9b371988
PH
17796.code
17797|"/some/command ready,steady,go"
17798.endd
168e428f
PH
17799is interpreted as a pipe with a rather strange command name, and no arguments.
17800
9b371988
PH
17801.next
17802.cindex "file" "in redirection list"
17803.cindex "address redirection" "to file"
17804An item is interpreted as a path name if it begins with &"/"& and does not
17805parse as a valid RFC 2822 address that includes a domain. For example,
17806.code
17807/home/world/minbari
17808.endd
168e428f 17809is treated as a file name, but
9b371988
PH
17810.code
17811/s=molari/o=babylon/@x400gate.way
17812.endd
168e428f 17813is treated as an address. For a file name, a transport must be specified using
9b371988 17814the &%file_transport%& option. However, if the generated path name ends with a
168e428f 17815forward slash character, it is interpreted as a directory name rather than a
9b371988
PH
17816file name, and &%directory_transport%& is used instead.
17817
168e428f
PH
17818Normally, either the router or the transport specifies a user and a group under
17819which to run the delivery. The default is to use the Exim user and group.
9b371988
PH
17820
17821.cindex "&_/dev/null_&"
17822However, if a redirection item is the path &_/dev/null_&, delivery to it is
17823bypassed at a high level, and the log entry shows &"**bypassed**"&
168e428f
PH
17824instead of a transport name. In this case the user and group are not used.
17825
9b371988
PH
17826.next
17827.cindex "included address list"
17828.cindex "address redirection" "included external list"
168e428f 17829If an item is of the form
9b371988
PH
17830.code
17831:include:<path name>
17832.endd
168e428f 17833a list of further items is taken from the given file and included at that
9b371988
PH
17834point. &*Note*&: Such a file can not be a filter file; it is just an
17835out-of-line addition to the list. The items in the included list are separated
17836by commas or newlines and are not subject to expansion. If this is the first
17837item in an alias list in an &(lsearch)& file, a colon must be used to terminate
17838the alias name. This example is incorrect:
17839.code
17840list1 :include:/opt/lists/list1
17841.endd
168e428f 17842It must be given as
9b371988
PH
17843.code
17844list1: :include:/opt/lists/list1
17845.endd
17846.next
17847.cindex "address redirection" "to black hole"
168e428f 17848Sometimes you want to throw away mail to a particular local part. Making the
9b371988
PH
17849&%data%& option expand to an empty string does not work, because that causes
17850the router to decline. Instead, the alias item
17851.cindex "black hole"
17852.cindex "abandoning mail"
f89d2485
PH
17853&':blackhole:'& can be used. It does what its name implies. No delivery is
17854done, and no error message is generated. This has the same effect as specifing
17855&_/dev/null_& as a destination, but it can be independently disabled.
9b371988 17856
f89d2485 17857&*Warning*&: If &':blackhole:'& appears anywhere in a redirection list, no
168e428f
PH
17858delivery is done for the original local part, even if other redirection items
17859are present. If you are generating a multi-item list (for example, by reading a
17860database) and need the ability to provide a no-op item, you must use
9b371988
PH
17861&_/dev/null_&.
17862
17863.next
17864.cindex "delivery" "forcing failure"
17865.cindex "delivery" "forcing deferral"
17866.cindex "failing delivery" "forcing"
f89d2485 17867.cindex "deferred delivery, forcing"
9b371988 17868.cindex "customizing" "failure message"
168e428f
PH
17869An attempt to deliver a particular address can be deferred or forced to fail by
17870redirection items of the form
9b371988
PH
17871.code
17872:defer:
17873:fail:
17874.endd
71e1673f 17875.new
400eda43
NM
17876respectively. When a redirection list contains such an item, it applies
17877to the entire redirection; any other items in the list are ignored. Any
17878text following &':fail:'& or &':defer:'& is placed in the error text
17879associated with the failure. For example, an alias file might contain:
71e1673f 17880.wen
9b371988
PH
17881.code
17882X.Employee: :fail: Gone away, no forwarding address
17883.endd
168e428f
PH
17884In the case of an address that is being verified from an ACL or as the subject
17885of a
f89d2485 17886.cindex "VRFY" "error text, display of"
168e428f
PH
17887VRFY command, the text is included in the SMTP error response by
17888default.
f89d2485 17889.cindex "EXPN" "error text, display of"
5abeaa6e
PH
17890The text is not included in the response to an EXPN command. In non-SMTP cases
17891the text is included in the error message that Exim generates.
17892
17893.cindex "SMTP" "error codes"
17894By default, Exim sends a 451 SMTP code for a &':defer:'&, and 550 for
17895&':fail:'&. However, if the message starts with three digits followed by a
17896space, optionally followed by an extended code of the form &'n.n.n'&, also
17897followed by a space, and the very first digit is the same as the default error
17898code, the code from the message is used instead. If the very first digit is
17899incorrect, a panic error is logged, and the default code is used. You can
17900suppress the use of the supplied code in a redirect router by setting the
17901&%forbid_smtp_code%& option true. In this case, any SMTP code is quietly
17902ignored.
9b371988 17903
f89d2485 17904.vindex "&$acl_verify_message$&"
168e428f 17905In an ACL, an explicitly provided message overrides the default, but the
9b371988 17906default message is available in the variable &$acl_verify_message$& and can
5abeaa6e 17907therefore be included in a custom message if this is desired.
9b371988
PH
17908
17909Normally the error text is the rest of the redirection list &-- a comma does
17910not terminate it &-- but a newline does act as a terminator. Newlines are not
17911normally present in alias expansions. In &(lsearch)& lookups they are removed
17912as part of the continuation process, but they may exist in other kinds of
17913lookup and in &':include:'& files.
17914
168e428f 17915During routing for message delivery (as opposed to verification), a redirection
9b371988
PH
17916containing &':fail:'& causes an immediate failure of the incoming address,
17917whereas &':defer:'& causes the message to remain on the queue so that a
168e428f
PH
17918subsequent delivery attempt can happen at a later time. If an address is
17919deferred for too long, it will ultimately fail, because the normal retry
17920rules still apply.
17921
9b371988
PH
17922.next
17923.cindex "alias file" "exception to default"
168e428f 17924Sometimes it is useful to use a single-key search type with a default (see
9b371988
PH
17925chapter &<<CHAPfdlookup>>&) to look up aliases. However, there may be a need
17926for exceptions to the default. These can be handled by aliasing them to
f89d2485
PH
17927&':unknown:'&. This differs from &':fail:'& in that it causes the &(redirect)&
17928router to decline, whereas &':fail:'& forces routing to fail. A lookup which
17929results in an empty redirection list has the same effect.
9b371988
PH
17930.endlist
17931
17932
0a4e3112 17933.section "Duplicate addresses" "SECTdupaddr"
9b371988 17934.cindex "duplicate addresses"
f89d2485 17935.cindex "address duplicate, discarding"
9b371988 17936.cindex "pipe" "duplicated"
168e428f
PH
17937Exim removes duplicate addresses from the list to which it is delivering, so as
17938to deliver just one copy to each address. This does not apply to deliveries
17939routed to pipes by different immediate parent addresses, but an indirect
17940aliasing scheme of the type
9b371988
PH
17941.code
17942pipe: |/some/command $local_part
17943localpart1: pipe
17944localpart2: pipe
17945.endd
168e428f 17946does not work with a message that is addressed to both local parts, because
9b371988 17947when the second is aliased to the intermediate local part &"pipe"& it gets
168e428f
PH
17948discarded as being the same as a previously handled address. However, a scheme
17949such as
9b371988
PH
17950.code
17951localpart1: |/some/command $local_part
17952localpart2: |/some/command $local_part
17953.endd
168e428f
PH
17954does result in two different pipe deliveries, because the immediate parents of
17955the pipes are distinct.
17956
17957
17958
f89d2485 17959.section "Repeated redirection expansion" "SECID128"
9b371988
PH
17960.cindex "repeated redirection expansion"
17961.cindex "address redirection" "repeated for each delivery attempt"
168e428f
PH
17962When a message cannot be delivered to all of its recipients immediately,
17963leading to two or more delivery attempts, redirection expansion is carried out
17964afresh each time for those addresses whose children were not all previously
17965delivered. If redirection is being used as a mailing list, this can lead to new
9b371988 17966members of the list receiving copies of old messages. The &%one_time%& option
168e428f
PH
17967can be used to avoid this.
17968
17969
f89d2485 17970.section "Errors in redirection lists" "SECID129"
9b371988
PH
17971.cindex "address redirection" "errors"
17972If &%skip_syntax_errors%& is set, a malformed address that causes a parsing
168e428f
PH
17973error is skipped, and an entry is written to the main log. This may be useful
17974for mailing lists that are automatically managed. Otherwise, if an error is
17975detected while generating the list of new addresses, the original address is
9b371988 17976deferred. See also &%syntax_errors_to%&.
168e428f 17977
168e428f 17978
168e428f 17979
f89d2485 17980.section "Private options for the redirect router" "SECID130"
168e428f 17981
9b371988
PH
17982.cindex "options" "&(redirect)& router"
17983The private options for the &(redirect)& router are as follows:
168e428f 17984
168e428f 17985
9b371988
PH
17986.option allow_defer redirect boolean false
17987Setting this option allows the use of &':defer:'& in non-filter redirection
17988data, or the &%defer%& command in an Exim filter file.
168e428f 17989
168e428f 17990
9b371988
PH
17991.option allow_fail redirect boolean false
17992.cindex "failing delivery" "from filter"
17993If this option is true, the &':fail:'& item can be used in a redirection list,
17994and the &%fail%& command may be used in an Exim filter file.
168e428f
PH
17995
17996
9b371988
PH
17997.option allow_filter redirect boolean false
17998.cindex "filter" "enabling use of"
17999.cindex "Sieve filter" "enabling use of"
168e428f 18000Setting this option allows Exim to interpret redirection data that starts with
9b371988 18001&"#Exim filter"& or &"#Sieve filter"& as a set of filtering instructions. There
168e428f 18002are some features of Exim filter files that some administrators may wish to
9b371988 18003lock out; see the &%forbid_filter_%&&'xxx'& options below.
168e428f
PH
18004
18005It is also possible to lock out Exim filters or Sieve filters while allowing
9b371988 18006the other type; see &%forbid_exim_filter%& and &%forbid_sieve_filter%&.
168e428f 18007
168e428f 18008
9b371988
PH
18009The filter is run using the uid and gid set by the generic &%user%& and
18010&%group%& options. These take their defaults from the password data if
18011&%check_local_user%& is set, so in the normal case of users' personal filter
18012files, the filter is run as the relevant user. When &%allow_filter%& is set
18013true, Exim insists that either &%check_local_user%& or &%user%& is set.
168e428f
PH
18014
18015
168e428f 18016
9b371988
PH
18017.option allow_freeze redirect boolean false
18018.cindex "freezing messages" "allowing in filter"
18019Setting this option allows the use of the &%freeze%& command in an Exim filter.
168e428f
PH
18020This command is more normally encountered in system filters, and is disabled by
18021default for redirection filters because it isn't something you usually want to
18022let ordinary users do.
18023
18024
18025
9b371988 18026.option check_ancestor redirect boolean false
168e428f
PH
18027This option is concerned with handling generated addresses that are the same
18028as some address in the list of redirection ancestors of the current address.
18029Although it is turned off by default in the code, it is set in the default
9b371988
PH
18030configuration file for handling users' &_.forward_& files. It is recommended
18031for this use of the &(redirect)& router.
168e428f 18032
9b371988
PH
18033When &%check_ancestor%& is set, if a generated address (including the domain)
18034is the same as any ancestor of the current address, it is replaced by a copy of
168e428f 18035the current address. This helps in the case where local part A is aliased to B,
9b371988
PH
18036and B has a &_.forward_& file pointing back to A. For example, within a single
18037domain, the local part &"Joe.Bloggs"& is aliased to &"jb"& and
18038&_&~jb/.forward_& contains:
18039.code
18040\Joe.Bloggs, <other item(s)>
18041.endd
18042Without the &%check_ancestor%& setting, either local part (&"jb"& or
18043&"joe.bloggs"&) gets processed once by each router and so ends up as it was
18044originally. If &"jb"& is the real mailbox name, mail to &"jb"& gets delivered
18045(having been turned into &"joe.bloggs"& by the &_.forward_& file and back to
18046&"jb"& by the alias), but mail to &"joe.bloggs"& fails. Setting
18047&%check_ancestor%& on the &(redirect)& router that handles the &_.forward_&
18048file prevents it from turning &"jb"& back into &"joe.bloggs"& when that was the
18049original address. See also the &%repeat_use%& option below.
18050
18051
18052.option check_group redirect boolean "see below"
18053When the &%file%& option is used, the group owner of the file is checked only
168e428f 18054when this option is set. The permitted groups are those listed in the
9b371988
PH
18055&%owngroups%& option, together with the user's default group if
18056&%check_local_user%& is set. If the file has the wrong group, routing is
18057deferred. The default setting for this option is true if &%check_local_user%&
18058is set and the &%modemask%& option permits the group write bit, or if the
18059&%owngroups%& option is set. Otherwise it is false, and no group check occurs.
168e428f
PH
18060
18061
168e428f 18062
9b371988
PH
18063.option check_owner redirect boolean "see below"
18064When the &%file%& option is used, the owner of the file is checked only when
18065this option is set. If &%check_local_user%& is set, the local user is
18066permitted; otherwise the owner must be one of those listed in the &%owners%&
18067option. The default value for this option is true if &%check_local_user%& or
18068&%owners%& is set. Otherwise the default is false, and no owner check occurs.
168e428f
PH
18069
18070
9b371988
PH
18071.option data redirect string&!! unset
18072This option is mutually exclusive with &%file%&. One or other of them must be
18073set, but not both. The contents of &%data%& are expanded, and then used as the
168e428f
PH
18074list of forwarding items, or as a set of filtering instructions. If the
18075expansion is forced to fail, or the result is an empty string or a string that
18076has no effect (consists entirely of comments), the router declines.
18077
9b371988
PH
18078When filtering instructions are used, the string must begin with &"#Exim
18079filter"&, and all comments in the string, including this initial one, must be
168e428f 18080terminated with newline characters. For example:
9b371988 18081.code
168e428f
PH
18082data = #Exim filter\n\
18083 if $h_to: contains Exim then save $home/mail/exim endif
9b371988 18084.endd
168e428f 18085If you are reading the data from a database where newlines cannot be included,
9b371988 18086you can use the &${sg}$& expansion item to turn the escape string of your
168e428f
PH
18087choice into a newline.
18088
18089
9b371988
PH
18090.option directory_transport redirect string&!! unset
18091A &(redirect)& router sets up a direct delivery to a directory when a path name
18092ending with a slash is specified as a new &"address"&. The transport used is
168e428f 18093specified by this option, which, after expansion, must be the name of a
9b371988 18094configured transport. This should normally be an &(appendfile)& transport.
168e428f
PH
18095
18096
9b371988 18097.option file redirect string&!! unset
168e428f 18098This option specifies the name of a file that contains the redirection data. It
9b371988 18099is mutually exclusive with the &%data%& option. The string is expanded before
168e428f
PH
18100use; if the expansion is forced to fail, the router declines. Other expansion
18101failures cause delivery to be deferred. The result of a successful expansion
18102must be an absolute path. The entire file is read and used as the redirection
18103data. If the data is an empty string or a string that has no effect (consists
18104entirely of comments), the router declines.
18105
9b371988
PH
18106.cindex "NFS" "checking for file existence"
18107If the attempt to open the file fails with a &"does not exist"& error, Exim
168e428f 18108runs a check on the containing directory,
9b371988 18109unless &%ignore_enotdir%& is true (see below).
168e428f 18110If the directory does not appear to exist, delivery is deferred. This can
9b371988 18111happen when users' &_.forward_& files are in NFS-mounted directories, and there
168e428f
PH
18112is a mount problem. If the containing directory does exist, but the file does
18113not, the router declines.
18114
18115
9b371988 18116.option file_transport redirect string&!! unset
f89d2485 18117.vindex "&$address_file$&"
9b371988
PH
18118A &(redirect)& router sets up a direct delivery to a file when a path name not
18119ending in a slash is specified as a new &"address"&. The transport used is
168e428f 18120specified by this option, which, after expansion, must be the name of a
9b371988
PH
18121configured transport. This should normally be an &(appendfile)& transport. When
18122it is running, the file name is in &$address_file$&.
168e428f
PH
18123
18124
db9452a9
PH
18125.option filter_prepend_home redirect boolean true
18126When this option is true, if a &(save)& command in an Exim filter specifies a
18127relative path, and &$home$& is defined, it is automatically prepended to the
18128relative path. If this option is set false, this action does not happen. The
18129relative path is then passed to the transport unmodified.
db9452a9
PH
18130
18131
9b371988
PH
18132.option forbid_blackhole redirect boolean false
18133If this option is true, the &':blackhole:'& item may not appear in a
18134redirection list.
168e428f
PH
18135
18136
9b371988 18137.option forbid_exim_filter redirect boolean false
168e428f 18138If this option is set true, only Sieve filters are permitted when
9b371988 18139&%allow_filter%& is true.
168e428f
PH
18140
18141
18142
168e428f 18143
9b371988
PH
18144.option forbid_file redirect boolean false
18145.cindex "delivery" "to file; forbidding"
18146.cindex "Sieve filter" "forbidding delivery to a file"
18147.cindex "Sieve filter" "&""keep""& facility; disabling"
168e428f
PH
18148If this option is true, this router may not generate a new address that
18149specifies delivery to a local file or directory, either from a filter or from a
9b371988 18150conventional forward file. This option is forced to be true if &%one_time%& is
168e428f 18151set. It applies to Sieve filters as well as to Exim filters, but if true, it
9b371988 18152locks out the Sieve's &"keep"& facility.
168e428f
PH
18153
18154
9b371988
PH
18155.option forbid_filter_dlfunc redirect boolean false
18156.cindex "filter" "locking out certain features"
068aaea8 18157If this option is true, string expansions in Exim filters are not allowed to
9b371988 18158make use of the &%dlfunc%& expansion facility to run dynamically loaded
068aaea8
PH
18159functions.
18160
9b371988 18161.option forbid_filter_existstest redirect boolean false
9b371988 18162.cindex "expansion" "statting a file"
168e428f 18163If this option is true, string expansions in Exim filters are not allowed to
9b371988 18164make use of the &%exists%& condition or the &%stat%& expansion item.
168e428f 18165
9b371988 18166.option forbid_filter_logwrite redirect boolean false
168e428f
PH
18167If this option is true, use of the logging facility in Exim filters is not
18168permitted. Logging is in any case available only if the filter is being run
18169under some unprivileged uid (which is normally the case for ordinary users'
9b371988 18170&_.forward_& files).
168e428f 18171
168e428f 18172
9b371988 18173.option forbid_filter_lookup redirect boolean false
168e428f 18174If this option is true, string expansions in Exim filter files are not allowed
9b371988 18175to make use of &%lookup%& items.
168e428f
PH
18176
18177
9b371988 18178.option forbid_filter_perl redirect boolean false
068aaea8 18179This option has an effect only if Exim is built with embedded Perl support. If
168e428f
PH
18180it is true, string expansions in Exim filter files are not allowed to make use
18181of the embedded Perl support.
18182
18183
9b371988 18184.option forbid_filter_readfile redirect boolean false
168e428f 18185If this option is true, string expansions in Exim filter files are not allowed
9b371988 18186to make use of &%readfile%& items.
168e428f
PH
18187
18188
9b371988 18189.option forbid_filter_readsocket redirect boolean false
168e428f 18190If this option is true, string expansions in Exim filter files are not allowed
9b371988 18191to make use of &%readsocket%& items.
168e428f 18192
168e428f 18193
9b371988 18194.option forbid_filter_reply redirect boolean false
168e428f 18195If this option is true, this router may not generate an automatic reply
9b371988
PH
18196message. Automatic replies can be generated only from Exim or Sieve filter
18197files, not from traditional forward files. This option is forced to be true if
18198&%one_time%& is set.
168e428f
PH
18199
18200
9b371988 18201.option forbid_filter_run redirect boolean false
168e428f 18202If this option is true, string expansions in Exim filter files are not allowed
9b371988 18203to make use of &%run%& items.
168e428f 18204
168e428f 18205
9b371988 18206.option forbid_include redirect boolean false
168e428f 18207If this option is true, items of the form
9b371988
PH
18208.code
18209:include:<path name>
18210.endd
168e428f
PH
18211are not permitted in non-filter redirection lists.
18212
18213
9b371988
PH
18214.option forbid_pipe redirect boolean false
18215.cindex "delivery" "to pipe; forbidding"
168e428f
PH
18216If this option is true, this router may not generate a new address which
18217specifies delivery to a pipe, either from an Exim filter or from a conventional
9b371988 18218forward file. This option is forced to be true if &%one_time%& is set.
168e428f 18219
168e428f 18220
9b371988 18221.option forbid_sieve_filter redirect boolean false
168e428f 18222If this option is set true, only Exim filters are permitted when
9b371988 18223&%allow_filter%& is true.
168e428f
PH
18224
18225
5abeaa6e
PH
18226.cindex "SMTP" "error codes"
18227.option forbid_smtp_code redirect boolean false
18228If this option is set true, any SMTP error codes that are present at the start
18229of messages specified for &`:defer:`& or &`:fail:`& are quietly ignored, and
18230the default codes (451 and 550, respectively) are always used.
5abeaa6e
PH
18231
18232
168e428f
PH
18233
18234
9b371988
PH
18235.option hide_child_in_errmsg redirect boolean false
18236.cindex "bounce message" "redirection details; suppressing"
168e428f 18237If this option is true, it prevents Exim from quoting a child address if it
9b371988
PH
18238generates a bounce or delay message for it. Instead it says &"an address
18239generated from <&'the top level address'&>"&. Of course, this applies only to
18240bounces generated locally. If a message is forwarded to another host, &'its'&
168e428f
PH
18241bounce may well quote the generated address.
18242
18243
9b371988
PH
18244.option ignore_eacces redirect boolean false
18245.cindex "EACCES"
168e428f 18246If this option is set and an attempt to open a redirection file yields the
9b371988 18247EACCES error (permission denied), the &(redirect)& router behaves as if the
168e428f
PH
18248file did not exist.
18249
18250
9b371988
PH
18251.option ignore_enotdir redirect boolean false
18252.cindex "ENOTDIR"
168e428f 18253If this option is set and an attempt to open a redirection file yields the
9b371988 18254ENOTDIR error (something on the path is not a directory), the &(redirect)&
168e428f
PH
18255router behaves as if the file did not exist.
18256
9b371988
PH
18257Setting &%ignore_enotdir%& has another effect as well: When a &(redirect)&
18258router that has the &%file%& option set discovers that the file does not exist
18259(the ENOENT error), it tries to &[stat()]& the parent directory, as a check
168e428f 18260against unmounted NFS directories. If the parent can not be statted, delivery
9b371988
PH
18261is deferred. However, it seems wrong to do this check when &%ignore_enotdir%&
18262is set, because that option tells Exim to ignore &"something on the path is not
18263a directory"& (the ENOTDIR error). This is a confusing area, because it seems
168e428f
PH
18264that some operating systems give ENOENT where others give ENOTDIR.
18265
18266
18267
9b371988
PH
18268.option include_directory redirect string unset
18269If this option is set, the path names of any &':include:'& items in a
18270redirection list must start with this directory.
168e428f
PH
18271
18272
9b371988 18273.option modemask redirect "octal integer" 022
168e428f 18274This specifies mode bits which must not be set for a file specified by the
9b371988 18275&%file%& option. If any of the forbidden bits are set, delivery is deferred.
168e428f 18276
168e428f 18277
9b371988
PH
18278.option one_time redirect boolean false
18279.cindex "one-time aliasing/forwarding expansion"
18280.cindex "alias file" "one-time expansion"
18281.cindex "forward file" "one-time expansion"
18282.cindex "mailing lists" "one-time expansion"
18283.cindex "address redirection" "one-time expansion"
168e428f 18284Sometimes the fact that Exim re-evaluates aliases and reprocesses redirection
068aaea8
PH
18285files each time it tries to deliver a message causes a problem when one or more
18286of the generated addresses fails be delivered at the first attempt. The problem
9b371988
PH
18287is not one of duplicate delivery &-- Exim is clever enough to handle that &--
18288but of what happens when the redirection list changes during the time that the
068aaea8
PH
18289message is on Exim's queue. This is particularly true in the case of mailing
18290lists, where new subscribers might receive copies of messages that were posted
18291before they subscribed.
18292
9b371988
PH
18293If &%one_time%& is set and any addresses generated by the router fail to
18294deliver at the first attempt, the failing addresses are added to the message as
18295&"top level"& addresses, and the parent address that generated them is marked
18296&"delivered"&. Thus, redirection does not happen again at the next delivery
068aaea8 18297attempt.
168e428f 18298
9b371988 18299&*Warning 1*&: Any header line addition or removal that is specified by this
068aaea8 18300router would be lost if delivery did not succeed at the first attempt. For this
9b371988
PH
18301reason, the &%headers_add%& and &%headers_remove%& generic options are not
18302permitted when &%one_time%& is set.
168e428f 18303
9b371988
PH
18304&*Warning 2*&: To ensure that the router generates only addresses (as opposed
18305to pipe or file deliveries or auto-replies) &%forbid_file%&, &%forbid_pipe%&,
18306and &%forbid_filter_reply%& are forced to be true when &%one_time%& is set.
168e428f 18307
9b371988
PH
18308&*Warning 3*&: The &%unseen%& generic router option may not be set with
18309&%one_time%&.
068aaea8 18310
168e428f
PH
18311The original top-level address is remembered with each of the generated
18312addresses, and is output in any log messages. However, any intermediate parent
18313addresses are not recorded. This makes a difference to the log only if
9b371988 18314&%all_parents%& log selector is set. It is expected that &%one_time%& will
168e428f
PH
18315typically be used for mailing lists, where there is normally just one level of
18316expansion.
18317
18318
9b371988
PH
18319.option owners redirect "string list" unset
18320.cindex "ownership" "alias file"
18321.cindex "ownership" "forward file"
18322.cindex "alias file" "ownership"
18323.cindex "forward file" "ownership"
18324This specifies a list of permitted owners for the file specified by &%file%&.
18325This list is in addition to the local user when &%check_local_user%& is set.
18326See &%check_owner%& above.
168e428f
PH
18327
18328
9b371988
PH
18329.option owngroups redirect "string list" unset
18330This specifies a list of permitted groups for the file specified by &%file%&.
18331The list is in addition to the local user's primary group when
18332&%check_local_user%& is set. See &%check_group%& above.
168e428f 18333
168e428f 18334
9b371988 18335.option pipe_transport redirect string&!! unset
f89d2485 18336.vindex "&$address_pipe$&"
9b371988
PH
18337A &(redirect)& router sets up a direct delivery to a pipe when a string
18338starting with a vertical bar character is specified as a new &"address"&. The
18339transport used is specified by this option, which, after expansion, must be the
18340name of a configured transport. This should normally be a &(pipe)& transport.
18341When the transport is run, the pipe command is in &$address_pipe$&.
168e428f 18342
168e428f 18343
9b371988 18344.option qualify_domain redirect string&!! unset
f89d2485 18345.vindex "&$qualify_recipient$&"
4f578862
PH
18346If this option is set, and an unqualified address (one without a domain) is
18347generated, and that address would normally be qualified by the global setting
18348in &%qualify_recipient%&, it is instead qualified with the domain specified by
18349expanding this string. If the expansion fails, the router declines. If you want
18350to revert to the default, you can have the expansion generate
18351&$qualify_recipient$&.
18352
18353This option applies to all unqualified addresses generated by Exim filters,
18354but for traditional &_.forward_& files, it applies only to addresses that are
18355not preceded by a backslash. Sieve filters cannot generate unqualified
18356addresses.
168e428f 18357
9b371988
PH
18358.option qualify_preserve_domain redirect boolean false
18359.cindex "domain" "in redirection; preserving"
18360.cindex "preserving domain in redirection"
18361.cindex "address redirection" "domain; preserving"
4f578862
PH
18362If this option is set, the router's local &%qualify_domain%& option must not be
18363set (a configuration error occurs if it is). If an unqualified address (one
18364without a domain) is generated, it is qualified with the domain of the parent
18365address (the immediately preceding ancestor) instead of the global
18366&%qualify_recipient%& value. In the case of a traditional &_.forward_& file,
18367this applies whether or not the address is preceded by a backslash.
168e428f 18368
168e428f 18369
9b371988 18370.option repeat_use redirect boolean true
168e428f
PH
18371If this option is set false, the router is skipped for a child address that has
18372any ancestor that was routed by this router. This test happens before any of
18373the other preconditions are tested. Exim's default anti-looping rules skip
18374only when the ancestor is the same as the current address. See also
9b371988 18375&%check_ancestor%& above and the generic &%redirect_router%& option.
168e428f 18376
168e428f 18377
9b371988
PH
18378.option reply_transport redirect string&!! unset
18379A &(redirect)& router sets up an automatic reply when a &%mail%& or
18380&%vacation%& command is used in a filter file. The transport used is specified
18381by this option, which, after expansion, must be the name of a configured
18382transport. This should normally be an &(autoreply)& transport. Other transports
18383are unlikely to do anything sensible or useful.
168e428f 18384
168e428f 18385
9b371988
PH
18386.option rewrite redirect boolean true
18387.cindex "address redirection" "disabling rewriting"
168e428f
PH
18388If this option is set false, addresses generated by the router are not
18389subject to address rewriting. Otherwise, they are treated like new addresses
18390and are rewritten according to the global rewriting rules.
18391
18392
9b371988 18393.option sieve_subaddress redirect string&!! unset
068aaea8
PH
18394The value of this option is passed to a Sieve filter to specify the
18395:subaddress part of an address.
18396
9b371988 18397.option sieve_useraddress redirect string&!! unset
068aaea8
PH
18398The value of this option is passed to a Sieve filter to specify the :user part
18399of an address. However, if it is unset, the entire original local part
18400(including any prefix or suffix) is used for :user.
18401
18402
9b371988 18403.option sieve_vacation_directory redirect string&!! unset
9b371988
PH
18404.cindex "Sieve filter" "vacation directory"
18405To enable the &"vacation"& extension for Sieve filters, you must set
18406&%sieve_vacation_directory%& to the directory where vacation databases are held
168e428f 18407(do not put anything else in that directory), and ensure that the
9b371988
PH
18408&%reply_transport%& option refers to an &(autoreply)& transport. Each user
18409needs their own directory; Exim will create it if necessary.
168e428f
PH
18410
18411
18412
9b371988
PH
18413.option skip_syntax_errors redirect boolean false
18414.cindex "forward file" "broken"
18415.cindex "address redirection" "broken files"
18416.cindex "alias file" "broken"
18417.cindex "broken alias or forward files"
18418.cindex "ignoring faulty addresses"
18419.cindex "skipping faulty addresses"
18420.cindex "error" "skipping bad syntax"
18421If &%skip_syntax_errors%& is set, syntactically malformed addresses in
168e428f 18422non-filter redirection data are skipped, and each failing address is logged. If
9b371988
PH
18423&%syntax_errors_to%& is set, a message is sent to the address it defines,
18424giving details of the failures. If &%syntax_errors_text%& is set, its contents
168e428f 18425are expanded and placed at the head of the error message generated by
9b371988
PH
18426&%syntax_errors_to%&. Usually it is appropriate to set &%syntax_errors_to%& to
18427be the same address as the generic &%errors_to%& option. The
18428&%skip_syntax_errors%& option is often used when handling mailing lists.
168e428f
PH
18429
18430If all the addresses in a redirection list are skipped because of syntax
18431errors, the router declines to handle the original address, and it is passed to
18432the following routers.
18433
9b371988 18434If &%skip_syntax_errors%& is set when an Exim filter is interpreted, any syntax
168e428f
PH
18435error in the filter causes filtering to be abandoned without any action being
18436taken. The incident is logged, and the router declines to handle the address,
18437so it is passed to the following routers.
18438
9b371988
PH
18439.cindex "Sieve filter" "syntax errors in"
18440Syntax errors in a Sieve filter file cause the &"keep"& action to occur. This
18441action is specified by RFC 3028. The values of &%skip_syntax_errors%&,
18442&%syntax_errors_to%&, and &%syntax_errors_text%& are not used.
168e428f 18443
9b371988
PH
18444&%skip_syntax_errors%& can be used to specify that errors in users' forward
18445lists or filter files should not prevent delivery. The &%syntax_errors_to%&
168e428f
PH
18446option, used with an address that does not get redirected, can be used to
18447notify users of these errors, by means of a router like this:
9b371988 18448.code
168e428f
PH
18449userforward:
18450 driver = redirect
18451 allow_filter
18452 check_local_user
18453 file = $home/.forward
18454 file_transport = address_file
18455 pipe_transport = address_pipe
18456 reply_transport = address_reply
18457 no_verify
18458 skip_syntax_errors
9b371988 18459 syntax_errors_to = real-$local_part@$domain
168e428f 18460 syntax_errors_text = \
9b371988
PH
18461 This is an automatically generated message. An error has\n\
18462 been found in your .forward file. Details of the error are\n\
18463 reported below. While this error persists, you will receive\n\
18464 a copy of this message for every message that is addressed\n\
18465 to you. If your .forward file is a filter file, or if it is\n\
18466 a non-filter file containing no valid forwarding addresses,\n\
18467 a copy of each incoming message will be put in your normal\n\
18468 mailbox. If a non-filter file contains at least one valid\n\
18469 forwarding address, forwarding to the valid addresses will\n\
18470 happen, and those will be the only deliveries that occur.
18471.endd
168e428f 18472You also need a router to ensure that local addresses that are prefixed by
9b371988
PH
18473&`real-`& are recognized, but not forwarded or filtered. For example, you could
18474put this immediately before the &(userforward)& router:
18475.code
18476real_localuser:
18477 driver = accept
18478 check_local_user
18479 local_part_prefix = real-
18480 transport = local_delivery
18481.endd
595028e4
PH
18482For security, it would probably be a good idea to restrict the use of this
18483router to locally-generated messages, using a condition such as this:
18484.code
18485 condition = ${if match {$sender_host_address}\
18486 {\N^(|127\.0\.0\.1)$\N}}
18487.endd
595028e4 18488
168e428f 18489
9b371988
PH
18490.option syntax_errors_text redirect string&!! unset
18491See &%skip_syntax_errors%& above.
168e428f 18492
168e428f 18493
9b371988
PH
18494.option syntax_errors_to redirect string unset
18495See &%skip_syntax_errors%& above.
4f578862
PH
18496.ecindex IIDredrou1
18497.ecindex IIDredrou2
168e428f
PH
18498
18499
18500
18501
18502
18503
9b371988
PH
18504. ////////////////////////////////////////////////////////////////////////////
18505. ////////////////////////////////////////////////////////////////////////////
168e428f 18506
9b371988
PH
18507.chapter "Environment for running local transports" "CHAPenvironment" &&&
18508 "Environment for local transports"
4f578862
PH
18509.scindex IIDenvlotra1 "local transports" "environment for"
18510.scindex IIDenvlotra2 "environment for local transports"
18511.scindex IIDenvlotra3 "transport" "local; environment for"
9b371988 18512Local transports handle deliveries to files and pipes. (The &(autoreply)&
168e428f
PH
18513transport can be thought of as similar to a pipe.) Exim always runs transports
18514in subprocesses, under specified uids and gids. Typical deliveries to local
18515mailboxes run under the uid and gid of the local user.
18516
18517Exim also sets a specific current directory while running the transport; for
9b371988 18518some transports a home directory setting is also relevant. The &(pipe)&
168e428f 18519transport is the only one that sets up environment variables; see section
9b371988 18520&<<SECTpipeenv>>& for details.
168e428f
PH
18521
18522The values used for the uid, gid, and the directories may come from several
18523different places. In many cases, the router that handles the address associates
9b371988
PH
18524settings with that address as a result of its &%check_local_user%&, &%group%&,
18525or &%user%& options. However, values may also be given in the transport's own
168e428f
PH
18526configuration, and these override anything that comes from the router.
18527
18528
18529
f89d2485 18530.section "Concurrent deliveries" "SECID131"
9b371988
PH
18531.cindex "concurrent deliveries"
18532.cindex "simultaneous deliveries"
f89d2485 18533If two different messages for the same local recipient arrive more or less
168e428f 18534simultaneously, the two delivery processes are likely to run concurrently. When
9b371988 18535the &(appendfile)& transport is used to write to a file, Exim applies locking
168e428f
PH
18536rules to stop concurrent processes from writing to the same file at the same
18537time.
18538
9b371988 18539However, when you use a &(pipe)& transport, it is up to you to arrange any
168e428f 18540locking that is needed. Here is a silly example:
9b371988
PH
18541.code
18542my_transport:
18543 driver = pipe
18544 command = /bin/sh -c 'cat >>/some/file'
18545.endd
168e428f
PH
18546This is supposed to write the message at the end of the file. However, if two
18547messages arrive at the same time, the file will be scrambled. You can use the
9b371988
PH
18548&%exim_lock%& utility program (see section &<<SECTmailboxmaint>>&) to lock a
18549file using the same algorithm that Exim itself uses.
168e428f
PH
18550
18551
18552
18553
9b371988
PH
18554.section "Uids and gids" "SECTenvuidgid"
18555.cindex "local transports" "uid and gid"
18556.cindex "transport" "local; uid and gid"
18557All transports have the options &%group%& and &%user%&. If &%group%& is set, it
18558overrides any group that the router set in the address, even if &%user%& is not
168e428f
PH
18559set for the transport. This makes it possible, for example, to run local mail
18560delivery under the uid of the recipient (set by the router), but in a special
18561group (set by the transport). For example:
9b371988
PH
18562.code
18563# Routers ...
18564# User/group are set by check_local_user in this router
18565local_users:
18566 driver = accept
18567 check_local_user
18568 transport = group_delivery
168e428f 18569
9b371988
PH
18570# Transports ...
18571# This transport overrides the group
18572group_delivery:
18573 driver = appendfile
18574 file = /var/spool/mail/$local_part
18575 group = mail
18576.endd
18577If &%user%& is set for a transport, its value overrides what is set in the
18578address by the router. If &%user%& is non-numeric and &%group%& is not set, the
18579gid associated with the user is used. If &%user%& is numeric, &%group%& must be
18580set.
168e428f 18581
0a4e3112 18582.oindex "&%initgroups%&"
9b371988
PH
18583When the uid is taken from the transport's configuration, the &[initgroups()]&
18584function is called for the groups associated with that uid if the
18585&%initgroups%& option is set for the transport. When the uid is not specified
18586by the transport, but is associated with the address by a router, the option
18587for calling &[initgroups()]& is taken from the router configuration.
18588
18589.cindex "&(pipe)& transport" "uid for"
18590The &(pipe)& transport contains the special option &%pipe_as_creator%&. If this
18591is set and &%user%& is not set, the uid of the process that called Exim to
18592receive the message is used, and if &%group%& is not set, the corresponding
18593original gid is also used.
168e428f 18594
9b371988
PH
18595This is the detailed preference order for obtaining a gid; the first of the
18596following that is set is used:
18597
18598.ilist
18599A &%group%& setting of the transport;
18600.next
18601A &%group%& setting of the router;
18602.next
18603A gid associated with a user setting of the router, either as a result of
18604&%check_local_user%& or an explicit non-numeric &%user%& setting;
18605.next
18606The group associated with a non-numeric &%user%& setting of the transport;
18607.next
18608In a &(pipe)& transport, the creator's gid if &%deliver_as_creator%& is set and
18609the uid is the creator's uid;
18610.next
18611The Exim gid if the Exim uid is being used as a default.
18612.endlist
18613
18614If, for example, the user is specified numerically on the router and there are
18615no group settings, no gid is available. In this situation, an error occurs.
18616This is different for the uid, for which there always is an ultimate default.
18617The first of the following that is set is used:
18618
18619.ilist
18620A &%user%& setting of the transport;
18621.next
18622In a &(pipe)& transport, the creator's uid if &%deliver_as_creator%& is set;
18623.next
18624A &%user%& setting of the router;
18625.next
18626A &%check_local_user%& setting of the router;
18627.next
18628The Exim uid.
18629.endlist
18630
18631Of course, an error will still occur if the uid that is chosen is on the
18632&%never_users%& list.
9b371988
PH
18633
18634
18635
18636
18637
f89d2485 18638.section "Current and home directories" "SECID132"
9b371988
PH
18639.cindex "current directory for local transport"
18640.cindex "home directory" "for local transport"
18641.cindex "transport" "local; home directory for"
18642.cindex "transport" "local; current directory for"
168e428f 18643Routers may set current and home directories for local transports by means of
9b371988
PH
18644the &%transport_current_directory%& and &%transport_home_directory%& options.
18645However, if the transport's &%current_directory%& or &%home_directory%& options
168e428f
PH
18646are set, they override the router's values. In detail, the home directory
18647for a local transport is taken from the first of these values that is set:
18648
9b371988
PH
18649.ilist
18650The &%home_directory%& option on the transport;
18651.next
18652The &%transport_home_directory%& option on the router;
18653.next
18654The password data if &%check_local_user%& is set on the router;
18655.next
18656The &%router_home_directory%& option on the router.
18657.endlist
168e428f
PH
18658
18659The current directory is taken from the first of these values that is set:
18660
9b371988
PH
18661.ilist
18662The &%current_directory%& option on the transport;
18663.next
18664The &%transport_current_directory%& option on the router.
18665.endlist
168e428f
PH
18666
18667
18668If neither the router nor the transport sets a current directory, Exim uses the
18669value of the home directory, if it is set. Otherwise it sets the current
9b371988 18670directory to &_/_& before running a local transport.
168e428f
PH
18671
18672
18673
f89d2485
PH
18674.section "Expansion variables derived from the address" "SECID133"
18675.vindex "&$domain$&"
18676.vindex "&$local_part$&"
18677.vindex "&$original_domain$&"
168e428f 18678Normally a local delivery is handling a single address, and in that case the
9b371988
PH
18679variables such as &$domain$& and &$local_part$& are set during local
18680deliveries. However, in some circumstances more than one address may be handled
18681at once (for example, while writing batch SMTP for onward transmission by some
18682other means). In this case, the variables associated with the local part are
18683never set, &$domain$& is set only if all the addresses have the same domain,
18684and &$original_domain$& is never set.
4f578862
PH
18685.ecindex IIDenvlotra1
18686.ecindex IIDenvlotra2
18687.ecindex IIDenvlotra3
168e428f
PH
18688
18689
18690
18691
18692
18693
18694
9b371988
PH
18695. ////////////////////////////////////////////////////////////////////////////
18696. ////////////////////////////////////////////////////////////////////////////
168e428f 18697
9b371988 18698.chapter "Generic options for transports" "CHAPtransportgeneric"
4f578862
PH
18699.scindex IIDgenoptra1 "generic options" "transport"
18700.scindex IIDgenoptra2 "options" "generic; for transports"
18701.scindex IIDgenoptra3 "transport" "generic options for"
168e428f
PH
18702The following generic options apply to all transports:
18703
18704
9b371988
PH
18705.option body_only transports boolean false
18706.cindex "transport" "body only"
18707.cindex "message" "transporting body only"
18708.cindex "body of message" "transporting"
168e428f 18709If this option is set, the message's headers are not transported. It is
9b371988
PH
18710mutually exclusive with &%headers_only%&. If it is used with the &(appendfile)&
18711or &(pipe)& transports, the settings of &%message_prefix%& and
18712&%message_suffix%& should be checked, because this option does not
18713automatically suppress them.
168e428f
PH
18714
18715
9b371988
PH
18716.option current_directory transports string&!! unset
18717.cindex "transport" "current directory for"
168e428f
PH
18718This specifies the current directory that is to be set while running the
18719transport, overriding any value that may have been set by the router.
18720If the expansion fails for any reason, including forced failure, an error is
18721logged, and delivery is deferred.
18722
18723
9b371988 18724.option disable_logging transports boolean false
168e428f
PH
18725If this option is set true, nothing is logged for any
18726deliveries by the transport or for any
18727transport errors. You should not set this option unless you really, really know
18728what you are doing.
18729
18730
9b371988
PH
18731.option debug_print transports string&!! unset
18732.cindex "testing" "variables in drivers"
18733If this option is set and debugging is enabled (see the &%-d%& command line
168e428f
PH
18734option), the string is expanded and included in the debugging output when the
18735transport is run.
18736If expansion of the string fails, the error message is written to the debugging
18737output, and Exim carries on processing.
18738This facility is provided to help with checking out the values of variables and
9b371988
PH
18739so on when debugging driver configurations. For example, if a &%headers_add%&
18740option is not working properly, &%debug_print%& could be used to output the
168e428f
PH
18741variables it references. A newline is added to the text if it does not end with
18742one.
18743
18744
9b371988
PH
18745.option delivery_date_add transports boolean false
18746.cindex "&'Delivery-date:'& header line"
18747If this option is true, a &'Delivery-date:'& header is added to the message.
18748This gives the actual time the delivery was made. As this is not a standard
18749header, Exim has a configuration option (&%delivery_date_remove%&) which
18750requests its removal from incoming messages, so that delivered messages can
18751safely be resent to other recipients.
168e428f
PH
18752
18753
9b371988 18754.option driver transports string unset
168e428f
PH
18755This specifies which of the available transport drivers is to be used.
18756There is no default, and this option must be set for every transport.
18757
18758
9b371988
PH
18759.option envelope_to_add transports boolean false
18760.cindex "&'Envelope-to:'& header line"
18761If this option is true, an &'Envelope-to:'& header is added to the message.
18762This gives the original address(es) in the incoming envelope that caused this
168e428f
PH
18763delivery to happen. More than one address may be present if the transport is
18764configured to handle several addresses at once, or if more than one original
18765address was redirected to the same final address. As this is not a standard
9b371988 18766header, Exim has a configuration option (&%envelope_to_remove%&) which requests
168e428f
PH
18767its removal from incoming messages, so that delivered messages can safely be
18768resent to other recipients.
18769
18770
9b371988
PH
18771.option group transports string&!! "Exim group"
18772.cindex "transport" "group; specifying"
168e428f
PH
18773This option specifies a gid for running the transport process, overriding any
18774value that the router supplies, and also overriding any value associated with
9b371988 18775&%user%& (see below).
168e428f 18776
168e428f 18777
9b371988
PH
18778.option headers_add transports string&!! unset
18779.cindex "header lines" "adding in transport"
18780.cindex "transport" "header lines; adding"
168e428f
PH
18781This option specifies a string of text that is expanded and added to the header
18782portion of a message as it is transported, as described in section
9b371988
PH
18783&<<SECTheadersaddrem>>&. Additional header lines can also be specified by
18784routers. If the result of the expansion is an empty string, or if the expansion
18785is forced to fail, no action is taken. Other expansion failures are treated as
168e428f
PH
18786errors and cause the delivery to be deferred.
18787
18788
18789
9b371988
PH
18790.option headers_only transports boolean false
18791.cindex "transport" "header lines only"
18792.cindex "message" "transporting headers only"
18793.cindex "header lines" "transporting"
168e428f 18794If this option is set, the message's body is not transported. It is mutually
9b371988
PH
18795exclusive with &%body_only%&. If it is used with the &(appendfile)& or &(pipe)&
18796transports, the settings of &%message_prefix%& and &%message_suffix%& should be
168e428f
PH
18797checked, since this option does not automatically suppress them.
18798
18799
9b371988
PH
18800.option headers_remove transports string&!! unset
18801.cindex "header lines" "removing"
18802.cindex "transport" "header lines; removing"
168e428f
PH
18803This option specifies a string that is expanded into a list of header names;
18804these headers are omitted from the message as it is transported, as described
9b371988 18805in section &<<SECTheadersaddrem>>&. Header removal can also be specified by
168e428f
PH
18806routers. If the result of the expansion is an empty string, or if the expansion
18807is forced to fail, no action is taken. Other expansion failures are treated as
18808errors and cause the delivery to be deferred.
18809
18810
18811
9b371988
PH
18812.option headers_rewrite transports string unset
18813.cindex "transport" "header lines; rewriting"
18814.cindex "rewriting" "at transport time"
168e428f
PH
18815This option allows addresses in header lines to be rewritten at transport time,
18816that is, as the message is being copied to its destination. The contents of the
18817option are a colon-separated list of rewriting rules. Each rule is in exactly
18818the same form as one of the general rewriting rules that are applied when a
9b371988
PH
18819message is received. These are described in chapter &<<CHAPrewrite>>&. For
18820example,
18821.code
168e428f
PH
18822headers_rewrite = a@b c@d f : \
18823 x@y w@z
9b371988
PH
18824.endd
18825changes &'a@b'& into &'c@d'& in &'From:'& header lines, and &'x@y'& into
18826&'w@z'& in all address-bearing header lines. The rules are applied to the
18827header lines just before they are written out at transport time, so they affect
18828only those copies of the message that pass through the transport. However, only
18829the message's original header lines, and any that were added by a system
18830filter, are rewritten. If a router or transport adds header lines, they are not
18831affected by this option. These rewriting rules are &'not'& applied to the
18832envelope. You can change the return path using &%return_path%&, but you cannot
168e428f
PH
18833change envelope recipients at this time.
18834
18835
9b371988
PH
18836.option home_directory transports string&!! unset
18837.cindex "transport" "home directory for"
f89d2485 18838.vindex "&$home$&"
c0712871 18839This option specifies a home directory setting for a local transport,
4f578862
PH
18840overriding any value that may be set by the router. The home directory is
18841placed in &$home$& while expanding the transport's private options. It is also
18842used as the current directory if no current directory is set by the
9b371988 18843&%current_directory%& option on the transport or the
4f578862
PH
18844&%transport_current_directory%& option on the router. If the expansion fails
18845for any reason, including forced failure, an error is logged, and delivery is
18846deferred.
168e428f
PH
18847
18848
9b371988
PH
18849.option initgroups transports boolean false
18850.cindex "additional groups"
18851.cindex "groups" "additional"
18852.cindex "transport" "group; additional"
168e428f 18853If this option is true and the uid for the delivery process is provided by the
9b371988 18854transport, the &[initgroups()]& function is called when running the transport
168e428f
PH
18855to ensure that any additional groups associated with the uid are set up.
18856
18857
9b371988
PH
18858.option message_size_limit transports string&!! 0
18859.cindex "limit" "message size per transport"
f89d2485 18860.cindex "size" "of message, limit"
9b371988 18861.cindex "transport" "message size; limiting"
168e428f 18862This option controls the size of messages passed through the transport. It is
ad268134
PH
18863expanded before use; the result of the expansion must be a sequence of decimal
18864digits, optionally followed by K or M. If the expansion fails for any reason,
18865including forced failure, or if the result is not of the required form,
18866delivery is deferred. If the value is greater than zero and the size of a
18867message exceeds this limit, the address is failed. If there is any chance that
18868the resulting bounce message could be routed to the same transport, you should
18869ensure that &%return_size_limit%& is less than the transport's
18870&%message_size_limit%&, as otherwise the bounce message will fail to get
18871delivered.
168e428f
PH
18872
18873
18874
9b371988 18875.option rcpt_include_affixes transports boolean false
f89d2485
PH
18876.cindex "prefix" "for local part, including in envelope"
18877.cindex "suffix for local part" "including in envelope"
9b371988
PH
18878.cindex "local part" "prefix"
18879.cindex "local part" "suffix"
168e428f
PH
18880When this option is false (the default), and an address that has had any
18881affixes (prefixes or suffixes) removed from the local part is delivered by any
18882form of SMTP or LMTP, the affixes are not included. For example, if a router
18883that contains
9b371988
PH
18884.code
18885local_part_prefix = *-
18886.endd
18887routes the address &'abc-xyz@some.domain'& to an SMTP transport, the envelope
168e428f 18888is delivered with
9b371988
PH
18889.code
18890RCPT TO:<xyz@some.domain>
18891.endd
4f578862
PH
18892This is also the case when an ACL-time callout is being used to verify a
18893recipient address. However, if &%rcpt_include_affixes%& is set true, the
9b371988
PH
18894whole local part is included in the RCPT command. This option applies to BSMTP
18895deliveries by the &(appendfile)& and &(pipe)& transports as well as to the
18896&(lmtp)& and &(smtp)& transports.
18897
18898
18899.option retry_use_local_part transports boolean "see below"
18900.cindex "hints database" "retry keys"
168e428f
PH
18901When a delivery suffers a temporary failure, a retry record is created
18902in Exim's hints database. For remote deliveries, the key for the retry record
18903is based on the name and/or IP address of the failing remote host. For local
18904deliveries, the key is normally the entire address, including both the local
18905part and the domain. This is suitable for most common cases of local delivery
9b371988 18906temporary failure &-- for example, exceeding a mailbox quota should delay only
168e428f
PH
18907deliveries to that mailbox, not to the whole domain.
18908
18909However, in some special cases you may want to treat a temporary local delivery
18910as a failure associated with the domain, and not with a particular local part.
18911(For example, if you are storing all mail for some domain in files.) You can do
9b371988 18912this by setting &%retry_use_local_part%& false.
168e428f
PH
18913
18914For all the local transports, its default value is true. For remote transports,
18915the default value is false for tidiness, but changing the value has no effect
18916on a remote transport in the current implementation.
18917
18918
9b371988
PH
18919.option return_path transports string&!! unset
18920.cindex "envelope sender"
18921.cindex "transport" "return path; changing"
18922.cindex "return path" "changing in transport"
168e428f
PH
18923If this option is set, the string is expanded at transport time and replaces
18924the existing return path (envelope sender) value in the copy of the message
18925that is being delivered. An empty return path is permitted. This feature is
18926designed for remote deliveries, where the value of this option is used in the
9b371988
PH
18927SMTP MAIL command. If you set &%return_path%& for a local transport, the
18928only effect is to change the address that is placed in the &'Return-path:'&
168e428f
PH
18929header line, if one is added to the message (see the next option).
18930
db9452a9
PH
18931&*Note:*& A changed return path is not logged unless you add
18932&%return_path_on_delivery%& to the log selector.
db9452a9 18933
f89d2485 18934.vindex "&$return_path$&"
9b371988 18935The expansion can refer to the existing value via &$return_path$&. This is
168e428f 18936either the message's envelope sender, or an address set by the
9b371988 18937&%errors_to%& option on a router. If the expansion is forced to fail, no
168e428f 18938replacement occurs; if it fails for another reason, delivery is deferred. This
9b371988 18939option can be used to support VERP (Variable Envelope Return Paths) &-- see
4f578862 18940section &<<SECTverp>>&.
168e428f 18941
4f578862
PH
18942&*Note*&: If a delivery error is detected locally, including the case when a
18943remote server rejects a message at SMTP time, the bounce message is not sent to
18944the value of this option. It is sent to the previously set errors address.
18945This defaults to the incoming sender address, but can be changed by setting
18946&%errors_to%& in a router.
168e428f
PH
18947
18948
18949
9b371988
PH
18950.option return_path_add transports boolean false
18951.cindex "&'Return-path:'& header line"
18952If this option is true, a &'Return-path:'& header is added to the message.
168e428f
PH
18953Although the return path is normally available in the prefix line of BSD
18954mailboxes, this is commonly not displayed by MUAs, and so the user does not
18955have easy access to it.
18956
9b371988
PH
18957RFC 2821 states that the &'Return-path:'& header is added to a message &"when
18958the delivery SMTP server makes the final delivery"&. This implies that this
18959header should not be present in incoming messages. Exim has a configuration
18960option, &%return_path_remove%&, which requests removal of this header from
18961incoming messages, so that delivered messages can safely be resent to other
18962recipients.
168e428f 18963
168e428f 18964
9b371988
PH
18965.option shadow_condition transports string&!! unset
18966See &%shadow_transport%& below.
168e428f
PH
18967
18968
9b371988
PH
18969.option shadow_transport transports string unset
18970.cindex "shadow transport"
18971.cindex "transport" "shadow"
18972A local transport may set the &%shadow_transport%& option to the name of
18973another local transport. Shadow remote transports are not supported.
168e428f
PH
18974
18975Whenever a delivery to the main transport succeeds, and either
9b371988
PH
18976&%shadow_condition%& is unset, or its expansion does not result in the empty
18977string or one of the strings &"0"& or &"no"& or &"false"&, the message is also
18978passed to the shadow transport, with the same delivery address or addresses. If
18979expansion fails, no action is taken except that non-forced expansion failures
18980cause a log line to be written.
168e428f
PH
18981
18982The result of the shadow transport is discarded and does not affect the
18983subsequent processing of the message. Only a single level of shadowing is
9b371988
PH
18984provided; the &%shadow_transport%& option is ignored on any transport when it
18985is running as a shadow. Options concerned with output from pipes are also
18986ignored. The log line for the successful delivery has an item added on the end,
18987of the form
18988.code
18989ST=<shadow transport name>
18990.endd
168e428f 18991If the shadow transport did not succeed, the error message is put in
9b371988
PH
18992parentheses afterwards. Shadow transports can be used for a number of different
18993purposes, including keeping more detailed log information than Exim normally
f89d2485 18994provides, and implementing automatic acknowledgment policies based on message
9b371988 18995headers that some sites insist on.
168e428f
PH
18996
18997
9b371988
PH
18998.option transport_filter transports string&!! unset
18999.cindex "transport" "filter"
19000.cindex "filter" "transport filter"
168e428f
PH
19001This option sets up a filtering (in the Unix shell sense) process for messages
19002at transport time. It should not be confused with mail filtering as set up by
19003individual users or via a system filter.
19004
19005When the message is about to be written out, the command specified by
4f578862 19006&%transport_filter%& is started up in a separate, parallel process, and
9b371988
PH
19007the entire message, including the header lines, is passed to it on its standard
19008input (this in fact is done from a third process, to avoid deadlock). The
19009command must be specified as an absolute path.
168e428f
PH
19010
19011The lines of the message that are written to the transport filter are
9b371988
PH
19012terminated by newline (&"\n"&). The message is passed to the filter before any
19013SMTP-specific processing, such as turning &"\n"& into &"\r\n"& and escaping
068aaea8 19014lines beginning with a dot, and also before any processing implied by the
9b371988
PH
19015settings of &%check_string%& and &%escape_string%& in the &(appendfile)& or
19016&(pipe)& transports.
168e428f
PH
19017
19018The standard error for the filter process is set to the same destination as its
19019standard output; this is read and written to the message's ultimate
4f578862 19020destination. The process that writes the message to the filter, the
9b371988 19021filter itself, and the original process that reads the result and delivers it
4f578862 19022are all run in parallel, like a shell pipeline.
9b371988 19023
71e1673f 19024.new
9b371988 19025The filter can perform any transformations it likes, but of course should take
94fb0f79
TF
19026care not to break RFC 2822 syntax. Exim does not check the result, except to
19027test for a final newline when SMTP is in use. All messages transmitted over
19028SMTP must end with a newline, so Exim supplies one if it is missing.
71e1673f 19029.wen
9b371988 19030
9b371988 19031.cindex "content scanning" "per user"
068aaea8
PH
19032A transport filter can be used to provide content-scanning on a per-user basis
19033at delivery time if the only required effect of the scan is to modify the
19034message. For example, a content scan could insert a new header line containing
19035a spam score. This could be interpreted by a filter in the user's MUA. It is
19036not possible to discard a message at this stage.
168e428f 19037
9b371988 19038.cindex "SMTP" "SIZE"
168e428f
PH
19039A problem might arise if the filter increases the size of a message that is
19040being sent down an SMTP connection. If the receiving SMTP server has indicated
19041support for the SIZE parameter, Exim will have sent the size of the message
19042at the start of the SMTP session. If what is actually sent is substantially
19043more, the server might reject the message. This can be worked round by setting
9b371988 19044the &%size_addition%& option on the &(smtp)& transport, either to allow for
168e428f
PH
19045additions to the message, or to disable the use of SIZE altogether.
19046
f89d2485 19047.vindex "&$pipe_addresses$&"
9b371988 19048The value of the &%transport_filter%& option is the command string for starting
168e428f 19049the filter, which is run directly from Exim, not under a shell. The string is
9b371988 19050parsed by Exim in the same way as a command string for the &(pipe)& transport:
4f578862
PH
19051Exim breaks it up into arguments and then expands each argument separately (see
19052section &<<SECThowcommandrun>>&). Any kind of expansion failure causes delivery
19053to be deferred. The special argument &$pipe_addresses$& is replaced by a number
19054of arguments, one for each address that applies to this delivery. (This isn't
19055an ideal name for this feature here, but as it was already implemented for the
19056&(pipe)& transport, it seemed sensible not to change it.)
168e428f 19057
f89d2485
PH
19058.vindex "&$host$&"
19059.vindex "&$host_address$&"
9b371988 19060The expansion variables &$host$& and &$host_address$& are available when the
168e428f
PH
19061transport is a remote one. They contain the name and IP address of the host to
19062which the message is being sent. For example:
9b371988 19063.code
168e428f
PH
19064transport_filter = /some/directory/transport-filter.pl \
19065 $host $host_address $sender_address $pipe_addresses
9b371988 19066.endd
168e428f 19067
4f578862
PH
19068Two problems arise if you want to use more complicated expansion items to
19069generate transport filter commands, both of which due to the fact that the
19070command is split up &'before'& expansion.
19071.ilist
19072If an expansion item contains white space, you must quote it, so that it is all
19073part of the same command item. If the entire option setting is one such
19074expansion item, you have to take care what kind of quoting you use. For
19075example:
19076.code
19077transport_filter = '/bin/cmd${if eq{$host}{a.b.c}{1}{2}}'
19078.endd
19079This runs the command &(/bin/cmd1)& if the host name is &'a.b.c'&, and
19080&(/bin/cmd2)& otherwise. If double quotes had been used, they would have been
19081stripped by Exim when it read the option's value. When the value is used, if
19082the single quotes were missing, the line would be split into two items,
19083&`/bin/cmd${if`& and &`eq{$host}{a.b.c}{1}{2}`&, and an error would occur when
19084Exim tried to expand the first one.
19085.next
19086Except for the special case of &$pipe_addresses$& that is mentioned above, an
19087expansion cannot generate multiple arguments, or a command name followed by
19088arguments. Consider this example:
19089.code
f89d2485 19090transport_filter = ${lookup{$host}lsearch{/a/file}\
4f578862
PH
19091 {$value}{/bin/cat}}
19092.endd
19093The result of the lookup is interpreted as the name of the command, even
19094if it contains white space. The simplest way round this is to use a shell:
19095.code
f89d2485 19096transport_filter = /bin/sh -c ${lookup{$host}lsearch{/a/file}\
4f578862
PH
19097 {$value}{/bin/cat}}
19098.endd
19099.endlist
168e428f 19100
4f578862
PH
19101The filter process is run under the same uid and gid as the normal delivery.
19102For remote deliveries this is the Exim uid/gid by default. The command should
19103normally yield a zero return code. Transport filters are not supposed to fail.
19104A non-zero code is taken to mean that the transport filter encountered some
19105serious problem. Delivery of the message is deferred; the message remains on
19106the queue and is tried again later. It is not possible to cause a message to be
19107bounced from a transport filter.
19108
168e428f
PH
19109If a transport filter is set on an autoreply transport, the original message is
19110passed through the filter as it is being copied into the newly generated
9b371988 19111message, which happens if the &%return_message%& option is set.
168e428f
PH
19112
19113
9b371988 19114.option transport_filter_timeout transports time 5m
f89d2485 19115.cindex "transport" "filter, timeout"
168e428f 19116When Exim is reading the output of a transport filter, it a applies a timeout
068aaea8
PH
19117that can be set by this option. Exceeding the timeout is normally treated as a
19118temporary delivery failure. However, if a transport filter is used with a
9b371988
PH
19119&(pipe)& transport, a timeout in the transport filter is treated in the same
19120way as a timeout in the pipe command itself. By default, a timeout is a hard
19121error, but if the &(pipe)& transport's &%timeout_defer%& option is set true, it
19122becomes a temporary error.
168e428f
PH
19123
19124
9b371988
PH
19125.option user transports string&!! "Exim user"
19126.cindex "uid (user id)" "local delivery"
f89d2485 19127.cindex "transport" "user, specifying"
168e428f
PH
19128This option specifies the user under whose uid the delivery process is to be
19129run, overriding any uid that may have been set by the router. If the user is
19130given as a name, the uid is looked up from the password data, and the
9b371988 19131associated group is taken as the value of the gid to be used if the &%group%&
168e428f
PH
19132option is not set.
19133
19134For deliveries that use local transports, a user and group are normally
19135specified explicitly or implicitly (for example, as a result of
9b371988 19136&%check_local_user%&) by the router or transport.
168e428f 19137
9b371988 19138.cindex "hints database" "access by remote transport"
168e428f
PH
19139For remote transports, you should leave this option unset unless you really are
19140sure you know what you are doing. When a remote transport is running, it needs
19141to be able to access Exim's hints databases, because each host may have its own
19142retry data.
4f578862
PH
19143.ecindex IIDgenoptra1
19144.ecindex IIDgenoptra2
19145.ecindex IIDgenoptra3
168e428f
PH
19146
19147
19148
19149
19150
19151
9b371988
PH
19152. ////////////////////////////////////////////////////////////////////////////
19153. ////////////////////////////////////////////////////////////////////////////
168e428f 19154
9b371988
PH
19155.chapter "Address batching in local transports" "CHAPbatching" &&&
19156 "Address batching"
19157.cindex "transport" "local; address batching in"
19158The only remote transport (&(smtp)&) is normally configured to handle more than
168e428f
PH
19159one address at a time, so that when several addresses are routed to the same
19160remote host, just one copy of the message is sent. Local transports, however,
19161normally handle one address at a time. That is, a separate instance of the
19162transport is run for each address that is routed to the transport. A separate
19163copy of the message is delivered each time.
19164
9b371988 19165.cindex "batched local delivery"
0a4e3112
PH
19166.oindex "&%batch_max%&"
19167.oindex "&%batch_id%&"
168e428f
PH
19168In special cases, it may be desirable to handle several addresses at once in a
19169local transport, for example:
19170
9b371988
PH
19171.ilist
19172In an &(appendfile)& transport, when storing messages in files for later
168e428f
PH
19173delivery by some other means, a single copy of the message with multiple
19174recipients saves space.
9b371988
PH
19175.next
19176In an &(lmtp)& transport, when delivering over &"local SMTP"& to some process,
168e428f 19177a single copy saves time, and is the normal way LMTP is expected to work.
9b371988
PH
19178.next
19179In a &(pipe)& transport, when passing the message
168e428f
PH
19180to a scanner program or
19181to some other delivery mechanism such as UUCP, multiple recipients may be
19182acceptable.
9b371988 19183.endlist
168e428f 19184
c0712871
PH
19185These three local transports all have the same options for controlling multiple
19186(&"batched"&) deliveries, namely &%batch_max%& and &%batch_id%&. To save
19187repeating the information for each transport, these options are described here.
168e428f 19188
9b371988 19189The &%batch_max%& option specifies the maximum number of addresses that can be
c0712871
PH
19190delivered together in a single run of the transport. Its default value is one
19191(no batching). When more than one address is routed to a transport that has a
19192&%batch_max%& value greater than one, the addresses are delivered in a batch
19193(that is, in a single run of the transport with multiple recipients), subject
19194to certain conditions:
168e428f 19195
9b371988 19196.ilist
f89d2485 19197.vindex "&$local_part$&"
9b371988 19198If any of the transport's options contain a reference to &$local_part$&, no
168e428f 19199batching is possible.
9b371988 19200.next
f89d2485 19201.vindex "&$domain$&"
9b371988 19202If any of the transport's options contain a reference to &$domain$&, only
168e428f 19203addresses with the same domain are batched.
9b371988
PH
19204.next
19205.cindex "customizing" "batching condition"
19206If &%batch_id%& is set, it is expanded for each address, and only those
168e428f 19207addresses with the same expanded value are batched. This allows you to specify
c0712871
PH
19208customized batching conditions. Failure of the expansion for any reason,
19209including forced failure, disables batching, but it does not stop the delivery
19210from taking place.
9b371988
PH
19211.next
19212Batched addresses must also have the same errors address (where to send
168e428f
PH
19213delivery errors), the same header additions and removals, the same user and
19214group for the transport, and if a host list is present, the first host must
19215be the same.
9b371988 19216.endlist
168e428f 19217
c0712871
PH
19218In the case of the &(appendfile)& and &(pipe)& transports, batching applies
19219both when the file or pipe command is specified in the transport, and when it
19220is specified by a &(redirect)& router, but all the batched addresses must of
19221course be routed to the same file or pipe command. These two transports have an
19222option called &%use_bsmtp%&, which causes them to deliver the message in
19223&"batched SMTP"& format, with the envelope represented as SMTP commands. The
19224&%check_string%& and &%escape_string%& options are forced to the values
9b371988
PH
19225.code
19226check_string = "."
19227escape_string = ".."
19228.endd
168e428f 19229when batched SMTP is in use. A full description of the batch SMTP mechanism is
9b371988
PH
19230given in section &<<SECTbatchSMTP>>&. The &(lmtp)& transport does not have a
19231&%use_bsmtp%& option, because it always delivers using the SMTP protocol.
168e428f 19232
c0712871
PH
19233.cindex "&'Envelope-to:'& header line"
19234If the generic &%envelope_to_add%& option is set for a batching transport, the
19235&'Envelope-to:'& header that is added to the message contains all the addresses
19236that are being processed together. If you are using a batching &(appendfile)&
19237transport without &%use_bsmtp%&, the only way to preserve the recipient
19238addresses is to set the &%envelope_to_add%& option.
19239
9b371988 19240.cindex "&(pipe)& transport" "with multiple addresses"
f89d2485 19241.vindex "&$pipe_addresses$&"
c0712871
PH
19242If you are using a &(pipe)& transport without BSMTP, and setting the
19243transport's &%command%& option, you can include &$pipe_addresses$& as part of
19244the command. This is not a true variable; it is a bit of magic that causes each
19245of the recipient addresses to be inserted into the command as a separate
19246argument. This provides a way of accessing all the addresses that are being
19247delivered in the batch. &*Note:*& This is not possible for pipe commands that
f89d2485 19248are specified by a &(redirect)& router.
168e428f 19249
168e428f
PH
19250
19251
19252
9b371988
PH
19253. ////////////////////////////////////////////////////////////////////////////
19254. ////////////////////////////////////////////////////////////////////////////
168e428f 19255
9b371988 19256.chapter "The appendfile transport" "CHAPappendfile"
4f578862
PH
19257.scindex IIDapptra1 "&(appendfile)& transport"
19258.scindex IIDapptra2 "transports" "&(appendfile)&"
9b371988
PH
19259.cindex "directory creation"
19260.cindex "creating directories"
19261The &(appendfile)& transport delivers a message by appending it to an existing
168e428f
PH
19262file, or by creating an entirely new file in a specified directory. Single
19263files to which messages are appended can be in the traditional Unix mailbox
19264format, or optionally in the MBX format supported by the Pine MUA and
9b371988
PH
19265University of Washington IMAP daemon, &'inter alia'&. When each message is
19266being delivered as a separate file, &"maildir"& format can optionally be used
19267to give added protection against failures that happen part-way through the
19268delivery. A third form of separate-file delivery known as &"mailstore"& is also
168e428f 19269supported. For all file formats, Exim attempts to create as many levels of
9b371988 19270directory as necessary, provided that &%create_directory%& is set.
168e428f
PH
19271
19272The code for the optional formats is not included in the Exim binary by
19273default. It is necessary to set SUPPORT_MBX, SUPPORT_MAILDIR and/or
9b371988 19274SUPPORT_MAILSTORE in &_Local/Makefile_& to have the appropriate code
168e428f
PH
19275included.
19276
9b371988 19277.cindex "quota" "system"
f89d2485 19278Exim recognizes system quota errors, and generates an appropriate message. Exim
168e428f
PH
19279also supports its own quota control within the transport, for use when the
19280system facility is unavailable or cannot be used for some reason.
19281
19282If there is an error while appending to a file (for example, quota exceeded or
19283partition filled), Exim attempts to reset the file's length and last
19284modification time back to what they were before. If there is an error while
19285creating an entirely new file, the new file is removed.
19286
19287Before appending to a file, a number of security checks are made, and the
19288file is locked. A detailed description is given below, after the list of
19289private options.
19290
9b371988
PH
19291The &(appendfile)& transport is most commonly used for local deliveries to
19292users' mailboxes. However, it can also be used as a pseudo-remote transport for
19293putting messages into files for remote delivery by some means other than Exim.
19294&"Batch SMTP"& format is often used in this case (see the &%use_bsmtp%&
19295option).
168e428f
PH
19296
19297
19298
9b371988
PH
19299.section "The file and directory options" "SECTfildiropt"
19300The &%file%& option specifies a single file, to which the message is appended;
19301the &%directory%& option specifies a directory, in which a new file containing
168e428f 19302the message is created. Only one of these two options can be set, and for
9b371988 19303normal deliveries to mailboxes, one of them &'must'& be set.
168e428f 19304
f89d2485
PH
19305.vindex "&$address_file$&"
19306.vindex "&$local_part$&"
9b371988 19307However, &(appendfile)& is also used for delivering messages to files or
168e428f 19308directories whose names (or parts of names) are obtained from alias,
9b371988
PH
19309forwarding, or filtering operations (for example, a &%save%& command in a
19310user's Exim filter). When such a transport is running, &$local_part$& contains
19311the local part that was aliased or forwarded, and &$address_file$& contains the
168e428f
PH
19312name (or partial name) of the file or directory generated by the redirection
19313operation. There are two cases:
19314
9b371988
PH
19315.ilist
19316If neither &%file%& nor &%directory%& is set, the redirection operation
19317must specify an absolute path (one that begins with &`/`&). This is the most
168e428f 19318common case when users with local accounts use filtering to sort mail into
9b371988 19319different folders. See for example, the &(address_file)& transport in the
168e428f
PH
19320default configuration. If the path ends with a slash, it is assumed to be the
19321name of a directory. A delivery to a directory can also be forced by setting
9b371988
PH
19322&%maildir_format%& or &%mailstore_format%&.
19323.next
19324If &%file%& or &%directory%& is set for a delivery from a redirection, it is
19325used to determine the file or directory name for the delivery. Normally, the
19326contents of &$address_file$& are used in some way in the string expansion.
19327.endlist
168e428f
PH
19328
19329
9b371988
PH
19330.cindex "Sieve filter" "configuring &(appendfile)&"
19331.cindex "Sieve filter" "relative mailbox path handling"
168e428f
PH
19332As an example of the second case, consider an environment where users do not
19333have home directories. They may be permitted to use Exim filter commands of the
19334form:
9b371988
PH
19335.code
19336save folder23
19337.endd
168e428f 19338or Sieve filter commands of the form:
9b371988
PH
19339.code
19340require "fileinto";
19341fileinto "folder23";
19342.endd
19343In this situation, the expansion of &%file%& or &%directory%& in the transport
19344must transform the relative path into an appropriate absolute file name. In the
19345case of Sieve filters, the name &'inbox'& must be handled. It is the name that
19346is used as a result of a &"keep"& action in the filter. This example shows one
19347way of handling this requirement:
19348.code
168e428f
PH
19349file = ${if eq{$address_file}{inbox} \
19350 {/var/mail/$local_part} \
19351 {${if eq{${substr_0_1:$address_file}}{/} \
19352 {$address_file} \
19353 {$home/mail/$address_file} \
19354 }} \
19355 }
9b371988
PH
19356.endd
19357With this setting of &%file%&, &'inbox'& refers to the standard mailbox
19358location, absolute paths are used without change, and other folders are in the
19359&_mail_& directory within the home directory.
19360
19361&*Note 1*&: While processing an Exim filter, a relative path such as
19362&_folder23_& is turned into an absolute path if a home directory is known to
19363the router. In particular, this is the case if &%check_local_user%& is set. If
168e428f 19364you want to prevent this happening at routing time, you can set
9b371988 19365&%router_home_directory%& empty. This forces the router to pass the relative
168e428f
PH
19366path to the transport.
19367
9b371988
PH
19368&*Note 2*&: An absolute path in &$address_file$& is not treated specially;
19369the &%file%& or &%directory%& option is still used if it is set.
168e428f
PH
19370
19371
19372
168e428f 19373
f89d2485 19374.section "Private options for appendfile" "SECID134"
9b371988 19375.cindex "options" "&(appendfile)& transport"
168e428f
PH
19376
19377
168e428f 19378
9b371988
PH
19379.option allow_fifo appendfile boolean false
19380.cindex "fifo (named pipe)"
19381.cindex "named pipe (fifo)"
19382.cindex "pipe" "named (fifo)"
168e428f
PH
19383Setting this option permits delivery to named pipes (FIFOs) as well as to
19384regular files. If no process is reading the named pipe at delivery time, the
19385delivery is deferred.
19386
19387
9b371988
PH
19388.option allow_symlink appendfile boolean false
19389.cindex "symbolic link" "to mailbox"
19390.cindex "mailbox" "symbolic link"
19391By default, &(appendfile)& will not deliver if the path name for the file is
168e428f
PH
19392that of a symbolic link. Setting this option relaxes that constraint, but there
19393are security issues involved in the use of symbolic links. Be sure you know
19394what you are doing if you set this. Details of exactly what this option affects
19395are included in the discussion which follows this list of options.
19396
19397
9b371988
PH
19398.option batch_id appendfile string&!! unset
19399See the description of local delivery batching in chapter &<<CHAPbatching>>&.
19400However, batching is automatically disabled for &(appendfile)& deliveries that
168e428f
PH
19401happen as a result of forwarding or aliasing or other redirection directly to a
19402file.
19403
19404
9b371988
PH
19405.option batch_max appendfile integer 1
19406See the description of local delivery batching in chapter &<<CHAPbatching>>&.
168e428f 19407
168e428f 19408
9b371988
PH
19409.option check_group appendfile boolean false
19410When this option is set, the group owner of the file defined by the &%file%&
168e428f
PH
19411option is checked to see that it is the same as the group under which the
19412delivery process is running. The default setting is false because the default
19413file mode is 0600, which means that the group is irrelevant.
19414
19415
9b371988
PH
19416.option check_owner appendfile boolean true
19417When this option is set, the owner of the file defined by the &%file%& option
19418is checked to ensure that it is the same as the user under which the delivery
168e428f
PH
19419process is running.
19420
19421
9b371988
PH
19422.option check_string appendfile string "see below"
19423.cindex "&""From""& line"
19424As &(appendfile)& writes the message, the start of each line is tested for
19425matching &%check_string%&, and if it does, the initial matching characters are
19426replaced by the contents of &%escape_string%&. The value of &%check_string%& is
19427a literal string, not a regular expression, and the case of any letters it
168e428f
PH
19428contains is significant.
19429
9b371988
PH
19430If &%use_bsmtp%& is set the values of &%check_string%& and &%escape_string%&
19431are forced to &"."& and &".."& respectively, and any settings in the
19432configuration are ignored. Otherwise, they default to &"From&~"& and
19433&">From&~"& when the &%file%& option is set, and unset when any of the
19434&%directory%&, &%maildir%&, or &%mailstore%& options are set.
19435
19436The default settings, along with &%message_prefix%& and &%message_suffix%&, are
19437suitable for traditional &"BSD"& mailboxes, where a line beginning with
19438&"From&~"& indicates the start of a new message. All four options need changing
19439if another format is used. For example, to deliver to mailboxes in MMDF format:
19440.cindex "MMDF format mailbox"
19441.cindex "mailbox" "MMDF format"
19442.code
19443check_string = "\1\1\1\1\n"
19444escape_string = "\1\1\1\1 \n"
19445message_prefix = "\1\1\1\1\n"
19446message_suffix = "\1\1\1\1\n"
19447.endd
19448.option create_directory appendfile boolean true
19449.cindex "directory creation"
168e428f
PH
19450When this option is true, Exim attempts to create any missing superior
19451directories for the file that it is about to write. A created directory's mode
9b371988 19452is given by the &%directory_mode%& option.
168e428f
PH
19453
19454The group ownership of a newly created directory is highly dependent on the
19455operating system (and possibly the file system) that is being used. For
19456example, in Solaris, if the parent directory has the setgid bit set, its group
19457is propagated to the child; if not, the currently set group is used. However,
19458in FreeBSD, the parent's group is always used.
19459
19460
19461
9b371988 19462.option create_file appendfile string anywhere
168e428f 19463This option constrains the location of files and directories that are created
9b371988
PH
19464by this transport. It applies to files defined by the &%file%& option and
19465directories defined by the &%directory%& option. In the case of maildir
19466delivery, it applies to the top level directory, not the maildir directories
19467beneath.
19468
19469The option must be set to one of the words &"anywhere"&, &"inhome"&, or
19470&"belowhome"&. In the second and third cases, a home directory must have been
19471set for the transport. This option is not useful when an explicit file name is
168e428f 19472given for normal mailbox deliveries. It is intended for the case when file
9b371988
PH
19473names are generated from users' &_.forward_& files. These are usually handled
19474by an &(appendfile)& transport called &%address_file%&. See also
19475&%file_must_exist%&.
168e428f
PH
19476
19477
9b371988
PH
19478.option directory appendfile string&!! unset
19479This option is mutually exclusive with the &%file%& option, but one of &%file%&
19480or &%directory%& must be set, unless the delivery is the direct result of a
19481redirection (see section &<<SECTfildiropt>>&).
168e428f 19482
9b371988 19483When &%directory%& is set, the string is expanded, and the message is delivered
168e428f
PH
19484into a new file or files in or below the given directory, instead of being
19485appended to a single mailbox file. A number of different formats are provided
9b371988
PH
19486(see &%maildir_format%& and &%mailstore_format%&), and see section
19487&<<SECTopdir>>& for further details of this form of delivery.
168e428f
PH
19488
19489
f89d2485 19490.option directory_file appendfile string&!! "see below"
9b371988 19491.cindex "base62"
f89d2485 19492.vindex "&$inode$&"
9b371988
PH
19493When &%directory%& is set, but neither &%maildir_format%& nor
19494&%mailstore_format%& is set, &(appendfile)& delivers each message into a file
f89d2485
PH
19495whose name is obtained by expanding this string. The default value is:
19496.code
19497q${base62:$tod_epoch}-$inode
19498.endd
19499This generates a unique name from the current time, in base 62 form, and the
19500inode of the file. The variable &$inode$& is available only when expanding this
19501option.
168e428f 19502
168e428f 19503
9b371988
PH
19504.option directory_mode appendfile "octal integer" 0700
19505If &(appendfile)& creates any directories as a result of the
19506&%create_directory%& option, their mode is specified by this option.
168e428f 19507
168e428f 19508
9b371988
PH
19509.option escape_string appendfile string "see description"
19510See &%check_string%& above.
168e428f
PH
19511
19512
9b371988
PH
19513.option file appendfile string&!! unset
19514This option is mutually exclusive with the &%directory%& option, but one of
19515&%file%& or &%directory%& must be set, unless the delivery is the direct result
19516of a redirection (see section &<<SECTfildiropt>>&). The &%file%& option
19517specifies a single file, to which the message is appended. One or more of
19518&%use_fcntl_lock%&, &%use_flock_lock%&, or &%use_lockfile%& must be set with
19519&%file%&.
168e428f 19520
9b371988
PH
19521.cindex "NFS" "lock file"
19522.cindex "locking files"
19523.cindex "lock files"
168e428f
PH
19524If you are using more than one host to deliver over NFS into the same
19525mailboxes, you should always use lock files.
19526
19527The string value is expanded for each delivery, and must yield an absolute
19528path. The most common settings of this option are variations on one of these
19529examples:
9b371988
PH
19530.code
19531file = /var/spool/mail/$local_part
19532file = /home/$local_part/inbox
19533file = $home/inbox
19534.endd
19535.cindex "&""sticky""& bit"
168e428f 19536In the first example, all deliveries are done into the same directory. If Exim
9b371988
PH
19537is configured to use lock files (see &%use_lockfile%& below) it must be able to
19538create a file in the directory, so the &"sticky"& bit must be turned on for
19539deliveries to be possible, or alternatively the &%group%& option can be used to
168e428f
PH
19540run the delivery under a group id which has write access to the directory.
19541
19542
19543
9b371988
PH
19544.option file_format appendfile string unset
19545.cindex "file" "mailbox; checking existing format"
168e428f
PH
19546This option requests the transport to check the format of an existing file
19547before adding to it. The check consists of matching a specific string at the
19548start of the file. The value of the option consists of an even number of
19549colon-separated strings. The first of each pair is the test string, and the
19550second is the name of a transport. If the transport associated with a matched
19551string is not the current transport, control is passed over to the other
9b371988 19552transport. For example, suppose the standard &(local_delivery)& transport has
168e428f 19553this added to it:
9b371988 19554.code
168e428f
PH
19555file_format = "From : local_delivery :\
19556 \1\1\1\1\n : local_mmdf_delivery"
9b371988
PH
19557.endd
19558Mailboxes that begin with &"From"& are still handled by this transport, but if
19559a mailbox begins with four binary ones followed by a newline, control is passed
19560to a transport called &%local_mmdf_delivery%&, which presumably is configured
168e428f
PH
19561to do the delivery in MMDF format. If a mailbox does not exist or is empty, it
19562is assumed to match the current transport. If the start of a mailbox doesn't
19563match any string, or if the transport named for a given string is not defined,
19564delivery is deferred.
19565
19566
9b371988 19567.option file_must_exist appendfile boolean false
db9452a9
PH
19568If this option is true, the file specified by the &%file%& option must exist.
19569A temporary error occurs if it does not, causing delivery to be deferred.
19570If this option is false, the file is created if it does not exist.
168e428f
PH
19571
19572
9b371988
PH
19573.option lock_fcntl_timeout appendfile time 0s
19574.cindex "timeout" "mailbox locking"
f89d2485 19575.cindex "mailbox" "locking, blocking and non-blocking"
9b371988
PH
19576.cindex "locking files"
19577By default, the &(appendfile)& transport uses non-blocking calls to &[fcntl()]&
168e428f 19578when locking an open mailbox file. If the call fails, the delivery process
9b371988 19579sleeps for &%lock_interval%& and tries again, up to &%lock_retries%& times.
168e428f
PH
19580Non-blocking calls are used so that the file is not kept open during the wait
19581for the lock; the reason for this is to make it as safe as possible for
19582deliveries over NFS in the case when processes might be accessing an NFS
19583mailbox without using a lock file. This should not be done, but
19584misunderstandings and hence misconfigurations are not unknown.
19585
19586On a busy system, however, the performance of a non-blocking lock approach is
19587not as good as using a blocking lock with a timeout. In this case, the waiting
19588is done inside the system call, and Exim's delivery process acquires the lock
19589and can proceed as soon as the previous lock holder releases it.
19590
9b371988 19591If &%lock_fcntl_timeout%& is set to a non-zero time, blocking locks, with that
168e428f
PH
19592timeout, are used. There may still be some retrying: the maximum number of
19593retries is
9b371988
PH
19594.code
19595(lock_retries * lock_interval) / lock_fcntl_timeout
19596.endd
168e428f 19597rounded up to the next whole number. In other words, the total time during
9b371988
PH
19598which &(appendfile)& is trying to get a lock is roughly the same, unless
19599&%lock_fcntl_timeout%& is set very large.
168e428f
PH
19600
19601You should consider setting this option if you are getting a lot of delayed
19602local deliveries because of errors of the form
9b371988
PH
19603.code
19604failed to lock mailbox /some/file (fcntl)
19605.endd
168e428f 19606
9b371988
PH
19607.option lock_flock_timeout appendfile time 0s
19608This timeout applies to file locking when using &[flock()]& (see
19609&%use_flock%&); the timeout operates in a similar manner to
19610&%lock_fcntl_timeout%&.
168e428f
PH
19611
19612
9b371988 19613.option lock_interval appendfile time 3s
168e428f
PH
19614This specifies the time to wait between attempts to lock the file. See below
19615for details of locking.
19616
19617
9b371988 19618.option lock_retries appendfile integer 10
168e428f
PH
19619This specifies the maximum number of attempts to lock the file. A value of zero
19620is treated as 1. See below for details of locking.
19621
19622
9b371988 19623.option lockfile_mode appendfile "octal integer" 0600
168e428f 19624This specifies the mode of the created lock file, when a lock file is being
c0712871 19625used (see &%use_lockfile%& and &%use_mbx_lock%&).
168e428f
PH
19626
19627
9b371988
PH
19628.option lockfile_timeout appendfile time 30m
19629.cindex "timeout" "mailbox locking"
19630When a lock file is being used (see &%use_lockfile%&), if a lock file already
168e428f
PH
19631exists and is older than this value, it is assumed to have been left behind by
19632accident, and Exim attempts to remove it.
19633
19634
9b371988
PH
19635.option mailbox_filecount appendfile string&!! unset
19636.cindex "mailbox" "specifying size of"
19637.cindex "size" "of mailbox"
168e428f
PH
19638If this option is set, it is expanded, and the result is taken as the current
19639number of files in the mailbox. It must be a decimal number, optionally
19640followed by K or M. This provides a way of obtaining this information from an
19641external source that maintains the data.
19642
19643
9b371988
PH
19644.option mailbox_size appendfile string&!! unset
19645.cindex "mailbox" "specifying size of"
19646.cindex "size" "of mailbox"
168e428f
PH
19647If this option is set, it is expanded, and the result is taken as the current
19648size the mailbox. It must be a decimal number, optionally followed by K or M.
19649This provides a way of obtaining this information from an external source that
19650maintains the data. This is likely to be helpful for maildir deliveries where
19651it is computationally expensive to compute the size of a mailbox.
19652
19653
19654
9b371988
PH
19655.option maildir_format appendfile boolean false
19656.cindex "maildir format" "specifying"
19657If this option is set with the &%directory%& option, the delivery is into a new
19658file, in the &"maildir"& format that is used by other mail software. When the
19659transport is activated directly from a &(redirect)& router (for example, the
19660&(address_file)& transport in the default configuration), setting
19661&%maildir_format%& causes the path received from the router to be treated as a
19662directory, whether or not it ends with &`/`&. This option is available only if
19663SUPPORT_MAILDIR is present in &_Local/Makefile_&. See section
19664&<<SECTmaildirdelivery>>& below for further details.
168e428f
PH
19665
19666
9b371988
PH
19667.option maildir_quota_directory_regex appendfile string "See below"
19668.cindex "maildir format" "quota; directories included in"
19669.cindex "quota" "maildir; directories included in"
19670This option is relevant only when &%maildir_use_size_file%& is set. It defines
c0712871
PH
19671a regular expression for specifying directories, relative to the quota
19672directory (see &%quota_directory%&), that should be included in the quota
19673calculation. The default value is:
9b371988
PH
19674.code
19675maildir_quota_directory_regex = ^(?:cur|new|\..*)$
19676.endd
c0712871 19677This includes the &_cur_& and &_new_& directories, and any maildir++ folders
168e428f 19678(directories whose names begin with a dot). If you want to exclude the
9b371988 19679&_Trash_&
168e428f 19680folder from the count (as some sites do), you need to change this setting to
9b371988
PH
19681.code
19682maildir_quota_directory_regex = ^(?:cur|new|\.(?!Trash).*)$
19683.endd
168e428f 19684This uses a negative lookahead in the regular expression to exclude the
c0712871
PH
19685directory whose name is &_.Trash_&. When a directory is excluded from quota
19686calculations, quota processing is bypassed for any messages that are delivered
19687directly into that directory.
168e428f 19688
168e428f 19689
9b371988 19690.option maildir_retries appendfile integer 10
168e428f 19691This option specifies the number of times to retry when writing a file in
9b371988 19692&"maildir"& format. See section &<<SECTmaildirdelivery>>& below.
168e428f
PH
19693
19694
9b371988 19695.option maildir_tag appendfile string&!! unset
168e428f 19696This option applies only to deliveries in maildir format, and is described in
9b371988 19697section &<<SECTmaildirdelivery>>& below.
168e428f
PH
19698
19699
9b371988
PH
19700.option maildir_use_size_file appendfile boolean false
19701.cindex "maildir format" "&_maildirsize_& file"
19702Setting this option true enables support for &_maildirsize_& files. Exim
19703creates a &_maildirsize_& file in a maildir if one does not exist, taking the
19704quota from the &%quota%& option of the transport. If &%quota%& is unset, the
c0712871
PH
19705value is zero. See &%maildir_quota_directory_regex%& above and section
19706&<<SECTmaildirdelivery>>& below for further details.
c0712871 19707
c0712871
PH
19708.option maildirfolder_create_regex appendfile string unset
19709.cindex "maildir format" "&_maildirfolder_& file"
19710.cindex "&_maildirfolder_&, creating"
19711The value of this option is a regular expression. If it is unset, it has no
3cb1b51e 19712effect. Otherwise, before a maildir delivery takes place, the pattern is
c0712871
PH
19713matched against the name of the maildir directory, that is, the directory
19714containing the &_new_& and &_tmp_& subdirectories that will be used for the
19715delivery. If there is a match, Exim checks for the existence of a file called
19716&_maildirfolder_& in the directory, and creates it if it does not exist.
19717See section &<<SECTmaildirdelivery>>& for more details.
168e428f 19718
168e428f 19719
9b371988
PH
19720.option mailstore_format appendfile boolean false
19721.cindex "mailstore format" "specifying"
19722If this option is set with the &%directory%& option, the delivery is into two
19723new files in &"mailstore"& format. The option is available only if
19724SUPPORT_MAILSTORE is present in &_Local/Makefile_&. See section &<<SECTopdir>>&
19725below for further details.
168e428f 19726
168e428f 19727
9b371988 19728.option mailstore_prefix appendfile string&!! unset
168e428f 19729This option applies only to deliveries in mailstore format, and is described in
9b371988 19730section &<<SECTopdir>>& below.
168e428f
PH
19731
19732
9b371988 19733.option mailstore_suffix appendfile string&!! unset
168e428f 19734This option applies only to deliveries in mailstore format, and is described in
9b371988 19735section &<<SECTopdir>>& below.
168e428f 19736
168e428f 19737
9b371988
PH
19738.option mbx_format appendfile boolean false
19739.cindex "locking files"
19740.cindex "file" "locking"
19741.cindex "file" "MBX format"
f89d2485 19742.cindex "MBX format, specifying"
168e428f 19743This option is available only if Exim has been compiled with SUPPORT_MBX
9b371988 19744set in &_Local/Makefile_&. If &%mbx_format%& is set with the &%file%& option,
168e428f
PH
19745the message is appended to the mailbox file in MBX format instead of
19746traditional Unix format. This format is supported by Pine4 and its associated
9b371988 19747IMAP and POP daemons, by means of the &'c-client'& library that they all use.
168e428f 19748
9b371988
PH
19749&*Note*&: The &%message_prefix%& and &%message_suffix%& options are not
19750automatically changed by the use of &%mbx_format%&. They should normally be set
168e428f
PH
19751empty when using MBX format, so this option almost always appears in this
19752combination:
9b371988
PH
19753.code
19754mbx_format = true
19755message_prefix =
19756message_suffix =
19757.endd
168e428f 19758If none of the locking options are mentioned in the configuration,
9b371988
PH
19759&%use_mbx_lock%& is assumed and the other locking options default to false. It
19760is possible to specify the other kinds of locking with &%mbx_format%&, but
19761&%use_fcntl_lock%& and &%use_mbx_lock%& are mutually exclusive. MBX locking
19762interworks with &'c-client'&, providing for shared access to the mailbox. It
168e428f
PH
19763should not be used if any program that does not use this form of locking is
19764going to access the mailbox, nor should it be used if the mailbox file is NFS
19765mounted, because it works only when the mailbox is accessed from a single host.
19766
9b371988
PH
19767If you set &%use_fcntl_lock%& with an MBX-format mailbox, you cannot use
19768the standard version of &'c-client'&, because as long as it has a mailbox open
168e428f
PH
19769(this means for the whole of a Pine or IMAP session), Exim will not be able to
19770append messages to it.
19771
19772
9b371988
PH
19773.option message_prefix appendfile string&!! "see below"
19774.cindex "&""From""& line"
168e428f 19775The string specified here is expanded and output at the start of every message.
9b371988
PH
19776The default is unset unless &%file%& is specified and &%use_bsmtp%& is not set,
19777in which case it is:
19778.code
168e428f
PH
19779message_prefix = "From ${if def:return_path{$return_path}\
19780 {MAILER-DAEMON}} $tod_bsdinbox\n"
9b371988 19781.endd
595028e4
PH
19782&*Note:*& If you set &%use_crlf%& true, you must change any occurrences of
19783&`\n`& to &`\r\n`& in &%message_prefix%&.
168e428f 19784
9b371988 19785.option message_suffix appendfile string&!! "see below"
168e428f 19786The string specified here is expanded and output at the end of every message.
9b371988
PH
19787The default is unset unless &%file%& is specified and &%use_bsmtp%& is not set,
19788in which case it is a single newline character. The suffix can be suppressed by
168e428f 19789setting
9b371988
PH
19790.code
19791message_suffix =
19792.endd
595028e4
PH
19793&*Note:*& If you set &%use_crlf%& true, you must change any occurrences of
19794&`\n`& to &`\r\n`& in &%message_suffix%&.
168e428f 19795
9b371988 19796.option mode appendfile "octal integer" 0600
168e428f
PH
19797If the output file is created, it is given this mode. If it already exists and
19798has wider permissions, they are reduced to this mode. If it has narrower
9b371988 19799permissions, an error occurs unless &%mode_fail_narrower%& is false. However,
f89d2485 19800if the delivery is the result of a &%save%& command in a filter file specifying
9b371988 19801a particular mode, the mode of the output file is always forced to take that
168e428f
PH
19802value, and this option is ignored.
19803
19804
9b371988 19805.option mode_fail_narrower appendfile boolean true
168e428f 19806This option applies in the case when an existing mailbox file has a narrower
9b371988
PH
19807mode than that specified by the &%mode%& option. If &%mode_fail_narrower%& is
19808true, the delivery is deferred (&"mailbox has the wrong mode"&); otherwise Exim
19809continues with the delivery attempt, using the existing mode of the file.
168e428f 19810
168e428f 19811
9b371988
PH
19812.option notify_comsat appendfile boolean false
19813If this option is true, the &'comsat'& daemon is notified after every
19814successful delivery to a user mailbox. This is the daemon that notifies logged
19815on users about incoming mail.
168e428f 19816
168e428f 19817
9b371988
PH
19818.option quota appendfile string&!! unset
19819.cindex "quota" "imposed by Exim"
168e428f 19820This option imposes a limit on the size of the file to which Exim is appending,
9b371988
PH
19821or to the total space used in the directory tree when the &%directory%& option
19822is set. In the latter case, computation of the space used is expensive, because
168e428f 19823all the files in the directory (and any sub-directories) have to be
9b371988
PH
19824individually inspected and their sizes summed. (See &%quota_size_regex%& and
19825&%maildir_use_size_file%& for ways to avoid this in environments where users
19826have no shell access to their mailboxes).
168e428f
PH
19827
19828As there is no interlock against two simultaneous deliveries into a
19829multi-file mailbox, it is possible for the quota to be overrun in this case.
19830For single-file mailboxes, of course, an interlock is a necessity.
19831
9b371988 19832A file's size is taken as its &'used'& value. Because of blocking effects, this
168e428f
PH
19833may be a lot less than the actual amount of disk space allocated to the file.
19834If the sizes of a number of files are being added up, the rounding effect can
19835become quite noticeable, especially on systems that have large block sizes.
9b371988 19836Nevertheless, it seems best to stick to the &'used'& figure, because this is
168e428f
PH
19837the obvious value which users understand most easily.
19838
19839The value of the option is expanded, and must then be a numerical value
068aaea8
PH
19840(decimal point allowed), optionally followed by one of the letters K, M, or G,
19841for kilobytes, megabytes, or gigabytes. If Exim is running on a system with
19842large file support (Linux and FreeBSD have this), mailboxes larger than 2G can
19843be handled.
168e428f 19844
9b371988 19845&*Note*&: A value of zero is interpreted as &"no quota"&.
168e428f 19846
068aaea8
PH
19847The expansion happens while Exim is running as root, before it changes uid for
19848the delivery. This means that files that are inaccessible to the end user can
19849be used to hold quota values that are looked up in the expansion. When delivery
19850fails because this quota is exceeded, the handling of the error is as for
19851system quota failures.
19852
168e428f
PH
19853By default, Exim's quota checking mimics system quotas, and restricts the
19854mailbox to the specified maximum size, though the value is not accurate to the
19855last byte, owing to separator lines and additional headers that may get added
19856during message delivery. When a mailbox is nearly full, large messages may get
19857refused even though small ones are accepted, because the size of the current
19858message is added to the quota when the check is made. This behaviour can be
9b371988 19859changed by setting &%quota_is_inclusive%& false. When this is done, the check
168e428f
PH
19860for exceeding the quota does not include the current message. Thus, deliveries
19861continue until the quota has been exceeded; thereafter, no further messages are
9b371988 19862delivered. See also &%quota_warn_threshold%&.
168e428f 19863
168e428f 19864
9b371988 19865.option quota_directory appendfile string&!! unset
168e428f
PH
19866This option defines the directory to check for quota purposes when delivering
19867into individual files. The default is the delivery directory, or, if a file
9b371988 19868called &_maildirfolder_& exists in a maildir directory, the parent of the
168e428f
PH
19869delivery directory.
19870
19871
9b371988
PH
19872.option quota_filecount appendfile string&!! 0
19873This option applies when the &%directory%& option is set. It limits the total
168e428f 19874number of files in the directory (compare the inode limit in system quotas). It
9b371988 19875can only be used if &%quota%& is also set. The value is expanded; an expansion
4f578862
PH
19876failure causes delivery to be deferred. A value of zero is interpreted as
19877&"no quota"&.
168e428f
PH
19878
19879
9b371988
PH
19880.option quota_is_inclusive appendfile boolean true
19881See &%quota%& above.
168e428f
PH
19882
19883
9b371988 19884.option quota_size_regex appendfile string unset
168e428f
PH
19885This option applies when one of the delivery modes that writes a separate file
19886for each message is being used. When Exim wants to find the size of one of
9b371988 19887these files in order to test the quota, it first checks &%quota_size_regex%&.
168e428f
PH
19888If this is set to a regular expression that matches the file name, and it
19889captures one string, that string is interpreted as a representation of the
9b371988 19890file's size. The value of &%quota_size_regex%& is not expanded.
168e428f
PH
19891
19892This feature is useful only when users have no shell access to their mailboxes
9b371988
PH
19893&-- otherwise they could defeat the quota simply by renaming the files. This
19894facility can be used with maildir deliveries, by setting &%maildir_tag%& to add
168e428f 19895the file length to the file name. For example:
9b371988
PH
19896.code
19897maildir_tag = ,S=$message_size
19898quota_size_regex = ,S=(\d+)
19899.endd
9b371988 19900An alternative to &$message_size$& is &$message_linecount$&, which contains the
068aaea8
PH
19901number of lines in the message.
19902
168e428f 19903The regular expression should not assume that the length is at the end of the
9b371988 19904file name (even though &%maildir_tag%& puts it there) because maildir MUAs
168e428f
PH
19905sometimes add other information onto the ends of message file names.
19906
19907
068aaea8 19908
9b371988 19909.option quota_warn_message appendfile string&!! "see below"
168e428f 19910See below for the use of this option. If it is not set when
9b371988
PH
19911&%quota_warn_threshold%& is set, it defaults to
19912.code
168e428f
PH
19913quota_warn_message = "\
19914 To: $local_part@$domain\n\
19915 Subject: Your mailbox\n\n\
19916 This message is automatically created \
19917 by mail delivery software.\n\n\
19918 The size of your mailbox has exceeded \
19919 a warning threshold that is\n\
19920 set by the system administrator.\n"
9b371988 19921.endd
168e428f
PH
19922
19923
9b371988
PH
19924.option quota_warn_threshold appendfile string&!! 0
19925.cindex "quota" "warning threshold"
19926.cindex "mailbox" "size warning"
19927.cindex "size" "of mailbox"
19928This option is expanded in the same way as &%quota%& (see above). If the
168e428f
PH
19929resulting value is greater than zero, and delivery of the message causes the
19930size of the file or total space in the directory tree to cross the given
9b371988
PH
19931threshold, a warning message is sent. If &%quota%& is also set, the threshold
19932may be specified as a percentage of it by following the value with a percent
19933sign. For example:
19934.code
19935quota = 10M
19936quota_warn_threshold = 75%
19937.endd
19938If &%quota%& is not set, a setting of &%quota_warn_threshold%& that ends with a
168e428f
PH
19939percent sign is ignored.
19940
9b371988
PH
19941The warning message itself is specified by the &%quota_warn_message%& option,
19942and it must start with a &'To:'& header line containing the recipient(s) of the
068aaea8 19943warning message. These do not necessarily have to include the recipient(s) of
9b371988 19944the original message. A &'Subject:'& line should also normally be supplied. You
4f578862
PH
19945can include any other header lines that you want. If you do not include a
19946&'From:'& line, the default is:
19947.code
19948From: Mail Delivery System <mailer-daemon@$qualify_domain_sender>
19949.endd
19950.oindex &%errors_reply_to%&
19951If you supply a &'Reply-To:'& line, it overrides the global &%errors_reply_to%&
19952option.
068aaea8 19953
9b371988 19954The &%quota%& option does not have to be set in order to use this option; they
068aaea8
PH
19955are independent of one another except when the threshold is specified as a
19956percentage.
168e428f
PH
19957
19958
9b371988
PH
19959.option use_bsmtp appendfile boolean false
19960.cindex "envelope sender"
19961If this option is set true, &(appendfile)& writes messages in &"batch SMTP"&
168e428f
PH
19962format, with the envelope sender and recipient(s) included as SMTP commands. If
19963you want to include a leading HELO command with such messages, you can do
9b371988
PH
19964so by setting the &%message_prefix%& option. See section &<<SECTbatchSMTP>>&
19965for details of batch SMTP.
168e428f 19966
168e428f 19967
9b371988
PH
19968.option use_crlf appendfile boolean false
19969.cindex "carriage return"
19970.cindex "linefeed"
168e428f
PH
19971This option causes lines to be terminated with the two-character CRLF sequence
19972(carriage return, linefeed) instead of just a linefeed character. In the case
19973of batched SMTP, the byte sequence written to the file is then an exact image
19974of what would be sent down a real SMTP connection.
19975
595028e4
PH
19976&*Note:*& The contents of the &%message_prefix%& and &%message_suffix%& options
19977(which are used to supply the traditional &"From&~"& and blank line separators
19978in Berkeley-style mailboxes) are written verbatim, so must contain their own
19979carriage return characters if these are needed. In cases where these options
19980have non-empty defaults, the values end with a single linefeed, so they must be
19981changed to end with &`\r\n`& if &%use_crlf%& is set.
168e428f
PH
19982
19983
9b371988
PH
19984.option use_fcntl_lock appendfile boolean "see below"
19985This option controls the use of the &[fcntl()]& function to lock a file for
168e428f 19986exclusive use when a message is being appended. It is set by default unless
9b371988
PH
19987&%use_flock_lock%& is set. Otherwise, it should be turned off only if you know
19988that all your MUAs use lock file locking. When both &%use_fcntl_lock%& and
19989&%use_flock_lock%& are unset, &%use_lockfile%& must be set.
168e428f 19990
168e428f 19991
9b371988
PH
19992.option use_flock_lock appendfile boolean false
19993This option is provided to support the use of &[flock()]& for file locking, for
168e428f 19994the few situations where it is needed. Most modern operating systems support
9b371988
PH
19995&[fcntl()]& and &[lockf()]& locking, and these two functions interwork with
19996each other. Exim uses &[fcntl()]& locking by default.
168e428f
PH
19997
19998This option is required only if you are using an operating system where
9b371988
PH
19999&[flock()]& is used by programs that access mailboxes (typically MUAs), and
20000where &[flock()]& does not correctly interwork with &[fcntl()]&. You can use
20001both &[fcntl()]& and &[flock()]& locking simultaneously if you want.
168e428f 20002
9b371988
PH
20003.cindex "Solaris" "&[flock()]& support"
20004Not all operating systems provide &[flock()]&. Some versions of Solaris do not
168e428f 20005have it (and some, I think, provide a not quite right version built on top of
9b371988 20006&[lockf()]&). If the OS does not have &[flock()]&, Exim will be built without
168e428f
PH
20007the ability to use it, and any attempt to do so will cause a configuration
20008error.
20009
9b371988
PH
20010&*Warning*&: &[flock()]& locks do not work on NFS files (unless &[flock()]&
20011is just being mapped onto &[fcntl()]& by the OS).
168e428f
PH
20012
20013
9b371988 20014.option use_lockfile appendfile boolean "see below"
168e428f
PH
20015If this option is turned off, Exim does not attempt to create a lock file when
20016appending to a mailbox file. In this situation, the only locking is by
9b371988 20017&[fcntl()]&. You should only turn &%use_lockfile%& off if you are absolutely
168e428f 20018sure that every MUA that is ever going to look at your users' mailboxes uses
9b371988 20019&[fcntl()]& rather than a lock file, and even then only when you are not
168e428f
PH
20020delivering over NFS from more than one host.
20021
9b371988 20022.cindex "NFS" "lock file"
168e428f 20023In order to append to an NFS file safely from more than one host, it is
9b371988
PH
20024necessary to take out a lock &'before'& opening the file, and the lock file
20025achieves this. Otherwise, even with &[fcntl()]& locking, there is a risk of
168e428f
PH
20026file corruption.
20027
9b371988
PH
20028The &%use_lockfile%& option is set by default unless &%use_mbx_lock%& is set.
20029It is not possible to turn both &%use_lockfile%& and &%use_fcntl_lock%& off,
20030except when &%mbx_format%& is set.
168e428f 20031
168e428f 20032
9b371988 20033.option use_mbx_lock appendfile boolean "see below"
168e428f 20034This option is available only if Exim has been compiled with SUPPORT_MBX
9b371988
PH
20035set in &_Local/Makefile_&. Setting the option specifies that special MBX
20036locking rules be used. It is set by default if &%mbx_format%& is set and none
20037of the locking options are mentioned in the configuration. The locking rules
20038are the same as are used by the &'c-client'& library that underlies Pine and
20039the IMAP4 and POP daemons that come with it (see the discussion below). The
20040rules allow for shared access to the mailbox. However, this kind of locking
20041does not work when the mailbox is NFS mounted.
168e428f 20042
9b371988
PH
20043You can set &%use_mbx_lock%& with either (or both) of &%use_fcntl_lock%& and
20044&%use_flock_lock%& to control what kind of locking is used in implementing the
20045MBX locking rules. The default is to use &[fcntl()]& if &%use_mbx_lock%& is set
20046without &%use_fcntl_lock%& or &%use_flock_lock%&.
168e428f
PH
20047
20048
20049
20050
9b371988
PH
20051.section "Operational details for appending" "SECTopappend"
20052.cindex "appending to a file"
20053.cindex "file" "appending"
168e428f
PH
20054Before appending to a file, the following preparations are made:
20055
9b371988
PH
20056.ilist
20057If the name of the file is &_/dev/null_&, no action is taken, and a success
168e428f
PH
20058return is given.
20059
9b371988
PH
20060.next
20061.cindex "directory creation"
168e428f 20062If any directories on the file's path are missing, Exim creates them if the
9b371988
PH
20063&%create_directory%& option is set. A created directory's mode is given by the
20064&%directory_mode%& option.
168e428f 20065
9b371988
PH
20066.next
20067If &%file_format%& is set, the format of an existing file is checked. If this
168e428f
PH
20068indicates that a different transport should be used, control is passed to that
20069transport.
20070
9b371988
PH
20071.next
20072.cindex "file" "locking"
20073.cindex "locking files"
20074.cindex "NFS" "lock file"
20075If &%use_lockfile%& is set, a lock file is built in a way that will work
168e428f 20076reliably over NFS, as follows:
9b371988
PH
20077
20078.olist
20079Create a &"hitching post"& file whose name is that of the lock file with the
168e428f
PH
20080current time, primary host name, and process id added, by opening for writing
20081as a new file. If this fails with an access error, delivery is deferred.
9b371988
PH
20082.next
20083Close the hitching post file, and hard link it to the lock file name.
20084.next
20085If the call to &[link()]& succeeds, creation of the lock file has succeeded.
168e428f 20086Unlink the hitching post name.
9b371988
PH
20087.next
20088Otherwise, use &[stat()]& to get information about the hitching post file, and
168e428f
PH
20089then unlink hitching post name. If the number of links is exactly two, creation
20090of the lock file succeeded but something (for example, an NFS server crash and
9b371988
PH
20091restart) caused this fact not to be communicated to the &[link()]& call.
20092.next
20093If creation of the lock file failed, wait for &%lock_interval%& and try again,
20094up to &%lock_retries%& times. However, since any program that writes to a
168e428f
PH
20095mailbox should complete its task very quickly, it is reasonable to time out old
20096lock files that are normally the result of user agent and system crashes. If an
9b371988
PH
20097existing lock file is older than &%lockfile_timeout%& Exim attempts to unlink
20098it before trying again.
20099.endlist olist
20100
20101.next
20102A call is made to &[lstat()]& to discover whether the main file exists, and if
20103so, what its characteristics are. If &[lstat()]& fails for any reason other
168e428f
PH
20104than non-existence, delivery is deferred.
20105
9b371988
PH
20106.next
20107.cindex "symbolic link" "to mailbox"
20108.cindex "mailbox" "symbolic link"
168e428f 20109If the file does exist and is a symbolic link, delivery is deferred, unless the
9b371988
PH
20110&%allow_symlink%& option is set, in which case the ownership of the link is
20111checked, and then &[stat()]& is called to find out about the real file, which
168e428f
PH
20112is then subjected to the checks below. The check on the top-level link
20113ownership prevents one user creating a link for another's mailbox in a sticky
20114directory, though allowing symbolic links in this case is definitely not a good
20115idea. If there is a chain of symbolic links, the intermediate ones are not
20116checked.
20117
9b371988
PH
20118.next
20119If the file already exists but is not a regular file, or if the file's owner
20120and group (if the group is being checked &-- see &%check_group%& above) are
168e428f
PH
20121different from the user and group under which the delivery is running,
20122delivery is deferred.
20123
9b371988
PH
20124.next
20125If the file's permissions are more generous than specified, they are reduced.
20126If they are insufficient, delivery is deferred, unless &%mode_fail_narrower%&
168e428f
PH
20127is set false, in which case the delivery is tried using the existing
20128permissions.
20129
9b371988
PH
20130.next
20131The file's inode number is saved, and the file is then opened for appending.
20132If this fails because the file has vanished, &(appendfile)& behaves as if it
168e428f
PH
20133hadn't existed (see below). For any other failures, delivery is deferred.
20134
9b371988
PH
20135.next
20136If the file is opened successfully, check that the inode number hasn't
168e428f
PH
20137changed, that it is still a regular file, and that the owner and permissions
20138have not changed. If anything is wrong, defer delivery and freeze the message.
20139
9b371988
PH
20140.next
20141If the file did not exist originally, defer delivery if the &%file_must_exist%&
168e428f 20142option is set. Otherwise, check that the file is being created in a permitted
9b371988 20143directory if the &%create_file%& option is set (deferring on failure), and then
168e428f 20144open for writing as a new file, with the O_EXCL and O_CREAT options,
9b371988 20145except when dealing with a symbolic link (the &%allow_symlink%& option must be
168e428f
PH
20146set). In this case, which can happen if the link points to a non-existent file,
20147the file is opened for writing using O_CREAT but not O_EXCL, because
20148that prevents link following.
20149
9b371988
PH
20150.next
20151.cindex "loop" "while file testing"
168e428f
PH
20152If opening fails because the file exists, obey the tests given above for
20153existing files. However, to avoid looping in a situation where the file is
20154being continuously created and destroyed, the exists/not-exists loop is broken
20155after 10 repetitions, and the message is then frozen.
20156
9b371988
PH
20157.next
20158If opening fails with any other error, defer delivery.
20159
20160.next
20161.cindex "file" "locking"
20162.cindex "locking files"
20163Once the file is open, unless both &%use_fcntl_lock%& and &%use_flock_lock%&
20164are false, it is locked using &[fcntl()]& or &[flock()]& or both. If
20165&%use_mbx_lock%& is false, an exclusive lock is requested in each case.
20166However, if &%use_mbx_lock%& is true, Exim takes out a shared lock on the open
20167file, and an exclusive lock on the file whose name is
20168.code
20169/tmp/.<device-number>.<inode-number>
20170.endd
168e428f 20171using the device and inode numbers of the open mailbox file, in accordance with
c0712871
PH
20172the MBX locking rules. This file is created with a mode that is specified by
20173the &%lockfile_mode%& option.
9b371988 20174
168e428f
PH
20175If Exim fails to lock the file, there are two possible courses of action,
20176depending on the value of the locking timeout. This is obtained from
9b371988
PH
20177&%lock_fcntl_timeout%& or &%lock_flock_timeout%&, as appropriate.
20178
168e428f 20179If the timeout value is zero, the file is closed, Exim waits for
9b371988
PH
20180&%lock_interval%&, and then goes back and re-opens the file as above and tries
20181to lock it again. This happens up to &%lock_retries%& times, after which the
168e428f 20182delivery is deferred.
9b371988
PH
20183
20184If the timeout has a value greater than zero, blocking calls to &[fcntl()]& or
20185&[flock()]& are used (with the given timeout), so there has already been some
168e428f
PH
20186waiting involved by the time locking fails. Nevertheless, Exim does not give up
20187immediately. It retries up to
9b371988
PH
20188.code
20189(lock_retries * lock_interval) / <timeout>
20190.endd
168e428f 20191times (rounded up).
9b371988 20192.endlist
168e428f 20193
9b371988
PH
20194At the end of delivery, Exim closes the file (which releases the &[fcntl()]&
20195and/or &[flock()]& locks) and then deletes the lock file if one was created.
168e428f 20196
168e428f 20197
9b371988
PH
20198.section "Operational details for delivery to a new file" "SECTopdir"
20199.cindex "delivery" "to single file"
20200.cindex "&""From""& line"
20201When the &%directory%& option is set instead of &%file%&, each message is
20202delivered into a newly-created file or set of files. When &(appendfile)& is
20203activated directly from a &(redirect)& router, neither &%file%& nor
20204&%directory%& is normally set, because the path for delivery is supplied by the
20205router. (See for example, the &(address_file)& transport in the default
20206configuration.) In this case, delivery is to a new file if either the path name
20207ends in &`/`&, or the &%maildir_format%& or &%mailstore_format%& option is set.
168e428f
PH
20208
20209No locking is required while writing the message to a new file, so the various
9b371988 20210locking options of the transport are ignored. The &"From"& line that by default
168e428f 20211separates messages in a single file is not normally needed, nor is the escaping
9b371988 20212of message lines that start with &"From"&, and there is no need to ensure a
168e428f 20213newline at the end of each message. Consequently, the default values for
9b371988
PH
20214&%check_string%&, &%message_prefix%&, and &%message_suffix%& are all unset when
20215any of &%directory%&, &%maildir_format%&, or &%mailstore_format%& is set.
168e428f 20216
9b371988
PH
20217If Exim is required to check a &%quota%& setting, it adds up the sizes of all
20218the files in the delivery directory by default. However, you can specify a
20219different directory by setting &%quota_directory%&. Also, for maildir
20220deliveries (see below) the &_maildirfolder_& convention is honoured.
168e428f
PH
20221
20222
9b371988
PH
20223.cindex "maildir format"
20224.cindex "mailstore format"
168e428f 20225There are three different ways in which delivery to individual files can be
9b371988
PH
20226done, controlled by the settings of the &%maildir_format%& and
20227&%mailstore_format%& options. Note that code to support maildir or mailstore
168e428f 20228formats is not included in the binary unless SUPPORT_MAILDIR or
9b371988 20229SUPPORT_MAILSTORE, respectively, is set in &_Local/Makefile_&.
168e428f 20230
9b371988 20231.cindex "directory creation"
168e428f 20232In all three cases an attempt is made to create the directory and any necessary
9b371988 20233sub-directories if they do not exist, provided that the &%create_directory%&
168e428f 20234option is set (the default). The location of a created directory can be
9b371988
PH
20235constrained by setting &%create_file%&. A created directory's mode is given by
20236the &%directory_mode%& option. If creation fails, or if the
20237&%create_directory%& option is not set when creation is required, delivery is
20238deferred.
168e428f
PH
20239
20240
20241
9b371988
PH
20242.section "Maildir delivery" "SECTmaildirdelivery"
20243.cindex "maildir format" "description of"
20244If the &%maildir_format%& option is true, Exim delivers each message by writing
20245it to a file whose name is &_tmp/<stime>.H<mtime>P<pid>.<host>_& in the
c0712871
PH
20246directory that is defined by the &%directory%& option (the &"delivery
20247directory"&). If the delivery is successful, the file is renamed into the
9b371988 20248&_new_& subdirectory.
168e428f 20249
9b371988
PH
20250In the file name, <&'stime'&> is the current time of day in seconds, and
20251<&'mtime'&> is the microsecond fraction of the time. After a maildir delivery,
168e428f
PH
20252Exim checks that the time-of-day clock has moved on by at least one microsecond
20253before terminating the delivery process. This guarantees uniqueness for the
9b371988 20254file name. However, as a precaution, Exim calls &[stat()]& for the file before
168e428f 20255opening it. If any response other than ENOENT (does not exist) is given,
9b371988 20256Exim waits 2 seconds and tries again, up to &%maildir_retries%& times.
168e428f 20257
c0712871
PH
20258Before Exim carries out a maildir delivery, it ensures that subdirectories
20259called &_new_&, &_cur_&, and &_tmp_& exist in the delivery directory. If they
20260do not exist, Exim tries to create them and any superior directories in their
20261path, subject to the &%create_directory%& and &%create_file%& options. If the
20262&%maildirfolder_create_regex%& option is set, and the regular expression it
20263contains matches the delivery directory, Exim also ensures that a file called
20264&_maildirfolder_& exists in the delivery directory. If a missing directory or
20265&_maildirfolder_& file cannot be created, delivery is deferred.
20266
20267These features make it possible to use Exim to create all the necessary files
20268and directories in a maildir mailbox, including subdirectories for maildir++
20269folders. Consider this example:
20270.code
20271maildir_format = true
20272directory = /var/mail/$local_part\
20273 ${if eq{$local_part_suffix}{}{}\
20274 {/.${substr_1:$local_part_suffix}}}
20275maildirfolder_create_regex = /\.[^/]+$
20276.endd
20277If &$local_part_suffix$& is empty (there was no suffix for the local part),
20278delivery is into a toplevel maildir with a name like &_/var/mail/pimbo_& (for
20279the user called &'pimbo'&). The pattern in &%maildirfolder_create_regex%& does
db9452a9 20280not match this name, so Exim will not look for or create the file
c0712871
PH
20281&_/var/mail/pimbo/maildirfolder_&, though it will create
20282&_/var/mail/pimbo/{cur,new,tmp}_& if necessary.
20283
20284However, if &$local_part_suffix$& contains &`-eximusers`& (for example),
20285delivery is into the maildir++ folder &_/var/mail/pimbo/.eximusers_&, which
20286does match &%maildirfolder_create_regex%&. In this case, Exim will create
20287&_/var/mail/pimbo/.eximusers/maildirfolder_& as well as the three maildir
20288directories &_/var/mail/pimbo/.eximusers/{cur,new,tmp}_&.
20289
20290&*Warning:*& Take care when setting &%maildirfolder_create_regex%& that it does
20291not inadvertently match the toplevel maildir directory, because a
20292&_maildirfolder_& file at top level would completely break quota calculations.
c0712871 20293
9b371988
PH
20294.cindex "quota" "in maildir delivery"
20295.cindex "maildir++"
20296If Exim is required to check a &%quota%& setting before a maildir delivery, and
20297&%quota_directory%& is not set, it looks for a file called &_maildirfolder_& in
20298the maildir directory (alongside &_new_&, &_cur_&, &_tmp_&). If this exists,
168e428f
PH
20299Exim assumes the directory is a maildir++ folder directory, which is one level
20300down from the user's top level mailbox directory. This causes it to start at
20301the parent directory instead of the current directory when calculating the
20302amount of space used.
20303
20304One problem with delivering into a multi-file mailbox is that it is
20305computationally expensive to compute the size of the mailbox for quota
20306checking. Various approaches have been taken to reduce the amount of work
20307needed. The next two sections describe two of them. A third alternative is to
20308use some external process for maintaining the size data, and use the expansion
9b371988 20309of the &%mailbox_size%& option as a way of importing it into Exim.
168e428f
PH
20310
20311
20312
20313
f89d2485 20314.section "Using tags to record message sizes" "SECID135"
9b371988
PH
20315If &%maildir_tag%& is set, the string is expanded for each delivery.
20316When the maildir file is renamed into the &_new_& sub-directory, the
168e428f 20317tag is added to its name. However, if adding the tag takes the length of the
9b371988 20318name to the point where the test &[stat()]& call fails with ENAMETOOLONG,
168e428f
PH
20319the tag is dropped and the maildir file is created with no tag.
20320
f89d2485 20321.vindex "&$message_size$&"
168e428f 20322Tags can be used to encode the size of files in their names; see
9b371988
PH
20323&%quota_size_regex%& above for an example. The expansion of &%maildir_tag%&
20324happens after the message has been written. The value of the &$message_size$&
20325variable is set to the number of bytes actually written. If the expansion is
20326forced to fail, the tag is ignored, but a non-forced failure causes delivery to
20327be deferred. The expanded tag may contain any printing characters except &"/"&.
168e428f
PH
20328Non-printing characters in the string are ignored; if the resulting string is
20329empty, it is ignored. If it starts with an alphanumeric character, a leading
20330colon is inserted.
20331
20332
20333
f89d2485 20334.section "Using a maildirsize file" "SECID136"
9b371988
PH
20335.cindex "quota" "in maildir delivery"
20336.cindex "maildir format" "&_maildirsize_& file"
20337If &%maildir_use_size_file%& is true, Exim implements the maildir++ rules for
20338storing quota and message size information in a file called &_maildirsize_&
c0712871
PH
20339within the toplevel maildir directory. If this file does not exist, Exim
20340creates it, setting the quota from the &%quota%& option of the transport. If
20341the maildir directory itself does not exist, it is created before any attempt
20342to write a &_maildirsize_& file.
168e428f 20343
9b371988 20344The &_maildirsize_& file is used to hold information about the sizes of
168e428f
PH
20345messages in the maildir, thus speeding up quota calculations. The quota value
20346in the file is just a cache; if the quota is changed in the transport, the new
20347value overrides the cached value when the next message is delivered. The cache
20348is maintained for the benefit of other programs that access the maildir and
20349need to know the quota.
20350
9b371988 20351If the &%quota%& option in the transport is unset or zero, the &_maildirsize_&
168e428f
PH
20352file is maintained (with a zero quota setting), but no quota is imposed.
20353
20354A regular expression is available for controlling which directories in the
c0712871
PH
20355maildir participate in quota calculations when a &_maildirsizefile_& is in use.
20356See the description of the &%maildir_quota_directory_regex%& option above for
20357details.
168e428f
PH
20358
20359
f89d2485 20360.section "Mailstore delivery" "SECID137"
9b371988
PH
20361.cindex "mailstore format" "description of"
20362If the &%mailstore_format%& option is true, each message is written as two
20363files in the given directory. A unique base name is constructed from the
20364message id and the current delivery process, and the files that are written use
20365this base name plus the suffixes &_.env_& and &_.msg_&. The &_.env_& file
20366contains the message's envelope, and the &_.msg_& file contains the message
20367itself. The base name is placed in the variable &$mailstore_basename$&.
168e428f
PH
20368
20369During delivery, the envelope is first written to a file with the suffix
9b371988
PH
20370&_.tmp_&. The &_.msg_& file is then written, and when it is complete, the
20371&_.tmp_& file is renamed as the &_.env_& file. Programs that access messages in
20372mailstore format should wait for the presence of both a &_.msg_& and a &_.env_&
168e428f 20373file before accessing either of them. An alternative approach is to wait for
9b371988 20374the absence of a &_.tmp_& file.
168e428f 20375
9b371988 20376The envelope file starts with any text defined by the &%mailstore_prefix%&
168e428f
PH
20377option, expanded and terminated by a newline if there isn't one. Then follows
20378the sender address on one line, then all the recipient addresses, one per line.
9b371988
PH
20379There can be more than one recipient only if the &%batch_max%& option is set
20380greater than one. Finally, &%mailstore_suffix%& is expanded and the result
168e428f
PH
20381appended to the file, followed by a newline if it does not end with one.
20382
9b371988 20383If expansion of &%mailstore_prefix%& or &%mailstore_suffix%& ends with a forced
168e428f 20384failure, it is ignored. Other expansion errors are treated as serious
068aaea8 20385configuration errors, and delivery is deferred. The variable
9b371988 20386&$mailstore_basename$& is available for use during these expansions.
168e428f
PH
20387
20388
f89d2485 20389.section "Non-special new file delivery" "SECID138"
9b371988
PH
20390If neither &%maildir_format%& nor &%mailstore_format%& is set, a single new
20391file is created directly in the named directory. For example, when delivering
168e428f 20392messages into files in batched SMTP format for later delivery to some host (see
9b371988
PH
20393section &<<SECTbatchSMTP>>&), a setting such as
20394.code
20395directory = /var/bsmtp/$host
20396.endd
168e428f
PH
20397might be used. A message is written to a file with a temporary name, which is
20398then renamed when the delivery is complete. The final name is obtained by
9b371988 20399expanding the contents of the &%directory_file%& option.
4f578862
PH
20400.ecindex IIDapptra1
20401.ecindex IIDapptra2
168e428f
PH
20402
20403
20404
20405
20406
20407
9b371988
PH
20408. ////////////////////////////////////////////////////////////////////////////
20409. ////////////////////////////////////////////////////////////////////////////
168e428f 20410
f89d2485 20411.chapter "The autoreply transport" "CHID8"
4f578862
PH
20412.scindex IIDauttra1 "transports" "&(autoreply)&"
20413.scindex IIDauttra2 "&(autoreply)& transport"
9b371988 20414The &(autoreply)& transport is not a true transport in that it does not cause
4f578862
PH
20415the message to be transmitted. Instead, it generates a new mail message as an
20416automatic reply to the incoming message. &'References:'& and
20417&'Auto-Submitted:'& header lines are included. These are constructed according
20418to the rules in RFCs 2822 and 3834, respectively.
168e428f
PH
20419
20420If the router that passes the message to this transport does not have the
9b371988
PH
20421&%unseen%& option set, the original message (for the current recipient) is not
20422delivered anywhere. However, when the &%unseen%& option is set on the router
20423that passes the message to this transport, routing of the address continues, so
168e428f
PH
20424another router can set up a normal message delivery.
20425
20426
9b371988
PH
20427The &(autoreply)& transport is usually run as the result of mail filtering, a
20428&"vacation"& message being the standard example. However, it can also be run
168e428f 20429directly from a router like any other transport. To reduce the possibility of
9b371988 20430message cascades, messages created by the &(autoreply)& transport always have
168e428f
PH
20431empty envelope sender addresses, like bounce messages.
20432
20433The parameters of the message to be sent can be specified in the configuration
20434by options described below. However, these are used only when the address
20435passed to the transport does not contain its own reply information. When the
20436transport is run as a consequence of a
9b371988
PH
20437&%mail%&
20438or &%vacation%& command in a filter file, the parameters of the message are
168e428f
PH
20439supplied by the filter, and passed with the address. The transport's options
20440that define the message are then ignored (so they are not usually set in this
20441case). The message is specified entirely by the filter or by the transport; it
9b371988
PH
20442is never built from a mixture of options. However, the &%file_optional%&,
20443&%mode%&, and &%return_message%& options apply in all cases.
168e428f 20444
9b371988
PH
20445&(Autoreply)& is implemented as a local transport. When used as a result of a
20446command in a user's filter file, &(autoreply)& normally runs under the uid and
168e428f 20447gid of the user, and with appropriate current and home directories (see chapter
9b371988 20448&<<CHAPenvironment>>&).
168e428f 20449
9b371988 20450There is a subtle difference between routing a message to a &(pipe)& transport
168e428f 20451that generates some text to be returned to the sender, and routing it to an
9b371988 20452&(autoreply)& transport. This difference is noticeable only if more than one
168e428f
PH
20453address from the same message is so handled. In the case of a pipe, the
20454separate outputs from the different addresses are gathered up and returned to
9b371988 20455the sender in a single message, whereas if &(autoreply)& is used, a separate
168e428f
PH
20456message is generated for each address that is passed to it.
20457
20458Non-printing characters are not permitted in the header lines generated for the
9b371988 20459message that &(autoreply)& creates, with the exception of newlines that are
068aaea8 20460immediately followed by white space. If any non-printing characters are found,
168e428f
PH
20461the transport defers.
20462Whether characters with the top bit set count as printing characters or not is
9b371988 20463controlled by the &%print_topbitchars%& global option.
168e428f
PH
20464
20465If any of the generic options for manipulating headers (for example,
9b371988
PH
20466&%headers_add%&) are set on an &(autoreply)& transport, they apply to the copy
20467of the original message that is included in the generated message when
20468&%return_message%& is set. They do not apply to the generated message itself.
168e428f 20469
f89d2485 20470.vindex "&$sender_address$&"
9b371988 20471If the &(autoreply)& transport receives return code 2 from Exim when it submits
168e428f 20472the message, indicating that there were no recipients, it does not treat this
9b371988 20473as an error. This means that autoreplies sent to &$sender_address$& when this
168e428f
PH
20474is empty (because the incoming message is a bounce message) do not cause
20475problems. They are just discarded.
20476
20477
20478
f89d2485 20479.section "Private options for autoreply" "SECID139"
9b371988 20480.cindex "options" "&(autoreply)& transport"
168e428f 20481
9b371988
PH
20482.option bcc autoreply string&!! unset
20483This specifies the addresses that are to receive &"blind carbon copies"& of the
168e428f
PH
20484message when the message is specified by the transport.
20485
20486
9b371988
PH
20487.option cc autoreply string&!! unset
20488This specifies recipients of the message and the contents of the &'Cc:'& header
168e428f
PH
20489when the message is specified by the transport.
20490
20491
9b371988 20492.option file autoreply string&!! unset
168e428f 20493The contents of the file are sent as the body of the message when the message
9b371988 20494is specified by the transport. If both &%file%& and &%text%& are set, the text
168e428f
PH
20495string comes first.
20496
20497
9b371988
PH
20498.option file_expand autoreply boolean false
20499If this is set, the contents of the file named by the &%file%& option are
168e428f
PH
20500subjected to string expansion as they are added to the message.
20501
20502
9b371988
PH
20503.option file_optional autoreply boolean false
20504If this option is true, no error is generated if the file named by the &%file%&
168e428f
PH
20505option or passed with the address does not exist or cannot be read.
20506
20507
9b371988
PH
20508.option from autoreply string&!! unset
20509This specifies the contents of the &'From:'& header when the message is
20510specified by the transport.
168e428f 20511
168e428f 20512
9b371988
PH
20513.option headers autoreply string&!! unset
20514This specifies additional RFC 2822 headers that are to be added to the message
20515when the message is specified by the transport. Several can be given by using
20516&"\n"& to separate them. There is no check on the format.
168e428f 20517
168e428f 20518
9b371988 20519.option log autoreply string&!! unset
168e428f
PH
20520This option names a file in which a record of every message sent is logged when
20521the message is specified by the transport.
20522
20523
9b371988
PH
20524.option mode autoreply "octal integer" 0600
20525If either the log file or the &"once"& file has to be created, this mode is
d1e83bff 20526used.
168e428f
PH
20527
20528
9b371988 20529.option never_mail autoreply "address list&!!" unset
168e428f
PH
20530If any run of the transport creates a message with a recipient that matches any
20531item in the list, that recipient is quietly discarded. If all recipients are
c0712871
PH
20532discarded, no message is created. This applies both when the recipients are
20533generated by a filter and when they are specified in the transport.
168e428f
PH
20534
20535
20536
9b371988
PH
20537.option once autoreply string&!! unset
20538This option names a file or DBM database in which a record of each &'To:'&
20539recipient is kept when the message is specified by the transport. &*Note*&:
20540This does not apply to &'Cc:'& or &'Bcc:'& recipients.
d1e83bff 20541
9b371988
PH
20542If &%once%& is unset, or is set to an empty string, the message is always sent.
20543By default, if &%once%& is set to a non-empty file name, the message
d1e83bff 20544is not sent if a potential recipient is already listed in the database.
9b371988 20545However, if the &%once_repeat%& option specifies a time greater than zero, the
d1e83bff 20546message is sent if that much time has elapsed since a message was last sent to
9b371988
PH
20547this recipient. A setting of zero time for &%once_repeat%& (the default)
20548prevents a message from being sent a second time &-- in this case, zero means
20549infinity.
d1e83bff 20550
9b371988
PH
20551If &%once_file_size%& is zero, a DBM database is used to remember recipients,
20552and it is allowed to grow as large as necessary. If &%once_file_size%& is set
20553greater than zero, it changes the way Exim implements the &%once%& option.
20554Instead of using a DBM file to record every recipient it sends to, it uses a
20555regular file, whose size will never get larger than the given value.
d1e83bff
PH
20556
20557In the file, Exim keeps a linear list of recipient addresses and the times at
20558which they were sent messages. If the file is full when a new address needs to
9b371988 20559be added, the oldest address is dropped. If &%once_repeat%& is not set, this
d1e83bff
PH
20560means that a given recipient may receive multiple messages, but at
20561unpredictable intervals that depend on the rate of turnover of addresses in the
9b371988 20562file. If &%once_repeat%& is set, it specifies a maximum time between repeats.
168e428f 20563
168e428f 20564
9b371988
PH
20565.option once_file_size autoreply integer 0
20566See &%once%& above.
168e428f 20567
168e428f 20568
9b371988
PH
20569.option once_repeat autoreply time&!! 0s
20570See &%once%& above.
168e428f
PH
20571After expansion, the value of this option must be a valid time value.
20572
20573
9b371988
PH
20574.option reply_to autoreply string&!! unset
20575This specifies the contents of the &'Reply-To:'& header when the message is
168e428f
PH
20576specified by the transport.
20577
20578
9b371988 20579.option return_message autoreply boolean false
168e428f 20580If this is set, a copy of the original message is returned with the new
9b371988 20581message, subject to the maximum size set in the &%return_size_limit%& global
168e428f
PH
20582configuration option.
20583
20584
9b371988
PH
20585.option subject autoreply string&!! unset
20586This specifies the contents of the &'Subject:'& header when the message is
20587specified by the transport. It is tempting to quote the original subject in
20588automatic responses. For example:
20589.code
20590subject = Re: $h_subject:
20591.endd
168e428f
PH
20592There is a danger in doing this, however. It may allow a third party to
20593subscribe your users to an opt-in mailing list, provided that the list accepts
20594bounce messages as subscription confirmations. Well-managed lists require a
20595non-bounce message to confirm a subscription, so the danger is relatively
20596small.
20597
20598
20599
9b371988 20600.option text autoreply string&!! unset
168e428f 20601This specifies a single string to be used as the body of the message when the
9b371988
PH
20602message is specified by the transport. If both &%text%& and &%file%& are set,
20603the text comes first.
168e428f 20604
168e428f 20605
9b371988
PH
20606.option to autoreply string&!! unset
20607This specifies recipients of the message and the contents of the &'To:'& header
168e428f 20608when the message is specified by the transport.
4f578862
PH
20609.ecindex IIDauttra1
20610.ecindex IIDauttra2
168e428f
PH
20611
20612
20613
20614
9b371988
PH
20615. ////////////////////////////////////////////////////////////////////////////
20616. ////////////////////////////////////////////////////////////////////////////
168e428f 20617
9b371988
PH
20618.chapter "The lmtp transport" "CHAPLMTP"
20619.cindex "transports" "&(lmtp)&"
20620.cindex "&(lmtp)& transport"
20621.cindex "LMTP" "over a pipe"
20622.cindex "LMTP" "over a socket"
20623The &(lmtp)& transport runs the LMTP protocol (RFC 2033) over a pipe to a
168e428f
PH
20624specified command
20625or by interacting with a Unix domain socket.
9b371988 20626This transport is something of a cross between the &(pipe)& and &(smtp)&
168e428f 20627transports. Exim also has support for using LMTP over TCP/IP; this is
9b371988
PH
20628implemented as an option for the &(smtp)& transport. Because LMTP is expected
20629to be of minority interest, the default build-time configure in &_src/EDITME_&
168e428f 20630has it commented out. You need to ensure that
9b371988
PH
20631.code
20632TRANSPORT_LMTP=yes
20633.endd
20634.cindex "options" "&(lmtp)& transport"
20635is present in your &_Local/Makefile_& in order to have the &(lmtp)& transport
20636included in the Exim binary. The private options of the &(lmtp)& transport are
20637as follows:
168e428f 20638
9b371988
PH
20639.option batch_id lmtp string&!! unset
20640See the description of local delivery batching in chapter &<<CHAPbatching>>&.
168e428f 20641
168e428f 20642
9b371988 20643.option batch_max lmtp integer 1
168e428f
PH
20644This limits the number of addresses that can be handled in a single delivery.
20645Most LMTP servers can handle several addresses at once, so it is normally a
20646good idea to increase this value. See the description of local delivery
9b371988 20647batching in chapter &<<CHAPbatching>>&.
168e428f
PH
20648
20649
9b371988
PH
20650.option command lmtp string&!! unset
20651This option must be set if &%socket%& is not set. The string is a command which
068aaea8
PH
20652is run in a separate process. It is split up into a command name and list of
20653arguments, each of which is separately expanded (so expansion cannot change the
20654number of arguments). The command is run directly, not via a shell. The message
20655is passed to the new process using the standard input and output to operate the
20656LMTP protocol.
20657
9b371988
PH
20658.option ignore_quota lmtp boolean false
20659.cindex "LMTP" "ignoring quota errors"
20660If this option is set true, the string &`IGNOREQUOTA`& is added to RCPT
20661commands, provided that the LMTP server has advertised support for IGNOREQUOTA
20662in its response to the LHLO command.
168e428f 20663
9b371988
PH
20664.option socket lmtp string&!! unset
20665This option must be set if &%command%& is not set. The result of expansion must
168e428f
PH
20666be the name of a Unix domain socket. The transport connects to the socket and
20667delivers the message to it using the LMTP protocol.
20668
20669
9b371988 20670.option timeout lmtp time 5m
f89d2485 20671The transport is aborted if the created process or Unix domain socket does not
7d0ab55c
TF
20672respond to LMTP commands or message input within this timeout. Delivery
20673is deferred, and will be tried again later. Here is an example of a typical
595028e4 20674LMTP transport:
9b371988
PH
20675.code
20676lmtp:
20677 driver = lmtp
20678 command = /some/local/lmtp/delivery/program
20679 batch_max = 20
20680 user = exim
20681.endd
168e428f 20682This delivers up to 20 addresses at a time, in a mixture of domains if
9b371988 20683necessary, running as the user &'exim'&.
168e428f
PH
20684
20685
168e428f 20686
9b371988
PH
20687. ////////////////////////////////////////////////////////////////////////////
20688. ////////////////////////////////////////////////////////////////////////////
168e428f 20689
9b371988 20690.chapter "The pipe transport" "CHAPpipetransport"
4f578862
PH
20691.scindex IIDpiptra1 "transports" "&(pipe)&"
20692.scindex IIDpiptra2 "&(pipe)& transport"
9b371988
PH
20693The &(pipe)& transport is used to deliver messages via a pipe to a command
20694running in another process. One example is the use of &(pipe)& as a
20695pseudo-remote transport for passing messages to some other delivery mechanism
20696(such as UUCP). Another is the use by individual users to automatically process
20697their incoming messages. The &(pipe)& transport can be used in one of the
20698following ways:
168e428f 20699
9b371988 20700.ilist
f89d2485 20701.vindex "&$local_part$&"
068aaea8 20702A router routes one address to a transport in the normal way, and the
9b371988 20703transport is configured as a &(pipe)& transport. In this case, &$local_part$&
068aaea8 20704contains the local part of the address (as usual), and the command that is run
9b371988
PH
20705is specified by the &%command%& option on the transport.
20706.next
f89d2485 20707.vindex "&$pipe_addresses$&"
c0712871
PH
20708If the &%batch_max%& option is set greater than 1 (the default is 1), the
20709transport can handle more than one address in a single run. In this case, when
20710more than one address is routed to the transport, &$local_part$& is not set
20711(because it is not unique). However, the pseudo-variable &$pipe_addresses$&
20712(described in section &<<SECThowcommandrun>>& below) contains all the addresses
20713that are routed to the transport.
9b371988 20714.next
f89d2485 20715.vindex "&$address_pipe$&"
068aaea8 20716A router redirects an address directly to a pipe command (for example, from an
c0712871
PH
20717alias or forward file). In this case, &$address_pipe$& contains the text of the
20718pipe command, and the &%command%& option on the transport is ignored. If only
20719one address is being transported (&%batch_max%& is not greater than one, or
20720only one address was redirected to this pipe command), &$local_part$& contains
20721the local part that was redirected.
9b371988 20722.endlist
168e428f
PH
20723
20724
9b371988 20725The &(pipe)& transport is a non-interactive delivery method. Exim can also
168e428f 20726deliver messages over pipes using the LMTP interactive protocol. This is
9b371988 20727implemented by the &(lmtp)& transport.
168e428f 20728
9b371988
PH
20729In the case when &(pipe)& is run as a consequence of an entry in a local user's
20730&_.forward_& file, the command runs under the uid and gid of that user. In
20731other cases, the uid and gid have to be specified explicitly, either on the
20732transport or on the router that handles the address. Current and &"home"&
20733directories are also controllable. See chapter &<<CHAPenvironment>>& for
db9452a9
PH
20734details of the local delivery environment and chapter &<<CHAPbatching>>&
20735for a discussion of local delivery batching.
168e428f
PH
20736
20737
f89d2485 20738.section "Concurrent delivery" "SECID140"
168e428f
PH
20739If two messages arrive at almost the same time, and both are routed to a pipe
20740delivery, the two pipe transports may be run concurrently. You must ensure that
20741any pipe commands you set up are robust against this happening. If the commands
9b371988 20742write to a file, the &%exim_lock%& utility might be of use.
168e428f
PH
20743
20744
20745
20746
f89d2485 20747.section "Returned status and data" "SECID141"
9b371988 20748.cindex "&(pipe)& transport" "returned data"
168e428f 20749If the command exits with a non-zero return code, the delivery is deemed to
9b371988 20750have failed, unless either the &%ignore_status%& option is set (in which case
168e428f 20751the return code is treated as zero), or the return code is one of those listed
9b371988
PH
20752in the &%temp_errors%& option, which are interpreted as meaning &"try again
20753later"&. In this case, delivery is deferred. Details of a permanent failure are
168e428f 20754logged, but are not included in the bounce message, which merely contains
9b371988 20755&"local delivery failed"&.
168e428f
PH
20756
20757If the return code is greater than 128 and the command being run is a shell
20758script, it normally means that the script was terminated by a signal whose
20759value is the return code minus 128.
20760
9b371988 20761If Exim is unable to run the command (that is, if &[execve()]& fails), the
168e428f
PH
20762return code is set to 127. This is the value that a shell returns if it is
20763asked to run a non-existent command. The wording for the log line suggests that
20764a non-existent command may be the problem.
20765
9b371988 20766The &%return_output%& option can affect the result of a pipe delivery. If it is
168e428f
PH
20767set and the command produces any output on its standard output or standard
20768error streams, the command is considered to have failed, even if it gave a zero
9b371988
PH
20769return code or if &%ignore_status%& is set. The output from the command is
20770included as part of the bounce message. The &%return_fail_output%& option is
168e428f
PH
20771similar, except that output is returned only when the command exits with a
20772failure return code, that is, a value other than zero or a code that matches
9b371988 20773&%temp_errors%&.
168e428f
PH
20774
20775
20776
9b371988
PH
20777.section "How the command is run" "SECThowcommandrun"
20778.cindex "&(pipe)& transport" "path for command"
168e428f 20779The command line is (by default) broken down into a command name and arguments
9b371988
PH
20780by the &(pipe)& transport itself. The &%allow_commands%& and
20781&%restrict_to_path%& options can be used to restrict the commands that may be
20782run.
168e428f 20783
9b371988 20784.cindex "quoting" "in pipe command"
168e428f
PH
20785Unquoted arguments are delimited by white space. If an argument appears in
20786double quotes, backslash is interpreted as an escape character in the usual
20787way. If an argument appears in single quotes, no escaping is done.
20788
20789String expansion is applied to the command line except when it comes from a
9b371988 20790traditional &_.forward_& file (commands from a filter file are expanded). The
168e428f
PH
20791expansion is applied to each argument in turn rather than to the whole line.
20792For this reason, any string expansion item that contains white space must be
20793quoted so as to be contained within a single argument. A setting such as
9b371988
PH
20794.code
20795command = /some/path ${if eq{$local_part}{postmaster}{xx}{yy}}
20796.endd
168e428f
PH
20797will not work, because the expansion item gets split between several
20798arguments. You have to write
9b371988
PH
20799.code
20800command = /some/path "${if eq{$local_part}{postmaster}{xx}{yy}}"
20801.endd
168e428f
PH
20802to ensure that it is all in one argument. The expansion is done in this way,
20803argument by argument, so that the number of arguments cannot be changed as a
20804result of expansion, and quotes or backslashes in inserted variables do not
4f578862
PH
20805interact with external quoting. However, this leads to problems if you want to
20806generate multiple arguments (or the command name plus arguments) from a single
20807expansion. In this situation, the simplest solution is to use a shell. For
20808example:
20809.code
20810command = /bin/sh -c ${lookup{$local_part}lsearch{/some/file}}
20811.endd
168e428f 20812
9b371988
PH
20813.cindex "transport" "filter"
20814.cindex "filter" "transport filter"
f89d2485 20815.vindex "&$pipe_addresses$&"
168e428f 20816Special handling takes place when an argument consists of precisely the text
9b371988 20817&`$pipe_addresses`&. This is not a general expansion variable; the only
168e428f
PH
20818place this string is recognized is when it appears as an argument for a pipe or
20819transport filter command. It causes each address that is being handled to be
9b371988 20820inserted in the argument list at that point &'as a separate argument'&. This
168e428f 20821avoids any problems with spaces or shell metacharacters, and is of use when a
9b371988 20822&(pipe)& transport is handling groups of addresses in a batch.
168e428f
PH
20823
20824After splitting up into arguments and expansion, the resulting command is run
9b371988 20825in a subprocess directly from the transport, &'not'& under a shell. The
168e428f
PH
20826message that is being delivered is supplied on the standard input, and the
20827standard output and standard error are both connected to a single pipe that is
9b371988
PH
20828read by Exim. The &%max_output%& option controls how much output the command
20829may produce, and the &%return_output%& and &%return_fail_output%& options
20830control what is done with it.
168e428f
PH
20831
20832Not running the command under a shell (by default) lessens the security risks
20833in cases when a command from a user's filter file is built out of data that was
20834taken from an incoming message. If a shell is required, it can of course be
20835explicitly specified as the command to be run. However, there are circumstances
9b371988 20836where existing commands (for example, in &_.forward_& files) expect to be run
168e428f 20837under a shell and cannot easily be modified. To allow for these cases, there is
9b371988 20838an option called &%use_shell%&, which changes the way the &(pipe)& transport
168e428f 20839works. Instead of breaking up the command line as just described, it expands it
9b371988
PH
20840as a single string and passes the result to &_/bin/sh_&. The
20841&%restrict_to_path%& option and the &$pipe_addresses$& facility cannot be used
20842with &%use_shell%&, and the whole mechanism is inherently less secure.
168e428f
PH
20843
20844
20845
9b371988
PH
20846.section "Environment variables" "SECTpipeenv"
20847.cindex "&(pipe)& transport" "environment for command"
20848.cindex "environment for pipe transport"
168e428f
PH
20849The environment variables listed below are set up when the command is invoked.
20850This list is a compromise for maximum compatibility with other MTAs. Note that
9b371988 20851the &%environment%& option can be used to add additional variables to this
168e428f 20852environment.
9b371988
PH
20853.display
20854&`DOMAIN `& the domain of the address
20855&`HOME `& the home directory, if set
20856&`HOST `& the host name when called from a router (see below)
20857&`LOCAL_PART `& see below
20858&`LOCAL_PART_PREFIX `& see below
20859&`LOCAL_PART_SUFFIX `& see below
20860&`LOGNAME `& see below
20861&`MESSAGE_ID `& Exim's local ID for the message
20862&`PATH `& as specified by the &%path%& option below
20863&`QUALIFY_DOMAIN `& the sender qualification domain
20864&`RECIPIENT `& the complete recipient address
20865&`SENDER `& the sender of the message (empty if a bounce)
20866&`SHELL `& &`/bin/sh`&
20867&`TZ `& the value of the &%timezone%& option, if set
20868&`USER `& see below
20869.endd
20870When a &(pipe)& transport is called directly from (for example) an &(accept)&
168e428f
PH
20871router, LOCAL_PART is set to the local part of the address. When it is
20872called as a result of a forward or alias expansion, LOCAL_PART is set to
20873the local part of the address that was expanded. In both cases, any affixes are
20874removed from the local part, and made available in LOCAL_PART_PREFIX and
20875LOCAL_PART_SUFFIX, respectively. LOGNAME and USER are set to the
20876same value as LOCAL_PART for compatibility with other MTAs.
20877
9b371988
PH
20878.cindex "HOST"
20879HOST is set only when a &(pipe)& transport is called from a router that
20880associates hosts with an address, typically when using &(pipe)& as a
168e428f
PH
20881pseudo-remote transport. HOST is set to the first host name specified by
20882the router.
20883
9b371988
PH
20884.cindex "HOME"
20885If the transport's generic &%home_directory%& option is set, its value is used
168e428f 20886for the HOME environment variable. Otherwise, a home directory may be set
9b371988
PH
20887by the router's &%transport_home_directory%& option, which defaults to the
20888user's home directory if &%check_local_user%& is set.
168e428f
PH
20889
20890
f89d2485 20891.section "Private options for pipe" "SECID142"
9b371988 20892.cindex "options" "&(pipe)& transport"
168e428f
PH
20893
20894
20895
9b371988
PH
20896.option allow_commands pipe "string list&!!" unset
20897.cindex "&(pipe)& transport" "permitted commands"
168e428f 20898The string is expanded, and is then interpreted as a colon-separated list of
9b371988
PH
20899permitted commands. If &%restrict_to_path%& is not set, the only commands
20900permitted are those in the &%allow_commands%& list. They need not be absolute
20901paths; the &%path%& option is still used for relative paths. If
20902&%restrict_to_path%& is set with &%allow_commands%&, the command must either be
20903in the &%allow_commands%& list, or a name without any slashes that is found on
20904the path. In other words, if neither &%allow_commands%& nor
20905&%restrict_to_path%& is set, there is no restriction on the command, but
20906otherwise only commands that are permitted by one or the other are allowed. For
20907example, if
20908.code
20909allow_commands = /usr/bin/vacation
20910.endd
20911and &%restrict_to_path%& is not set, the only permitted command is
20912&_/usr/bin/vacation_&. The &%allow_commands%& option may not be set if
20913&%use_shell%& is set.
168e428f 20914
168e428f 20915
9b371988
PH
20916.option batch_id pipe string&!! unset
20917See the description of local delivery batching in chapter &<<CHAPbatching>>&.
168e428f 20918
168e428f 20919
9b371988 20920.option batch_max pipe integer 1
168e428f 20921This limits the number of addresses that can be handled in a single delivery.
9b371988 20922See the description of local delivery batching in chapter &<<CHAPbatching>>&.
168e428f
PH
20923
20924
9b371988
PH
20925.option check_string pipe string unset
20926As &(pipe)& writes the message, the start of each line is tested for matching
20927&%check_string%&, and if it does, the initial matching characters are replaced
20928by the contents of &%escape_string%&, provided both are set. The value of
20929&%check_string%& is a literal string, not a regular expression, and the case of
20930any letters it contains is significant. When &%use_bsmtp%& is set, the contents
20931of &%check_string%& and &%escape_string%& are forced to values that implement
20932the SMTP escaping protocol. Any settings made in the configuration file are
168e428f
PH
20933ignored.
20934
20935
9b371988
PH
20936.option command pipe string&!! unset
20937This option need not be set when &(pipe)& is being used to deliver to pipes
168e428f
PH
20938obtained directly from address redirections. In other cases, the option must be
20939set, to provide a command to be run. It need not yield an absolute path (see
9b371988 20940the &%path%& option below). The command is split up into separate arguments by
168e428f 20941Exim, and each argument is separately expanded, as described in section
9b371988 20942&<<SECThowcommandrun>>& above.
168e428f
PH
20943
20944
9b371988
PH
20945.option environment pipe string&!! unset
20946.cindex "&(pipe)& transport" "environment for command"
20947.cindex "environment for &(pipe)& transport"
168e428f 20948This option is used to add additional variables to the environment in which the
9b371988
PH
20949command runs (see section &<<SECTpipeenv>>& for the default list). Its value is
20950a string which is expanded, and then interpreted as a colon-separated list of
20951environment settings of the form <&'name'&>=<&'value'&>.
168e428f 20952
168e428f 20953
9b371988
PH
20954.option escape_string pipe string unset
20955See &%check_string%& above.
168e428f
PH
20956
20957
9b371988
PH
20958.option freeze_exec_fail pipe boolean false
20959.cindex "exec failure"
20960.cindex "failure of exec"
20961.cindex "&(pipe)& transport" "failure of exec"
168e428f 20962Failure to exec the command in a pipe transport is by default treated like
9b371988 20963any other failure while running the command. However, if &%freeze_exec_fail%&
168e428f 20964is set, failure to exec is treated specially, and causes the message to be
9b371988 20965frozen, whatever the setting of &%ignore_status%&.
168e428f 20966
168e428f 20967
9b371988 20968.option ignore_status pipe boolean false
168e428f
PH
20969If this option is true, the status returned by the subprocess that is set up to
20970run the command is ignored, and Exim behaves as if zero had been returned.
068aaea8
PH
20971Otherwise, a non-zero status or termination by signal causes an error return
20972from the transport unless the status value is one of those listed in
9b371988 20973&%temp_errors%&; these cause the delivery to be deferred and tried again later.
068aaea8 20974
9b371988
PH
20975&*Note*&: This option does not apply to timeouts, which do not return a status.
20976See the &%timeout_defer%& option for how timeouts are handled.
168e428f 20977
9b371988
PH
20978.option log_defer_output pipe boolean false
20979.cindex "&(pipe)& transport" "logging output"
168e428f 20980If this option is set, and the status returned by the command is
9b371988 20981one of the codes listed in &%temp_errors%& (that is, delivery was deferred),
168e428f
PH
20982and any output was produced, the first line of it is written to the main log.
20983
20984
9b371988 20985.option log_fail_output pipe boolean false
168e428f
PH
20986If this option is set, and the command returns any output, and also ends with a
20987return code that is neither zero nor one of the return codes listed in
9b371988
PH
20988&%temp_errors%& (that is, the delivery failed), the first line of output is
20989written to the main log. This option and &%log_output%& are mutually exclusive.
20990Only one of them may be set.
168e428f
PH
20991
20992
168e428f 20993
9b371988 20994.option log_output pipe boolean false
168e428f 20995If this option is set and the command returns any output, the first line of
9b371988
PH
20996output is written to the main log, whatever the return code. This option and
20997&%log_fail_output%& are mutually exclusive. Only one of them may be set.
168e428f
PH
20998
20999
168e428f 21000
9b371988 21001.option max_output pipe integer 20K
168e428f
PH
21002This specifies the maximum amount of output that the command may produce on its
21003standard output and standard error file combined. If the limit is exceeded, the
21004process running the command is killed. This is intended as a safety measure to
21005catch runaway processes. The limit is applied independently of the settings of
21006the options that control what is done with such output (for example,
9b371988 21007&%return_output%&). Because of buffering effects, the amount of output may
168e428f
PH
21008exceed the limit by a small amount before Exim notices.
21009
21010
9b371988 21011.option message_prefix pipe string&!! "see below"
168e428f 21012The string specified here is expanded and output at the start of every message.
9b371988
PH
21013The default is unset if &%use_bsmtp%& is set. Otherwise it is
21014.code
168e428f
PH
21015message_prefix = \
21016 From ${if def:return_path{$return_path}{MAILER-DAEMON}}\
21017 ${tod_bsdinbox}\n
9b371988
PH
21018.endd
21019.cindex "Cyrus"
21020.cindex "&%tmail%&"
21021.cindex "&""From""& line"
21022This is required by the commonly used &_/usr/bin/vacation_& program.
21023However, it must &'not'& be present if delivery is to the Cyrus IMAP server,
21024or to the &%tmail%& local delivery agent. The prefix can be suppressed by
21025setting
21026.code
21027message_prefix =
21028.endd
595028e4
PH
21029&*Note:*& If you set &%use_crlf%& true, you must change any occurrences of
21030&`\n`& to &`\r\n`& in &%message_prefix%&.
595028e4 21031
168e428f 21032
9b371988 21033.option message_suffix pipe string&!! "see below"
168e428f 21034The string specified here is expanded and output at the end of every message.
9b371988 21035The default is unset if &%use_bsmtp%& is set. Otherwise it is a single newline.
168e428f 21036The suffix can be suppressed by setting
9b371988
PH
21037.code
21038message_suffix =
21039.endd
595028e4
PH
21040&*Note:*& If you set &%use_crlf%& true, you must change any occurrences of
21041&`\n`& to &`\r\n`& in &%message_suffix%&.
595028e4 21042
168e428f 21043
f89d2485 21044.option path pipe string "see below"
168e428f 21045This option specifies the string that is set up in the PATH environment
f89d2485
PH
21046variable of the subprocess. The default is:
21047.code
21048/bin:/usr/bin
21049.endd
21050If the &%command%& option does not yield an absolute path name, the command is
21051sought in the PATH directories, in the usual way. &*Warning*&: This does not
21052apply to a command specified as a transport filter.
168e428f
PH
21053
21054
9b371988
PH
21055.option pipe_as_creator pipe boolean false
21056.cindex "uid (user id)" "local delivery"
21057If the generic &%user%& option is not set and this option is true, the delivery
168e428f
PH
21058process is run under the uid that was in force when Exim was originally called
21059to accept the message. If the group id is not otherwise set (via the generic
9b371988 21060&%group%& option), the gid that was in force when Exim was originally called to
168e428f
PH
21061accept the message is used.
21062
21063
9b371988
PH
21064.option restrict_to_path pipe boolean false
21065When this option is set, any command name not listed in &%allow_commands%& must
168e428f 21066contain no slashes. The command is searched for only in the directories listed
9b371988
PH
21067in the &%path%& option. This option is intended for use in the case when a pipe
21068command has been generated from a user's &_.forward_& file. This is usually
21069handled by a &(pipe)& transport called &%address_pipe%&.
168e428f
PH
21070
21071
9b371988 21072.option return_fail_output pipe boolean false
168e428f 21073If this option is true, and the command produced any output and ended with a
9b371988 21074return code other than zero or one of the codes listed in &%temp_errors%& (that
168e428f
PH
21075is, the delivery failed), the output is returned in the bounce message.
21076However, if the message has a null sender (that is, it is itself a bounce
9b371988
PH
21077message), output from the command is discarded. This option and
21078&%return_output%& are mutually exclusive. Only one of them may be set.
168e428f
PH
21079
21080
21081
9b371988 21082.option return_output pipe boolean false
168e428f
PH
21083If this option is true, and the command produced any output, the delivery is
21084deemed to have failed whatever the return code from the command, and the output
21085is returned in the bounce message. Otherwise, the output is just discarded.
21086However, if the message has a null sender (that is, it is a bounce message),
21087output from the command is always discarded, whatever the setting of this
9b371988
PH
21088option. This option and &%return_fail_output%& are mutually exclusive. Only one
21089of them may be set.
168e428f 21090
168e428f
PH
21091
21092
9b371988
PH
21093.option temp_errors pipe "string list" "see below"
21094.cindex "&(pipe)& transport" "temporary failure"
168e428f 21095This option contains either a colon-separated list of numbers, or a single
9b371988
PH
21096asterisk. If &%ignore_status%& is false
21097and &%return_output%& is not set,
168e428f
PH
21098and the command exits with a non-zero return code, the failure is treated as
21099temporary and the delivery is deferred if the return code matches one of the
21100numbers, or if the setting is a single asterisk. Otherwise, non-zero return
21101codes are treated as permanent errors. The default setting contains the codes
9b371988 21102defined by EX_TEMPFAIL and EX_CANTCREAT in &_sysexits.h_&. If Exim is
168e428f
PH
21103compiled on a system that does not define these macros, it assumes values of 75
21104and 73, respectively.
21105
21106
9b371988 21107.option timeout pipe time 1h
168e428f 21108If the command fails to complete within this time, it is killed. This normally
9b371988 21109causes the delivery to fail (but see &%timeout_defer%&). A zero time interval
068aaea8
PH
21110specifies no timeout. In order to ensure that any subprocesses created by the
21111command are also killed, Exim makes the initial process a process group leader,
21112and kills the whole process group on a timeout. However, this can be defeated
21113if one of the processes starts a new process group.
21114
9b371988
PH
21115.option timeout_defer pipe boolean false
21116A timeout in a &(pipe)& transport, either in the command that the transport
21117runs, or in a transport filter that is associated with it, is by default
21118treated as a hard error, and the delivery fails. However, if &%timeout_defer%&
21119is set true, both kinds of timeout become temporary errors, causing the
21120delivery to be deferred.
168e428f 21121
9b371988 21122.option umask pipe "octal integer" 022
168e428f
PH
21123This specifies the umask setting for the subprocess that runs the command.
21124
21125
9b371988
PH
21126.option use_bsmtp pipe boolean false
21127.cindex "envelope sender"
21128If this option is set true, the &(pipe)& transport writes messages in &"batch
21129SMTP"& format, with the envelope sender and recipient(s) included as SMTP
168e428f 21130commands. If you want to include a leading HELO command with such messages,
9b371988
PH
21131you can do so by setting the &%message_prefix%& option. See section
21132&<<SECTbatchSMTP>>& for details of batch SMTP.
168e428f 21133
4f578862
PH
21134.option use_classresources pipe boolean false
21135.cindex "class resources (BSD)"
21136This option is available only when Exim is running on FreeBSD, NetBSD, or
21137BSD/OS. If it is set true, the &[setclassresources()]& function is used to set
21138resource limits when a &(pipe)& transport is run to perform a delivery. The
21139limits for the uid under which the pipe is to run are obtained from the login
21140class database.
4f578862 21141
168e428f 21142
9b371988
PH
21143.option use_crlf pipe boolean false
21144.cindex "carriage return"
21145.cindex "linefeed"
168e428f
PH
21146This option causes lines to be terminated with the two-character CRLF sequence
21147(carriage return, linefeed) instead of just a linefeed character. In the case
21148of batched SMTP, the byte sequence written to the pipe is then an exact image
21149of what would be sent down a real SMTP connection.
21150
9b371988
PH
21151The contents of the &%message_prefix%& and &%message_suffix%& options are
21152written verbatim, so must contain their own carriage return characters if these
595028e4
PH
21153are needed. When &%use_bsmtp%& is not set, the default values for both
21154&%message_prefix%& and &%message_suffix%& end with a single linefeed, so their
21155values must be changed to end with &`\r\n`& if &%use_crlf%& is set.
168e428f
PH
21156
21157
9b371988 21158.option use_shell pipe boolean false
f89d2485 21159.vindex "&$pipe_addresses$&"
9b371988 21160If this option is set, it causes the command to be passed to &_/bin/sh_&
168e428f 21161instead of being run directly from the transport, as described in section
9b371988 21162&<<SECThowcommandrun>>&. This is less secure, but is needed in some situations
168e428f 21163where the command is expected to be run under a shell and cannot easily be
9b371988
PH
21164modified. The &%allow_commands%& and &%restrict_to_path%& options, and the
21165&`$pipe_addresses`& facility are incompatible with &%use_shell%&. The
21166command is expanded as a single string, and handed to &_/bin/sh_& as data for
21167its &%-c%& option.
21168
21169
21170
f89d2485 21171.section "Using an external local delivery agent" "SECID143"
9b371988
PH
21172.cindex "local delivery" "using an external agent"
21173.cindex "&'procmail'&"
21174.cindex "external local delivery"
21175.cindex "delivery" "&'procmail'&"
21176.cindex "delivery" "by external agent"
21177The &(pipe)& transport can be used to pass all messages that require local
21178delivery to a separate local delivery agent such as &%procmail%&. When doing
168e428f
PH
21179this, care must be taken to ensure that the pipe is run under an appropriate
21180uid and gid. In some configurations one wants this to be a uid that is trusted
21181by the delivery agent to supply the correct sender of the message. It may be
21182necessary to recompile or reconfigure the delivery agent so that it trusts an
21183appropriate user. The following is an example transport and router
9b371988
PH
21184configuration for &%procmail%&:
21185.code
21186# transport
21187procmail_pipe:
21188 driver = pipe
21189 command = /usr/local/bin/procmail -d $local_part
21190 return_path_add
21191 delivery_date_add
21192 envelope_to_add
21193 check_string = "From "
21194 escape_string = ">From "
21195 user = $local_part
21196 group = mail
168e428f 21197
9b371988
PH
21198# router
21199procmail:
21200 driver = accept
21201 check_local_user
21202 transport = procmail_pipe
21203.endd
168e428f 21204In this example, the pipe is run as the local user, but with the group set to
9b371988
PH
21205&'mail'&. An alternative is to run the pipe as a specific user such as &'mail'&
21206or &'exim'&, but in this case you must arrange for &%procmail%& to trust that
21207user to supply a correct sender address. If you do not specify either a
21208&%group%& or a &%user%& option, the pipe command is run as the local user. The
21209home directory is the user's home directory by default.
21210
21211&*Note*&: The command that the pipe transport runs does &'not'& begin with
21212.code
21213IFS=" "
21214.endd
21215as shown in some &%procmail%& documentation, because Exim does not by default
21216use a shell to run pipe commands.
21217
21218.cindex "Cyrus"
168e428f
PH
21219The next example shows a transport and a router for a system where local
21220deliveries are handled by the Cyrus IMAP server.
9b371988 21221.code
168e428f
PH
21222# transport
21223local_delivery_cyrus:
21224 driver = pipe
21225 command = /usr/cyrus/bin/deliver \
21226 -m ${substr_1:$local_part_suffix} -- $local_part
21227 user = cyrus
21228 group = mail
21229 return_output
21230 log_output
21231 message_prefix =
21232 message_suffix =
21233
21234# router
21235local_user_cyrus:
21236 driver = accept
21237 check_local_user
21238 local_part_suffix = .*
21239 transport = local_delivery_cyrus
9b371988
PH
21240.endd
21241Note the unsetting of &%message_prefix%& and &%message_suffix%&, and the use of
21242&%return_output%& to cause any text written by Cyrus to be returned to the
168e428f 21243sender.
4f578862
PH
21244.ecindex IIDpiptra1
21245.ecindex IIDpiptra2
168e428f
PH
21246
21247
9b371988
PH
21248. ////////////////////////////////////////////////////////////////////////////
21249. ////////////////////////////////////////////////////////////////////////////
168e428f 21250
9b371988 21251.chapter "The smtp transport" "CHAPsmtptrans"
4f578862
PH
21252.scindex IIDsmttra1 "transports" "&(smtp)&"
21253.scindex IIDsmttra2 "&(smtp)& transport"
9b371988 21254The &(smtp)& transport delivers messages over TCP/IP connections using the SMTP
168e428f
PH
21255or LMTP protocol. The list of hosts to try can either be taken from the address
21256that is being processed (having been set up by the router), or specified
21257explicitly for the transport. Timeout and retry processing (see chapter
9b371988 21258&<<CHAPretry>>&) is applied to each IP address independently.
168e428f
PH
21259
21260
f89d2485 21261.section "Multiple messages on a single connection" "SECID144"
168e428f
PH
21262The sending of multiple messages over a single TCP/IP connection can arise in
21263two ways:
21264
9b371988
PH
21265.ilist
21266If a message contains more than &%max_rcpt%& (see below) addresses that are
168e428f
PH
21267routed to the same host, more than one copy of the message has to be sent to
21268that host. In this situation, multiple copies may be sent in a single run of
9b371988
PH
21269the &(smtp)& transport over a single TCP/IP connection. (What Exim actually
21270does when it has too many addresses to send in one message also depends on the
21271value of the global &%remote_max_parallel%& option. Details are given in
21272section &<<SECToutSMTPTCP>>&.)
21273.next
21274.cindex "hints database" "remembering routing"
168e428f
PH
21275When a message has been successfully delivered over a TCP/IP connection, Exim
21276looks in its hints database to see if there are any other messages awaiting a
21277connection to the same host. If there are, a new delivery process is started
21278for one of them, and the current TCP/IP connection is passed on to it. The new
21279process may in turn send multiple copies and possibly create yet another
21280process.
9b371988 21281.endlist
168e428f
PH
21282
21283
21284For each copy sent over the same TCP/IP connection, a sequence counter is
9b371988 21285incremented, and if it ever gets to the value of &%connection_max_messages%&,
168e428f
PH
21286no further messages are sent over that connection.
21287
21288
21289
595028e4 21290.section "Use of the $host and $host_address variables" "SECID145"
f89d2485
PH
21291.vindex "&$host$&"
21292.vindex "&$host_address$&"
9b371988
PH
21293At the start of a run of the &(smtp)& transport, the values of &$host$& and
21294&$host_address$& are the name and IP address of the first host on the host list
168e428f 21295passed by the router. However, when the transport is about to connect to a
9b371988
PH
21296specific host, and while it is connected to that host, &$host$& and
21297&$host_address$& are set to the values for that host. These are the values
21298that are in force when the &%helo_data%&, &%hosts_try_auth%&, &%interface%&,
21299&%serialize_hosts%&, and the various TLS options are expanded.
168e428f
PH
21300
21301
595028e4
PH
21302.section "Use of $tls_cipher and $tls_peerdn" "usecippeer"
21303.vindex &$tls_cipher$&
21304.vindex &$tls_peerdn$&
21305At the start of a run of the &(smtp)& transport, the values of &$tls_cipher$&
21306and &$tls_peerdn$& are the values that were set when the message was received.
21307These are the values that are used for options that are expanded before any
21308SMTP connections are made. Just before each connection is made, these two
21309variables are emptied. If TLS is subsequently started, they are set to the
21310appropriate values for the outgoing connection, and these are the values that
21311are in force when any authenticators are run and when the
21312&%authenticated_sender%& option is expanded.
595028e4 21313
168e428f 21314
f89d2485 21315.section "Private options for smtp" "SECID146"
9b371988
PH
21316.cindex "options" "&(smtp)& transport"
21317The private options of the &(smtp)& transport are as follows:
168e428f
PH
21318
21319
3cb1b51e
PH
21320.option address_retry_include_sender smtp boolean true
21321.cindex "4&'xx'& responses" "retrying after"
21322When an address is delayed because of a 4&'xx'& response to a RCPT command, it
21323is the combination of sender and recipient that is delayed in subsequent queue
21324runs until the retry time is reached. You can delay the recipient without
21325reference to the sender (which is what earlier versions of Exim did), by
21326setting &%address_retry_include_sender%& false. However, this can lead to
21327problems with servers that regularly issue 4&'xx'& responses to RCPT commands.
3cb1b51e 21328
9b371988
PH
21329.option allow_localhost smtp boolean false
21330.cindex "local host" "sending to"
21331.cindex "fallback" "hosts specified on transport"
21332When a host specified in &%hosts%& or &%fallback_hosts%& (see below) turns out
21333to be the local host, or is listed in &%hosts_treat_as_local%&, delivery is
21334deferred by default. However, if &%allow_localhost%& is set, Exim goes on to do
168e428f
PH
21335the delivery anyway. This should be used only in special cases when the
21336configuration ensures that no looping will result (for example, a differently
21337configured Exim is listening on the port to which the message is sent).
21338
21339
9b371988
PH
21340.option authenticated_sender smtp string&!! unset
21341.cindex "Cyrus"
4f578862
PH
21342When Exim has authenticated as a client, or if &%authenticated_sender_force%&
21343is true, this option sets a value for the AUTH= item on outgoing MAIL commands,
21344overriding any existing authenticated sender value. If the string expansion is
21345forced to fail, the option is ignored. Other expansion failures cause delivery
21346to be deferred. If the result of expansion is an empty string, that is also
21347ignored.
168e428f 21348
595028e4
PH
21349The expansion happens after the outgoing connection has been made and TLS
21350started, if required. This means that the &$host$&, &$host_address$&,
21351&$tls_cipher$&, and &$tls_peerdn$& variables are set according to the
21352particular connection.
595028e4 21353
168e428f 21354If the SMTP session is not authenticated, the expansion of
9b371988 21355&%authenticated_sender%& still happens (and can cause the delivery to be
4f578862
PH
21356deferred if it fails), but no AUTH= item is added to MAIL commands
21357unless &%authenticated_sender_force%& is true.
168e428f 21358
9b371988 21359This option allows you to use the &(smtp)& transport in LMTP mode to
168e428f 21360deliver mail to Cyrus IMAP and provide the proper local part as the
9b371988
PH
21361&"authenticated sender"&, via a setting such as:
21362.code
21363authenticated_sender = $local_part
21364.endd
168e428f
PH
21365This removes the need for IMAP subfolders to be assigned special ACLs to
21366allow direct delivery to those subfolders.
21367
21368Because of expected uses such as that just described for Cyrus (when no
21369domain is involved), there is no checking on the syntax of the provided
21370value.
21371
21372
4f578862
PH
21373.option authenticated_sender_force smtp boolean false
21374If this option is set true, the &%authenticated_sender%& option's value
21375is used for the AUTH= item on outgoing MAIL commands, even if Exim has not
21376authenticated as a client.
4f578862
PH
21377
21378
9b371988 21379.option command_timeout smtp time 5m
168e428f
PH
21380This sets a timeout for receiving a response to an SMTP command that has been
21381sent out. It is also used when waiting for the initial banner line from the
21382remote host. Its value must not be zero.
21383
21384
9b371988
PH
21385.option connect_timeout smtp time 5m
21386This sets a timeout for the &[connect()]& function, which sets up a TCP/IP call
168e428f
PH
21387to a remote host. A setting of zero allows the system timeout (typically
21388several minutes) to act. To have any effect, the value of this option must be
21389less than the system timeout. However, it has been observed that on some
21390systems there is no system timeout, which is why the default value for this
21391option is 5 minutes, a value recommended by RFC 1123.
21392
21393
9b371988
PH
21394.option connection_max_messages smtp integer 500
21395.cindex "SMTP" "passed connection"
21396.cindex "SMTP" "multiple deliveries"
21397.cindex "multiple SMTP deliveries"
168e428f
PH
21398This controls the maximum number of separate message deliveries that are sent
21399over a single TCP/IP connection. If the value is zero, there is no limit.
9b371988 21400For testing purposes, this value can be overridden by the &%-oB%& command line
168e428f
PH
21401option.
21402
21403
9b371988 21404.option data_timeout smtp time 5m
168e428f
PH
21405This sets a timeout for the transmission of each block in the data portion of
21406the message. As a result, the overall timeout for a message depends on the size
9b371988 21407of the message. Its value must not be zero. See also &%final_timeout%&.
168e428f
PH
21408
21409
9b371988 21410.option delay_after_cutoff smtp boolean true
168e428f
PH
21411This option controls what happens when all remote IP addresses for a given
21412domain have been inaccessible for so long that they have passed their retry
21413cutoff times.
21414
21415In the default state, if the next retry time has not been reached for any of
21416them, the address is bounced without trying any deliveries. In other words,
21417Exim delays retrying an IP address after the final cutoff time until a new
21418retry time is reached, and can therefore bounce an address without ever trying
21419a delivery, when machines have been down for a long time. Some people are
21420unhappy at this prospect, so...
21421
9b371988 21422If &%delay_after_cutoff%& is set false, Exim behaves differently. If all IP
168e428f
PH
21423addresses are past their final cutoff time, Exim tries to deliver to those
21424IP addresses that have not been tried since the message arrived. If there are
21425none, of if they all fail, the address is bounced. In other words, it does not
21426delay when a new message arrives, but immediately tries those expired IP
21427addresses that haven't been tried since the message arrived. If there is a
21428continuous stream of messages for the dead hosts, unsetting
9b371988 21429&%delay_after_cutoff%& means that there will be many more attempts to deliver
168e428f
PH
21430to them.
21431
21432
9b371988
PH
21433.option dns_qualify_single smtp boolean true
21434If the &%hosts%& or &%fallback_hosts%& option is being used,
21435and the &%gethostbyname%& option is false,
21436the RES_DEFNAMES resolver option is set. See the &%qualify_single%& option
21437in chapter &<<CHAPdnslookup>>& for more details.
168e428f 21438
168e428f 21439
9b371988 21440.option dns_search_parents smtp boolean false
9b371988
PH
21441If the &%hosts%& or &%fallback_hosts%& option is being used, and the
21442&%gethostbyname%& option is false, the RES_DNSRCH resolver option is set.
21443See the &%search_parents%& option in chapter &<<CHAPdnslookup>>& for more
21444details.
168e428f
PH
21445
21446
168e428f 21447
9b371988 21448.option fallback_hosts smtp "string list" unset
9b371988 21449.cindex "fallback" "hosts specified on transport"
168e428f 21450String expansion is not applied to this option. The argument must be a
068aaea8
PH
21451colon-separated list of host names or IP addresses, optionally also including
21452port numbers, though the separator can be changed, as described in section
9b371988
PH
21453&<<SECTlistconstruct>>&. Each individual item in the list is the same as an
21454item in a &%route_list%& setting for the &(manualroute)& router, as described
21455in section &<<SECTformatonehostitem>>&.
068aaea8
PH
21456
21457Fallback hosts can also be specified on routers, which associate them with the
9b371988
PH
21458addresses they process. As for the &%hosts%& option without &%hosts_override%&,
21459&%fallback_hosts%& specified on the transport is used only if the address does
21460not have its own associated fallback host list. Unlike &%hosts%&, a setting of
21461&%fallback_hosts%& on an address is not overridden by &%hosts_override%&.
21462However, &%hosts_randomize%& does apply to fallback host lists.
168e428f
PH
21463
21464If Exim is unable to deliver to any of the hosts for a particular address, and
21465the errors are not permanent rejections, the address is put on a separate
21466transport queue with its host list replaced by the fallback hosts, unless the
21467address was routed via MX records and the current host was in the original MX
21468list. In that situation, the fallback host list is not used.
21469
21470Once normal deliveries are complete, the fallback queue is delivered by
21471re-running the same transports with the new host lists. If several failing
9b371988 21472addresses have the same fallback hosts (and &%max_rcpt%& permits it), a single
168e428f
PH
21473copy of the message is sent.
21474
21475The resolution of the host names on the fallback list is controlled by the
9b371988 21476&%gethostbyname%& option, as for the &%hosts%& option. Fallback hosts apply
168e428f 21477both to cases when the host list comes with the address and when it is taken
9b371988
PH
21478from &%hosts%&. This option provides a &"use a smart host only if delivery
21479fails"& facility.
168e428f
PH
21480
21481
9b371988 21482.option final_timeout smtp time 10m
168e428f 21483This is the timeout that applies while waiting for the response to the final
9b371988
PH
21484line containing just &"."& that terminates a message. Its value must not be
21485zero.
168e428f 21486
9b371988
PH
21487.option gethostbyname smtp boolean false
21488If this option is true when the &%hosts%& and/or &%fallback_hosts%& options are
21489being used, names are looked up using &[gethostbyname()]&
21490(or &[getipnodebyname()]& when available)
168e428f 21491instead of using the DNS. Of course, that function may in fact use the DNS, but
9b371988
PH
21492it may also consult other sources of information such as &_/etc/hosts_&.
21493
f013fb92 21494.option gnutls_require_kx smtp string unset
f89d2485
PH
21495This option controls the key exchange mechanisms when GnuTLS is used in an Exim
21496client. For details, see section &<<SECTreqciphgnu>>&.
21497
f013fb92 21498.option gnutls_require_mac smtp string unset
f89d2485
PH
21499This option controls the MAC algorithms when GnuTLS is used in an Exim
21500client. For details, see section &<<SECTreqciphgnu>>&.
21501
f013fb92 21502.option gnutls_require_protocols smtp string unset
f89d2485
PH
21503This option controls the protocols when GnuTLS is used in an Exim
21504client. For details, see section &<<SECTreqciphgnu>>&.
f89d2485 21505
71e1673f 21506.new
f013fb92 21507.option gnutls_compat_mode smtp boolean unset
e6060e2c
NM
21508This option controls whether GnuTLS is used in compatibility mode in an Exim
21509server. This reduces security slightly, but improves interworking with older
21510implementations of TLS.
71e1673f 21511.wen
e6060e2c 21512
f89d2485
PH
21513.option helo_data smtp string&!! "see below"
21514.cindex "HELO" "argument, setting"
21515.cindex "EHLO" "argument, setting"
21516.cindex "LHLO argument setting"
21517The value of this option is expanded after a connection to a another host has
21518been set up. The result is used as the argument for the EHLO, HELO, or LHLO
21519command that starts the outgoing SMTP or LMTP session. The default value of the
21520option is:
21521.code
21522$primary_hostname
21523.endd
21524During the expansion, the variables &$host$& and &$host_address$& are set to
21525the identity of the remote host, and the variables &$sending_ip_address$& and
21526&$sending_port$& are set to the local IP address and port number that are being
595028e4
PH
21527used. These variables can be used to generate different values for different
21528servers or different local IP addresses. For example, if you want the string
21529that is used for &%helo_data%& to be obtained by a DNS lookup of the outgoing
21530interface address, you could use this:
f89d2485
PH
21531.code
21532helo_data = ${lookup dnsdb{ptr=$sending_ip_address}{$value}\
21533 {$primary_hostname}}
21534.endd
21535The use of &%helo_data%& applies both to sending messages and when doing
21536callouts.
9b371988
PH
21537
21538.option hosts smtp "string list&!!" unset
21539Hosts are associated with an address by a router such as &(dnslookup)&, which
068aaea8 21540finds the hosts by looking up the address domain in the DNS, or by
9b371988
PH
21541&(manualroute)&, which has lists of hosts in its configuration. However,
21542email addresses can be passed to the &(smtp)& transport by any router, and not
068aaea8
PH
21543all of them can provide an associated list of hosts.
21544
9b371988 21545The &%hosts%& option specifies a list of hosts to be used if the address being
068aaea8 21546processed does not have any hosts associated with it. The hosts specified by
9b371988
PH
21547&%hosts%& are also used, whether or not the address has its own hosts, if
21548&%hosts_override%& is set.
168e428f
PH
21549
21550The string is first expanded, before being interpreted as a colon-separated
068aaea8
PH
21551list of host names or IP addresses, possibly including port numbers. The
21552separator may be changed to something other than colon, as described in section
9b371988
PH
21553&<<SECTlistconstruct>>&. Each individual item in the list is the same as an
21554item in a &%route_list%& setting for the &(manualroute)& router, as described
21555in section &<<SECTformatonehostitem>>&. However, note that the &`/MX`& facility
21556of the &(manualroute)& router is not available here.
068aaea8
PH
21557
21558If the expansion fails, delivery is deferred. Unless the failure was caused by
21559the inability to complete a lookup, the error is logged to the panic log as
21560well as the main log. Host names are looked up either by searching directly for
9b371988
PH
21561address records in the DNS or by calling &[gethostbyname()]& (or
21562&[getipnodebyname()]& when available), depending on the setting of the
21563&%gethostbyname%& option. When Exim is compiled with IPv6 support, if a host
21564that is looked up in the DNS has both IPv4 and IPv6 addresses, both types of
21565address are used.
168e428f
PH
21566
21567During delivery, the hosts are tried in order, subject to their retry status,
9b371988 21568unless &%hosts_randomize%& is set.
168e428f 21569
168e428f 21570
9b371988 21571.option hosts_avoid_esmtp smtp "host list&!!" unset
f89d2485 21572.cindex "ESMTP, avoiding use of"
9b371988
PH
21573.cindex "HELO" "forcing use of"
21574.cindex "EHLO" "avoiding use of"
21575.cindex "PIPELINING" "avoiding the use of"
168e428f
PH
21576This option is for use with broken hosts that announce ESMTP facilities (for
21577example, PIPELINING) and then fail to implement them properly. When a host
9b371988 21578matches &%hosts_avoid_esmtp%&, Exim sends HELO rather than EHLO at the
168e428f
PH
21579start of the SMTP session. This means that it cannot use any of the ESMTP
21580facilities such as AUTH, PIPELINING, SIZE, and STARTTLS.
21581
21582
f89d2485
PH
21583.option hosts_avoid_pipelining smtp "host list&!!" unset
21584.cindex "PIPELINING" "avoiding the use of"
21585Exim will not use the SMTP PIPELINING extension when delivering to any host
21586that matches this list, even if the server host advertises PIPELINING support.
f89d2485
PH
21587
21588
9b371988
PH
21589.option hosts_avoid_tls smtp "host list&!!" unset
21590.cindex "TLS" "avoiding for certain hosts"
168e428f 21591Exim will not try to start a TLS session when delivering to any host that
9b371988 21592matches this list. See chapter &<<CHAPTLS>>& for details of TLS.
168e428f 21593
168e428f 21594
9b371988
PH
21595.option hosts_max_try smtp integer 5
21596.cindex "host" "maximum number to try"
21597.cindex "limit" "number of hosts tried"
21598.cindex "limit" "number of MX tried"
21599.cindex "MX record" "maximum tried"
168e428f
PH
21600This option limits the number of IP addresses that are tried for any one
21601delivery in cases where there are temporary delivery errors. Section
9b371988 21602&<<SECTvalhosmax>>& describes in detail how the value of this option is used.
168e428f
PH
21603
21604
9b371988 21605.option hosts_max_try_hardlimit smtp integer 50
168e428f 21606This is an additional check on the maximum number of IP addresses that Exim
9b371988
PH
21607tries for any one delivery. Section &<<SECTvalhosmax>>& describes its use and
21608why it exists.
168e428f
PH
21609
21610
168e428f 21611
9b371988
PH
21612.option hosts_nopass_tls smtp "host list&!!" unset
21613.cindex "TLS" "passing connection"
21614.cindex "multiple SMTP deliveries"
21615.cindex "TLS" "multiple message deliveries"
168e428f
PH
21616For any host that matches this list, a connection on which a TLS session has
21617been started will not be passed to a new delivery process for sending another
9b371988
PH
21618message on the same connection. See section &<<SECTmulmessam>>& for an
21619explanation of when this might be needed.
168e428f
PH
21620
21621
9b371988
PH
21622.option hosts_override smtp boolean false
21623If this option is set and the &%hosts%& option is also set, any hosts that are
168e428f 21624attached to the address are ignored, and instead the hosts specified by the
9b371988
PH
21625&%hosts%& option are always used. This option does not apply to
21626&%fallback_hosts%&.
168e428f 21627
168e428f 21628
9b371988
PH
21629.option hosts_randomize smtp boolean false
21630.cindex "randomized host list"
21631.cindex "host" "list of; randomized"
21632.cindex "fallback" "randomized hosts"
168e428f 21633If this option is set, and either the list of hosts is taken from the
9b371988 21634&%hosts%& or the &%fallback_hosts%& option, or the hosts supplied by the router
168e428f 21635were not obtained from MX records (this includes fallback hosts from the
f89d2485 21636router), and were not randomized by the router, the order of trying the hosts
168e428f
PH
21637is randomized each time the transport runs. Randomizing the order of a host
21638list can be used to do crude load sharing.
21639
9b371988 21640When &%hosts_randomize%& is true, a host list may be split into groups whose
168e428f
PH
21641order is separately randomized. This makes it possible to set up MX-like
21642behaviour. The boundaries between groups are indicated by an item that is just
9b371988
PH
21643&`+`& in the host list. For example:
21644.code
21645hosts = host1:host2:host3:+:host4:host5
21646.endd
168e428f
PH
21647The order of the first three hosts and the order of the last two hosts is
21648randomized for each use, but the first three always end up before the last two.
9b371988 21649If &%hosts_randomize%& is not set, a &`+`& item in the list is ignored.
168e428f 21650
9b371988
PH
21651.option hosts_require_auth smtp "host list&!!" unset
21652.cindex "authentication" "required by client"
168e428f
PH
21653This option provides a list of servers for which authentication must succeed
21654before Exim will try to transfer a message. If authentication fails for
21655servers which are not in this list, Exim tries to send unauthenticated. If
21656authentication fails for one of these servers, delivery is deferred. This
21657temporary error is detectable in the retry rules, so it can be turned into a
9b371988
PH
21658hard failure if required. See also &%hosts_try_auth%&, and chapter
21659&<<CHAPSMTPAUTH>>& for details of authentication.
168e428f 21660
168e428f 21661
9b371988
PH
21662.option hosts_require_tls smtp "host list&!!" unset
21663.cindex "TLS" "requiring for certain servers"
168e428f 21664Exim will insist on using a TLS session when delivering to any host that
9b371988
PH
21665matches this list. See chapter &<<CHAPTLS>>& for details of TLS.
21666&*Note*&: This option affects outgoing mail only. To insist on TLS for
168e428f
PH
21667incoming messages, use an appropriate ACL.
21668
9b371988
PH
21669.option hosts_try_auth smtp "host list&!!" unset
21670.cindex "authentication" "optional in client"
168e428f
PH
21671This option provides a list of servers to which, provided they announce
21672authentication support, Exim will attempt to authenticate as a client when it
21673connects. If authentication fails, Exim will try to transfer the message
9b371988
PH
21674unauthenticated. See also &%hosts_require_auth%&, and chapter
21675&<<CHAPSMTPAUTH>>& for details of authentication.
21676
21677.option interface smtp "string list&!!" unset
21678.cindex "bind IP address"
21679.cindex "IP address" "binding"
f89d2485
PH
21680.vindex "&$host$&"
21681.vindex "&$host_address$&"
168e428f 21682This option specifies which interface to bind to when making an outgoing SMTP
7d0ab55c
TF
21683call. The value is an IP address, not an interface name such as
21684&`eth0`&. Do not confuse this with the interface address that was used when a
595028e4
PH
21685message was received, which is in &$received_ip_address$&, formerly known as
21686&$interface_address$&. The name was changed to minimize confusion with the
21687outgoing interface address. There is no variable that contains an outgoing
3cb1b51e
PH
21688interface address because, unless it is set by this option, its value is
21689unknown.
3cb1b51e
PH
21690
21691During the expansion of the &%interface%& option the variables &$host$& and
21692&$host_address$& refer to the host to which a connection is about to be made
21693during the expansion of the string. Forced expansion failure, or an empty
21694string result causes the option to be ignored. Otherwise, after expansion, the
21695string must be a list of IP addresses, colon-separated by default, but the
21696separator can be changed in the usual way. For example:
9b371988
PH
21697.code
21698interface = <; 192.168.123.123 ; 3ffe:ffff:836f::fe86:a061
21699.endd
168e428f
PH
21700The first interface of the correct type (IPv4 or IPv6) is used for the outgoing
21701connection. If none of them are the correct type, the option is ignored. If
9b371988 21702&%interface%& is not set, or is ignored, the system's IP functions choose which
168e428f
PH
21703interface to use if the host has more than one.
21704
21705
9b371988
PH
21706.option keepalive smtp boolean true
21707.cindex "keepalive" "on outgoing connection"
168e428f
PH
21708This option controls the setting of SO_KEEPALIVE on outgoing TCP/IP socket
21709connections. When set, it causes the kernel to probe idle connections
9b371988 21710periodically, by sending packets with &"old"& sequence numbers. The other end
f89d2485 21711of the connection should send a acknowledgment if the connection is still okay
9b371988
PH
21712or a reset if the connection has been aborted. The reason for doing this is
21713that it has the beneficial effect of freeing up certain types of connection
21714that can get stuck when the remote host is disconnected without tidying up the
21715TCP/IP call properly. The keepalive mechanism takes several hours to detect
168e428f
PH
21716unreachable hosts.
21717
21718
9b371988
PH
21719.option lmtp_ignore_quota smtp boolean false
21720.cindex "LMTP" "ignoring quota errors"
21721If this option is set true when the &%protocol%& option is set to &"lmtp"&, the
21722string &`IGNOREQUOTA`& is added to RCPT commands, provided that the LMTP server
068aaea8
PH
21723has advertised support for IGNOREQUOTA in its response to the LHLO command.
21724
9b371988
PH
21725.option max_rcpt smtp integer 100
21726.cindex "RCPT" "maximum number of outgoing"
168e428f
PH
21727This option limits the number of RCPT commands that are sent in a single
21728SMTP message transaction. Each set of addresses is treated independently, and
9b371988 21729so can cause parallel connections to the same host if &%remote_max_parallel%&
168e428f
PH
21730permits this.
21731
21732
9b371988 21733.option multi_domain smtp boolean true
f89d2485 21734.vindex "&$domain$&"
9b371988
PH
21735When this option is set, the &(smtp)& transport can handle a number of
21736addresses containing a mixture of different domains provided they all resolve
21737to the same list of hosts. Turning the option off restricts the transport to
21738handling only one domain at a time. This is useful if you want to use
21739&$domain$& in an expansion for the transport, because it is set only when there
21740is a single domain involved in a remote delivery.
168e428f
PH
21741
21742
9b371988
PH
21743.option port smtp string&!! "see below"
21744.cindex "port" "sending TCP/IP"
21745.cindex "TCP/IP" "setting outgoing port"
3cb1b51e
PH
21746This option specifies the TCP/IP port on the server to which Exim connects.
21747&*Note:*& Do not confuse this with the port that was used when a message was
21748received, which is in &$received_port$&, formerly known as &$interface_port$&.
21749The name was changed to minimize confusion with the outgoing port. There is no
21750variable that contains an outgoing port.
3cb1b51e
PH
21751
21752If the value of this option begins with a digit it is taken as a port number;
21753otherwise it is looked up using &[getservbyname()]&. The default value is
21754normally &"smtp"&, but if &%protocol%& is set to &"lmtp"&, the default is
21755&"lmtp"&. If the expansion fails, or if a port number cannot be found, delivery
21756is deferred.
168e428f
PH
21757
21758
21759
9b371988
PH
21760.option protocol smtp string smtp
21761.cindex "LMTP" "over TCP/IP"
21762If this option is set to &"lmtp"& instead of &"smtp"&, the default value for
21763the &%port%& option changes to &"lmtp"&, and the transport operates the LMTP
21764protocol (RFC 2033) instead of SMTP. This protocol is sometimes used for local
168e428f 21765deliveries into closed message stores. Exim also has support for running LMTP
9b371988 21766over a pipe to a local process &-- see chapter &<<CHAPLMTP>>&.
168e428f
PH
21767
21768
9b371988 21769.option retry_include_ip_address smtp boolean true
168e428f
PH
21770Exim normally includes both the host name and the IP address in the key it
21771constructs for indexing retry data after a temporary delivery failure. This
21772means that when one of several IP addresses for a host is failing, it gets
21773tried periodically (controlled by the retry rules), but use of the other IP
21774addresses is not affected.
21775
21776However, in some dialup environments hosts are assigned a different IP address
21777each time they connect. In this situation the use of the IP address as part of
21778the retry key leads to undesirable behaviour. Setting this option false causes
21779Exim to use only the host name. This should normally be done on a separate
9b371988
PH
21780instance of the &(smtp)& transport, set up specially to handle the dialup
21781hosts.
168e428f 21782
168e428f 21783
9b371988
PH
21784.option serialize_hosts smtp "host list&!!" unset
21785.cindex "serializing connections"
21786.cindex "host" "serializing connections"
168e428f
PH
21787Because Exim operates in a distributed manner, if several messages for the same
21788host arrive at around the same time, more than one simultaneous connection to
21789the remote host can occur. This is not usually a problem except when there is a
21790slow link between the hosts. In that situation it may be helpful to restrict
21791Exim to one connection at a time. This can be done by setting
9b371988 21792&%serialize_hosts%& to match the relevant hosts.
168e428f 21793
9b371988 21794.cindex "hints database" "serializing deliveries to a host"
168e428f
PH
21795Exim implements serialization by means of a hints database in which a record is
21796written whenever a process connects to one of the restricted hosts. The record
21797is deleted when the connection is completed. Obviously there is scope for
21798records to get left lying around if there is a system or program crash. To
21799guard against this, Exim ignores any records that are more than six hours old.
21800
21801If you set up this kind of serialization, you should also arrange to delete the
21802relevant hints database whenever your system reboots. The names of the files
9b371988 21803start with &_misc_& and they are kept in the &_spool/db_& directory. There
168e428f
PH
21804may be one or two files, depending on the type of DBM in use. The same files
21805are used for ETRN serialization.
21806
21807
9b371988
PH
21808.option size_addition smtp integer 1024
21809.cindex "SMTP" "SIZE"
21810.cindex "message" "size issue for transport filter"
21811.cindex "size" "of message"
21812.cindex "transport" "filter"
21813.cindex "filter" "transport filter"
168e428f
PH
21814If a remote SMTP server indicates that it supports the SIZE option of the
21815MAIL command, Exim uses this to pass over the message size at the start of
9b371988 21816an SMTP transaction. It adds the value of &%size_addition%& to the value it
168e428f
PH
21817sends, to allow for headers and other text that may be added during delivery by
21818configuration options or in a transport filter. It may be necessary to increase
21819this if a lot of text is added to messages.
21820
9b371988 21821Alternatively, if the value of &%size_addition%& is set negative, it disables
168e428f
PH
21822the use of the SIZE option altogether.
21823
21824
9b371988 21825.option tls_certificate smtp string&!! unset
f89d2485
PH
21826.cindex "TLS" "client certificate, location of"
21827.cindex "certificate" "client, location of"
21828.vindex "&$host$&"
21829.vindex "&$host_address$&"
168e428f 21830The value of this option must be the absolute path to a file which contains the
9b371988
PH
21831client's certificate, for possible use when sending a message over an encrypted
21832connection. The values of &$host$& and &$host_address$& are set to the name and
21833address of the server during the expansion. See chapter &<<CHAPTLS>>& for
168e428f
PH
21834details of TLS.
21835
9b371988
PH
21836&*Note*&: This option must be set if you want Exim to be able to use a TLS
21837certificate when sending messages as a client. The global option of the same
21838name specifies the certificate for Exim as a server; it is not automatically
21839assumed that the same certificate should be used when Exim is operating as a
21840client.
168e428f
PH
21841
21842
9b371988
PH
21843.option tls_crl smtp string&!! unset
21844.cindex "TLS" "client certificate revocation list"
21845.cindex "certificate" "revocation list for client"
168e428f
PH
21846This option specifies a certificate revocation list. The expanded value must
21847be the name of a file that contains a CRL in PEM format.
21848
21849
9b371988 21850.option tls_privatekey smtp string&!! unset
f89d2485
PH
21851.cindex "TLS" "client private key, location of"
21852.vindex "&$host$&"
21853.vindex "&$host_address$&"
168e428f 21854The value of this option must be the absolute path to a file which contains the
9b371988
PH
21855client's private key. This is used when sending a message over an encrypted
21856connection using a client certificate. The values of &$host$& and
21857&$host_address$& are set to the name and address of the server during the
4f578862
PH
21858expansion. If this option is unset, or the expansion is forced to fail, or the
21859result is an empty string, the private key is assumed to be in the same file as
21860the certificate. See chapter &<<CHAPTLS>>& for details of TLS.
9b371988
PH
21861
21862
21863.option tls_require_ciphers smtp string&!! unset
21864.cindex "TLS" "requiring specific ciphers"
21865.cindex "cipher" "requiring specific"
f89d2485
PH
21866.vindex "&$host$&"
21867.vindex "&$host_address$&"
168e428f
PH
21868The value of this option must be a list of permitted cipher suites, for use
21869when setting up an outgoing encrypted connection. (There is a global option of
9b371988
PH
21870the same name for controlling incoming connections.) The values of &$host$& and
21871&$host_address$& are set to the name and address of the server during the
21872expansion. See chapter &<<CHAPTLS>>& for details of TLS; note that this option
21873is used in different ways by OpenSSL and GnuTLS (see sections
21874&<<SECTreqciphssl>>& and &<<SECTreqciphgnu>>&). For GnuTLS, the order of the
21875ciphers is a preference order.
168e428f
PH
21876
21877
21878
9b371988 21879.option tls_tempfail_tryclear smtp boolean true
3cb1b51e 21880.cindex "4&'xx'& responses" "to STARTTLS"
9b371988 21881When the server host is not in &%hosts_require_tls%&, and there is a problem in
168e428f
PH
21882setting up a TLS session, this option determines whether or not Exim should try
21883to deliver the message unencrypted. If it is set false, delivery to the
21884current host is deferred; if there are other hosts, they are tried. If this
9b371988 21885option is set true, Exim attempts to deliver unencrypted after a 4&'xx'&
168e428f
PH
21886response to STARTTLS. Also, if STARTTLS is accepted, but the subsequent
21887TLS negotiation fails, Exim closes the current connection (because it is in an
21888unknown state), opens a new one to the same host, and then tries the delivery
21889in clear.
21890
21891
9b371988
PH
21892.option tls_verify_certificates smtp string&!! unset
21893.cindex "TLS" "server certificate verification"
21894.cindex "certificate" "verification of server"
f89d2485
PH
21895.vindex "&$host$&"
21896.vindex "&$host_address$&"
168e428f
PH
21897The value of this option must be the absolute path to a file containing
21898permitted server certificates, for use when setting up an encrypted connection.
21899Alternatively, if you are using OpenSSL, you can set
9b371988 21900&%tls_verify_certificates%& to the name of a directory containing certificate
168e428f 21901files. This does not work with GnuTLS; the option must be set to the name of a
9b371988
PH
21902single file if you are using GnuTLS. The values of &$host$& and
21903&$host_address$& are set to the name and address of the server during the
21904expansion of this option. See chapter &<<CHAPTLS>>& for details of TLS.
168e428f
PH
21905
21906
21907
21908
9b371988
PH
21909.section "How the limits for the number of hosts to try are used" &&&
21910 "SECTvalhosmax"
21911.cindex "host" "maximum number to try"
21912.cindex "limit" "hosts; maximum number tried"
168e428f 21913There are two options that are concerned with the number of hosts that are
9b371988
PH
21914tried when an SMTP delivery takes place. They are &%hosts_max_try%& and
21915&%hosts_max_try_hardlimit%&.
168e428f
PH
21916
21917
9b371988
PH
21918The &%hosts_max_try%& option limits the number of hosts that are tried
21919for a single delivery. However, despite the term &"host"& in its name, the
21920option actually applies to each IP address independently. In other words, a
21921multihomed host is treated as several independent hosts, just as it is for
21922retrying.
168e428f
PH
21923
21924Many of the larger ISPs have multiple MX records which often point to
21925multihomed hosts. As a result, a list of a dozen or more IP addresses may be
21926created as a result of routing one of these domains.
21927
21928Trying every single IP address on such a long list does not seem sensible; if
21929several at the top of the list fail, it is reasonable to assume there is some
21930problem that is likely to affect all of them. Roughly speaking, the value of
9b371988 21931&%hosts_max_try%& is the maximum number that are tried before deferring the
168e428f
PH
21932delivery. However, the logic cannot be quite that simple.
21933
21934Firstly, IP addresses that are skipped because their retry times have not
21935arrived do not count, and in addition, addresses that are past their retry
21936limits are also not counted, even when they are tried. This means that when
21937some IP addresses are past their retry limits, more than the value of
9b371988 21938&%hosts_max_retry%& may be tried. The reason for this behaviour is to ensure
168e428f
PH
21939that all IP addresses are considered before timing out an email address (but
21940see below for an exception).
21941
9b371988 21942Secondly, when the &%hosts_max_try%& limit is reached, Exim looks down the host
168e428f
PH
21943list to see if there is a subsequent host with a different (higher valued) MX.
21944If there is, that host is considered next, and the current IP address is used
21945but not counted. This behaviour helps in the case of a domain with a retry rule
21946that hardly ever delays any hosts, as is now explained:
21947
21948Consider the case of a long list of hosts with one MX value, and a few with a
9b371988 21949higher MX value. If &%hosts_max_try%& is small (the default is 5) only a few
168e428f
PH
21950hosts at the top of the list are tried at first. With the default retry rule,
21951which specifies increasing retry times, the higher MX hosts are eventually
21952tried when those at the top of the list are skipped because they have not
21953reached their retry times.
21954
21955However, it is common practice to put a fixed short retry time on domains for
21956large ISPs, on the grounds that their servers are rarely down for very long.
21957Unfortunately, these are exactly the domains that tend to resolve to long lists
21958of hosts. The short retry time means that the lowest MX hosts are tried every
21959time. The attempts may be in a different order because of random sorting, but
9b371988
PH
21960without the special MX check, the higher MX hosts would never be tried until
21961all the lower MX hosts had timed out (which might be several days), because
21962there are always some lower MX hosts that have reached their retry times. With
21963the special check, Exim considers at least one IP address from each MX value at
21964every delivery attempt, even if the &%hosts_max_try%& limit has already been
21965reached.
21966
21967The above logic means that &%hosts_max_try%& is not a hard limit, and in
168e428f 21968particular, Exim normally eventually tries all the IP addresses before timing
9b371988 21969out an email address. When &%hosts_max_try%& was implemented, this seemed a
168e428f
PH
21970reasonable thing to do. Recently, however, some lunatic DNS configurations have
21971been set up with hundreds of IP addresses for some domains. It can
21972take a very long time indeed for an address to time out in these cases.
21973
9b371988 21974The &%hosts_max_try_hardlimit%& option was added to help with this problem.
168e428f
PH
21975Exim never tries more than this number of IP addresses; if it hits this limit
21976and they are all timed out, the email address is bounced, even though not all
21977possible IP addresses have been tried.
4f578862
PH
21978.ecindex IIDsmttra1
21979.ecindex IIDsmttra2
168e428f
PH
21980
21981
21982
21983
21984
9b371988
PH
21985. ////////////////////////////////////////////////////////////////////////////
21986. ////////////////////////////////////////////////////////////////////////////
168e428f 21987
9b371988 21988.chapter "Address rewriting" "CHAPrewrite"
4f578862 21989.scindex IIDaddrew "rewriting" "addresses"
168e428f
PH
21990There are some circumstances in which Exim automatically rewrites domains in
21991addresses. The two most common are when an address is given without a domain
9b371988 21992(referred to as an &"unqualified address"&) or when an address contains an
168e428f
PH
21993abbreviated domain that is expanded by DNS lookup.
21994
21995Unqualified envelope addresses are accepted only for locally submitted
9b371988
PH
21996messages, or for messages that are received from hosts matching
21997&%sender_unqualified_hosts%& or &%recipient_unqualified_hosts%&, as
21998appropriate. Unqualified addresses in header lines are qualified if they are in
21999locally submitted messages, or messages from hosts that are permitted to send
22000unqualified envelope addresses. Otherwise, unqualified addresses in header
22001lines are neither qualified nor rewritten.
22002
22003One situation in which Exim does &'not'& automatically rewrite a domain is
168e428f 22004when it is the name of a CNAME record in the DNS. The older RFCs suggest that
9b371988
PH
22005such a domain should be rewritten using the &"canonical"& name, and some MTAs
22006do this. The new RFCs do not contain this suggestion.
168e428f
PH
22007
22008
f89d2485 22009.section "Explicitly configured address rewriting" "SECID147"
168e428f
PH
22010This chapter describes the rewriting rules that can be used in the
22011main rewrite section of the configuration file, and also in the generic
9b371988 22012&%headers_rewrite%& option that can be set on any transport.
168e428f
PH
22013
22014Some people believe that configured address rewriting is a Mortal Sin.
22015Others believe that life is not possible without it. Exim provides the
22016facility; you do not have to use it.
22017
9b371988 22018The main rewriting rules that appear in the &"rewrite"& section of the
168e428f
PH
22019configuration file are applied to addresses in incoming messages, both envelope
22020addresses and addresses in header lines. Each rule specifies the types of
22021address to which it applies.
22022
db9452a9
PH
22023Whether or not addresses in header lines are rewritten depends on the origin of
22024the headers and the type of rewriting. Global rewriting, that is, rewriting
22025rules from the rewrite section of the configuration file, is applied only to
22026those headers that were received with the message. Header lines that are added
22027by ACLs or by a system filter or by individual routers or transports (which
22028are specific to individual recipient addresses) are not rewritten by the global
22029rules.
22030
22031Rewriting at transport time, by means of the &%headers_rewrite%& option,
22032applies all headers except those added by routers and transports. That is, as
22033well as the headers that were received with the message, it also applies to
22034headers that were added by an ACL or a system filter.
db9452a9 22035
168e428f
PH
22036
22037In general, rewriting addresses from your own system or domain has some
22038legitimacy. Rewriting other addresses should be done only with great care and
22039in special circumstances. The author of Exim believes that rewriting should be
9b371988 22040used sparingly, and mainly for &"regularizing"& addresses in your own domains.
168e428f
PH
22041Although it can sometimes be used as a routing tool, this is very strongly
22042discouraged.
22043
22044There are two commonly encountered circumstances where rewriting is used, as
22045illustrated by these examples:
22046
9b371988
PH
22047.ilist
22048The company whose domain is &'hitch.fict.example'& has a number of hosts that
168e428f 22049exchange mail with each other behind a firewall, but there is only a single
9b371988
PH
22050gateway to the outer world. The gateway rewrites &'*.hitch.fict.example'& as
22051&'hitch.fict.example'& when sending mail off-site.
22052.next
22053A host rewrites the local parts of its own users so that, for example,
22054&'fp42@hitch.fict.example'& becomes &'Ford.Prefect@hitch.fict.example'&.
22055.endlist
168e428f
PH
22056
22057
22058
f89d2485 22059.section "When does rewriting happen?" "SECID148"
9b371988
PH
22060.cindex "rewriting" "timing of"
22061.cindex "&ACL;" "rewriting addresses in"
168e428f
PH
22062Configured address rewriting can take place at several different stages of a
22063message's processing.
22064
f89d2485 22065.vindex "&$sender_address$&"
168e428f 22066At the start of an ACL for MAIL, the sender address may have been rewritten
9b371988 22067by a special SMTP-time rewrite rule (see section &<<SECTrewriteS>>&), but no
168e428f
PH
22068ordinary rewrite rules have yet been applied. If, however, the sender address
22069is verified in the ACL, it is rewritten before verification, and remains
9b371988 22070rewritten thereafter. The subsequent value of &$sender_address$& is the
168e428f
PH
22071rewritten address. This also applies if sender verification happens in a
22072RCPT ACL. Otherwise, when the sender address is not verified, it is
22073rewritten as soon as a message's header lines have been received.
22074
f89d2485
PH
22075.vindex "&$domain$&"
22076.vindex "&$local_part$&"
168e428f
PH
22077Similarly, at the start of an ACL for RCPT, the current recipient's address
22078may have been rewritten by a special SMTP-time rewrite rule, but no ordinary
22079rewrite rules have yet been applied to it. However, the behaviour is different
22080from the sender address when a recipient is verified. The address is rewritten
22081for the verification, but the rewriting is not remembered at this stage. The
9b371988
PH
22082value of &$local_part$& and &$domain$& after verification are always the same
22083as they were before (that is, they contain the unrewritten &-- except for
22084SMTP-time rewriting &-- address).
168e428f 22085
4f578862
PH
22086As soon as a message's header lines have been received, all the envelope
22087recipient addresses are permanently rewritten, and rewriting is also applied to
22088the addresses in the header lines (if configured). This happens before adding
22089any header lines that were specified in MAIL or RCPT ACLs, and
9b371988 22090.cindex "&[local_scan()]& function" "address rewriting; timing of"
4f578862 22091before the DATA ACL and &[local_scan()]& functions are run.
168e428f
PH
22092
22093When an address is being routed, either for delivery or for verification,
22094rewriting is applied immediately to child addresses that are generated by
9b371988 22095redirection, unless &%no_rewrite%& is set on the router.
168e428f 22096
4f578862 22097.cindex "envelope sender" "rewriting at transport time"
9b371988 22098.cindex "rewriting" "at transport time"
4f578862 22099.cindex "header lines" "rewriting at transport time"
168e428f 22100At transport time, additional rewriting of addresses in header lines can be
9b371988
PH
22101specified by setting the generic &%headers_rewrite%& option on a transport.
22102This option contains rules that are identical in form to those in the rewrite
4f578862
PH
22103section of the configuration file. They are applied to the original message
22104header lines and any that were added by ACLs or a system filter. They are not
22105applied to header lines that are added by routers or the transport.
22106
22107The outgoing envelope sender can be rewritten by means of the &%return_path%&
22108transport option. However, it is not possible to rewrite envelope recipients at
22109transport time.
168e428f
PH
22110
22111
22112
22113
f89d2485 22114.section "Testing the rewriting rules that apply on input" "SECID149"
9b371988
PH
22115.cindex "rewriting" "testing"
22116.cindex "testing" "rewriting"
168e428f 22117Exim's input rewriting configuration appears in a part of the run time
9b371988
PH
22118configuration file headed by &"begin rewrite"&. It can be tested by the
22119&%-brw%& command line option. This takes an address (which can be a full RFC
221202822 address) as its argument. The output is a list of how the address would be
168e428f
PH
22121transformed by the rewriting rules for each of the different places it might
22122appear in an incoming message, that is, for each different header and for the
22123envelope sender and recipient fields. For example,
9b371988
PH
22124.code
22125exim -brw ph10@exim.workshop.example
22126.endd
168e428f 22127might produce the output
9b371988
PH
22128.code
22129sender: Philip.Hazel@exim.workshop.example
22130from: Philip.Hazel@exim.workshop.example
22131to: ph10@exim.workshop.example
22132cc: ph10@exim.workshop.example
22133bcc: ph10@exim.workshop.example
22134reply-to: Philip.Hazel@exim.workshop.example
22135env-from: Philip.Hazel@exim.workshop.example
22136env-to: ph10@exim.workshop.example
22137.endd
168e428f
PH
22138which shows that rewriting has been set up for that address when used in any of
22139the source fields, but not when it appears as a recipient address. At the
22140present time, there is no equivalent way of testing rewriting rules that are
22141set for a particular transport.
22142
22143
f89d2485 22144.section "Rewriting rules" "SECID150"
9b371988 22145.cindex "rewriting" "rules"
168e428f
PH
22146The rewrite section of the configuration file consists of lines of rewriting
22147rules in the form
9b371988
PH
22148.display
22149<&'source pattern'&> <&'replacement'&> <&'flags'&>
22150.endd
22151Rewriting rules that are specified for the &%headers_rewrite%& generic
22152transport option are given as a colon-separated list. Each item in the list
22153takes the same form as a line in the main rewriting configuration (except that
22154any colons must be doubled, of course).
168e428f
PH
22155
22156The formats of source patterns and replacement strings are described below.
22157Each is terminated by white space, unless enclosed in double quotes, in which
22158case normal quoting conventions apply inside the quotes. The flags are single
22159characters which may appear in any order. Spaces and tabs between them are
22160ignored.
22161
22162For each address that could potentially be rewritten, the rules are scanned in
22163order, and replacements for the address from earlier rules can themselves be
9b371988 22164replaced by later rules (but see the &"q"& and &"R"& flags).
168e428f
PH
22165
22166The order in which addresses are rewritten is undefined, may change between
22167releases, and must not be relied on, with one exception: when a message is
22168received, the envelope sender is always rewritten first, before any header
22169lines are rewritten. For example, the replacement string for a rewrite of an
9b371988
PH
22170address in &'To:'& must not assume that the message's address in &'From:'& has
22171(or has not) already been rewritten. However, a rewrite of &'From:'& may assume
22172that the envelope sender has already been rewritten.
168e428f 22173
f89d2485
PH
22174.vindex "&$domain$&"
22175.vindex "&$local_part$&"
9b371988 22176The variables &$local_part$& and &$domain$& can be used in the replacement
168e428f
PH
22177string to refer to the address that is being rewritten. Note that lookup-driven
22178rewriting can be done by a rule of the form
9b371988
PH
22179.code
22180*@* ${lookup ...
22181.endd
22182where the lookup key uses &$1$& and &$2$& or &$local_part$& and &$domain$& to
168e428f
PH
22183refer to the address that is being rewritten.
22184
22185
f89d2485 22186.section "Rewriting patterns" "SECID151"
9b371988
PH
22187.cindex "rewriting" "patterns"
22188.cindex "address list" "in a rewriting pattern"
168e428f 22189The source pattern in a rewriting rule is any item which may appear in an
9b371988 22190address list (see section &<<SECTaddresslist>>&). It is in fact processed as a
168e428f 22191single-item address list, which means that it is expanded before being tested
068aaea8 22192against the address. As always, if you use a regular expression as a pattern,
9b371988 22193you must take care to escape dollar and backslash characters, or use the &`\N`&
068aaea8 22194facility to suppress string expansion within the regular expression.
168e428f
PH
22195
22196Domains in patterns should be given in lower case. Local parts in patterns are
22197case-sensitive. If you want to do case-insensitive matching of local parts, you
9b371988 22198can use a regular expression that starts with &`^(?i)`&.
168e428f 22199
9b371988
PH
22200.cindex "numerical variables (&$1$& &$2$& etc)" "in rewriting rules"
22201After matching, the numerical variables &$1$&, &$2$&, etc. may be set,
168e428f 22202depending on the type of match which occurred. These can be used in the
9b371988 22203replacement string to insert portions of the incoming address. &$0$& always
168e428f
PH
22204refers to the complete incoming address. When a regular expression is used, the
22205numerical variables are set from its capturing subexpressions. For other types
22206of pattern they are set as follows:
22207
9b371988
PH
22208.ilist
22209If a local part or domain starts with an asterisk, the numerical variables
22210refer to the character strings matched by asterisks, with &$1$& associated with
22211the first asterisk, and &$2$& with the second, if present. For example, if the
168e428f 22212pattern
9b371988
PH
22213.code
22214*queen@*.fict.example
22215.endd
22216is matched against the address &'hearts-queen@wonderland.fict.example'& then
22217.code
22218$0 = hearts-queen@wonderland.fict.example
22219$1 = hearts-
22220$2 = wonderland
22221.endd
168e428f 22222Note that if the local part does not start with an asterisk, but the domain
9b371988 22223does, it is &$1$& that contains the wild part of the domain.
168e428f 22224
9b371988
PH
22225.next
22226If the domain part of the pattern is a partial lookup, the wild and fixed parts
168e428f 22227of the domain are placed in the next available numerical variables. Suppose,
9b371988 22228for example, that the address &'foo@bar.baz.example'& is processed by a
168e428f 22229rewriting rule of the form
9b371988
PH
22230.display
22231&`*@partial-dbm;/some/dbm/file`& <&'replacement string'&>
22232.endd
22233and the key in the file that matches the domain is &`*.baz.example`&. Then
22234.code
22235$1 = foo
22236$2 = bar
22237$3 = baz.example
22238.endd
22239If the address &'foo@baz.example'& is looked up, this matches the same
22240wildcard file entry, and in this case &$2$& is set to the empty string, but
22241&$3$& is still set to &'baz.example'&. If a non-wild key is matched in a
22242partial lookup, &$2$& is again set to the empty string and &$3$& is set to the
168e428f 22243whole domain. For non-partial domain lookups, no numerical variables are set.
9b371988 22244.endlist
168e428f
PH
22245
22246
f89d2485 22247.section "Rewriting replacements" "SECID152"
9b371988 22248.cindex "rewriting" "replacements"
168e428f 22249If the replacement string for a rule is a single asterisk, addresses that
9b371988 22250match the pattern and the flags are &'not'& rewritten, and no subsequent
168e428f 22251rewriting rules are scanned. For example,
9b371988
PH
22252.code
22253hatta@lookingglass.fict.example * f
22254.endd
22255specifies that &'hatta@lookingglass.fict.example'& is never to be rewritten in
22256&'From:'& headers.
22257
f89d2485
PH
22258.vindex "&$domain$&"
22259.vindex "&$local_part$&"
168e428f
PH
22260If the replacement string is not a single asterisk, it is expanded, and must
22261yield a fully qualified address. Within the expansion, the variables
9b371988
PH
22262&$local_part$& and &$domain$& refer to the address that is being rewritten.
22263Any letters they contain retain their original case &-- they are not lower
168e428f
PH
22264cased. The numerical variables are set up according to the type of pattern that
22265matched the address, as described above. If the expansion is forced to fail by
9b371988 22266the presence of &"fail"& in a conditional or lookup item, rewriting by the
168e428f
PH
22267current rule is abandoned, but subsequent rules may take effect. Any other
22268expansion failure causes the entire rewriting operation to be abandoned, and an
22269entry written to the panic log.
22270
22271
22272
f89d2485 22273.section "Rewriting flags" "SECID153"
168e428f
PH
22274There are three different kinds of flag that may appear on rewriting rules:
22275
9b371988
PH
22276.ilist
22277Flags that specify which headers and envelope addresses to rewrite: E, F, T, b,
168e428f 22278c, f, h, r, s, t.
9b371988
PH
22279.next
22280A flag that specifies rewriting at SMTP time: S.
22281.next
22282Flags that control the rewriting process: Q, q, R, w.
22283.endlist
168e428f 22284
9b371988 22285For rules that are part of the &%headers_rewrite%& generic transport option,
168e428f
PH
22286E, F, T, and S are not permitted.
22287
22288
22289
f89d2485
PH
22290.section "Flags specifying which headers and envelope addresses to rewrite" &&&
22291 "SECID154"
9b371988
PH
22292.cindex "rewriting" "flags"
22293If none of the following flag letters, nor the &"S"& flag (see section
22294&<<SECTrewriteS>>&) are present, a main rewriting rule applies to all headers
22295and to both the sender and recipient fields of the envelope, whereas a
168e428f
PH
22296transport-time rewriting rule just applies to all headers. Otherwise, the
22297rewriting rule is skipped unless the relevant addresses are being processed.
9b371988
PH
22298.display
22299&`E`& rewrite all envelope fields
22300&`F`& rewrite the envelope From field
22301&`T`& rewrite the envelope To field
22302&`b`& rewrite the &'Bcc:'& header
22303&`c`& rewrite the &'Cc:'& header
22304&`f`& rewrite the &'From:'& header
22305&`h`& rewrite all headers
22306&`r`& rewrite the &'Reply-To:'& header
22307&`s`& rewrite the &'Sender:'& header
22308&`t`& rewrite the &'To:'& header
22309.endd
711df2d9
TF
22310"All headers" means all of the headers listed above that can be selected
22311individually, plus their &'Resent-'& versions. It does not include
22312other headers such as &'Subject:'& etc.
22313
9b371988 22314You should be particularly careful about rewriting &'Sender:'& headers, and
168e428f
PH
22315restrict this to special known cases in your own domains.
22316
22317
9b371988
PH
22318.section "The SMTP-time rewriting flag" "SECTrewriteS"
22319.cindex "SMTP" "rewriting malformed addresses"
22320.cindex "RCPT" "rewriting argument of"
22321.cindex "MAIL" "rewriting argument of"
22322The rewrite flag &"S"& specifies a rewrite of incoming envelope addresses at
22323SMTP time, as soon as an address is received in a MAIL or RCPT command, and
168e428f
PH
22324before any other processing; even before syntax checking. The pattern is
22325required to be a regular expression, and it is matched against the whole of the
22326data for the command, including any surrounding angle brackets.
22327
f89d2485
PH
22328.vindex "&$domain$&"
22329.vindex "&$local_part$&"
168e428f 22330This form of rewrite rule allows for the handling of addresses that are not
9b371988 22331compliant with RFCs 2821 and 2822 (for example, &"bang paths"& in batched SMTP
168e428f 22332input). Because the input is not required to be a syntactically valid address,
9b371988 22333the variables &$local_part$& and &$domain$& are not available during the
168e428f
PH
22334expansion of the replacement string. The result of rewriting replaces the
22335original address in the MAIL or RCPT command.
22336
22337
f89d2485 22338.section "Flags controlling the rewriting process" "SECID155"
168e428f
PH
22339There are four flags which control the way the rewriting process works. These
22340take effect only when a rule is invoked, that is, when the address is of the
22341correct type (matches the flags) and matches the pattern:
22342
9b371988
PH
22343.ilist
22344If the &"Q"& flag is set on a rule, the rewritten address is permitted to be an
22345unqualified local part. It is qualified with &%qualify_recipient%&. In the
22346absence of &"Q"& the rewritten address must always include a domain.
22347.next
22348If the &"q"& flag is set on a rule, no further rewriting rules are considered,
22349even if no rewriting actually takes place because of a &"fail"& in the
22350expansion. The &"q"& flag is not effective if the address is of the wrong type
22351(does not match the flags) or does not match the pattern.
22352.next
22353The &"R"& flag causes a successful rewriting rule to be re-applied to the new
22354address, up to ten times. It can be combined with the &"q"& flag, to stop
168e428f 22355rewriting once it fails to match (after at least one successful rewrite).
9b371988
PH
22356.next
22357.cindex "rewriting" "whole addresses"
168e428f 22358When an address in a header is rewritten, the rewriting normally applies only
9b371988 22359to the working part of the address, with any comments and RFC 2822 &"phrase"&
168e428f 22360left unchanged. For example, rewriting might change
9b371988
PH
22361.code
22362From: Ford Prefect <fp42@restaurant.hitch.fict.example>
22363.endd
168e428f 22364into
9b371988
PH
22365.code
22366From: Ford Prefect <prefectf@hitch.fict.example>
22367.endd
22368.cindex "RFC 2047"
168e428f 22369Sometimes there is a need to replace the whole address item, and this can be
9b371988 22370done by adding the flag letter &"w"& to a rule. If this is set on a rule that
168e428f
PH
22371causes an address in a header line to be rewritten, the entire address is
22372replaced, not just the working part. The replacement must be a complete RFC
223732822 address, including the angle brackets if necessary. If text outside angle
22374brackets contains a character whose value is greater than 126 or less than 32
d1e83bff 22375(except for tab), the text is encoded according to RFC 2047. The character set
9b371988 22376is taken from &%headers_charset%&, which defaults to ISO-8859-1.
168e428f 22377
9b371988
PH
22378When the &"w"& flag is set on a rule that causes an envelope address to be
22379rewritten, all but the working part of the replacement address is discarded.
22380.endlist
168e428f
PH
22381
22382
f89d2485 22383.section "Rewriting examples" "SECID156"
168e428f 22384Here is an example of the two common rewriting paradigms:
9b371988 22385.code
168e428f
PH
22386*@*.hitch.fict.example $1@hitch.fict.example
22387*@hitch.fict.example ${lookup{$1}dbm{/etc/realnames}\
22388 {$value}fail}@hitch.fict.example bctfrF
9b371988
PH
22389.endd
22390Note the use of &"fail"& in the lookup expansion in the second rule, forcing
168e428f
PH
22391the string expansion to fail if the lookup does not succeed. In this context it
22392has the effect of leaving the original address unchanged, but Exim goes on to
9b371988
PH
22393consider subsequent rewriting rules, if any, because the &"q"& flag is not
22394present in that rule. An alternative to &"fail"& would be to supply &$1$&
168e428f
PH
22395explicitly, which would cause the rewritten address to be the same as before,
22396at the cost of a small bit of processing. Not supplying either of these is an
22397error, since the rewritten address would then contain no local part.
22398
22399The first example above replaces the domain with a superior, more general
22400domain. This may not be desirable for certain local parts. If the rule
9b371988
PH
22401.code
22402root@*.hitch.fict.example *
22403.endd
168e428f 22404were inserted before the first rule, rewriting would be suppressed for the
9b371988 22405local part &'root'& at any domain ending in &'hitch.fict.example'&.
168e428f
PH
22406
22407Rewriting can be made conditional on a number of tests, by making use of
9b371988 22408&${if$& in the expansion item. For example, to apply a rewriting rule only to
168e428f 22409messages that originate outside the local host:
9b371988 22410.code
168e428f
PH
22411*@*.hitch.fict.example "${if !eq {$sender_host_address}{}\
22412 {$1@hitch.fict.example}fail}"
9b371988 22413.endd
168e428f
PH
22414The replacement string is quoted in this example because it contains white
22415space.
22416
9b371988
PH
22417.cindex "rewriting" "bang paths"
22418.cindex "bang paths" "rewriting"
22419Exim does not handle addresses in the form of &"bang paths"&. If it sees such
22420an address it treats it as an unqualified local part which it qualifies with
22421the local qualification domain (if the source of the message is local or if the
168e428f
PH
22422remote host is permitted to send unqualified addresses). Rewriting can
22423sometimes be used to handle simple bang paths with a fixed number of
22424components. For example, the rule
9b371988
PH
22425.code
22426\N^([^!]+)!(.*)@your.domain.example$\N $2@$1
22427.endd
22428rewrites a two-component bang path &'host.name!user'& as the domain address
22429&'user@host.name'&. However, there is a security implication in using this as
168e428f
PH
22430a global rewriting rule for envelope addresses. It can provide a backdoor
22431method for using your system as a relay, because the incoming addresses appear
22432to be local. If the bang path addresses are received via SMTP, it is safer to
9b371988 22433use the &"S"& flag to rewrite them as they are received, so that relay checking
168e428f 22434can be done on the rewritten addresses.
4f578862 22435.ecindex IIDaddrew
168e428f
PH
22436
22437
22438
22439
22440
9b371988
PH
22441. ////////////////////////////////////////////////////////////////////////////
22442. ////////////////////////////////////////////////////////////////////////////
168e428f 22443
9b371988 22444.chapter "Retry configuration" "CHAPretry"
f89d2485 22445.scindex IIDretconf1 "retry" "configuration, description of"
4f578862 22446.scindex IIDregconf2 "configuration file" "retry section"
595028e4 22447The &"retry"& section of the runtime configuration file contains a list of
4f578862 22448retry rules that control how often Exim tries to deliver messages that cannot
595028e4
PH
22449be delivered at the first attempt. If there are no retry rules (the section is
22450empty or not present), there are no retries. In this situation, temporary
22451errors are treated as permanent. The default configuration contains a single,
22452general-purpose retry rule (see section &<<SECID57>>&). The &%-brt%& command
22453line option can be used to test which retry rule will be used for a given
22454address, domain and error.
168e428f
PH
22455
22456The most common cause of retries is temporary failure to deliver to a remote
22457host because the host is down, or inaccessible because of a network problem.
22458Exim's retry processing in this case is applied on a per-host (strictly, per IP
22459address) basis, not on a per-message basis. Thus, if one message has recently
22460been delayed, delivery of a new message to the same host is not immediately
9b371988
PH
22461tried, but waits for the host's retry time to arrive. If the &%retry_defer%&
22462log selector is set, the message
22463.cindex "retry" "time not reached"
22464&"retry time not reached"& is written to the main log whenever a delivery is
22465skipped for this reason. Section &<<SECToutSMTPerr>>& contains more details of
22466the handling of errors during remote deliveries.
168e428f
PH
22467
22468Retry processing applies to routing as well as to delivering, except as covered
22469in the next paragraph. The retry rules do not distinguish between these
22470actions. It is not possible, for example, to specify different behaviour for
9b371988
PH
22471failures to route the domain &'snark.fict.example'& and failures to deliver to
22472the host &'snark.fict.example'&. I didn't think anyone would ever need this
168e428f
PH
22473added complication, so did not implement it. However, although they share the
22474same retry rule, the actual retry times for routing and transporting a given
22475domain are maintained independently.
22476
22477When a delivery is not part of a queue run (typically an immediate delivery on
22478receipt of a message), the routers are always run, and local deliveries are
22479always attempted, even if retry times are set for them. This makes for better
22480behaviour if one particular message is causing problems (for example, causing
22481quota overflow, or provoking an error in a filter file). If such a delivery
22482suffers a temporary failure, the retry data is updated as normal, and
22483subsequent delivery attempts from queue runs occur only when the retry time for
22484the local address is reached.
22485
f89d2485 22486.section "Changing retry rules" "SECID157"
db9452a9
PH
22487If you change the retry rules in your configuration, you should consider
22488whether or not to delete the retry data that is stored in Exim's spool area in
22489files with names like &_db/retry_&. Deleting any of Exim's hints files is
22490always safe; that is why they are called &"hints"&.
22491
22492The hints retry data contains suggested retry times based on the previous
22493rules. In the case of a long-running problem with a remote host, it might
22494record the fact that the host has timed out. If your new rules increase the
22495timeout time for such a host, you should definitely remove the old retry data
22496and let Exim recreate it, based on the new rules. Otherwise Exim might bounce
22497messages that it should now be retaining.
db9452a9 22498
168e428f
PH
22499
22500
f89d2485 22501.section "Format of retry rules" "SECID158"
9b371988 22502.cindex "retry" "rules"
168e428f
PH
22503Each retry rule occupies one line and consists of three or four parts,
22504separated by white space: a pattern, an error name, an optional list of sender
22505addresses, and a list of retry parameters. The pattern and sender lists must be
9b371988
PH
22506enclosed in double quotes if they contain white space. The rules are searched
22507in order until one is found where the pattern, error name, and sender list (if
168e428f
PH
22508present) match the failing host or address, the error that occurred, and the
22509message's sender, respectively.
22510
22511
22512The pattern is any single item that may appear in an address list (see section
9b371988
PH
22513&<<SECTaddresslist>>&). It is in fact processed as a one-item address list,
22514which means that it is expanded before being tested against the address that
3cb1b51e 22515has been delayed. A negated address list item is permitted. Address
db9452a9
PH
22516list processing treats a plain domain name as if it were preceded by &"*@"&,
22517which makes it possible for many retry rules to start with just a domain. For
22518example,
9b371988
PH
22519.code
22520lookingglass.fict.example * F,24h,30m;
22521.endd
22522provides a rule for any address in the &'lookingglass.fict.example'& domain,
168e428f 22523whereas
9b371988
PH
22524.code
22525alice@lookingglass.fict.example * F,24h,30m;
22526.endd
22527applies only to temporary failures involving the local part &%alice%&.
168e428f
PH
22528In practice, almost all rules start with a domain name pattern without a local
22529part.
22530
9b371988
PH
22531.cindex "regular expressions" "in retry rules"
22532&*Warning*&: If you use a regular expression in a routing rule pattern, it
168e428f
PH
22533must match a complete address, not just a domain, because that is how regular
22534expressions work in address lists.
9b371988
PH
22535.display
22536&`^\Nxyz\d+\.abc\.example$\N * G,1h,10m,2`& &%Wrong%&
22537&`^\N[^@]+@xyz\d+\.abc\.example$\N * G,1h,10m,2`& &%Right%&
22538.endd
168e428f
PH
22539
22540
f89d2485 22541.section "Choosing which retry rule to use for address errors" "SECID159"
168e428f
PH
22542When Exim is looking for a retry rule after a routing attempt has failed (for
22543example, after a DNS timeout), each line in the retry configuration is tested
9b371988 22544against the complete address only if &%retry_use_local_part%& is set for the
168e428f 22545router. Otherwise, only the domain is used, except when matching against a
9b371988 22546regular expression, when the local part of the address is replaced with &"*"&.
168e428f 22547A domain on its own can match a domain pattern, or a pattern that starts with
9b371988
PH
22548&"*@"&. By default, &%retry_use_local_part%& is true for routers where
22549&%check_local_user%& is true, and false for other routers.
168e428f
PH
22550
22551Similarly, when Exim is looking for a retry rule after a local delivery has
22552failed (for example, after a mailbox full error), each line in the retry
22553configuration is tested against the complete address only if
9b371988 22554&%retry_use_local_part%& is set for the transport (it defaults true for all
168e428f
PH
22555local transports).
22556
3cb1b51e 22557.cindex "4&'xx'& responses" "retry rules for"
4f578862
PH
22558However, when Exim is looking for a retry rule after a remote delivery attempt
22559suffers an address error (a 4&'xx'& SMTP response for a recipient address), the
22560whole address is always used as the key when searching the retry rules. The
3cb1b51e
PH
22561rule that is found is used to create a retry time for the combination of the
22562failing address and the message's sender. It is the combination of sender and
22563recipient that is delayed in subsequent queue runs until its retry time is
22564reached. You can delay the recipient without regard to the sender by setting
22565&%address_retry_include_sender%& false in the &(smtp)& transport but this can
22566lead to problems with servers that regularly issue 4&'xx'& responses to RCPT
22567commands.
3cb1b51e 22568
168e428f 22569
068aaea8 22570
f89d2485
PH
22571.section "Choosing which retry rule to use for host and message errors" &&&
22572 "SECID160"
068aaea8
PH
22573For a temporary error that is not related to an individual address (for
22574example, a connection timeout), each line in the retry configuration is checked
22575twice. First, the name of the remote host is used as a domain name (preceded by
9b371988 22576&"*@"& when matching a regular expression). If this does not match the line,
068aaea8 22577the domain from the email address is tried in a similar fashion. For example,
9b371988
PH
22578suppose the MX records for &'a.b.c.example'& are
22579.code
22580a.b.c.example MX 5 x.y.z.example
22581 MX 6 p.q.r.example
22582 MX 7 m.n.o.example
22583.endd
168e428f 22584and the retry rules are
9b371988
PH
22585.code
22586p.q.r.example * F,24h,30m;
22587a.b.c.example * F,4d,45m;
22588.endd
22589and a delivery to the host &'x.y.z.example'& suffers a connection failure. The
068aaea8
PH
22590first rule matches neither the host nor the domain, so Exim looks at the second
22591rule. This does not match the host, but it does match the domain, so it is used
9b371988
PH
22592to calculate the retry time for the host &'x.y.z.example'&. Meanwhile, Exim
22593tries to deliver to &'p.q.r.example'&. If this also suffers a host error, the
22594first retry rule is used, because it matches the host.
168e428f 22595
9b371988 22596In other words, temporary failures to deliver to host &'p.q.r.example'& use the
068aaea8 22597first rule to determine retry times, but for all the other hosts for the domain
9b371988
PH
22598&'a.b.c.example'&, the second rule is used. The second rule is also used if
22599routing to &'a.b.c.example'& suffers a temporary failure.
168e428f 22600
9b371988 22601&*Note*&: The host name is used when matching the patterns, not its IP address.
068aaea8 22602However, if a message is routed directly to an IP address without the use of a
9b371988
PH
22603host name, for example, if a &(manualroute)& router contains a setting such as:
22604.code
22605route_list = *.a.example 192.168.34.23
22606.endd
22607then the &"host name"& that is used when searching for a retry rule is the
068aaea8
PH
22608textual form of the IP address.
22609
f89d2485 22610.section "Retry rules for specific errors" "SECID161"
9b371988 22611.cindex "retry" "specific errors; specifying"
168e428f
PH
22612The second field in a retry rule is the name of a particular error, or an
22613asterisk, which matches any error. The errors that can be tested for are:
22614
9b371988
PH
22615.vlist
22616.vitem &%auth_failed%&
22617Authentication failed when trying to send to a host in the
22618&%hosts_require_auth%& list in an &(smtp)& transport.
168e428f 22619
4f578862
PH
22620.vitem &%data_4xx%&
22621A 4&'xx'& error was received for an outgoing DATA command, either immediately
22622after the command, or after sending the message's data.
22623
22624.vitem &%mail_4xx%&
22625A 4&'xx'& error was received for an outgoing MAIL command.
22626
9b371988 22627.vitem &%rcpt_4xx%&
4f578862
PH
22628A 4&'xx'& error was received for an outgoing RCPT command.
22629.endlist
22630
22631For the three 4&'xx'& errors, either the first or both of the x's can be given
22632as specific digits, for example: &`mail_45x`& or &`rcpt_436`&. For example, to
22633recognize 452 errors given to RCPT commands for addresses in a certain domain,
22634and have retries every ten minutes with a one-hour timeout, you could set up a
22635retry rule of this form:
9b371988 22636.code
4f578862 22637the.domain.name rcpt_452 F,1h,10m
9b371988
PH
22638.endd
22639These errors apply to both outgoing SMTP (the &(smtp)& transport) and outgoing
22640LMTP (either the &(lmtp)& transport, or the &(smtp)& transport in LMTP mode).
4f578862
PH
22641
22642.vlist
4f578862
PH
22643.vitem &%lost_connection%&
22644A server unexpectedly closed the SMTP connection. There may, of course,
22645legitimate reasons for this (host died, network died), but if it repeats a lot
22646for the same host, it indicates something odd.
168e428f 22647
9b371988 22648.vitem &%refused_MX%&
168e428f
PH
22649A connection to a host obtained from an MX record was refused.
22650
9b371988 22651.vitem &%refused_A%&
168e428f
PH
22652A connection to a host not obtained from an MX record was refused.
22653
9b371988 22654.vitem &%refused%&
168e428f
PH
22655A connection was refused.
22656
9b371988 22657.vitem &%timeout_connect_MX%&
168e428f
PH
22658A connection attempt to a host obtained from an MX record timed out.
22659
9b371988 22660.vitem &%timeout_connect_A%&
168e428f
PH
22661A connection attempt to a host not obtained from an MX record timed out.
22662
9b371988 22663.vitem &%timeout_connect%&
168e428f
PH
22664A connection attempt timed out.
22665
9b371988 22666.vitem &%timeout_MX%&
168e428f
PH
22667There was a timeout while connecting or during an SMTP session with a host
22668obtained from an MX record.
22669
9b371988 22670.vitem &%timeout_A%&
168e428f
PH
22671There was a timeout while connecting or during an SMTP session with a host not
22672obtained from an MX record.
22673
9b371988 22674.vitem &%timeout%&
168e428f
PH
22675There was a timeout while connecting or during an SMTP session.
22676
4f578862
PH
22677.vitem &%tls_required%&
22678The server was required to use TLS (it matched &%hosts_require_tls%& in the
22679&(smtp)& transport), but either did not offer TLS, or it responded with 4&'xx'&
22680to STARTTLS, or there was a problem setting up the TLS connection.
4f578862 22681
9b371988
PH
22682.vitem &%quota%&
22683A mailbox quota was exceeded in a local delivery by the &(appendfile)&
22684transport.
168e428f 22685
9b371988
PH
22686.vitem &%quota_%&<&'time'&>
22687.cindex "quota" "error testing in retry rule"
22688.cindex "retry" "quota error testing"
22689A mailbox quota was exceeded in a local delivery by the &(appendfile)&
22690transport, and the mailbox has not been accessed for <&'time'&>. For example,
22691&'quota_4d'& applies to a quota error when the mailbox has not been accessed
22692for four days.
22693.endlist
22694
22695.cindex "mailbox" "time of last read"
22696The idea of &%quota_%&<&'time'&> is to make it possible to have shorter
22697timeouts when the mailbox is full and is not being read by its owner. Ideally,
22698it should be based on the last time that the user accessed the mailbox.
22699However, it is not always possible to determine this. Exim uses the following
22700heuristic rules:
22701
22702.ilist
22703If the mailbox is a single file, the time of last access (the &"atime"&) is
22704used. As no new messages are being delivered (because the mailbox is over
22705quota), Exim does not access the file, so this is the time of last user access.
22706.next
22707.cindex "maildir format" "time of last read"
22708For a maildir delivery, the time of last modification of the &_new_&
168e428f 22709subdirectory is used. As the mailbox is over quota, no new files are created in
9b371988
PH
22710the &_new_& subdirectory, because no new messages are being delivered. Any
22711change to the &_new_& subdirectory is therefore assumed to be the result of an
22712MUA moving a new message to the &_cur_& directory when it is first read. The
168e428f 22713time that is used is therefore the last time that the user read a new message.
9b371988
PH
22714.next
22715For other kinds of multi-file mailbox, the time of last access cannot be
168e428f 22716obtained, so a retry rule that uses this type of error field is never matched.
9b371988 22717.endlist
168e428f
PH
22718
22719The quota errors apply both to system-enforced quotas and to Exim's own quota
9b371988 22720mechanism in the &(appendfile)& transport. The &'quota'& error also applies
168e428f
PH
22721when a local delivery is deferred because a partition is full (the ENOSPC
22722error).
22723
22724
22725
f89d2485 22726.section "Retry rules for specified senders" "SECID162"
9b371988 22727.cindex "retry" "rules; sender-specific"
168e428f
PH
22728You can specify retry rules that apply only when the failing message has a
22729specific sender. In particular, this can be used to define retry rules that
22730apply only to bounce messages. The third item in a retry rule can be of this
22731form:
4f578862
PH
22732.display
22733&`senders=`&<&'address list'&>
9b371988 22734.endd
168e428f 22735The retry timings themselves are then the fourth item. For example:
9b371988 22736.code
068aaea8 22737* rcpt_4xx senders=: F,1h,30m
9b371988 22738.endd
4f578862
PH
22739matches recipient 4&'xx'& errors for bounce messages sent to any address at any
22740host. If the address list contains white space, it must be enclosed in quotes.
22741For example:
9b371988 22742.code
4f578862 22743a.domain rcpt_452 senders="xb.dom : yc.dom" G,8h,10m,1.5
9b371988 22744.endd
4f578862
PH
22745&*Warning*&: This facility can be unhelpful if it is used for host errors
22746(which do not depend on the recipient). The reason is that the sender is used
22747only to match the retry rule. Once the rule has been found for a host error,
22748its contents are used to set a retry time for the host, and this will apply to
22749all messages, not just those with specific senders.
168e428f 22750
9b371988
PH
22751When testing retry rules using &%-brt%&, you can supply a sender using the
22752&%-f%& command line option, like this:
22753.code
22754exim -f "" -brt user@dom.ain
22755.endd
22756If you do not set &%-f%& with &%-brt%&, a retry rule that contains a senders
22757list is never matched.
168e428f 22758
168e428f
PH
22759
22760
22761
22762
f89d2485 22763.section "Retry parameters" "SECID163"
9b371988 22764.cindex "retry" "parameters in rules"
168e428f
PH
22765The third (or fourth, if a senders list is present) field in a retry rule is a
22766sequence of retry parameter sets, separated by semicolons. Each set consists of
9b371988
PH
22767.display
22768<&'letter'&>,<&'cutoff time'&>,<&'arguments'&>
22769.endd
168e428f
PH
22770The letter identifies the algorithm for computing a new retry time; the cutoff
22771time is the time beyond which this algorithm no longer applies, and the
22772arguments vary the algorithm's action. The cutoff time is measured from the
22773time that the first failure for the domain (combined with the local part if
22774relevant) was detected, not from the time the message was received.
22775
9b371988
PH
22776.cindex "retry" "algorithms"
22777.cindex "retry" "fixed intervals"
22778.cindex "retry" "increasing intervals"
22779.cindex "retry" "random intervals"
168e428f
PH
22780The available algorithms are:
22781
9b371988
PH
22782.ilist
22783&'F'&: retry at fixed intervals. There is a single time parameter specifying
168e428f 22784the interval.
9b371988
PH
22785.next
22786&'G'&: retry at geometrically increasing intervals. The first argument
168e428f
PH
22787specifies a starting value for the interval, and the second a multiplier, which
22788is used to increase the size of the interval at each retry.
9b371988 22789.next
9b371988 22790&'H'&: retry at randomized intervals. The arguments are as for &'G'&. For each
068aaea8 22791retry, the previous interval is multiplied by the factor in order to get a
f89d2485 22792maximum for the next interval. The minimum interval is the first argument of
068aaea8
PH
22793the parameter, and an actual interval is chosen randomly between them. Such a
22794rule has been found to be helpful in cluster configurations when all the
22795members of the cluster restart at once, and may therefore synchronize their
22796queue processing times.
9b371988 22797.endlist
068aaea8 22798
168e428f
PH
22799When computing the next retry time, the algorithm definitions are scanned in
22800order until one whose cutoff time has not yet passed is reached. This is then
22801used to compute a new retry time that is later than the current time. In the
22802case of fixed interval retries, this simply means adding the interval to the
22803current time. For geometrically increasing intervals, retry intervals are
22804computed from the rule's parameters until one that is greater than the previous
22805interval is found. The main configuration variable
9b371988 22806.cindex "limit" "retry interval"
f89d2485 22807.cindex "retry" "interval, maximum"
0a4e3112 22808.oindex "&%retry_interval_max%&"
c0712871
PH
22809&%retry_interval_max%& limits the maximum interval between retries. It
22810cannot be set greater than &`24h`&, which is its default value.
168e428f
PH
22811
22812A single remote domain may have a number of hosts associated with it, and each
22813host may have more than one IP address. Retry algorithms are selected on the
22814basis of the domain name, but are applied to each IP address independently. If,
22815for example, a host has two IP addresses and one is unusable, Exim will
22816generate retry times for it and will not try to use it until its next retry
22817time comes. Thus the good IP address is likely to be tried first most of the
22818time.
22819
9b371988 22820.cindex "hints database" "use for retrying"
168e428f
PH
22821Retry times are hints rather than promises. Exim does not make any attempt to
22822run deliveries exactly at the computed times. Instead, a queue runner process
22823starts delivery processes for delayed messages periodically, and these attempt
22824new deliveries only for those addresses that have passed their next retry time.
22825If a new message arrives for a deferred address, an immediate delivery attempt
22826occurs only if the address has passed its retry time. In the absence of new
22827messages, the minimum time between retries is the interval between queue runner
22828processes. There is not much point in setting retry times of five minutes if
22829your queue runners happen only once an hour, unless there are a significant
22830number of incoming messages (which might be the case on a system that is
22831sending everything to a smart host, for example).
22832
22833The data in the retry hints database can be inspected by using the
9b371988
PH
22834&'exim_dumpdb'& or &'exim_fixdb'& utility programs (see chapter
22835&<<CHAPutils>>&). The latter utility can also be used to change the data. The
22836&'exinext'& utility script can be used to find out what the next retry times
22837are for the hosts associated with a particular mail domain, and also for local
22838deliveries that have been deferred.
168e428f
PH
22839
22840
f89d2485 22841.section "Retry rule examples" "SECID164"
168e428f 22842Here are some example retry rules:
9b371988
PH
22843.code
22844alice@wonderland.fict.example quota_5d F,7d,3h
22845wonderland.fict.example quota_5d
22846wonderland.fict.example * F,1h,15m; G,2d,1h,2;
22847lookingglass.fict.example * F,24h,30m;
22848* refused_A F,2h,20m;
22849* * F,2h,15m; G,16h,1h,1.5; F,5d,8h
22850.endd
168e428f 22851The first rule sets up special handling for mail to
9b371988 22852&'alice@wonderland.fict.example'& when there is an over-quota error and the
168e428f
PH
22853mailbox has not been read for at least 5 days. Retries continue every three
22854hours for 7 days. The second rule handles over-quota errors for all other local
9b371988
PH
22855parts at &'wonderland.fict.example'&; the absence of a local part has the same
22856effect as supplying &"*@"&. As no retry algorithms are supplied, messages that
168e428f
PH
22857fail are bounced immediately if the mailbox has not been read for at least 5
22858days.
22859
9b371988 22860The third rule handles all other errors at &'wonderland.fict.example'&; retries
168e428f
PH
22861happen every 15 minutes for an hour, then with geometrically increasing
22862intervals until two days have passed since a delivery first failed. After the
22863first hour there is a delay of one hour, then two hours, then four hours, and
22864so on (this is a rather extreme example).
22865
9b371988 22866The fourth rule controls retries for the domain &'lookingglass.fict.example'&.
168e428f
PH
22867They happen every 30 minutes for 24 hours only. The remaining two rules handle
22868all other domains, with special action for connection refusal from hosts that
22869were not obtained from an MX record.
22870
22871The final rule in a retry configuration should always have asterisks in the
22872first two fields so as to provide a general catch-all for any addresses that do
22873not have their own special handling. This example tries every 15 minutes for 2
22874hours, then with intervals starting at one hour and increasing by a factor of
228751.5 up to 16 hours, then every 8 hours up to 5 days.
22876
22877
22878
f89d2485 22879.section "Timeout of retry data" "SECID165"
9b371988 22880.cindex "timeout" "of retry data"
0a4e3112 22881.oindex "&%retry_data_expire%&"
9b371988
PH
22882.cindex "hints database" "data expiry"
22883.cindex "retry" "timeout of data"
168e428f
PH
22884Exim timestamps the data that it writes to its retry hints database. When it
22885consults the data during a delivery it ignores any that is older than the value
9b371988 22886set in &%retry_data_expire%& (default 7 days). If, for example, a host hasn't
168e428f
PH
22887been tried for 7 days, Exim will try to deliver to it immediately a message
22888arrives, and if that fails, it will calculate a retry time as if it were
22889failing for the first time.
22890
22891This improves the behaviour for messages routed to rarely-used hosts such as MX
22892backups. If such a host was down at one time, and happens to be down again when
22893Exim tries a month later, using the old retry data would imply that it had been
22894down all the time, which is not a justified assumption.
22895
22896If a host really is permanently dead, this behaviour causes a burst of retries
3cb1b51e 22897every now and again, but only if messages routed to it are rare. If there is a
168e428f
PH
22898message at least once every 7 days the retry data never expires.
22899
22900
22901
22902
f89d2485
PH
22903.section "Long-term failures" "SECID166"
22904.cindex "delivery failure, long-term"
9b371988 22905.cindex "retry" "after long-term failure"
168e428f
PH
22906Special processing happens when an email address has been failing for so long
22907that the cutoff time for the last algorithm is reached. For example, using the
22908default retry rule:
9b371988 22909.code
168e428f 22910* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
9b371988 22911.endd
168e428f
PH
22912the cutoff time is four days. Reaching the retry cutoff is independent of how
22913long any specific message has been failing; it is the length of continuous
22914failure for the recipient address that counts.
22915
22916When the cutoff time is reached for a local delivery, or for all the IP
22917addresses associated with a remote delivery, a subsequent delivery failure
22918causes Exim to give up on the address, and a bounce message is generated.
22919In order to cater for new messages that use the failing address, a next retry
22920time is still computed from the final algorithm, and is used as follows:
22921
22922For local deliveries, one delivery attempt is always made for any subsequent
22923messages. If this delivery fails, the address fails immediately. The
22924post-cutoff retry time is not used.
22925
22926If the delivery is remote, there are two possibilities, controlled by the
0a4e3112 22927.oindex "&%delay_after_cutoff%&"
9b371988 22928&%delay_after_cutoff%& option of the &(smtp)& transport. The option is true by
168e428f
PH
22929default. Until the post-cutoff retry time for one of the IP addresses is
22930reached, the failing email address is bounced immediately, without a delivery
22931attempt taking place. After that time, one new delivery attempt is made to
22932those IP addresses that are past their retry times, and if that still fails,
22933the address is bounced and new retry times are computed.
22934
22935In other words, when all the hosts for a given email address have been failing
22936for a long time, Exim bounces rather then defers until one of the hosts' retry
22937times is reached. Then it tries once, and bounces if that attempt fails. This
22938behaviour ensures that few resources are wasted in repeatedly trying to deliver
22939to a broken destination, but if the host does recover, Exim will eventually
22940notice.
22941
9b371988 22942If &%delay_after_cutoff%& is set false, Exim behaves differently. If all IP
168e428f
PH
22943addresses are past their final cutoff time, Exim tries to deliver to those IP
22944addresses that have not been tried since the message arrived. If there are
22945no suitable IP addresses, or if they all fail, the address is bounced. In other
22946words, it does not delay when a new message arrives, but tries the expired
22947addresses immediately, unless they have been tried since the message arrived.
22948If there is a continuous stream of messages for the failing domains, setting
9b371988
PH
22949&%delay_after_cutoff%& false means that there will be many more attempts to
22950deliver to permanently failing IP addresses than when &%delay_after_cutoff%& is
168e428f
PH
22951true.
22952
f89d2485 22953.section "Deliveries that work intermittently" "SECID167"
4f578862
PH
22954.cindex "retry" "intermittently working deliveries"
22955Some additional logic is needed to cope with cases where a host is
22956intermittently available, or when a message has some attribute that prevents
22957its delivery when others to the same address get through. In this situation,
22958because some messages are successfully delivered, the &"retry clock"& for the
c0712871
PH
22959host or address keeps getting reset by the successful deliveries, and so
22960failing messages remain on the queue for ever because the cutoff time is never
22961reached.
22962
22963Two exceptional actions are applied to prevent this happening. The first
22964applies to errors that are related to a message rather than a remote host.
22965Section &<<SECToutSMTPerr>>& has a discussion of the different kinds of error;
22966examples of message-related errors are 4&'xx'& responses to MAIL or DATA
22967commands, and quota failures. For this type of error, if a message's arrival
22968time is earlier than the &"first failed"& time for the error, the earlier time
22969is used when scanning the retry rules to decide when to try next and when to
22970time out the address.
22971
22972The exceptional second action applies in all cases. If a message has been on
22973the queue for longer than the cutoff time of any applicable retry rule for a
22974given address, a delivery is attempted for that address, even if it is not yet
22975time, and if this delivery fails, the address is timed out. A new retry time is
22976not computed in this case, so that other messages for the same address are
22977considered immediately.
4f578862
PH
22978.ecindex IIDretconf1
22979.ecindex IIDregconf2
168e428f 22980
168e428f
PH
22981
22982
22983
22984
22985
9b371988
PH
22986. ////////////////////////////////////////////////////////////////////////////
22987. ////////////////////////////////////////////////////////////////////////////
168e428f 22988
9b371988 22989.chapter "SMTP authentication" "CHAPSMTPAUTH"
4f578862
PH
22990.scindex IIDauthconf1 "SMTP" "authentication configuration"
22991.scindex IIDauthconf2 "authentication"
9b371988
PH
22992The &"authenticators"& section of Exim's run time configuration is concerned
22993with SMTP authentication. This facility is an extension to the SMTP protocol,
168e428f 22994described in RFC 2554, which allows a client SMTP host to authenticate itself
9b371988
PH
22995to a server. This is a common way for a server to recognize clients that are
22996permitted to use it as a relay. SMTP authentication is not of relevance to the
22997transfer of mail between servers that have no managerial connection with each
22998other.
168e428f 22999
9b371988 23000.cindex "AUTH" "description of"
168e428f
PH
23001Very briefly, the way SMTP authentication works is as follows:
23002
9b371988
PH
23003.ilist
23004The server advertises a number of authentication &'mechanisms'& in response to
168e428f 23005the client's EHLO command.
9b371988
PH
23006.next
23007The client issues an AUTH command, naming a specific mechanism. The command
168e428f 23008may, optionally, contain some authentication data.
9b371988
PH
23009.next
23010The server may issue one or more &'challenges'&, to which the client must send
168e428f
PH
23011appropriate responses. In simple authentication mechanisms, the challenges are
23012just prompts for user names and passwords. The server does not have to issue
9b371988 23013any challenges &-- in some mechanisms the relevant data may all be transmitted
168e428f 23014with the AUTH command.
9b371988
PH
23015.next
23016The server either accepts or denies authentication.
23017.next
23018If authentication succeeds, the client may optionally make use of the AUTH
168e428f
PH
23019option on the MAIL command to pass an authenticated sender in subsequent
23020mail transactions. Authentication lasts for the remainder of the SMTP
23021connection.
9b371988
PH
23022.next
23023If authentication fails, the client may give up, or it may try a different
168e428f
PH
23024authentication mechanism, or it may try transferring mail over the
23025unauthenticated connection.
9b371988 23026.endlist
168e428f
PH
23027
23028If you are setting up a client, and want to know which authentication
23029mechanisms the server supports, you can use Telnet to connect to port 25 (the
23030SMTP port) on the server, and issue an EHLO command. The response to this
23031includes the list of supported mechanisms. For example:
9b371988
PH
23032.display
23033&`$ `&&*&`telnet server.example 25`&*&
23034&`Trying 192.168.34.25...`&
23035&`Connected to server.example.`&
595028e4 23036&`Escape character is &#x0027;^]&#x0027;.`&
9b371988
PH
23037&`220 server.example ESMTP Exim 4.20 ...`&
23038&*&`ehlo client.example`&*&
23039&`250-server.example Hello client.example [10.8.4.5]`&
23040&`250-SIZE 52428800`&
23041&`250-PIPELINING`&
23042&`250-AUTH PLAIN`&
23043&`250 HELP`&
23044.endd
168e428f
PH
23045The second-last line of this example output shows that the server supports
23046authentication using the PLAIN mechanism. In Exim, the different authentication
9b371988 23047mechanisms are configured by specifying &'authenticator'& drivers. Like the
168e428f
PH
23048routers and transports, which authenticators are included in the binary is
23049controlled by build-time definitions. The following are currently available,
23050included by setting
9b371988
PH
23051.code
23052AUTH_CRAM_MD5=yes
23053AUTH_CYRUS_SASL=yes
23054AUTH_PLAINTEXT=yes
23055AUTH_SPA=yes
23056.endd
23057in &_Local/Makefile_&, respectively. The first of these supports the CRAM-MD5
068aaea8
PH
23058authentication mechanism (RFC 2195), and the second provides an interface to
23059the Cyrus SASL authentication library. The third can be configured to support
23060the PLAIN authentication mechanism (RFC 2595) or the LOGIN mechanism, which is
23061not formally documented, but used by several MUAs. The fourth authenticator
9b371988 23062supports Microsoft's &'Secure Password Authentication'& mechanism.
168e428f
PH
23063
23064The authenticators are configured using the same syntax as other drivers (see
9b371988
PH
23065section &<<SECTfordricon>>&). If no authenticators are required, no
23066authentication section need be present in the configuration file. Each
23067authenticator can in principle have both server and client functions. When Exim
23068is receiving SMTP mail, it is acting as a server; when it is sending out
23069messages over SMTP, it is acting as a client. Authenticator configuration
23070options are provided for use in both these circumstances.
168e428f
PH
23071
23072To make it clear which options apply to which situation, the prefixes
9b371988
PH
23073&%server_%& and &%client_%& are used on option names that are specific to
23074either the server or the client function, respectively. Server and client
23075functions are disabled if none of their options are set. If an authenticator is
23076to be used for both server and client functions, a single definition, using
23077both sets of options, is required. For example:
23078.code
23079cram:
23080 driver = cram_md5
23081 public_name = CRAM-MD5
4f578862 23082 server_secret = ${if eq{$auth1}{ph10}{secret1}fail}
9b371988
PH
23083 client_name = ph10
23084 client_secret = secret2
23085.endd
23086The &%server_%& option is used when Exim is acting as a server, and the
23087&%client_%& options when it is acting as a client.
168e428f
PH
23088
23089Descriptions of the individual authenticators are given in subsequent chapters.
23090The remainder of this chapter covers the generic options for the
23091authenticators, followed by general discussion of the way authentication works
23092in Exim.
23093
23094
23095
f89d2485 23096.section "Generic options for authenticators" "SECID168"
9b371988
PH
23097.cindex "authentication" "generic options"
23098.cindex "options" "generic; for authenticators"
168e428f 23099
595028e4
PH
23100.option client_condition authenticators string&!! unset
23101When Exim is authenticating as a client, it skips any authenticator whose
23102&%client_condition%& expansion yields &"0"&, &"no"&, or &"false"&. This can be
23103used, for example, to skip plain text authenticators when the connection is not
23104encrypted by a setting such as:
23105.code
23106client_condition = ${if !eq{$tls_cipher}{}}
23107.endd
23108(Older documentation incorrectly states that &$tls_cipher$& contains the cipher
23109used for incoming messages. In fact, during SMTP delivery, it contains the
23110cipher used for the delivery.)
595028e4 23111
168e428f 23112
9b371988 23113.option driver authenticators string unset
168e428f
PH
23114This option must always be set. It specifies which of the available
23115authenticators is to be used.
23116
23117
9b371988 23118.option public_name authenticators string unset
168e428f
PH
23119This option specifies the name of the authentication mechanism that the driver
23120implements, and by which it is known to the outside world. These names should
23121contain only upper case letters, digits, underscores, and hyphens (RFC 2222),
9b371988 23122but Exim in fact matches them caselessly. If &%public_name%& is not set, it
168e428f
PH
23123defaults to the driver's instance name.
23124
23125
9b371988 23126.option server_advertise_condition authenticators string&!! unset
168e428f 23127When a server is about to advertise an authentication mechanism, the condition
9b371988 23128is expanded. If it yields the empty string, &"0"&, &"no"&, or &"false"&, the
168e428f
PH
23129mechanism is not advertised.
23130If the expansion fails, the mechanism is not advertised. If the failure was not
23131forced, and was not caused by a lookup defer, the incident is logged.
9b371988 23132See section &<<SECTauthexiser>>& below for further discussion.
168e428f 23133
168e428f 23134
3cb1b51e
PH
23135.option server_condition authenticators string&!! unset
23136This option must be set for a &%plaintext%& server authenticator, where it
23137is used directly to control authentication. See section &<<SECTplainserver>>&
23138for details.
23139
23140For the other authenticators, &%server_condition%& can be used as an additional
23141authentication or authorization mechanism that is applied after the other
23142authenticator conditions succeed. If it is set, it is expanded when the
23143authenticator would otherwise return a success code. If the expansion is forced
23144to fail, authentication fails. Any other expansion failure causes a temporary
23145error code to be returned. If the result of a successful expansion is an empty
23146string, &"0"&, &"no"&, or &"false"&, authentication fails. If the result of the
23147expansion is &"1"&, &"yes"&, or &"true"&, authentication succeeds. For any
23148other result, a temporary error code is returned, with the expanded string as
23149the error text.
3cb1b51e
PH
23150
23151
9b371988
PH
23152.option server_debug_print authenticators string&!! unset
23153If this option is set and authentication debugging is enabled (see the &%-d%&
168e428f
PH
23154command line option), the string is expanded and included in the debugging
23155output when the authenticator is run as a server. This can help with checking
23156out the values of variables.
23157If expansion of the string fails, the error message is written to the debugging
23158output, and Exim carries on processing.
23159
23160
9b371988 23161.option server_set_id authenticators string&!! unset
f89d2485 23162.vindex "&$authenticated_id$&"
168e428f
PH
23163When an Exim server successfully authenticates a client, this string is
23164expanded using data from the authentication, and preserved for any incoming
9b371988 23165messages in the variable &$authenticated_id$&. It is also included in the log
168e428f
PH
23166lines for incoming messages. For example, a user/password authenticator
23167configuration might preserve the user name that was used to authenticate, and
23168refer to it subsequently during delivery of the message.
23169If expansion fails, the option is ignored.
23170
23171
9b371988 23172.option server_mail_auth_condition authenticators string&!! unset
168e428f
PH
23173This option allows a server to discard authenticated sender addresses supplied
23174as part of MAIL commands in SMTP connections that are authenticated by the
9b371988 23175driver on which &%server_mail_auth_condition%& is set. The option is not used
168e428f
PH
23176as part of the authentication process; instead its (unexpanded) value is
23177remembered for later use.
23178How it is used is described in the following section.
23179
23180
23181
23182
23183
9b371988
PH
23184.section "The AUTH parameter on MAIL commands" "SECTauthparamail"
23185.cindex "authentication" "sender; authenticated"
23186.cindex "AUTH" "on MAIL command"
168e428f
PH
23187When a client supplied an AUTH= item on a MAIL command, Exim applies
23188the following checks before accepting it as the authenticated sender of the
23189message:
23190
9b371988
PH
23191.ilist
23192If the connection is not using extended SMTP (that is, HELO was used rather
168e428f 23193than EHLO), the use of AUTH= is a syntax error.
9b371988
PH
23194.next
23195If the value of the AUTH= parameter is &"<>"&, it is ignored.
23196.next
f89d2485 23197.vindex "&$authenticated_sender$&"
9b371988
PH
23198If &%acl_smtp_mailauth%& is defined, the ACL it specifies is run. While it is
23199running, the value of &$authenticated_sender$& is set to the value obtained
23200from the AUTH= parameter. If the ACL does not yield &"accept"&, the value of
23201&$authenticated_sender$& is deleted. The &%acl_smtp_mailauth%& ACL may not
23202return &"drop"& or &"discard"&. If it defers, a temporary error code (451) is
23203given for the MAIL command.
23204.next
23205If &%acl_smtp_mailauth%& is not defined, the value of the AUTH= parameter
23206is accepted and placed in &$authenticated_sender$& only if the client has
168e428f 23207authenticated.
9b371988
PH
23208.next
23209If the AUTH= value was accepted by either of the two previous rules, and
168e428f 23210the client has authenticated, and the authenticator has a setting for the
9b371988 23211&%server_mail_auth_condition%&, the condition is checked at this point. The
168e428f 23212valued that was saved from the authenticator is expanded. If the expansion
9b371988
PH
23213fails, or yields an empty string, &"0"&, &"no"&, or &"false"&, the value of
23214&$authenticated_sender$& is deleted. If the expansion yields any other value,
23215the value of &$authenticated_sender$& is retained and passed on with the
168e428f 23216message.
9b371988 23217.endlist
168e428f
PH
23218
23219
9b371988 23220When &$authenticated_sender$& is set for a message, it is passed on to other
168e428f 23221hosts to which Exim authenticates as a client. Do not confuse this value with
9b371988 23222&$authenticated_id$&, which is a string obtained from the authentication
168e428f
PH
23223process, and which is not usually a complete email address.
23224
f89d2485 23225.vindex "&$sender_address$&"
168e428f
PH
23226Whenever an AUTH= value is ignored, the incident is logged. The ACL for
23227MAIL, if defined, is run after AUTH= is accepted or ignored. It can
9b371988
PH
23228therefore make use of &$authenticated_sender$&. The converse is not true: the
23229value of &$sender_address$& is not yet set up when the &%acl_smtp_mailauth%&
168e428f
PH
23230ACL is run.
23231
23232
23233
9b371988
PH
23234.section "Authentication on an Exim server" "SECTauthexiser"
23235.cindex "authentication" "on an Exim server"
168e428f
PH
23236When Exim receives an EHLO command, it advertises the public names of those
23237authenticators that are configured as servers, subject to the following
23238conditions:
23239
9b371988
PH
23240.ilist
23241The client host must match &%auth_advertise_hosts%& (default *).
23242.next
23243It the &%server_advertise_condition%& option is set, its expansion must not
23244yield the empty string, &"0"&, &"no"&, or &"false"&.
23245.endlist
168e428f
PH
23246
23247The order in which the authenticators are defined controls the order in which
23248the mechanisms are advertised.
23249
23250Some mail clients (for example, some versions of Netscape) require the user to
23251provide a name and password for authentication whenever AUTH is advertised,
23252even though authentication may not in fact be needed (for example, Exim may be
23253set up to allow unconditional relaying from the client by an IP address check).
23254You can make such clients more friendly by not advertising AUTH to them.
23255For example, if clients on the 10.9.8.0/24 network are permitted (by the ACL
23256that runs for RCPT) to relay without authentication, you should set
9b371988
PH
23257.code
23258auth_advertise_hosts = ! 10.9.8.0/24
23259.endd
168e428f
PH
23260so that no authentication mechanisms are advertised to them.
23261
9b371988 23262The &%server_advertise_condition%& controls the advertisement of individual
168e428f 23263authentication mechanisms. For example, it can be used to restrict the
f89d2485 23264advertisement of a particular mechanism to encrypted connections, by a setting
168e428f 23265such as:
9b371988
PH
23266.code
23267server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
23268.endd
f89d2485 23269.vindex "&$tls_cipher$&"
9b371988
PH
23270If the session is encrypted, &$tls_cipher$& is not empty, and so the expansion
23271yields &"yes"&, which allows the advertisement to happen.
168e428f
PH
23272
23273When an Exim server receives an AUTH command from a client, it rejects it
23274immediately if AUTH was not advertised in response to an earlier EHLO
23275command. This is the case if
23276
9b371988
PH
23277.ilist
23278The client host does not match &%auth_advertise_hosts%&; or
23279.next
23280No authenticators are configured with server options; or
23281.next
23282Expansion of &%server_advertise_condition%& blocked the advertising of all the
168e428f 23283server authenticators.
9b371988 23284.endlist
168e428f
PH
23285
23286
9b371988
PH
23287Otherwise, Exim runs the ACL specified by &%acl_smtp_auth%& in order
23288to decide whether to accept the command. If &%acl_smtp_auth%& is not set,
168e428f
PH
23289AUTH is accepted from any client host.
23290
23291If AUTH is not rejected by the ACL, Exim searches its configuration for a
23292server authentication mechanism that was advertised in response to EHLO and
23293that matches the one named in the AUTH command. If it finds one, it runs
23294the appropriate authentication protocol, and authentication either succeeds or
23295fails. If there is no matching advertised mechanism, the AUTH command is
23296rejected with a 504 error.
23297
f89d2485
PH
23298.vindex "&$received_protocol$&"
23299.vindex "&$sender_host_authenticated$&"
168e428f 23300When a message is received from an authenticated host, the value of
9b371988
PH
23301&$received_protocol$& is set to &"esmtpa"& or &"esmtpsa"& instead of &"esmtp"&
23302or &"esmtps"&, and &$sender_host_authenticated$& contains the name (not the
23303public name) of the authenticator driver that successfully authenticated the
23304client from which the message was received. This variable is empty if there was
23305no successful authentication.
168e428f
PH
23306
23307
23308
23309
f89d2485 23310.section "Testing server authentication" "SECID169"
9b371988
PH
23311.cindex "authentication" "testing a server"
23312.cindex "AUTH" "testing a server"
23313.cindex "base64 encoding" "creating authentication test data"
23314Exim's &%-bh%& option can be useful for testing server authentication
168e428f
PH
23315configurations. The data for the AUTH command has to be sent using base64
23316encoding. A quick way to produce such data for testing is the following Perl
23317script:
9b371988
PH
23318.code
23319use MIME::Base64;
23320printf ("%s", encode_base64(eval "\"$ARGV[0]\""));
23321.endd
23322.cindex "binary zero" "in authentication data"
168e428f
PH
23323This interprets its argument as a Perl string, and then encodes it. The
23324interpretation as a Perl string allows binary zeros, which are required for
23325some kinds of authentication, to be included in the data. For example, a
23326command line to run this script on such data might be
9b371988
PH
23327.code
23328encode '\0user\0password'
23329.endd
168e428f
PH
23330Note the use of single quotes to prevent the shell interpreting the
23331backslashes, so that they can be interpreted by Perl to specify characters
23332whose code value is zero.
23333
9b371988 23334&*Warning 1*&: If either of the user or password strings starts with an octal
168e428f
PH
23335digit, you must use three zeros instead of one after the leading backslash. If
23336you do not, the octal digit that starts your string will be incorrectly
23337interpreted as part of the code for the first character.
23338
9b371988 23339&*Warning 2*&: If there are characters in the strings that Perl interprets
168e428f
PH
23340specially, you must use a Perl escape to prevent them being misinterpreted. For
23341example, a command such as
9b371988
PH
23342.code
23343encode '\0user@domain.com\0pas$$word'
23344.endd
23345gives an incorrect answer because of the unescaped &"@"& and &"$"& characters.
168e428f 23346
9b371988 23347If you have the &%mimencode%& command installed, another way to do produce
168e428f 23348base64-encoded strings is to run the command
9b371988
PH
23349.code
23350echo -e -n `\0user\0password' | mimencode
23351.endd
23352The &%-e%& option of &%echo%& enables the interpretation of backslash escapes
23353in the argument, and the &%-n%& option specifies no newline at the end of its
23354output. However, not all versions of &%echo%& recognize these options, so you
168e428f
PH
23355should check your version before relying on this suggestion.
23356
23357
23358
f89d2485 23359.section "Authentication by an Exim client" "SECID170"
9b371988
PH
23360.cindex "authentication" "on an Exim client"
23361The &(smtp)& transport has two options called &%hosts_require_auth%& and
23362&%hosts_try_auth%&. When the &(smtp)& transport connects to a server that
168e428f
PH
23363announces support for authentication, and the host matches an entry in either
23364of these options, Exim (as a client) tries to authenticate as follows:
23365
9b371988 23366.ilist
f89d2485
PH
23367For each authenticator that is configured as a client, in the order in which
23368they are defined in the configuration, it searches the authentication
23369mechanisms announced by the server for one whose name matches the public name
23370of the authenticator.
f89d2485
PH
23371.next
23372.vindex "&$host$&"
23373.vindex "&$host_address$&"
23374When it finds one that matches, it runs the authenticator's client code. The
23375variables &$host$& and &$host_address$& are available for any string expansions
23376that the client might do. They are set to the server's name and IP address. If
23377any expansion is forced to fail, the authentication attempt is abandoned, and
23378Exim moves on to the next authenticator. Otherwise an expansion failure causes
23379delivery to be deferred.
9b371988
PH
23380.next
23381If the result of the authentication attempt is a temporary error or a timeout,
168e428f
PH
23382Exim abandons trying to send the message to the host for the moment. It will
23383try again later. If there are any backup hosts available, they are tried in the
23384usual way.
9b371988
PH
23385.next
23386If the response to authentication is a permanent error (5&'xx'& code), Exim
23387carries on searching the list of authenticators and tries another one if
23388possible. If all authentication attempts give permanent errors, or if there are
23389no attempts because no mechanisms match (or option expansions force failure),
23390what happens depends on whether the host matches &%hosts_require_auth%& or
23391&%hosts_try_auth%&. In the first case, a temporary error is generated, and
168e428f
PH
23392delivery is deferred. The error can be detected in the retry rules, and thereby
23393turned into a permanent error if you wish. In the second case, Exim tries to
23394deliver the message unauthenticated.
9b371988 23395.endlist
168e428f 23396
9b371988 23397.cindex "AUTH" "on MAIL command"
168e428f 23398When Exim has authenticated itself to a remote server, it adds the AUTH
9b371988
PH
23399parameter to the MAIL commands it sends, if it has an authenticated sender for
23400the message. If the message came from a remote host, the authenticated sender
23401is the one that was receiving on an incoming MAIL command, provided that the
23402incoming connection was authenticated and the &%server_mail_auth%& condition
23403allowed the authenticated sender to be retained. If a local process calls Exim
23404to send a message, the sender address that is built from the login name and
23405&%qualify_domain%& is treated as authenticated. However, if the
23406&%authenticated_sender%& option is set on the &(smtp)& transport, it overrides
168e428f 23407the authenticated sender that was received with the message.
4f578862
PH
23408.ecindex IIDauthconf1
23409.ecindex IIDauthconf2
168e428f
PH
23410
23411
23412
23413
23414
23415
9b371988
PH
23416. ////////////////////////////////////////////////////////////////////////////
23417. ////////////////////////////////////////////////////////////////////////////
168e428f 23418
9b371988 23419.chapter "The plaintext authenticator" "CHAPplaintext"
4f578862
PH
23420.scindex IIDplaiauth1 "&(plaintext)& authenticator"
23421.scindex IIDplaiauth2 "authenticators" "&(plaintext)&"
9b371988 23422The &(plaintext)& authenticator can be configured to support the PLAIN and
168e428f
PH
23423LOGIN authentication mechanisms, both of which transfer authentication data as
23424plain (unencrypted) text (though base64 encoded). The use of plain text is a
4f578862
PH
23425security risk; you are strongly advised to insist on the use of SMTP encryption
23426(see chapter &<<CHAPTLS>>&) if you use the PLAIN or LOGIN mechanisms. If you do
23427use unencrypted plain text, you should not use the same passwords for SMTP
23428connections as you do for login accounts.
168e428f 23429
f89d2485 23430.section "Plaintext options" "SECID171"
9b371988 23431.cindex "options" "&(plaintext)& authenticator (server)"
3cb1b51e
PH
23432When configured as a server, &(plaintext)& uses the following options:
23433
23434.option server_condition authenticators string&!! unset
23435This is actually a global authentication option, but it must be set in order to
23436configure the &(plaintext)& driver as a server. Its use is described below.
168e428f 23437
9b371988 23438.option server_prompts plaintext string&!! unset
168e428f
PH
23439The contents of this option, after expansion, must be a colon-separated list of
23440prompt strings. If expansion fails, a temporary authentication rejection is
23441given.
23442
3cb1b51e 23443.section "Using plaintext in a server" "SECTplainserver"
9b371988
PH
23444.cindex "AUTH" "in &(plaintext)& authenticator"
23445.cindex "binary zero" "in &(plaintext)& authenticator"
23446.cindex "numerical variables (&$1$& &$2$& etc)" &&&
23447 "in &(plaintext)& authenticator"
f89d2485 23448.vindex "&$auth1$&, &$auth2$&, etc"
9b371988 23449.cindex "base64 encoding" "in &(plaintext)& authenticator"
3cb1b51e
PH
23450
23451When running as a server, &(plaintext)& performs the authentication test by
23452expanding a string. The data sent by the client with the AUTH command, or in
23453response to subsequent prompts, is base64 encoded, and so may contain any byte
23454values when decoded. If any data is supplied with the command, it is treated as
23455a list of strings, separated by NULs (binary zeros), the first three of which
23456are placed in the expansion variables &$auth1$&, &$auth2$&, and &$auth3$&
23457(neither LOGIN nor PLAIN uses more than three strings).
4f578862
PH
23458
23459For compatibility with previous releases of Exim, the values are also placed in
23460the expansion variables &$1$&, &$2$&, and &$3$&. However, the use of these
23461variables for this purpose is now deprecated, as it can lead to confusion in
23462string expansions that also use them for other things.
4f578862
PH
23463
23464If there are more strings in &%server_prompts%& than the number of strings
23465supplied with the AUTH command, the remaining prompts are used to obtain more
23466data. Each response from the client may be a list of NUL-separated strings.
168e428f 23467
f89d2485 23468.vindex "&$authenticated_id$&"
9b371988
PH
23469Once a sufficient number of data strings have been received,
23470&%server_condition%& is expanded. If the expansion is forced to fail,
23471authentication fails. Any other expansion failure causes a temporary error code
23472to be returned. If the result of a successful expansion is an empty string,
23473&"0"&, &"no"&, or &"false"&, authentication fails. If the result of the
23474expansion is &"1"&, &"yes"&, or &"true"&, authentication succeeds and the
23475generic &%server_set_id%& option is expanded and saved in &$authenticated_id$&.
23476For any other result, a temporary error code is returned, with the expanded
23477string as the error text.
23478
23479&*Warning*&: If you use a lookup in the expansion to find the user's
168e428f
PH
23480password, be sure to make the authentication fail if the user is unknown.
23481There are good and bad examples at the end of the next section.
23482
23483
23484
f89d2485 23485.section "The PLAIN authentication mechanism" "SECID172"
9b371988
PH
23486.cindex "PLAIN authentication mechanism"
23487.cindex "authentication" "PLAIN mechanism"
23488.cindex "binary zero" "in &(plaintext)& authenticator"
168e428f
PH
23489The PLAIN authentication mechanism (RFC 2595) specifies that three strings be
23490sent as one item of data (that is, one combined string containing two NUL
23491separators). The data is sent either as part of the AUTH command, or
23492subsequently in response to an empty prompt from the server.
23493
23494The second and third strings are a user name and a corresponding password.
23495Using a single fixed user name and password as an example, this could be
23496configured as follows:
9b371988 23497.code
168e428f
PH
23498fixed_plain:
23499 driver = plaintext
23500 public_name = PLAIN
23501 server_prompts = :
23502 server_condition = \
db9452a9 23503 ${if and {{eq{$auth2}{username}}{eq{$auth3}{mysecret}}}}
4f578862 23504 server_set_id = $auth2
9b371988 23505.endd
db9452a9
PH
23506Note that the default result strings from &%if%& (&"true"& or an empty string)
23507are exactly what we want here, so they need not be specified. Obviously, if the
23508password contains expansion-significant characters such as dollar, backslash,
23509or closing brace, they have to be escaped.
db9452a9 23510
9b371988 23511The &%server_prompts%& setting specifies a single, empty prompt (empty items at
168e428f
PH
23512the end of a string list are ignored). If all the data comes as part of the
23513AUTH command, as is commonly the case, the prompt is not used. This
23514authenticator is advertised in the response to EHLO as
9b371988
PH
23515.code
23516250-AUTH PLAIN
23517.endd
168e428f 23518and a client host can authenticate itself by sending the command
9b371988
PH
23519.code
23520AUTH PLAIN AHVzZXJuYW1lAG15c2VjcmV0
23521.endd
168e428f
PH
23522As this contains three strings (more than the number of prompts), no further
23523data is required from the client. Alternatively, the client may just send
9b371988
PH
23524.code
23525AUTH PLAIN
23526.endd
168e428f
PH
23527to initiate authentication, in which case the server replies with an empty
23528prompt. The client must respond with the combined data string.
23529
23530The data string is base64 encoded, as required by the RFC. This example,
9b371988
PH
23531when decoded, is <&'NUL'&>&`username`&<&'NUL'&>&`mysecret`&, where <&'NUL'&>
23532represents a zero byte. This is split up into three strings, the first of which
23533is empty. The &%server_condition%& option in the authenticator checks that the
23534second two are &`username`& and &`mysecret`& respectively.
168e428f
PH
23535
23536Having just one fixed user name and password, as in this example, is not very
23537realistic, though for a small organization with only a handful of
23538authenticating clients it could make sense.
23539
23540A more sophisticated instance of this authenticator could use the user name in
4f578862 23541&$auth2$& to look up a password in a file or database, and maybe do an encrypted
9b371988
PH
23542comparison (see &%crypteq%& in chapter &<<CHAPexpand>>&). Here is a example of
23543this approach, where the passwords are looked up in a DBM file. &*Warning*&:
23544This is an incorrect example:
23545.code
168e428f 23546server_condition = \
db9452a9 23547 ${if eq{$auth3}{${lookup{$auth2}dbm{/etc/authpwd}}}}
9b371988 23548.endd
4f578862
PH
23549The expansion uses the user name (&$auth2$&) as the key to look up a password,
23550which it then compares to the supplied password (&$auth3$&). Why is this example
168e428f
PH
23551incorrect? It works fine for existing users, but consider what happens if a
23552non-existent user name is given. The lookup fails, but as no success/failure
23553strings are given for the lookup, it yields an empty string. Thus, to defeat
23554the authentication, all a client has to do is to supply a non-existent user
23555name and an empty password. The correct way of writing this test is:
9b371988 23556.code
4f578862 23557server_condition = ${lookup{$auth2}dbm{/etc/authpwd}\
db9452a9 23558 {${if eq{$value}{$auth3}}} {false}}
9b371988 23559.endd
168e428f 23560In this case, if the lookup succeeds, the result is checked; if the lookup
db9452a9
PH
23561fails, &"false"& is returned and authentication fails. If &%crypteq%& is being
23562used instead of &%eq%&, the first example is in fact safe, because &%crypteq%&
23563always fails if its second argument is empty. However, the second way of
23564writing the test makes the logic clearer.
168e428f
PH
23565
23566
f89d2485 23567.section "The LOGIN authentication mechanism" "SECID173"
9b371988
PH
23568.cindex "LOGIN authentication mechanism"
23569.cindex "authentication" "LOGIN mechanism"
168e428f
PH
23570The LOGIN authentication mechanism is not documented in any RFC, but is in use
23571in a number of programs. No data is sent with the AUTH command. Instead, a
23572user name and password are supplied separately, in response to prompts. The
23573plaintext authenticator can be configured to support this as in this example:
9b371988 23574.code
168e428f
PH
23575fixed_login:
23576 driver = plaintext
23577 public_name = LOGIN
23578 server_prompts = User Name : Password
23579 server_condition = \
db9452a9 23580 ${if and {{eq{$auth1}{username}}{eq{$auth2}{mysecret}}}}
4f578862 23581 server_set_id = $auth1
9b371988 23582.endd
168e428f
PH
23583Because of the way plaintext operates, this authenticator accepts data supplied
23584with the AUTH command (in contravention of the specification of LOGIN), but
23585if the client does not supply it (as is the case for LOGIN clients), the prompt
23586strings are used to obtain two data items.
23587
23588Some clients are very particular about the precise text of the prompts. For
9b371988
PH
23589example, Outlook Express is reported to recognize only &"Username:"& and
23590&"Password:"&. Here is an example of a LOGIN authenticator that uses those
23591strings. It uses the &%ldapauth%& expansion condition to check the user
168e428f 23592name and password by binding to an LDAP server:
9b371988 23593.code
168e428f
PH
23594login:
23595 driver = plaintext
23596 public_name = LOGIN
23597 server_prompts = Username:: : Password::
450b99e9
TF
23598 server_condition = ${if and{{
23599 !eq{}{$auth1} }{ \
23600 ldapauth{user="cn=${quote_ldap_dn:$auth1},ou=people,o=example.org" \
23601 pass=${quote:$auth2} \
23602 ldap://ldap.example.org/} }} }
4f578862 23603 server_set_id = uid=$auth1,ou=people,o=example.org
9b371988 23604.endd
71e1673f 23605.new
450b99e9
TF
23606We have to check that the username is not empty before using it, because LDAP
23607does not permit empty DN components. We must also use the &%quote_ldap_dn%&
23608operator to correctly quote the DN for authentication. However, the basic
23609&%quote%& operator, rather than any of the LDAP quoting operators, is the
23610correct one to use for the password, because quoting is needed only to make
23611the password conform to the Exim syntax. At the LDAP level, the password is an
23612uninterpreted string.
71e1673f 23613.wen
168e428f
PH
23614
23615
f89d2485 23616.section "Support for different kinds of authentication" "SECID174"
168e428f
PH
23617A number of string expansion features are provided for the purpose of
23618interfacing to different ways of user authentication. These include checking
9b371988 23619traditionally encrypted passwords from &_/etc/passwd_& (or equivalent), PAM,
4f578862 23620Radius, &%ldapauth%&, &'pwcheck'&, and &'saslauthd'&. For details see section
9b371988 23621&<<SECTexpcond>>&.
168e428f
PH
23622
23623
23624
23625
f89d2485 23626.section "Using plaintext in a client" "SECID175"
9b371988 23627.cindex "options" "&(plaintext)& authenticator (client)"
4f578862 23628The &(plaintext)& authenticator has two client options:
168e428f 23629
4f578862
PH
23630.option client_ignore_invalid_base64 plaintext boolean false
23631If the client receives a server prompt that is not a valid base64 string,
23632authentication is abandoned by default. However, if this option is set true,
23633the error in the challenge is ignored and the client sends the response as
23634usual.
168e428f 23635
9b371988 23636.option client_send plaintext string&!! unset
168e428f
PH
23637The string is a colon-separated list of authentication data strings. Each
23638string is independently expanded before being sent to the server. The first
23639string is sent with the AUTH command; any more strings are sent in response
4f578862
PH
23640to prompts from the server. Before each string is expanded, the value of the
23641most recent prompt is placed in the next &$auth$&<&'n'&> variable, starting
23642with &$auth1$& for the first prompt. Up to three prompts are stored in this
23643way. Thus, the prompt that is received in response to sending the first string
23644(with the AUTH command) can be used in the expansion of the second string, and
23645so on. If an invalid base64 string is received when
23646&%client_ignore_invalid_base64%& is set, an empty string is put in the
23647&$auth$&<&'n'&> variable.
168e428f 23648
9b371988 23649&*Note*&: You cannot use expansion to create multiple strings, because
168e428f
PH
23650splitting takes priority and happens first.
23651
23652Because the PLAIN authentication mechanism requires NUL (binary zero) bytes in
23653the data, further processing is applied to each string before it is sent. If
23654there are any single circumflex characters in the string, they are converted to
23655NULs. Should an actual circumflex be required as data, it must be doubled in
23656the string.
23657
23658This is an example of a client configuration that implements the PLAIN
23659authentication mechanism with a fixed user name and password:
9b371988
PH
23660.code
23661fixed_plain:
23662 driver = plaintext
23663 public_name = PLAIN
23664 client_send = ^username^mysecret
23665.endd
168e428f
PH
23666The lack of colons means that the entire text is sent with the AUTH
23667command, with the circumflex characters converted to NULs. A similar example
23668that uses the LOGIN mechanism is:
9b371988
PH
23669.code
23670fixed_login:
23671 driver = plaintext
23672 public_name = LOGIN
23673 client_send = : username : mysecret
23674.endd
168e428f
PH
23675The initial colon means that the first string is empty, so no data is sent with
23676the AUTH command itself. The remaining strings are sent in response to
23677prompts.
4f578862
PH
23678.ecindex IIDplaiauth1
23679.ecindex IIDplaiauth2
168e428f
PH
23680
23681
23682
23683
9b371988
PH
23684. ////////////////////////////////////////////////////////////////////////////
23685. ////////////////////////////////////////////////////////////////////////////
168e428f 23686
f89d2485 23687.chapter "The cram_md5 authenticator" "CHID9"
4f578862
PH
23688.scindex IIDcramauth1 "&(cram_md5)& authenticator"
23689.scindex IIDcramauth2 "authenticators" "&(cram_md5)&"
9b371988
PH
23690.cindex "CRAM-MD5 authentication mechanism"
23691.cindex "authentication" "CRAM-MD5 mechanism"
168e428f
PH
23692The CRAM-MD5 authentication mechanism is described in RFC 2195. The server
23693sends a challenge string to the client, and the response consists of a user
23694name and the CRAM-MD5 digest of the challenge string combined with a secret
23695string (password) which is known to both server and client. Thus, the secret
23696is not sent over the network as plain text, which makes this authenticator more
9b371988 23697secure than &(plaintext)&. However, the downside is that the secret has to be
168e428f
PH
23698available in plain text at either end.
23699
23700
f89d2485 23701.section "Using cram_md5 as a server" "SECID176"
9b371988 23702.cindex "options" "&(cram_md5)& authenticator (server)"
168e428f
PH
23703This authenticator has one server option, which must be set to configure the
23704authenticator as a server:
23705
9b371988
PH
23706.option server_secret cram_md5 string&!! unset
23707.cindex "numerical variables (&$1$& &$2$& etc)" "in &(cram_md5)& authenticator"
168e428f 23708When the server receives the client's response, the user name is placed in
c0712871 23709the expansion variable &$auth1$&, and &%server_secret%& is expanded to
4f578862
PH
23710obtain the password for that user. The server then computes the CRAM-MD5 digest
23711that the client should have sent, and checks that it received the correct
23712string. If the expansion of &%server_secret%& is forced to fail, authentication
23713fails. If the expansion fails for some other reason, a temporary error code is
23714returned to the client.
23715
4f578862
PH
23716For compatibility with previous releases of Exim, the user name is also placed
23717in &$1$&. However, the use of this variables for this purpose is now
23718deprecated, as it can lead to confusion in string expansions that also use
23719numeric variables for other things.
168e428f
PH
23720
23721For example, the following authenticator checks that the user name given by the
9b371988
PH
23722client is &"ph10"&, and if so, uses &"secret"& as the password. For any other
23723user name, authentication fails.
23724.code
23725fixed_cram:
23726 driver = cram_md5
23727 public_name = CRAM-MD5
4f578862
PH
23728 server_secret = ${if eq{$auth1}{ph10}{secret}fail}
23729 server_set_id = $auth1
9b371988 23730.endd
f89d2485 23731.vindex "&$authenticated_id$&"
9b371988 23732If authentication succeeds, the setting of &%server_set_id%& preserves the user
f89d2485 23733name in &$authenticated_id$&. A more typical configuration might look up the
068aaea8 23734secret string in a file, using the user name as the key. For example:
9b371988
PH
23735.code
23736lookup_cram:
23737 driver = cram_md5
23738 public_name = CRAM-MD5
f89d2485
PH
23739 server_secret = ${lookup{$auth1}lsearch{/etc/authpwd}\
23740 {$value}fail}
4f578862 23741 server_set_id = $auth1
9b371988 23742.endd
168e428f 23743Note that this expansion explicitly forces failure if the lookup fails
f89d2485 23744because &$auth1$& contains an unknown user name.
168e428f
PH
23745
23746
f89d2485 23747.section "Using cram_md5 as a client" "SECID177"
9b371988
PH
23748.cindex "options" "&(cram_md5)& authenticator (client)"
23749When used as a client, the &(cram_md5)& authenticator has two options:
168e428f
PH
23750
23751
23752
9b371988 23753.option client_name cram_md5 string&!! "the primary host name"
168e428f
PH
23754This string is expanded, and the result used as the user name data when
23755computing the response to the server's challenge.
23756
23757
9b371988 23758.option client_secret cram_md5 string&!! unset
168e428f
PH
23759This option must be set for the authenticator to work as a client. Its value is
23760expanded and the result used as the secret string when computing the response.
23761
23762
f89d2485
PH
23763.vindex "&$host$&"
23764.vindex "&$host_address$&"
168e428f 23765Different user names and secrets can be used for different servers by referring
9b371988
PH
23766to &$host$& or &$host_address$& in the options. Forced failure of either
23767expansion string is treated as an indication that this authenticator is not
23768prepared to handle this case. Exim moves on to the next configured client
23769authenticator. Any other expansion failure causes Exim to give up trying to
23770send the message to the current server.
168e428f 23771
9b371988 23772A simple example configuration of a &(cram_md5)& authenticator, using fixed
168e428f 23773strings, is:
9b371988
PH
23774.code
23775fixed_cram:
23776 driver = cram_md5
23777 public_name = CRAM-MD5
23778 client_name = ph10
23779 client_secret = secret
23780.endd
4f578862
PH
23781.ecindex IIDcramauth1
23782.ecindex IIDcramauth2
168e428f
PH
23783
23784
23785
9b371988
PH
23786. ////////////////////////////////////////////////////////////////////////////
23787. ////////////////////////////////////////////////////////////////////////////
168e428f 23788
f89d2485 23789.chapter "The cyrus_sasl authenticator" "CHID10"
4f578862
PH
23790.scindex IIDcyrauth1 "&(cyrus_sasl)& authenticator"
23791.scindex IIDcyrauth2 "authenticators" "&(cyrus_sasl)&"
9b371988 23792.cindex "Cyrus" "SASL library"
3cb1b51e 23793.cindex "Kerberos"
168e428f 23794The code for this authenticator was provided by Matthew Byng-Maddick of A L
9b371988 23795Digital Ltd (&url(http://www.aldigital.co.uk)).
168e428f 23796
9b371988
PH
23797The &(cyrus_sasl)& authenticator provides server support for the Cyrus SASL
23798library implementation of the RFC 2222 (&"Simple Authentication and Security
23799Layer"&). This library supports a number of authentication mechanisms,
23800including PLAIN and LOGIN, but also several others that Exim does not support
23801directly. In particular, there is support for Kerberos authentication.
168e428f 23802
9b371988 23803The &(cyrus_sasl)& authenticator provides a gatewaying mechanism directly to
168e428f 23804the Cyrus interface, so if your Cyrus library can do, for example, CRAM-MD5,
9b371988 23805then so can the &(cyrus_sasl)& authenticator. By default it uses the public
168e428f
PH
23806name of the driver to determine which mechanism to support.
23807
23808Where access to some kind of secret file is required, for example in GSSAPI
9b371988 23809or CRAM-MD5, it is worth noting that the authenticator runs as the Exim
168e428f
PH
23810user, and that the Cyrus SASL library has no way of escalating privileges
23811by default. You may also find you need to set environment variables,
23812depending on the driver you are using.
23813
3cb1b51e
PH
23814The application name provided by Exim is &"exim"&, so various SASL options may
23815be set in &_exim.conf_& in your SASL directory. If you are using GSSAPI for
23816Kerberos, note that because of limitations in the GSSAPI interface,
23817changing the server keytab might need to be communicated down to the Kerberos
23818layer independently. The mechanism for doing so is dependent upon the Kerberos
23819implementation. For example, for Heimdal, the environment variable KRB5_KTNAME
23820may be set to point to an alternative keytab file. Exim will pass this
23821variable through from its own inherited environment when started as root or the
23822Exim user. The keytab file needs to be readable by the Exim user.
3cb1b51e 23823
168e428f 23824
f89d2485 23825.section "Using cyrus_sasl as a server" "SECID178"
4f578862
PH
23826The &(cyrus_sasl)& authenticator has four private options. It puts the username
23827(on a successful authentication) into &$auth1$&. For compatibility with
23828previous releases of Exim, the username is also placed in &$1$&. However, the
23829use of this variable for this purpose is now deprecated, as it can lead to
23830confusion in string expansions that also use numeric variables for other
23831things.
4f578862 23832
168e428f 23833
f89d2485
PH
23834.option server_hostname cyrus_sasl string&!! "see below"
23835This option selects the hostname that is used when communicating with the
23836library. The default value is &`$primary_hostname`&. It is up to the underlying
23837SASL plug-in what it does with this data.
168e428f
PH
23838
23839
f89d2485
PH
23840.option server_mech cyrus_sasl string "see below"
23841This option selects the authentication mechanism this driver should use. The
23842default is the value of the generic &%public_name%& option. This option allows
23843you to use a different underlying mechanism from the advertised name. For
23844example:
9b371988
PH
23845.code
23846sasl:
23847 driver = cyrus_sasl
23848 public_name = X-ANYTHING
23849 server_mech = CRAM-MD5
4f578862 23850 server_set_id = $auth1
9b371988 23851.endd
168e428f 23852
9b371988 23853.option server_realm cyrus_sasl string unset
168e428f
PH
23854This specifies the SASL realm that the server claims to be in.
23855
23856
9b371988 23857.option server_service cyrus_sasl string &`smtp`&
168e428f
PH
23858This is the SASL service that the server claims to implement.
23859
23860
23861For straightforward cases, you do not need to set any of the authenticator's
23862private options. All you need to do is to specify an appropriate mechanism as
23863the public name. Thus, if you have a SASL library that supports CRAM-MD5 and
23864PLAIN, you could have two authenticators as follows:
9b371988
PH
23865.code
23866sasl_cram_md5:
23867 driver = cyrus_sasl
23868 public_name = CRAM-MD5
4f578862 23869 server_set_id = $auth1
168e428f 23870
9b371988
PH
23871sasl_plain:
23872 driver = cyrus_sasl
23873 public_name = PLAIN
e2f03231 23874 server_set_id = $auth2
9b371988 23875.endd
168e428f
PH
23876Cyrus SASL does implement the LOGIN authentication method, even though it is
23877not a standard method. It is disabled by default in the source distribution,
23878but it is present in many binary distributions.
4f578862
PH
23879.ecindex IIDcyrauth1
23880.ecindex IIDcyrauth2
168e428f
PH
23881
23882
23883
23884
3cb1b51e
PH
23885. ////////////////////////////////////////////////////////////////////////////
23886. ////////////////////////////////////////////////////////////////////////////
3cb1b51e
PH
23887.chapter "The dovecot authenticator" "CHAPdovecot"
23888.scindex IIDdcotauth1 "&(dovecot)& authenticator"
23889.scindex IIDdcotauth2 "authenticators" "&(dovecot)&"
23890This authenticator is an interface to the authentication facility of the
23891Dovecot POP/IMAP server, which can support a number of authentication methods.
23892If you are using Dovecot to authenticate POP/IMAP clients, it might be helpful
23893to use the same mechanisms for SMTP authentication. This is a server
23894authenticator only. There is only one option:
23895
23896.option server_socket dovecot string unset
23897
23898This option must specify the socket that is the interface to Dovecot
23899authentication. The &%public_name%& option must specify an authentication
23900mechanism that Dovecot is configured to support. You can have several
23901authenticators for different mechanisms. For example:
23902.code
23903dovecot_plain:
23904 driver = dovecot
23905 public_name = PLAIN
23906 server_socket = /var/run/dovecot/auth-client
e2f03231 23907 server_set_id = $auth2
3cb1b51e
PH
23908
23909dovecot_ntlm:
23910 driver = dovecot
23911 public_name = NTLM
23912 server_socket = /var/run/dovecot/auth-client
693ff309 23913 server_set_id = $auth1
3cb1b51e
PH
23914.endd
23915If the SMTP connection is encrypted, or if &$sender_host_address$& is equal to
23916&$received_ip_address$& (that is, the connection is local), the &"secured"&
23917option is passed in the Dovecot authentication command. If, for a TLS
23918connection, a client certificate has been verified, the &"valid-client-cert"&
595028e4
PH
23919option is passed. When authentication succeeds, the identity of the user
23920who authenticated is placed in &$auth1$&.
3cb1b51e
PH
23921.ecindex IIDdcotauth1
23922.ecindex IIDdcotauth2
3cb1b51e
PH
23923
23924
9b371988
PH
23925. ////////////////////////////////////////////////////////////////////////////
23926. ////////////////////////////////////////////////////////////////////////////
168e428f 23927
4f578862
PH
23928.chapter "The spa authenticator" "CHAPspa"
23929.scindex IIDspaauth1 "&(spa)& authenticator"
23930.scindex IIDspaauth2 "authenticators" "&(spa)&"
9b371988
PH
23931.cindex "authentication" "Microsoft Secure Password"
23932.cindex "authentication" "NTLM"
23933.cindex "Microsoft Secure Password Authentication"
23934.cindex "NTLM authentication"
23935The &(spa)& authenticator provides client support for Microsoft's &'Secure
23936Password Authentication'& mechanism,
168e428f
PH
23937which is also sometimes known as NTLM (NT LanMan). The code for client side of
23938this authenticator was contributed by Marc Prud'hommeaux, and much of it is
9b371988 23939taken from the Samba project (&url(http://www.samba.org)). The code for the
168e428f
PH
23940server side was subsequently contributed by Tom Kistner. The mechanism works as
23941follows:
23942
9b371988
PH
23943.ilist
23944After the AUTH command has been accepted, the client sends an SPA
168e428f 23945authentication request based on the user name and optional domain.
9b371988
PH
23946.next
23947The server sends back a challenge.
23948.next
23949The client builds a challenge response which makes use of the user's password
168e428f 23950and sends it to the server, which then accepts or rejects it.
9b371988 23951.endlist
168e428f
PH
23952
23953Encryption is used to protect the password in transit.
23954
23955
23956
f89d2485 23957.section "Using spa as a server" "SECID179"
9b371988
PH
23958.cindex "options" "&(spa)& authenticator (server)"
23959The &(spa)& authenticator has just one server option:
168e428f 23960
9b371988
PH
23961.option server_password spa string&!! unset
23962.cindex "numerical variables (&$1$& &$2$& etc)" "in &(spa)& authenticator"
168e428f 23963This option is expanded, and the result must be the cleartext password for the
4f578862
PH
23964authenticating user, whose name is at this point in &$auth1$&. For
23965compatibility with previous releases of Exim, the user name is also placed in
23966&$1$&. However, the use of this variable for this purpose is now deprecated, as
23967it can lead to confusion in string expansions that also use numeric variables
23968for other things. For example:
9b371988 23969.code
068aaea8
PH
23970spa:
23971 driver = spa
23972 public_name = NTLM
4f578862
PH
23973 server_password = \
23974 ${lookup{$auth1}lsearch{/etc/exim/spa_clearpass}{$value}fail}
9b371988 23975.endd
168e428f
PH
23976If the expansion is forced to fail, authentication fails. Any other expansion
23977failure causes a temporary error code to be returned.
23978
23979
23980
23981
23982
f89d2485 23983.section "Using spa as a client" "SECID180"
9b371988
PH
23984.cindex "options" "&(spa)& authenticator (client)"
23985The &(spa)& authenticator has the following client options:
168e428f
PH
23986
23987
168e428f 23988
9b371988 23989.option client_domain spa string&!! unset
168e428f
PH
23990This option specifies an optional domain for the authentication.
23991
23992
9b371988 23993.option client_password spa string&!! unset
168e428f
PH
23994This option specifies the user's password, and must be set.
23995
23996
9b371988
PH
23997.option client_username spa string&!! unset
23998This option specifies the user name, and must be set. Here is an example of a
23999configuration of this authenticator for use with the mail servers at
24000&'msn.com'&:
24001.code
24002msn:
24003 driver = spa
24004 public_name = MSN
24005 client_username = msn/msn_username
24006 client_password = msn_plaintext_password
24007 client_domain = DOMAIN_OR_UNSET
24008.endd
4f578862
PH
24009.ecindex IIDspaauth1
24010.ecindex IIDspaauth2
168e428f
PH
24011
24012
24013
24014
24015
9b371988
PH
24016. ////////////////////////////////////////////////////////////////////////////
24017. ////////////////////////////////////////////////////////////////////////////
168e428f 24018
9b371988
PH
24019.chapter "Encrypted SMTP connections using TLS/SSL" "CHAPTLS" &&&
24020 "Encrypted SMTP connections"
4f578862
PH
24021.scindex IIDencsmtp1 "encryption" "on SMTP connection"
24022.scindex IIDencsmtp2 "SMTP" "encryption"
9b371988
PH
24023.cindex "TLS" "on SMTP connection"
24024.cindex "OpenSSL"
24025.cindex "GnuTLS"
168e428f
PH
24026Support for TLS (Transport Layer Security), formerly known as SSL (Secure
24027Sockets Layer), is implemented by making use of the OpenSSL library or the
24028GnuTLS library (Exim requires GnuTLS release 1.0 or later). There is no
24029cryptographic code in the Exim distribution itself for implementing TLS. In
24030order to use this feature you must install OpenSSL or GnuTLS, and then build a
9b371988
PH
24031version of Exim that includes TLS support (see section &<<SECTinctlsssl>>&).
24032You also need to understand the basic concepts of encryption at a managerial
24033level, and in particular, the way that public keys, private keys, and
24034certificates are used.
168e428f 24035
068aaea8 24036RFC 3207 defines how SMTP connections can make use of encryption. Once a
168e428f
PH
24037connection is established, the client issues a STARTTLS command. If the
24038server accepts this, the client and the server negotiate an encryption
24039mechanism. If the negotiation succeeds, the data that subsequently passes
24040between them is encrypted.
24041
24042Exim's ACLs can detect whether the current SMTP session is encrypted or not,
24043and if so, what cipher suite is in use, whether the client supplied a
24044certificate, and whether or not that certificate was verified. This makes it
24045possible for an Exim server to deny or accept certain commands based on the
24046encryption state.
24047
9b371988 24048&*Warning*&: Certain types of firewall and certain anti-virus products can
168e428f
PH
24049disrupt TLS connections. You need to turn off SMTP scanning for these products
24050in order to get TLS to work.
24051
24052
24053
f89d2485
PH
24054.section "Support for the legacy &""ssmtp""& (aka &""smtps""&) protocol" &&&
24055 "SECID284"
9b371988
PH
24056.cindex "ssmtp protocol"
24057.cindex "smtps protocol"
24058.cindex "SMTP" "ssmtp protocol"
24059.cindex "SMTP" "smtps protocol"
168e428f
PH
24060Early implementations of encrypted SMTP used a different TCP port from normal
24061SMTP, and expected an encryption negotiation to start immediately, instead of
24062waiting for a STARTTLS command from the client using the standard SMTP
9b371988
PH
24063port. The protocol was called &"ssmtp"& or &"smtps"&, and port 465 was
24064allocated for this purpose.
168e428f 24065
f89d2485 24066This approach was abandoned when encrypted SMTP was standardized, but there are
168e428f 24067still some legacy clients that use it. Exim supports these clients by means of
9b371988 24068the &%tls_on_connect_ports%& global option. Its value must be a list of port
168e428f 24069numbers; the most common use is expected to be:
9b371988
PH
24070.code
24071tls_on_connect_ports = 465
24072.endd
168e428f 24073The port numbers specified by this option apply to all SMTP connections, both
9b371988
PH
24074via the daemon and via &'inetd'&. You still need to specify all the ports that
24075the daemon uses (by setting &%daemon_smtp_ports%& or &%local_interfaces%& or
24076the &%-oX%& command line option) because &%tls_on_connect_ports%& does not add
24077an extra port &-- rather, it specifies different behaviour on a port that is
168e428f
PH
24078defined elsewhere.
24079
9b371988
PH
24080There is also a &%-tls-on-connect%& command line option. This overrides
24081&%tls_on_connect_ports%&; it forces the legacy behaviour for all ports.
168e428f
PH
24082
24083
24084
24085
24086
24087
9b371988
PH
24088.section "OpenSSL vs GnuTLS" "SECTopenvsgnu"
24089.cindex "TLS" "OpenSSL &'vs'& GnuTLS"
168e428f
PH
24090The first TLS support in Exim was implemented using OpenSSL. Support for GnuTLS
24091followed later, when the first versions of GnuTLS were released. To build Exim
24092to use GnuTLS, you need to set
9b371988
PH
24093.code
24094USE_GNUTLS=yes
24095.endd
168e428f 24096in Local/Makefile, in addition to
9b371988
PH
24097.code
24098SUPPORT_TLS=yes
24099.endd
168e428f
PH
24100You must also set TLS_LIBS and TLS_INCLUDE appropriately, so that the
24101include files and libraries for GnuTLS can be found.
24102
24103There are some differences in usage when using GnuTLS instead of OpenSSL:
24104
9b371988
PH
24105.ilist
24106The &%tls_verify_certificates%& option must contain the name of a file, not the
168e428f 24107name of a directory (for OpenSSL it can be either).
9b371988
PH
24108.next
24109The &%tls_dhparam%& option is ignored, because early versions of GnuTLS had no
168e428f
PH
24110facility for varying its Diffie-Hellman parameters. I understand that this has
24111changed, but Exim has not been updated to provide this facility.
9b371988 24112.next
f89d2485 24113.vindex "&$tls_peerdn$&"
068aaea8 24114Distinguished Name (DN) strings reported by the OpenSSL library use a slash for
168e428f 24115separating fields; GnuTLS uses commas, in accordance with RFC 2253. This
9b371988
PH
24116affects the value of the &$tls_peerdn$& variable.
24117.next
24118OpenSSL identifies cipher suites using hyphens as separators, for example:
168e428f
PH
24119DES-CBC3-SHA. GnuTLS uses underscores, for example: RSA_ARCFOUR_SHA. What is
24120more, OpenSSL complains if underscores are present in a cipher list. To make
f89d2485 24121life simpler, Exim changes underscores to hyphens for OpenSSL and hyphens to
168e428f 24122underscores for GnuTLS when processing lists of cipher suites in the
9b371988 24123&%tls_require_ciphers%& options (the global option and the &(smtp)& transport
168e428f 24124option).
9b371988
PH
24125.next
24126The &%tls_require_ciphers%& options operate differently, as described in the
24127sections &<<SECTreqciphssl>>& and &<<SECTreqciphgnu>>&.
24128.endlist
168e428f 24129
068aaea8 24130
f89d2485 24131.section "GnuTLS parameter computation" "SECID181"
4cc45746 24132GnuTLS uses D-H parameters that may take a substantial amount of time
3cb1b51e 24133to compute. It is unreasonable to re-compute them for every TLS session.
068aaea8 24134Therefore, Exim keeps this data in a file in its spool directory, called
9b371988 24135&_gnutls-params_&. The file is owned by the Exim user and is readable only by
c2fe5cfd 24136its owner. Every Exim process that start up GnuTLS reads the D-H
9b371988
PH
24137parameters from this file. If the file does not exist, the first Exim process
24138that needs it computes the data and writes it to a temporary file which is
24139renamed once it is complete. It does not matter if several Exim processes do
24140this simultaneously (apart from wasting a few resources). Once a file is in
24141place, new Exim processes immediately start using it.
24142
068aaea8
PH
24143For maximum security, the parameters that are stored in this file should be
24144recalculated periodically, the frequency depending on your paranoia level.
24145Arranging this is easy in principle; just delete the file when you want new
24146values to be computed. However, there may be a problem. The calculation of new
9b371988
PH
24147parameters needs random numbers, and these are obtained from &_/dev/random_&.
24148If the system is not very active, &_/dev/random_& may delay returning data
24149until enough randomness (entropy) is available. This may cause Exim to hang for
24150a substantial amount of time, causing timeouts on incoming connections.
068aaea8 24151
068aaea8 24152The solution is to generate the parameters externally to Exim. They are stored
9b371988
PH
24153in &_gnutls-params_& in PEM format, which means that they can be generated
24154externally using the &(certtool)& command that is part of GnuTLS.
068aaea8 24155
068aaea8
PH
24156To replace the parameters with new ones, instead of deleting the file
24157and letting Exim re-create it, you can generate new parameters using
9b371988 24158&(certtool)& and, when this has been done, replace Exim's cache file by
068aaea8 24159renaming. The relevant commands are something like this:
9b371988 24160.code
068aaea8
PH
24161# rm -f new-params
24162# touch new-params
24163# chown exim:exim new-params
24164# chmod 0400 new-params
24165# certtool --generate-privkey --bits 512 >new-params
24166# echo "" >>new-params
24167# certtool --generate-dh-params --bits 1024 >> new-params
24168# mv new-params gnutls-params
9b371988 24169.endd
068aaea8
PH
24170If Exim never has to generate the parameters itself, the possibility of
24171stalling is removed.
168e428f
PH
24172
24173
9b371988
PH
24174.section "Requiring specific ciphers in OpenSSL" "SECTreqciphssl"
24175.cindex "TLS" "requiring specific ciphers (OpenSSL)"
0a4e3112 24176.oindex "&%tls_require_ciphers%&" "OpenSSL"
168e428f
PH
24177There is a function in the OpenSSL library that can be passed a list of cipher
24178suites before the cipher negotiation takes place. This specifies which ciphers
24179are acceptable. The list is colon separated and may contain names like
9b371988 24180DES-CBC3-SHA. Exim passes the expanded value of &%tls_require_ciphers%&
168e428f
PH
24181directly to this function call. The following quotation from the OpenSSL
24182documentation specifies what forms of item are allowed in the cipher string:
24183
9b371988
PH
24184.ilist
24185It can consist of a single cipher suite such as RC4-SHA.
24186.next
24187It can represent a list of cipher suites containing a certain algorithm,
168e428f
PH
24188or cipher suites of a certain type. For example SHA1 represents all
24189ciphers suites using the digest algorithm SHA1 and SSLv3 represents all
24190SSL v3 algorithms.
9b371988
PH
24191.next
24192Lists of cipher suites can be combined in a single cipher string using
168e428f
PH
24193the + character. This is used as a logical and operation. For example
24194SHA1+DES represents all cipher suites containing the SHA1 and the DES
24195algorithms.
9b371988 24196.endlist
168e428f 24197
9b371988
PH
24198Each cipher string can be optionally preceded by one of the characters &`!`&,
24199&`-`& or &`+`&.
24200.ilist
24201If &`!`& is used, the ciphers are permanently deleted from the list. The
168e428f
PH
24202ciphers deleted can never reappear in the list even if they are explicitly
24203stated.
9b371988
PH
24204.next
24205If &`-`& is used, the ciphers are deleted from the list, but some or all
168e428f 24206of the ciphers can be added again by later options.
9b371988
PH
24207.next
24208If &`+`& is used, the ciphers are moved to the end of the list. This
24209option does not add any new ciphers; it just moves matching existing ones.
24210.endlist
24211
24212If none of these characters is present, the string is interpreted as
168e428f
PH
24213a list of ciphers to be appended to the current preference list. If the list
24214includes any ciphers already present they will be ignored: that is, they will
9b371988
PH
24215not be moved to the end of the list.
24216.endlist
168e428f
PH
24217
24218
24219
f89d2485
PH
24220.section "Requiring specific ciphers or other parameters in GnuTLS" &&&
24221 "SECTreqciphgnu"
24222.cindex "GnuTLS" "specifying parameters for"
24223.cindex "TLS" "specifying ciphers (GnuTLS)"
24224.cindex "TLS" "specifying key exchange methods (GnuTLS)"
24225.cindex "TLS" "specifying MAC algorithms (GnuTLS)"
24226.cindex "TLS" "specifying protocols (GnuTLS)"
0a4e3112 24227.oindex "&%tls_require_ciphers%&" "GnuTLS"
f89d2485
PH
24228The GnuTLS library allows the caller to specify separate lists of permitted key
24229exchange methods, main cipher algorithms, MAC algorithms, and protocols.
24230Unfortunately, these lists are numerical, and the library does not have a
24231function for turning names into numbers. Consequently, lists of recognized
24232names have to be built into the application. The permitted key exchange
24233methods, ciphers, and MAC algorithms may be used in any combination to form a
24234cipher suite. This is unlike OpenSSL, where complete cipher suite names are
24235passed to its control function.
24236
24237For compatibility with OpenSSL, the &%tls_require_ciphers%& option can be set
24238to complete cipher suite names such as RSA_ARCFOUR_SHA, but for GnuTLS this
24239option controls only the cipher algorithms. Exim searches each item in the
24240list for the name of an available algorithm. For example, if the list
24241contains RSA_AES_SHA, then AES is recognized, and the behaviour is exactly
24242the same as if just AES were given.
24243
0a4e3112
PH
24244.oindex "&%gnutls_require_kx%&"
24245.oindex "&%gnutls_require_mac%&"
24246.oindex "&%gnutls_require_protocols%&"
f89d2485
PH
24247There are additional options called &%gnutls_require_kx%&,
24248&%gnutls_require_mac%&, and &%gnutls_require_protocols%& that can be used to
24249restrict the key exchange methods, MAC algorithms, and protocols, respectively.
24250These options are ignored if OpenSSL is in use.
24251
24252All four options are available as global options, controlling how Exim
24253behaves as a server, and also as options of the &(smtp)& transport, controlling
24254how Exim behaves as a client. All the values are string expanded. After
24255expansion, the values must be colon-separated lists, though the separator
24256can be changed in the usual way.
24257
24258Each of the four lists starts out with a default set of algorithms. If the
24259first item in a list does &'not'& start with an exclamation mark, all the
24260default items are deleted. In this case, only those that are explicitly
24261specified can be used. If the first item in a list &'does'& start with an
24262exclamation mark, the defaults are left on the list.
168e428f 24263
9b371988 24264Then, any item that starts with an exclamation mark causes the relevant
f89d2485
PH
24265entry to be removed from the list, and any item that does not start with an
24266exclamation mark causes a new entry to be added to the list. Unrecognized
24267items in the list are ignored. Thus:
9b371988 24268.code
f89d2485 24269tls_require_ciphers = !ARCFOUR
9b371988 24270.endd
f89d2485 24271allows all the defaults except ARCFOUR, whereas
9b371988
PH
24272.code
24273tls_require_ciphers = AES : 3DES
24274.endd
f89d2485
PH
24275allows only cipher suites that use AES or 3DES.
24276
24277For &%tls_require_ciphers%& the recognized names are AES_256, AES_128, AES
24278(both of the preceding), 3DES, ARCFOUR_128, ARCFOUR_40, and ARCFOUR (both of
24279the preceding). The default list does not contain all of these; it just has
24280AES_256, AES_128, 3DES, and ARCFOUR_128.
24281
24282For &%gnutls_require_kx%&, the recognized names are DHE_RSA, RSA (which
24283includes DHE_RSA), DHE_DSS, and DHE (which includes both DHE_RSA and
24284DHE_DSS). The default list contains RSA, DHE_DSS, DHE_RSA.
24285
24286For &%gnutls_require_mac%&, the recognized names are SHA (synonym SHA1), and
24287MD5. The default list contains SHA, MD5.
24288
24289For &%gnutls_require_protocols%&, the recognized names are TLS1 and SSL3.
24290The default list contains TLS1, SSL3.
24291
24292In a server, the order of items in these lists is unimportant. The server
24293advertises the availability of all the relevant cipher suites. However, in a
24294client, the order in the &%tls_require_ciphers%& list specifies a preference
24295order for the cipher algorithms. The first one in the client's list that is
168e428f
PH
24296also advertised by the server is tried first. The default order is as listed
24297above.
24298
24299
24300
f89d2485 24301.section "Configuring an Exim server to use TLS" "SECID182"
9b371988 24302.cindex "TLS" "configuring an Exim server"
168e428f 24303When Exim has been built with TLS support, it advertises the availability of
9b371988 24304the STARTTLS command to client hosts that match &%tls_advertise_hosts%&,
168e428f
PH
24305but not to any others. The default value of this option is unset, which means
24306that STARTTLS is not advertised at all. This default is chosen because you
f89d2485 24307need to set some other options in order to make TLS available, and also it is
168e428f
PH
24308sensible for systems that want to use TLS only as a client.
24309
24310If a client issues a STARTTLS command and there is some configuration
24311problem in the server, the command is rejected with a 454 error. If the client
24312persists in trying to issue SMTP commands, all except QUIT are rejected
24313with the error
9b371988
PH
24314.code
24315554 Security failure
24316.endd
168e428f
PH
24317If a STARTTLS command is issued within an existing TLS session, it is
24318rejected with a 554 error code.
24319
9b371988
PH
24320To enable TLS operations on a server, you must set &%tls_advertise_hosts%& to
24321match some hosts. You can, of course, set it to * to match all hosts.
168e428f
PH
24322However, this is not all you need to do. TLS sessions to a server won't work
24323without some further configuration at the server end.
24324
24325It is rumoured that all existing clients that support TLS/SSL use RSA
24326encryption. To make this work you need to set, in the server,
9b371988
PH
24327.code
24328tls_certificate = /some/file/name
24329tls_privatekey = /some/file/name
24330.endd
4f578862
PH
24331These options are, in fact, expanded strings, so you can make them depend on
24332the identity of the client that is connected if you wish. The first file
24333contains the server's X509 certificate, and the second contains the private key
24334that goes with it. These files need to be readable by the Exim user, and must
24335always be given as full path names. They can be the same file if both the
24336certificate and the key are contained within it. If &%tls_privatekey%& is not
24337set, or if its expansion is forced to fail or results in an empty string, this
24338is assumed to be the case. The certificate file may also contain intermediate
24339certificates that need to be sent to the client to enable it to authenticate
24340the server's certificate.
168e428f
PH
24341
24342If you do not understand about certificates and keys, please try to find a
24343source of this background information, which is not Exim-specific. (There are a
9b371988 24344few comments below in section &<<SECTcerandall>>&.)
168e428f 24345
9b371988 24346&*Note*&: These options do not apply when Exim is operating as a client &--
4f578862
PH
24347they apply only in the case of a server. If you need to use a certificate in an
24348Exim client, you must set the options of the same names in an &(smtp)&
24349transport.
168e428f 24350
4f578862
PH
24351With just these options, an Exim server will be able to use TLS. It does not
24352require the client to have a certificate (but see below for how to insist on
24353this). There is one other option that may be needed in other situations. If
9b371988
PH
24354.code
24355tls_dhparam = /some/file/name
24356.endd
168e428f
PH
24357is set, the SSL library is initialized for the use of Diffie-Hellman ciphers
24358with the parameters contained in the file. This increases the set of cipher
24359suites that the server supports. See the command
9b371988
PH
24360.code
24361openssl dhparam
24362.endd
4f578862
PH
24363for a way of generating this data. At present, &%tls_dhparam%& is used only
24364when Exim is linked with OpenSSL. It is ignored if GnuTLS is being used.
168e428f
PH
24365
24366The strings supplied for these three options are expanded every time a client
24367host connects. It is therefore possible to use different certificates and keys
24368for different hosts, if you so wish, by making use of the client's IP address
9b371988 24369in &$sender_host_address$& to control the expansion. If a string expansion is
168e428f
PH
24370forced to fail, Exim behaves as if the option is not set.
24371
9b371988
PH
24372.cindex "cipher" "logging"
24373.cindex "log" "TLS cipher"
f89d2485 24374.vindex "&$tls_cipher$&"
9b371988
PH
24375The variable &$tls_cipher$& is set to the cipher suite that was negotiated for
24376an incoming TLS connection. It is included in the &'Received:'& header of an
24377incoming message (by default &-- you can, of course, change this), and it is
24378also included in the log line that records a message's arrival, keyed by
24379&"X="&, unless the &%tls_cipher%& log selector is turned off. The &%encrypted%&
24380condition can be used to test for specific cipher suites in ACLs.
7d0ab55c
TF
24381(For outgoing SMTP deliveries, &$tls_cipher$& is reset &-- see section
24382&<<SECID185>>&.)
168e428f 24383
595028e4
PH
24384Once TLS has been established, the ACLs that run for subsequent SMTP commands
24385can check the name of the cipher suite and vary their actions accordingly. The
24386cipher suite names vary, depending on which TLS library is being used. For
24387example, OpenSSL uses the name DES-CBC3-SHA for the cipher suite which in other
24388contexts is known as TLS_RSA_WITH_3DES_EDE_CBC_SHA. Check the OpenSSL or GnuTLS
168e428f 24389documentation for more details.
168e428f
PH
24390
24391
f89d2485 24392.section "Requesting and verifying client certificates" "SECID183"
9b371988
PH
24393.cindex "certificate" "verification of client"
24394.cindex "TLS" "client certificate verification"
168e428f 24395If you want an Exim server to request a certificate when negotiating a TLS
9b371988
PH
24396session with a client, you must set either &%tls_verify_hosts%& or
24397&%tls_try_verify_hosts%&. You can, of course, set either of them to * to
168e428f
PH
24398apply to all TLS connections. For any host that matches one of these options,
24399Exim requests a certificate as part of the setup of the TLS session. The
24400contents of the certificate are verified by comparing it with a list of
24401expected certificates. These must be available in a file or,
24402for OpenSSL only (not GnuTLS), a directory, identified by
9b371988 24403&%tls_verify_certificates%&.
168e428f
PH
24404
24405A file can contain multiple certificates, concatenated end to end. If a
24406directory is used
24407(OpenSSL only),
24408each certificate must be in a separate file, with a name (or a symbolic link)
9b371988 24409of the form <&'hash'&>.0, where <&'hash'&> is a hash value constructed from the
168e428f 24410certificate. You can compute the relevant hash by running the command
9b371988
PH
24411.code
24412openssl x509 -hash -noout -in /cert/file
24413.endd
24414where &_/cert/file_& contains a single certificate.
168e428f 24415
9b371988 24416The difference between &%tls_verify_hosts%& and &%tls_try_verify_hosts%& is
168e428f
PH
24417what happens if the client does not supply a certificate, or if the certificate
24418does not match any of the certificates in the collection named by
9b371988 24419&%tls_verify_certificates%&. If the client matches &%tls_verify_hosts%&, the
168e428f 24420attempt to set up a TLS session is aborted, and the incoming connection is
9b371988 24421dropped. If the client matches &%tls_try_verify_hosts%&, the (encrypted) SMTP
168e428f
PH
24422session continues. ACLs that run for subsequent SMTP commands can detect the
24423fact that no certificate was verified, and vary their actions accordingly. For
24424example, you can insist on a certificate before accepting a message for
24425relaying, but not when the message is destined for local delivery.
24426
f89d2485 24427.vindex "&$tls_peerdn$&"
168e428f
PH
24428When a client supplies a certificate (whether it verifies or not), the value of
24429the Distinguished Name of the certificate is made available in the variable
9b371988 24430&$tls_peerdn$& during subsequent processing of the message.
168e428f 24431
9b371988 24432.cindex "log" "distinguished name"
168e428f 24433Because it is often a long text string, it is not included in the log line or
9b371988
PH
24434&'Received:'& header by default. You can arrange for it to be logged, keyed by
24435&"DN="&, by setting the &%tls_peerdn%& log selector, and you can use
24436&%received_header_text%& to change the &'Received:'& header. When no
24437certificate is supplied, &$tls_peerdn$& is empty.
168e428f
PH
24438
24439
f89d2485 24440.section "Revoked certificates" "SECID184"
9b371988
PH
24441.cindex "TLS" "revoked certificates"
24442.cindex "revocation list"
24443.cindex "certificate" "revocation list"
168e428f
PH
24444Certificate issuing authorities issue Certificate Revocation Lists (CRLs) when
24445certificates are revoked. If you have such a list, you can pass it to an Exim
9b371988
PH
24446server using the global option called &%tls_crl%& and to an Exim client using
24447an identically named option for the &(smtp)& transport. In each case, the value
24448of the option is expanded and must then be the name of a file that contains a
24449CRL in PEM format.
24450
24451
f89d2485 24452.section "Configuring an Exim client to use TLS" "SECID185"
9b371988
PH
24453.cindex "cipher" "logging"
24454.cindex "log" "TLS cipher"
24455.cindex "log" "distinguished name"
24456.cindex "TLS" "configuring an Exim client"
24457The &%tls_cipher%& and &%tls_peerdn%& log selectors apply to outgoing SMTP
168e428f
PH
24458deliveries as well as to incoming, the latter one causing logging of the
24459server certificate's DN. The remaining client configuration for TLS is all
9b371988 24460within the &(smtp)& transport.
168e428f 24461
9b371988 24462It is not necessary to set any options to have TLS work in the &(smtp)&
168e428f 24463transport. If Exim is built with TLS support, and TLS is advertised by a
9b371988
PH
24464server, the &(smtp)& transport always tries to start a TLS session. However,
24465this can be prevented by setting &%hosts_avoid_tls%& (an option of the
168e428f
PH
24466transport) to a list of server hosts for which TLS should not be used.
24467
24468If you do not want Exim to attempt to send messages unencrypted when an attempt
24469to set up an encrypted connection fails in any way, you can set
9b371988 24470&%hosts_require_tls%& to a list of hosts for which encryption is mandatory. For
168e428f
PH
24471those hosts, delivery is always deferred if an encrypted connection cannot be
24472set up. If there are any other hosts for the address, they are tried in the
24473usual way.
24474
9b371988 24475When the server host is not in &%hosts_require_tls%&, Exim may try to deliver
168e428f 24476the message unencrypted. It always does this if the response to STARTTLS is
9b371988 24477a 5&'xx'& code. For a temporary error code, or for a failure to negotiate a TLS
168e428f 24478session after a success response code, what happens is controlled by the
9b371988 24479&%tls_tempfail_tryclear%& option of the &(smtp)& transport. If it is false,
168e428f 24480delivery to this host is deferred, and other hosts (if available) are tried. If
9b371988 24481it is true, Exim attempts to deliver unencrypted after a 4&'xx'& response to
168e428f
PH
24482STARTTLS, and if STARTTLS is accepted, but the subsequent TLS
24483negotiation fails, Exim closes the current connection (because it is in an
24484unknown state), opens a new one to the same host, and then tries the delivery
24485unencrypted.
24486
9b371988
PH
24487The &%tls_certificate%& and &%tls_privatekey%& options of the &(smtp)&
24488transport provide the client with a certificate, which is passed to the server
24489if it requests it. If the server is Exim, it will request a certificate only if
07af267e 24490&%tls_verify_hosts%& or &%tls_try_verify_hosts%& matches the client.
168e428f 24491
07af267e
NM
24492If the &%tls_verify_certificates%& option is set on the &(smtp)& transport, it
24493must name a file or,
168e428f
PH
24494for OpenSSL only (not GnuTLS), a directory, that contains a collection of
24495expected server certificates. The client verifies the server's certificate
24496against this collection, taking into account any revoked certificates that are
9b371988 24497in the list defined by &%tls_crl%&.
168e428f
PH
24498
24499If
9b371988 24500&%tls_require_ciphers%& is set on the &(smtp)& transport, it must contain a
168e428f 24501list of permitted cipher suites. If either of these checks fails, delivery to
9b371988 24502the current host is abandoned, and the &(smtp)& transport tries to deliver to
168e428f
PH
24503alternative hosts, if any.
24504
71e1673f 24505.new
07af267e
NM
24506 &*Note*&:
24507These options must be set in the &(smtp)& transport for Exim to use TLS when it
24508is operating as a client. Exim does not assume that a server certificate (set
24509by the global options of the same name) should also be used when operating as a
24510client.
71e1673f 24511.wen
07af267e 24512
f89d2485
PH
24513.vindex "&$host$&"
24514.vindex "&$host_address$&"
9b371988
PH
24515All the TLS options in the &(smtp)& transport are expanded before use, with
24516&$host$& and &$host_address$& containing the name and address of the server to
168e428f
PH
24517which the client is connected. Forced failure of an expansion causes Exim to
24518behave as if the relevant option were unset.
24519
595028e4
PH
24520.vindex &$tls_cipher$&
24521.vindex &$tls_peerdn$&
24522Before an SMTP connection is established, the &$tls_cipher$& and &$tls_peerdn$&
24523variables are emptied. (Until the first connection, they contain the values
24524that were set when the message was received.) If STARTTLS is subsequently
24525successfully obeyed, these variables are set to the relevant values for the
24526outgoing connection.
595028e4 24527
168e428f
PH
24528
24529
9b371988
PH
24530.section "Multiple messages on the same encrypted TCP/IP connection" &&&
24531 "SECTmulmessam"
24532.cindex "multiple SMTP deliveries with TLS"
24533.cindex "TLS" "multiple message deliveries"
168e428f
PH
24534Exim sends multiple messages down the same TCP/IP connection by starting up
24535an entirely new delivery process for each message, passing the socket from
24536one process to the next. This implementation does not fit well with the use
24537of TLS, because there is quite a lot of state information associated with a TLS
24538connection, not just a socket identification. Passing all the state information
24539to a new process is not feasible. Consequently, Exim shuts down an existing TLS
24540session before passing the socket to a new process. The new process may then
24541try to start a new TLS session, and if successful, may try to re-authenticate
24542if AUTH is in use, before sending the next message.
24543
24544The RFC is not clear as to whether or not an SMTP session continues in clear
24545after TLS has been shut down, or whether TLS may be restarted again later, as
24546just described. However, if the server is Exim, this shutdown and
24547reinitialization works. It is not known which (if any) other servers operate
24548successfully if the client closes a TLS session and continues with unencrypted
24549SMTP, but there are certainly some that do not work. For such servers, Exim
24550should not pass the socket to another process, because the failure of the
24551subsequent attempt to use it would cause Exim to record a temporary host error,
24552and delay other deliveries to that host.
24553
24554To test for this case, Exim sends an EHLO command to the server after
24555closing down the TLS session. If this fails in any way, the connection is
24556closed instead of being passed to a new delivery process, but no retry
24557information is recorded.
24558
9b371988
PH
24559There is also a manual override; you can set &%hosts_nopass_tls%& on the
24560&(smtp)& transport to match those hosts for which Exim should not pass
168e428f
PH
24561connections to new processes if TLS has been used.
24562
24563
24564
24565
9b371988
PH
24566.section "Certificates and all that" "SECTcerandall"
24567.cindex "certificate" "references to discussion"
168e428f
PH
24568In order to understand fully how TLS works, you need to know about
24569certificates, certificate signing, and certificate authorities. This is not the
24570place to give a tutorial, especially as I do not know very much about it
24571myself. Some helpful introduction can be found in the FAQ for the SSL addition
24572to Apache, currently at
9b371988
PH
24573.display
24574&url(http://www.modssl.org/docs/2.7/ssl_faq.html#ToC24)
24575.endd
24576Other parts of the &'modssl'& documentation are also helpful, and have
168e428f 24577links to further files.
9b371988 24578Eric Rescorla's book, &'SSL and TLS'&, published by Addison-Wesley (ISBN
168e428f
PH
245790-201-61598-3), contains both introductory and more in-depth descriptions.
24580Some sample programs taken from the book are available from
9b371988
PH
24581.display
24582&url(http://www.rtfm.com/openssl-examples/)
24583.endd
168e428f 24584
168e428f 24585
f89d2485 24586.section "Certificate chains" "SECID186"
9b371988 24587The file named by &%tls_certificate%& may contain more than one
168e428f
PH
24588certificate. This is useful in the case where the certificate that is being
24589sent is validated by an intermediate certificate which the other end does
24590not have. Multiple certificates must be in the correct order in the file.
24591First the host's certificate itself, then the first intermediate
24592certificate to validate the issuer of the host certificate, then the next
24593intermediate certificate to validate the issuer of the first intermediate
24594certificate, and so on, until finally (optionally) the root certificate.
24595The root certificate must already be trusted by the recipient for
24596validation to succeed, of course, but if it's not preinstalled, sending the
24597root certificate along with the rest makes it available for the user to
24598install if the receiving end is a client MUA that can interact with a user.
24599
24600
f89d2485 24601.section "Self-signed certificates" "SECID187"
9b371988
PH
24602.cindex "certificate" "self-signed"
24603You can create a self-signed certificate using the &'req'& command provided
168e428f 24604with OpenSSL, like this:
9b371988 24605.code
168e428f
PH
24606openssl req -x509 -newkey rsa:1024 -keyout file1 -out file2 \
24607 -days 9999 -nodes
9b371988
PH
24608.endd
24609&_file1_& and &_file2_& can be the same file; the key and the certificate are
24610delimited and so can be identified independently. The &%-days%& option
24611specifies a period for which the certificate is valid. The &%-nodes%& option is
168e428f
PH
24612important: if you do not set it, the key is encrypted with a passphrase
24613that you are prompted for, and any use that is made of the key causes more
24614prompting for the passphrase. This is not helpful if you are going to use
24615this certificate and key in an MTA, where prompting is not possible.
24616
24617A self-signed certificate made in this way is sufficient for testing, and
24618may be adequate for all your requirements if you are mainly interested in
24619encrypting transfers, and not in secure identification.
24620
24621However, many clients require that the certificate presented by the server be a
9b371988 24622user (also called &"leaf"& or &"site"&) certificate, and not a self-signed
168e428f 24623certificate. In this situation, the self-signed certificate described above
9b371988
PH
24624must be installed on the client host as a trusted root &'certification
24625authority'& (CA), and the certificate used by Exim must be a user certificate
168e428f
PH
24626signed with that self-signed certificate.
24627
24628For information on creating self-signed CA certificates and using them to sign
9b371988
PH
24629user certificates, see the &'General implementation overview'& chapter of the
24630Open-source PKI book, available online at
24631&url(http://ospkibook.sourceforge.net/).
4f578862
PH
24632.ecindex IIDencsmtp1
24633.ecindex IIDencsmtp2
168e428f
PH
24634
24635
24636
9b371988
PH
24637. ////////////////////////////////////////////////////////////////////////////
24638. ////////////////////////////////////////////////////////////////////////////
168e428f 24639
9b371988 24640.chapter "Access control lists" "CHAPACL"
4f578862 24641.scindex IIDacl "&ACL;" "description"
9b371988
PH
24642.cindex "control of incoming mail"
24643.cindex "message" "controlling incoming"
24644.cindex "policy control" "access control lists"
168e428f 24645Access Control Lists (ACLs) are defined in a separate section of the run time
9b371988 24646configuration file, headed by &"begin acl"&. Each ACL definition starts with a
168e428f
PH
24647name, terminated by a colon. Here is a complete ACL section that contains just
24648one very small ACL:
9b371988
PH
24649.code
24650begin acl
9b371988
PH
24651small_acl:
24652 accept hosts = one.host.only
24653.endd
168e428f
PH
24654You can have as many lists as you like in the ACL section, and the order in
24655which they appear does not matter. The lists are self-terminating.
24656
24657The majority of ACLs are used to control Exim's behaviour when it receives
24658certain SMTP commands. This applies both to incoming TCP/IP connections, and
9b371988 24659when a local process submits a message using SMTP by specifying the &%-bs%&
168e428f
PH
24660option. The most common use is for controlling which recipients are accepted
24661in incoming messages. In addition, you can define an ACL that is used to check
24662local non-SMTP messages. The default configuration file contains an example of
24663a realistic ACL for checking RCPT commands. This is discussed in chapter
9b371988 24664&<<CHAPdefconfil>>&.
168e428f
PH
24665
24666
f89d2485 24667.section "Testing ACLs" "SECID188"
9b371988
PH
24668The &%-bh%& command line option provides a way of testing your ACL
24669configuration locally by running a fake SMTP session with which you interact.
24670The host &'relay-test.mail-abuse.org'& provides a service for checking your
24671relaying configuration (see section &<<SECTcheralcon>>& for more details).
168e428f
PH
24672
24673
24674
f89d2485 24675.section "Specifying when ACLs are used" "SECID189"
9b371988 24676.cindex "&ACL;" "options for specifying"
168e428f
PH
24677In order to cause an ACL to be used, you have to name it in one of the relevant
24678options in the main part of the configuration. These options are:
9b371988
PH
24679.cindex "AUTH" "ACL for"
24680.cindex "DATA" "ACLs for"
24681.cindex "ETRN" "ACL for"
24682.cindex "EXPN" "ACL for"
24683.cindex "HELO" "ACL for"
24684.cindex "EHLO" "ACL for"
24685.cindex "MAIL" "ACL for"
f89d2485 24686.cindex "QUIT, ACL for"
9b371988 24687.cindex "RCPT" "ACL for"
f89d2485 24688.cindex "STARTTLS, ACL for"
9b371988 24689.cindex "VRFY" "ACL for"
f89d2485
PH
24690.cindex "SMTP" "connection, ACL for"
24691.cindex "non-SMTP messages" "ACLs for"
24692.cindex "MIME content scanning" "ACL for"
9b371988
PH
24693
24694.table2 140pt
f89d2485
PH
24695.irow &%acl_not_smtp%& "ACL for non-SMTP messages"
24696.irow &%acl_not_smtp_mime%& "ACL for non-SMTP MIME parts"
24697.irow &%acl_not_smtp_start%& "ACL at start of non-SMTP message"
24698.irow &%acl_smtp_auth%& "ACL for AUTH"
24699.irow &%acl_smtp_connect%& "ACL for start of SMTP connection"
24700.irow &%acl_smtp_data%& "ACL after DATA is complete"
24701.irow &%acl_smtp_etrn%& "ACL for ETRN"
24702.irow &%acl_smtp_expn%& "ACL for EXPN"
24703.irow &%acl_smtp_helo%& "ACL for HELO or EHLO"
24704.irow &%acl_smtp_mail%& "ACL for MAIL"
24705.irow &%acl_smtp_mailauth%& "ACL for the AUTH parameter of MAIL"
24706.irow &%acl_smtp_mime%& "ACL for content-scanning MIME parts"
7d0ab55c 24707.irow &%acl_smtp_notquit%& "ACL for non-QUIT terminations"
f89d2485
PH
24708.irow &%acl_smtp_predata%& "ACL at start of DATA command"
24709.irow &%acl_smtp_quit%& "ACL for QUIT"
24710.irow &%acl_smtp_rcpt%& "ACL for RCPT"
24711.irow &%acl_smtp_starttls%& "ACL for STARTTLS"
24712.irow &%acl_smtp_vrfy%& "ACL for VRFY"
9b371988 24713.endtable
168e428f
PH
24714
24715For example, if you set
9b371988
PH
24716.code
24717acl_smtp_rcpt = small_acl
24718.endd
168e428f
PH
24719the little ACL defined above is used whenever Exim receives a RCPT command
24720in an SMTP dialogue. The majority of policy tests on incoming messages can be
24721done when RCPT commands arrive. A rejection of RCPT should cause the
24722sending MTA to give up on the recipient address contained in the RCPT
24723command, whereas rejection at other times may cause the client MTA to keep on
24724trying to deliver the message. It is therefore recommended that you do as much
24725testing as possible at RCPT time.
24726
24727
f89d2485
PH
24728.section "The non-SMTP ACLs" "SECID190"
24729.cindex "non-SMTP messages" "ACLs for"
db9452a9
PH
24730The non-SMTP ACLs apply to all non-interactive incoming messages, that is, they
24731apply to batched SMTP as well as to non-SMTP messages. (Batched SMTP is not
24732really SMTP.) Many of the ACL conditions (for example, host tests, and tests on
24733the state of the SMTP connection such as encryption and authentication) are not
24734relevant and are forbidden in these ACLs. However, the sender and recipients
24735are known, so the &%senders%& and &%sender_domains%& conditions and the
24736&$sender_address$& and &$recipients$& variables can be used. Variables such as
24737&$authenticated_sender$& are also available. You can specify added header lines
24738in any of these ACLs.
24739
24740The &%acl_not_smtp_start%& ACL is run right at the start of receiving a
24741non-SMTP message, before any of the message has been read. (This is the
595028e4
PH
24742analogue of the &%acl_smtp_predata%& ACL for SMTP input.) In the case of
24743batched SMTP input, it runs after the DATA command has been reached. The
f89d2485
PH
24744result of this ACL is ignored; it cannot be used to reject a message. If you
24745really need to, you could set a value in an ACL variable here and reject based
24746on that in the &%acl_not_smtp%& ACL. However, this ACL can be used to set
24747controls, and in particular, it can be used to set
db9452a9
PH
24748.code
24749control = suppress_local_fixups
24750.endd
24751This cannot be used in the other non-SMTP ACLs because by the time they are
24752run, it is too late.
24753
24754The &%acl_not_smtp_mime%& ACL is available only when Exim is compiled with the
24755content-scanning extension. For details, see chapter &<<CHAPexiscan>>&.
24756
24757The &%acl_not_smtp%& ACL is run just before the &[local_scan()]& function. Any
168e428f 24758kind of rejection is treated as permanent, because there is no way of sending a
db9452a9 24759temporary error for these kinds of message.
168e428f
PH
24760
24761
f89d2485
PH
24762.section "The SMTP connect ACL" "SECID191"
24763.cindex "SMTP" "connection, ACL for"
0a4e3112 24764.oindex &%smtp_banner%&
db9452a9
PH
24765The ACL test specified by &%acl_smtp_connect%& happens at the start of an SMTP
24766session, after the test specified by &%host_reject_connection%& (which is now
3cb1b51e
PH
24767an anomaly) and any TCP Wrappers testing (if configured). If the connection is
24768accepted by an &%accept%& verb that has a &%message%& modifier, the contents of
24769the message override the banner message that is otherwise specified by the
24770&%smtp_banner%& option.
24771
24772
f89d2485 24773.section "The EHLO/HELO ACL" "SECID192"
3cb1b51e
PH
24774.cindex "EHLO" "ACL for"
24775.cindex "HELO" "ACL for"
24776The ACL test specified by &%acl_smtp_helo%& happens when the client issues an
24777EHLO or HELO command, after the tests specified by &%helo_accept_junk_hosts%&,
24778&%helo_allow_chars%&, &%helo_verify_hosts%&, and &%helo_try_verify_hosts%&.
24779Note that a client may issue more than one EHLO or HELO command in an SMTP
24780session, and indeed is required to issue a new EHLO or HELO after successfully
24781setting up encryption following a STARTTLS command.
24782
24783If the command is accepted by an &%accept%& verb that has a &%message%&
24784modifier, the message may not contain more than one line (it will be truncated
24785at the first newline and a panic logged if it does). Such a message cannot
24786affect the EHLO options that are listed on the second and subsequent lines of
24787an EHLO response.
168e428f
PH
24788
24789
f89d2485 24790.section "The DATA ACLs" "SECID193"
9b371988 24791.cindex "DATA" "ACLs for"
168e428f
PH
24792Two ACLs are associated with the DATA command, because it is two-stage
24793command, with two responses being sent to the client.
9b371988 24794When the DATA command is received, the ACL defined by &%acl_smtp_predata%&
168e428f
PH
24795is obeyed. This gives you control after all the RCPT commands, but before
24796the message itself is received. It offers the opportunity to give a negative
24797response to the DATA command before the data is transmitted. Header lines
24798added by MAIL or RCPT ACLs are not visible at this time, but any that
9b371988 24799are defined here are visible when the &%acl_smtp_data%& ACL is run.
168e428f
PH
24800
24801You cannot test the contents of the message, for example, to verify addresses
24802in the headers, at RCPT time or when the DATA command is received. Such
24803tests have to appear in the ACL that is run after the message itself has been
24804received, before the final response to the DATA command is sent. This is
9b371988 24805the ACL specified by &%acl_smtp_data%&, which is the second ACL that is
168e428f
PH
24806associated with the DATA command.
24807
24808For both of these ACLs, it is not possible to reject individual recipients. An
24809error response rejects the entire message. Unfortunately, it is known that some
9b371988
PH
24810MTAs do not treat hard (5&'xx'&) responses to the DATA command (either
24811before or after the data) correctly &-- they keep the message on their queues
168e428f
PH
24812and try again later, but that is their problem, though it does waste some of
24813your resources.
24814
24815
f89d2485 24816.section "The SMTP MIME ACL" "SECID194"
9b371988
PH
24817The &%acl_smtp_mime%& option is available only when Exim is compiled with the
24818content-scanning extension. For details, see chapter &<<CHAPexiscan>>&.
168e428f
PH
24819
24820
9b371988 24821.section "The QUIT ACL" "SECTQUITACL"
f89d2485 24822.cindex "QUIT, ACL for"
068aaea8
PH
24823The ACL for the SMTP QUIT command is anomalous, in that the outcome of the ACL
24824does not affect the response code to QUIT, which is always 221. Thus, the ACL
24825does not in fact control any access. For this reason, the only verbs that are
9b371988 24826permitted are &%accept%& and &%warn%&.
168e428f
PH
24827
24828This ACL can be used for tasks such as custom logging at the end of an SMTP
24829session. For example, you can use ACL variables in other ACLs to count
24830messages, recipients, etc., and log the totals at QUIT time using one or
9b371988 24831more &%logwrite%& modifiers on a &%warn%& verb.
168e428f 24832
9b371988
PH
24833&*Warning*&: Only the &$acl_c$&&'x'& variables can be used for this, because
24834the &$acl_m$&&'x'& variables are reset at the end of each incoming message.
068aaea8 24835
9b371988
PH
24836You do not need to have a final &%accept%&, but if you do, you can use a
24837&%message%& modifier to specify custom text that is sent as part of the 221
168e428f
PH
24838response to QUIT.
24839
9b371988 24840This ACL is run only for a &"normal"& QUIT. For certain kinds of disastrous
168e428f
PH
24841failure (for example, failure to open a log file, or when Exim is bombing out
24842because it has detected an unrecoverable error), all SMTP commands from the
24843client are given temporary error responses until QUIT is received or the
24844connection is closed. In these special cases, the QUIT ACL does not run.
24845
24846
71e1673f 24847.new
595028e4 24848.section "The not-QUIT ACL" "SECTNOTQUITACL"
3ac82526 24849.vindex &$acl_smtp_notquit$&
4f054c63 24850The not-QUIT ACL, specified by &%acl_smtp_notquit%&, is run in most cases when
595028e4
PH
24851an SMTP session ends without sending QUIT. However, when Exim itself is is bad
24852trouble, such as being unable to write to its log files, this ACL is not run,
24853because it might try to do things (such as write to log files) that make the
24854situation even worse.
71e1673f 24855.wen
595028e4
PH
24856
24857Like the QUIT ACL, this ACL is provided to make it possible to do customized
24858logging or to gather statistics, and its outcome is ignored. The &%delay%&
24859modifier is forbidden in this ACL, and the only permitted verbs are &%accept%&
24860and &%warn%&.
24861
24862.vindex &$smtp_notquit_reason$&
24863When the not-QUIT ACL is running, the variable &$smtp_notquit_reason$& is set
24864to a string that indicates the reason for the termination of the SMTP
24865connection. The possible values are:
24866.table2
24867.irow &`acl-drop`& "Another ACL issued a &%drop%& command"
24868.irow &`bad-commands`& "Too many unknown or non-mail commands"
24869.irow &`command-timeout`& "Timeout while reading SMTP commands"
24870.irow &`connection-lost`& "The SMTP connection has been lost"
24871.irow &`data-timeout`& "Timeout while reading message data"
24872.irow &`local-scan-error`& "The &[local_scan()]& function crashed"
24873.irow &`local-scan-timeout`& "The &[local_scan()]& function timed out"
24874.irow &`signal-exit`& "SIGTERM or SIGINT"
24875.irow &`synchronization-error`& "SMTP synchronization error"
24876.irow &`tls-failed`& "TLS failed to start"
24877.endtable
24878In most cases when an SMTP connection is closed without having received QUIT,
24879Exim sends an SMTP response message before actually closing the connection.
24880With the exception of the &`acl-drop`& case, the default message can be
24881overridden by the &%message%& modifier in the not-QUIT ACL. In the case of a
24882&%drop%& verb in another ACL, it is the message from the other ACL that is
24883used.
595028e4
PH
24884
24885
f89d2485 24886.section "Finding an ACL to use" "SECID195"
9b371988 24887.cindex "&ACL;" "finding which to use"
6083aca0
TF
24888The value of an &%acl_smtp_%&&'xxx'& option is expanded before use, so
24889you can use different ACLs in different circumstances. For example,
24890.code
24891acl_smtp_rcpt = ${if ={25}{$interface_port} \
24892 {acl_check_rcpt} {acl_check_rcpt_submit} }
24893.endd
24894In the default configuration file there are some example settings for
24895providing an RFC 4409 message submission service on port 587 and a
24896non-standard &"smtps"& service on port 465. You can use a string
24897expansion like this to choose an ACL for MUAs on these ports which is
24898more appropriate for this purpose than the default ACL on port 25.
24899
24900The expanded string does not have to be the name of an ACL in the
24901configuration file; there are other possibilities. Having expanded the
24902string, Exim searches for an ACL as follows:
168e428f 24903
9b371988
PH
24904.ilist
24905If the string begins with a slash, Exim uses it as a file name, and reads its
168e428f
PH
24906contents as an ACL. The lines are processed in the same way as lines in the
24907Exim configuration file. In particular, continuation lines are supported, blank
9b371988 24908lines are ignored, as are lines whose first non-whitespace character is &"#"&.
168e428f
PH
24909If the file does not exist or cannot be read, an error occurs (typically
24910causing a temporary failure of whatever caused the ACL to be run). For example:
9b371988 24911.code
168e428f
PH
24912acl_smtp_data = /etc/acls/\
24913 ${lookup{$sender_host_address}lsearch\
24914 {/etc/acllist}{$value}{default}}
9b371988 24915.endd
168e428f
PH
24916This looks up an ACL file to use on the basis of the host's IP address, falling
24917back to a default if the lookup fails. If an ACL is successfully read from a
24918file, it is retained in memory for the duration of the Exim process, so that it
24919can be re-used without having to re-read the file.
9b371988
PH
24920.next
24921If the string does not start with a slash, and does not contain any spaces,
168e428f
PH
24922Exim searches the ACL section of the configuration for an ACL whose name
24923matches the string.
9b371988
PH
24924.next
24925If no named ACL is found, or if the string contains spaces, Exim parses
168e428f
PH
24926the string as an inline ACL. This can save typing in cases where you just
24927want to have something like
9b371988
PH
24928.code
24929acl_smtp_vrfy = accept
24930.endd
168e428f
PH
24931in order to allow free use of the VRFY command. Such a string may contain
24932newlines; it is processed in the same way as an ACL that is read from a file.
9b371988 24933.endlist
168e428f
PH
24934
24935
24936
24937
f89d2485 24938.section "ACL return codes" "SECID196"
9b371988 24939.cindex "&ACL;" "return codes"
168e428f 24940Except for the QUIT ACL, which does not affect the SMTP return code (see
9b371988
PH
24941section &<<SECTQUITACL>>& above), the result of running an ACL is either
24942&"accept"& or &"deny"&, or, if some test cannot be completed (for example, if a
24943database is down), &"defer"&. These results cause 2&'xx'&, 5&'xx'&, and 4&'xx'&
24944return codes, respectively, to be used in the SMTP dialogue. A fourth return,
24945&"error"&, occurs when there is an error such as invalid syntax in the ACL.
24946This also causes a 4&'xx'& return code.
24947
24948For the non-SMTP ACL, &"defer"& and &"error"& are treated in the same way as
24949&"deny"&, because there is no mechanism for passing temporary errors to the
168e428f
PH
24950submitters of non-SMTP messages.
24951
24952
9b371988
PH
24953ACLs that are relevant to message reception may also return &"discard"&. This
24954has the effect of &"accept"&, but causes either the entire message or an
168e428f
PH
24955individual recipient address to be discarded. In other words, it is a
24956blackholing facility. Use it with care.
24957
9b371988
PH
24958If the ACL for MAIL returns &"discard"&, all recipients are discarded, and no
24959ACL is run for subsequent RCPT commands. The effect of &"discard"& in a
168e428f
PH
24960RCPT ACL is to discard just the one recipient address. If there are no
24961recipients left when the message's data is received, the DATA ACL is not
9b371988
PH
24962run. A &"discard"& return from the DATA or the non-SMTP ACL discards all the
24963remaining recipients. The &"discard"& return is not permitted for the
24964&%acl_smtp_predata%& ACL.
168e428f 24965
168e428f 24966
9b371988
PH
24967.cindex "&[local_scan()]& function" "when all recipients discarded"
24968The &[local_scan()]& function is always run, even if there are no remaining
168e428f
PH
24969recipients; it may create new recipients.
24970
24971
24972
f89d2485 24973.section "Unset ACL options" "SECID197"
9b371988
PH
24974.cindex "&ACL;" "unset options"
24975The default actions when any of the &%acl_%&&'xxx'& options are unset are not
24976all the same. &*Note*&: These defaults apply only when the relevant ACL is
24977not defined at all. For any defined ACL, the default action when control
24978reaches the end of the ACL statements is &"deny"&.
168e428f 24979
db9452a9
PH
24980For &%acl_smtp_quit%& and &%acl_not_smtp_start%& there is no default because
24981these two are ACLs that are used only for their side effects. They cannot be
24982used to accept or reject anything.
db9452a9 24983
9b371988
PH
24984For &%acl_not_smtp%&, &%acl_smtp_auth%&, &%acl_smtp_connect%&,
24985&%acl_smtp_data%&, &%acl_smtp_helo%&, &%acl_smtp_mail%&, &%acl_smtp_mailauth%&,
db9452a9
PH
24986&%acl_smtp_mime%&, &%acl_smtp_predata%&, and &%acl_smtp_starttls%&, the action
24987when the ACL is not defined is &"accept"&.
168e428f 24988
9b371988
PH
24989For the others (&%acl_smtp_etrn%&, &%acl_smtp_expn%&, &%acl_smtp_rcpt%&, and
24990&%acl_smtp_vrfy%&), the action when the ACL is not defined is &"deny"&.
24991This means that &%acl_smtp_rcpt%& must be defined in order to receive any
168e428f
PH
24992messages over an SMTP connection. For an example, see the ACL in the default
24993configuration file.
24994
24995
24996
24997
f89d2485 24998.section "Data for message ACLs" "SECID198"
9b371988 24999.cindex "&ACL;" "data for message ACL"
f89d2485
PH
25000.vindex &$domain$&
25001.vindex &$local_part$&
25002.vindex &$sender_address$&
25003.vindex &$sender_host_address$&
25004.vindex &$smtp_command$&
068aaea8
PH
25005When a MAIL or RCPT ACL, or either of the DATA ACLs, is running, the variables
25006that contain information about the host and the message's sender (for example,
9b371988
PH
25007&$sender_host_address$& and &$sender_address$&) are set, and can be used in ACL
25008statements. In the case of RCPT (but not MAIL or DATA), &$domain$& and
4f578862
PH
25009&$local_part$& are set from the argument address. The entire SMTP command
25010is available in &$smtp_command$&.
168e428f
PH
25011
25012When an ACL for the AUTH parameter of MAIL is running, the variables that
9b371988
PH
25013contain information about the host are set, but &$sender_address$& is not yet
25014set. Section &<<SECTauthparamail>>& contains a discussion of this parameter and
168e428f
PH
25015how it is used.
25016
f89d2485 25017.vindex "&$message_size$&"
9b371988 25018The &$message_size$& variable is set to the value of the SIZE parameter on
168e428f
PH
25019the MAIL command at MAIL, RCPT and pre-data time, or to -1 if
25020that parameter is not given. The value is updated to the true message size by
25021the time the final DATA ACL is run (after the message data has been
25022received).
25023
f89d2485
PH
25024.vindex "&$rcpt_count$&"
25025.vindex "&$recipients_count$&"
9b371988
PH
25026The &$rcpt_count$& variable increases by one for each RCPT command received.
25027The &$recipients_count$& variable increases by one each time a RCPT command is
068aaea8
PH
25028accepted, so while an ACL for RCPT is being processed, it contains the number
25029of previously accepted recipients. At DATA time (for both the DATA ACLs),
9b371988
PH
25030&$rcpt_count$& contains the total number of RCPT commands, and
25031&$recipients_count$& contains the total number of accepted recipients.
168e428f
PH
25032
25033
25034
25035
25036
9b371988
PH
25037.section "Data for non-message ACLs" "SECTdatfornon"
25038.cindex "&ACL;" "data for non-message ACL"
f89d2485
PH
25039.vindex &$smtp_command_argument$&
25040.vindex &$smtp_command$&
168e428f 25041When an ACL is being run for AUTH, EHLO, ETRN, EXPN, HELO, STARTTLS, or VRFY,
9b371988 25042the remainder of the SMTP command line is placed in &$smtp_command_argument$&,
4f578862 25043and the entire SMTP command is available in &$smtp_command$&.
9b371988
PH
25044These variables can be tested using a &%condition%& condition. For example,
25045here is an ACL for use with AUTH, which insists that either the session is
25046encrypted, or the CRAM-MD5 authentication method is used. In other words, it
25047does not permit authentication methods that use cleartext passwords on
25048unencrypted connections.
25049.code
168e428f
PH
25050acl_check_auth:
25051 accept encrypted = *
25052 accept condition = ${if eq{${uc:$smtp_command_argument}}\
25053 {CRAM-MD5}}
25054 deny message = TLS encryption or CRAM-MD5 required
9b371988 25055.endd
168e428f
PH
25056(Another way of applying this restriction is to arrange for the authenticators
25057that use cleartext passwords not to be advertised when the connection is not
9b371988 25058encrypted. You can use the generic &%server_advertise_condition%& authenticator
168e428f
PH
25059option to do this.)
25060
25061
25062
f89d2485 25063.section "Format of an ACL" "SECID199"
9b371988 25064.cindex "&ACL;" "format of"
f89d2485 25065.cindex "&ACL;" "verbs, definition of"
168e428f 25066An individual ACL consists of a number of statements. Each statement starts
9b371988 25067with a verb, optionally followed by a number of conditions and &"modifiers"&.
168e428f
PH
25068Modifiers can change the way the verb operates, define error and log messages,
25069set variables, insert delays, and vary the processing of accepted messages.
25070
25071If all the conditions are met, the verb is obeyed. The same condition may be
25072used (with different arguments) more than once in the same statement. This
9b371988 25073provides a means of specifying an &"and"& conjunction between conditions. For
168e428f 25074example:
9b371988
PH
25075.code
25076deny dnslists = list1.example
25077dnslists = list2.example
25078.endd
168e428f
PH
25079If there are no conditions, the verb is always obeyed. Exim stops evaluating
25080the conditions and modifiers when it reaches a condition that fails. What
25081happens then depends on the verb (and in one case, on a special modifier). Not
25082all the conditions make sense at every testing point. For example, you cannot
25083test a sender address in the ACL that is run for a VRFY command.
25084
25085
f89d2485 25086.section "ACL verbs" "SECID200"
168e428f
PH
25087The ACL verbs are as follows:
25088
9b371988 25089.ilist
f89d2485 25090.cindex "&%accept%& ACL verb"
9b371988
PH
25091&%accept%&: If all the conditions are met, the ACL returns &"accept"&. If any
25092of the conditions are not met, what happens depends on whether &%endpass%&
25093appears among the conditions (for syntax see below). If the failing condition
25094is before &%endpass%&, control is passed to the next ACL statement; if it is
25095after &%endpass%&, the ACL returns &"deny"&. Consider this statement, used to
25096check a RCPT command:
25097.code
25098accept domains = +local_domains
25099endpass
25100verify = recipient
25101.endd
25102If the recipient domain does not match the &%domains%& condition, control
25103passes to the next statement. If it does match, the recipient is verified, and
25104the command is accepted if verification succeeds. However, if verification
25105fails, the ACL yields &"deny"&, because the failing condition is after
25106&%endpass%&.
25107
3cb1b51e
PH
25108The &%endpass%& feature has turned out to be confusing to many people, so its
25109use is not recommended nowadays. It is always possible to rewrite an ACL so
25110that &%endpass%& is not needed, and it is no longer used in the default
25111configuration.
25112
f89d2485 25113.cindex "&%message%& ACL modifier" "with &%accept%&"
3cb1b51e
PH
25114If a &%message%& modifier appears on an &%accept%& statement, its action
25115depends on whether or not &%endpass%& is present. In the absence of &%endpass%&
25116(when an &%accept%& verb either accepts or passes control to the next
25117statement), &%message%& can be used to vary the message that is sent when an
25118SMTP command is accepted. For example, in a RCPT ACL you could have:
25119.display
25120&`accept `&<&'some conditions'&>
595028e4 25121&` message = OK, I will allow you through today`&
3cb1b51e
PH
25122.endd
25123You can specify an SMTP response code, optionally followed by an &"extended
25124response code"& at the start of the message, but the first digit must be the
25125same as would be sent by default, which is 2 for an &%accept%& verb.
25126
25127If &%endpass%& is present in an &%accept%& statement, &%message%& specifies
25128an error message that is used when access is denied. This behaviour is retained
25129for backward compatibility, but current &"best practice"& is to avoid the use
25130of &%endpass%&.
3cb1b51e
PH
25131
25132
9b371988 25133.next
f89d2485 25134.cindex "&%defer%& ACL verb"
3cb1b51e 25135&%defer%&: If all the conditions are true, the ACL returns &"defer"& which, in
9b371988
PH
25136an SMTP session, causes a 4&'xx'& response to be given. For a non-SMTP ACL,
25137&%defer%& is the same as &%deny%&, because there is no way of sending a
25138temporary error. For a RCPT command, &%defer%& is much the same as using a
25139&(redirect)& router and &`:defer:`& while verifying, but the &%defer%& verb can
168e428f 25140be used in any ACL, and even for a recipient it might be a simpler approach.
3cb1b51e
PH
25141
25142
9b371988 25143.next
f89d2485 25144.cindex "&%deny%& ACL verb"
9b371988
PH
25145&%deny%&: If all the conditions are met, the ACL returns &"deny"&. If any of
25146the conditions are not met, control is passed to the next ACL statement. For
168e428f 25147example,
9b371988
PH
25148.code
25149deny dnslists = blackholes.mail-abuse.org
25150.endd
168e428f
PH
25151rejects commands from hosts that are on a DNS black list.
25152
3cb1b51e 25153
9b371988 25154.next
f89d2485 25155.cindex "&%discard%& ACL verb"
9b371988
PH
25156&%discard%&: This verb behaves like &%accept%&, except that it returns
25157&"discard"& from the ACL instead of &"accept"&. It is permitted only on ACLs
3cb1b51e
PH
25158that are concerned with receiving messages. When all the conditions are true,
25159the sending entity receives a &"success"& response. However, &%discard%& causes
25160recipients to be discarded. If it is used in an ACL for RCPT, just the one
25161recipient is discarded; if used for MAIL, DATA or in the non-SMTP ACL, all the
25162message's recipients are discarded. Recipients that are discarded before DATA
941c8a88 25163do not appear in the log line when the &%received_recipients%& log selector is set.
3cb1b51e
PH
25164
25165If the &%log_message%& modifier is set when &%discard%& operates,
9b371988 25166its contents are added to the line that is automatically written to the log.
3cb1b51e 25167The &%message%& modifier operates exactly as it does for &%accept%&.
3cb1b51e 25168
9b371988 25169
9b371988 25170.next
f89d2485 25171.cindex "&%drop%& ACL verb"
9b371988
PH
25172&%drop%&: This verb behaves like &%deny%&, except that an SMTP connection is
25173forcibly closed after the 5&'xx'& error message has been sent. For example:
25174.code
25175drop message = I don't take more than 20 RCPTs
25176 condition = ${if > {$rcpt_count}{20}}
25177.endd
25178There is no difference between &%deny%& and &%drop%& for the connect-time ACL.
25179The connection is always dropped after sending a 550 response.
25180
25181.next
f89d2485 25182.cindex "&%require%& ACL verb"
9b371988
PH
25183&%require%&: If all the conditions are met, control is passed to the next ACL
25184statement. If any of the conditions are not met, the ACL returns &"deny"&. For
168e428f 25185example, when checking a RCPT command,
9b371988 25186.code
f89d2485
PH
25187require message = Sender did not verify
25188 verify = sender
9b371988 25189.endd
168e428f 25190passes control to subsequent statements only if the message's sender can be
595028e4 25191verified. Otherwise, it rejects the command. Note the positioning of the
f89d2485 25192&%message%& modifier, before the &%verify%& condition. The reason for this is
595028e4 25193discussed in section &<<SECTcondmodproc>>&.
168e428f 25194
9b371988 25195.next
f89d2485 25196.cindex "&%warn%& ACL verb"
db9452a9
PH
25197&%warn%&: If all the conditions are true, a line specified by the
25198&%log_message%& modifier is written to Exim's main log. Control always passes
25199to the next ACL statement. If any condition is false, the log line is not
25200written. If an identical log line is requested several times in the same
25201message, only one copy is actually written to the log. If you want to force
25202duplicates to be written, use the &%logwrite%& modifier instead.
25203
25204If &%log_message%& is not present, a &%warn%& verb just checks its conditions
25205and obeys any &"immediate"& modifiers (such as &%control%&, &%set%&,
3cb1b51e
PH
25206&%logwrite%&, and &%add_header%&) that appear before the first failing
25207condition. There is more about adding header lines in section
25208&<<SECTaddheadacl>>&.
9b371988
PH
25209
25210If any condition on a &%warn%& statement cannot be completed (that is, there is
db9452a9 25211some sort of defer), the log line specified by &%log_message%& is not written.
f89d2485
PH
25212This does not include the case of a forced failure from a lookup, which
25213is considered to be a successful completion. After a defer, no further
3cb1b51e
PH
25214conditions or modifiers in the &%warn%& statement are processed. The incident
25215is logged, and the ACL continues to be processed, from the next statement
25216onwards.
9b371988 25217
168e428f 25218
f89d2485 25219.vindex "&$acl_verify_message$&"
9b371988
PH
25220When one of the &%warn%& conditions is an address verification that fails, the
25221text of the verification failure message is in &$acl_verify_message$&. If you
25222want this logged, you must set it up explicitly. For example:
25223.code
25224warn !verify = sender
25225 log_message = sender verify failed: $acl_verify_message
25226.endd
25227.endlist
168e428f 25228
9b371988 25229At the end of each ACL there is an implicit unconditional &%deny%&.
168e428f
PH
25230
25231As you can see from the examples above, the conditions and modifiers are
25232written one to a line, with the first one on the same line as the verb, and
25233subsequent ones on following lines. If you have a very long condition, you can
25234continue it onto several physical lines by the usual backslash continuation
25235mechanism. It is conventional to align the conditions vertically.
25236
25237
25238
9b371988
PH
25239.section "ACL variables" "SECTaclvariables"
25240.cindex "&ACL;" "variables"
168e428f
PH
25241There are some special variables that can be set during ACL processing. They
25242can be used to pass information between different ACLs, different invocations
25243of the same ACL in the same SMTP connection, and between ACLs and the routers,
3cb1b51e
PH
25244transports, and filters that are used to deliver a message. The names of these
25245variables must begin with &$acl_c$& or &$acl_m$&, followed either by a digit or
25246an underscore, but the remainder of the name can be any sequence of
25247alphanumeric characters and underscores that you choose. There is no limit on
25248the number of ACL variables. The two sets act as follows:
9b371988 25249.ilist
3cb1b51e
PH
25250The values of those variables whose names begin with &$acl_c$& persist
25251throughout an SMTP connection. They are never reset. Thus, a value that is set
25252while receiving one message is still available when receiving the next message
25253on the same SMTP connection.
25254.next
f89d2485 25255The values of those variables whose names begin with &$acl_m$& persist only
3cb1b51e
PH
25256while a message is being received. They are reset afterwards. They are also
25257reset by MAIL, RSET, EHLO, HELO, and after starting up a TLS session.
9b371988 25258.endlist
168e428f
PH
25259
25260When a message is accepted, the current values of all the ACL variables are
25261preserved with the message and are subsequently made available at delivery
db9452a9 25262time. The ACL variables are set by a modifier called &%set%&. For example:
9b371988
PH
25263.code
25264accept hosts = whatever
25265 set acl_m4 = some value
3cb1b51e
PH
25266accept authenticated = *
25267 set acl_c_auth = yes
9b371988
PH
25268.endd
25269&*Note*&: A leading dollar sign is not used when naming a variable that is to
168e428f 25270be set. If you want to set a variable without taking any action, you can use a
9b371988 25271&%warn%& verb without any other modifiers or conditions.
168e428f 25272
3cb1b51e
PH
25273.oindex &%strict_acl_vars%&
25274What happens if a syntactically valid but undefined ACL variable is
25275referenced depends on the setting of the &%strict_acl_vars%& option. If it is
25276false (the default), an empty string is substituted; if it is true, an
25277error is generated.
25278
25279Versions of Exim before 4.64 have a limited set of numbered variables, but
25280their names are compatible, so there is no problem with upgrading.
168e428f
PH
25281
25282
f89d2485 25283.section "Condition and modifier processing" "SECTcondmodproc"
9b371988
PH
25284.cindex "&ACL;" "conditions; processing"
25285.cindex "&ACL;" "modifiers; processing"
068aaea8 25286An exclamation mark preceding a condition negates its result. For example:
9b371988
PH
25287.code
25288deny domains = *.dom.example
25289 !verify = recipient
25290.endd
9b371988
PH
25291causes the ACL to return &"deny"& if the recipient domain ends in
25292&'dom.example'& and the recipient address cannot be verified. Sometimes
25293negation can be used on the right-hand side of a condition. For example, these
25294two statements are equivalent:
25295.code
068aaea8
PH
25296deny hosts = !192.168.3.4
25297deny !hosts = 192.168.3.4
9b371988
PH
25298.endd
25299However, for many conditions (&%verify%& being a good example), only left-hand
068aaea8 25300side negation of the whole condition is possible.
168e428f
PH
25301
25302The arguments of conditions and modifiers are expanded. A forced failure
25303of an expansion causes a condition to be ignored, that is, it behaves as if the
25304condition is true. Consider these two statements:
9b371988 25305.code
168e428f
PH
25306accept senders = ${lookup{$host_name}lsearch\
25307 {/some/file}{$value}fail}
25308accept senders = ${lookup{$host_name}lsearch\
25309 {/some/file}{$value}{}}
9b371988 25310.endd
168e428f
PH
25311Each attempts to look up a list of acceptable senders. If the lookup succeeds,
25312the returned list is searched, but if the lookup fails the behaviour is
9b371988
PH
25313different in the two cases. The &%fail%& in the first statement causes the
25314condition to be ignored, leaving no further conditions. The &%accept%& verb
168e428f
PH
25315therefore succeeds. The second statement, however, generates an empty list when
25316the lookup fails. No sender can match an empty list, so the condition fails,
9b371988 25317and therefore the &%accept%& also fails.
168e428f
PH
25318
25319ACL modifiers appear mixed in with conditions in ACL statements. Some of them
25320specify actions that are taken as the conditions for a statement are checked;
25321others specify text for messages that are used when access is denied or a
9b371988 25322warning is generated. The &%control%& modifier affects the way an incoming
168e428f
PH
25323message is handled.
25324
25325The positioning of the modifiers in an ACL statement important, because the
25326processing of a verb ceases as soon as its outcome is known. Only those
25327modifiers that have already been encountered will take effect. For example,
9b371988
PH
25328consider this use of the &%message%& modifier:
25329.code
25330require message = Can't verify sender
25331 verify = sender
25332 message = Can't verify recipient
25333 verify = recipient
25334 message = This message cannot be used
25335.endd
168e428f 25336If sender verification fails, Exim knows that the result of the statement is
9b371988
PH
25337&"deny"&, so it goes no further. The first &%message%& modifier has been seen,
25338so its text is used as the error message. If sender verification succeeds, but
168e428f 25339recipient verification fails, the second message is used. If recipient
9b371988 25340verification succeeds, the third message becomes &"current"&, but is never used
168e428f
PH
25341because there are no more conditions to cause failure.
25342
9b371988 25343For the &%deny%& verb, on the other hand, it is always the last &%message%&
168e428f 25344modifier that is used, because all the conditions must be true for rejection to
9b371988 25345happen. Specifying more than one &%message%& modifier does not make sense, and
168e428f 25346the message can even be specified after all the conditions. For example:
9b371988
PH
25347.code
25348deny hosts = ...
25349 !senders = *@my.domain.example
25350 message = Invalid sender from client host
25351.endd
25352The &"deny"& result does not happen until the end of the statement is reached,
168e428f
PH
25353by which time Exim has set up the message.
25354
25355
25356
9b371988
PH
25357.section "ACL modifiers" "SECTACLmodi"
25358.cindex "&ACL;" "modifiers; list of"
168e428f
PH
25359The ACL modifiers are as follows:
25360
9b371988 25361.vlist
4f578862 25362.vitem &*add_header*&&~=&~<&'text'&>
db9452a9 25363This modifier specifies one or more header lines that are to be added to an
4f578862
PH
25364incoming message, assuming, of course, that the message is ultimately
25365accepted. For details, see section &<<SECTaddheadacl>>&.
4f578862 25366
f89d2485
PH
25367.vitem &*continue*&&~=&~<&'text'&>
25368.cindex "&%continue%& ACL modifier"
25369.cindex "database" "updating in ACL"
25370This modifier does nothing of itself, and processing of the ACL always
25371continues with the next condition or modifier. The value of &%continue%& is in
25372the side effects of expanding its argument. Typically this could be used to
25373update a database. It is really just a syntactic tidiness, to avoid having to
25374write rather ugly lines like this:
25375.display
25376&`condition = ${if eq{0}{`&<&'some expansion'&>&`}{true}{true}}`&
25377.endd
25378Instead, all you need is
25379.display
25380&`continue = `&<&'some expansion'&>
25381.endd
f89d2485 25382
9b371988 25383.vitem &*control*&&~=&~<&'text'&>
f89d2485 25384.cindex "&%control%& ACL modifier"
168e428f
PH
25385This modifier affects the subsequent processing of the SMTP connection or of an
25386incoming message that is accepted. The effect of the first type of control
25387lasts for the duration of the connection, whereas the effect of the second type
25388lasts only until the current message has been received. The message-specific
25389controls always apply to the whole message, not to individual recipients,
9b371988
PH
25390even if the &%control%& modifier appears in a RCPT ACL.
25391
168e428f 25392As there are now quite a few controls that can be applied, they are described
9b371988
PH
25393separately in section &<<SECTcontrols>>&. The &%control%& modifier can be used
25394in several different ways. For example:
25395
25396. ==== As this is a nested list, any displays it contains must be indented
f89d2485
PH
25397. ==== as otherwise they are too far to the left. That comment applies only
25398. ==== when xmlto and fop are used; formatting with sdop gets it right either
25399. ==== way.
9b371988
PH
25400
25401.ilist
25402It can be at the end of an &%accept%& statement:
25403.code
25404 accept ...some conditions
25405 control = queue_only
25406.endd
25407In this case, the control is applied when this statement yields &"accept"&, in
168e428f
PH
25408other words, when the conditions are all true.
25409
9b371988
PH
25410.next
25411It can be in the middle of an &%accept%& statement:
25412.code
25413 accept ...some conditions...
25414 control = queue_only
25415 ...some more conditions...
25416.endd
168e428f
PH
25417If the first set of conditions are true, the control is applied, even if the
25418statement does not accept because one of the second set of conditions is false.
9b371988
PH
25419In this case, some subsequent statement must yield &"accept"& for the control
25420to be relevant.
168e428f 25421
9b371988
PH
25422.next
25423It can be used with &%warn%& to apply the control, leaving the
168e428f
PH
25424decision about accepting or denying to a subsequent verb. For
25425example:
9b371988
PH
25426.code
25427 warn ...some conditions...
25428 control = freeze
25429 accept ...
25430.endd
25431This example of &%warn%& does not contain &%message%&, &%log_message%&, or
25432&%logwrite%&, so it does not add anything to the message and does not write a
25433log entry.
25434
25435.next
25436If you want to apply a control unconditionally, you can use it with a
25437&%require%& verb. For example:
25438.code
8a7f259d 25439 require control = no_multiline_responses
9b371988
PH
25440.endd
25441.endlist
25442
25443.vitem &*delay*&&~=&~<&'time'&>
f89d2485
PH
25444.cindex "&%delay%& ACL modifier"
25445.oindex "&%-bh%&"
f89d2485
PH
25446This modifier may appear in any ACL. It causes Exim to wait for the time
25447interval before proceeding. However, when testing Exim using the &%-bh%&
25448option, the delay is not actually imposed (an appropriate message is output
25449instead). The time is given in the usual Exim notation, and the delay happens
25450as soon as the modifier is processed. In an SMTP session, pending output is
25451flushed before the delay is imposed.
9b371988
PH
25452
25453Like &%control%&, &%delay%& can be used with &%accept%& or &%deny%&, for
25454example:
25455.code
25456deny ...some conditions...
25457 delay = 30s
25458.endd
168e428f 25459The delay happens if all the conditions are true, before the statement returns
9b371988
PH
25460&"deny"&. Compare this with:
25461.code
25462deny delay = 30s
25463 ...some conditions...
25464.endd
25465which waits for 30s before processing the conditions. The &%delay%& modifier
25466can also be used with &%warn%& and together with &%control%&:
25467.code
25468warn ...some conditions...
25469 delay = 2m
25470 control = freeze
25471accept ...
25472.endd
25473
f89d2485
PH
25474If &%delay%& is encountered when the SMTP PIPELINING extension is in use,
25475responses to several commands are no longer buffered and sent in one packet (as
25476they would normally be) because all output is flushed before imposing the
25477delay. This optimization is disabled so that a number of small delays do not
25478appear to the client as one large aggregated delay that might provoke an
25479unwanted timeout. You can, however, disable output flushing for &%delay%& by
25480using a &%control%& modifier to set &%no_delay_flush%&.
f89d2485
PH
25481
25482
9b371988 25483.vitem &*endpass*&
f89d2485 25484.cindex "&%endpass%& ACL modifier"
3cb1b51e
PH
25485This modifier, which has no argument, is recognized only in &%accept%& and
25486&%discard%& statements. It marks the boundary between the conditions whose
25487failure causes control to pass to the next statement, and the conditions whose
25488failure causes the ACL to return &"deny"&. This concept has proved to be
25489confusing to some people, so the use of &%endpass%& is no longer recommended as
25490&"best practice"&. See the description of &%accept%& above for more details.
3cb1b51e 25491
168e428f 25492
9b371988 25493.vitem &*log_message*&&~=&~<&'text'&>
f89d2485 25494.cindex "&%log_message%& ACL modifier"
168e428f 25495This modifier sets up a message that is used as part of the log message if the
9b371988
PH
25496ACL denies access or a &%warn%& statement's conditions are true. For example:
25497.code
25498require log_message = wrong cipher suite $tls_cipher
25499 encrypted = DES-CBC3-SHA
25500.endd
3cb1b51e
PH
25501&%log_message%& is also used when recipients are discarded by &%discard%&. For
25502example:
25503.display
25504&`discard `&<&'some conditions'&>
25505&` log_message = Discarded $local_part@$domain because...`&
25506.endd
25507When access is denied, &%log_message%& adds to any underlying error message
25508that may exist because of a condition failure. For example, while verifying a
25509recipient address, a &':fail:'& redirection might have already set up a
25510message.
25511
25512The message may be defined before the conditions to which it applies, because
25513the string expansion does not happen until Exim decides that access is to be
25514denied. This means that any variables that are set by the condition are
25515available for inclusion in the message. For example, the &$dnslist_$&<&'xxx'&>
25516variables are set after a DNS black list lookup succeeds. If the expansion of
25517&%log_message%& fails, or if the result is an empty string, the modifier is
25518ignored.
9b371988 25519
f89d2485 25520.vindex "&$acl_verify_message$&"
9b371988
PH
25521If you want to use a &%warn%& statement to log the result of an address
25522verification, you can use &$acl_verify_message$& to include the verification
168e428f 25523error message.
9b371988
PH
25524
25525If &%log_message%& is used with a &%warn%& statement, &"Warning:"& is added to
25526the start of the logged message. If the same warning log message is requested
25527more than once while receiving a single email message, only one copy is
25528actually logged. If you want to log multiple copies, use &%logwrite%& instead
25529of &%log_message%&. In the absence of &%log_message%& and &%logwrite%&, nothing
f89d2485 25530is logged for a successful &%warn%& statement.
9b371988
PH
25531
25532If &%log_message%& is not present and there is no underlying error message (for
25533example, from the failure of address verification), but &%message%& is present,
25534the &%message%& text is used for logging rejections. However, if any text for
168e428f 25535logging contains newlines, only the first line is logged. In the absence of
9b371988 25536both &%log_message%& and &%message%&, a default built-in message is used for
168e428f
PH
25537logging rejections.
25538
3cb1b51e 25539
3cb1b51e 25540.vitem "&*log_reject_target*&&~=&~<&'log name list'&>"
f89d2485 25541.cindex "&%log_reject_target%& ACL modifier"
3cb1b51e
PH
25542.cindex "logging in ACL" "specifying which log"
25543This modifier makes it possible to specify which logs are used for messages
25544about ACL rejections. Its argument is a colon-separated list of words that can
25545be &"main"&, &"reject"&, or &"panic"&. The default is &`main:reject`&. The list
25546may be empty, in which case a rejection is not logged at all. For example, this
25547ACL fragment writes no logging information when access is denied:
25548.display
25549&`deny `&<&'some conditions'&>
25550&` log_reject_target =`&
25551.endd
25552This modifier can be used in SMTP and non-SMTP ACLs. It applies to both
08dfc92a
TF
25553permanent and temporary rejections. Its effect lasts for the rest of the
25554current ACL.
3cb1b51e
PH
25555
25556
9b371988 25557.vitem &*logwrite*&&~=&~<&'text'&>
f89d2485 25558.cindex "&%logwrite%& ACL modifier"
9b371988 25559.cindex "logging in ACL" "immediate"
168e428f 25560This modifier writes a message to a log file as soon as it is encountered when
9b371988 25561processing an ACL. (Compare &%log_message%&, which, except in the case of
f89d2485 25562&%warn%& and &%discard%&, is used only if the ACL statement denies
3cb1b51e
PH
25563access.) The &%logwrite%& modifier can be used to log special incidents in
25564ACLs. For example:
9b371988
PH
25565.display
25566&`accept `&<&'some special conditions'&>
25567&` control = freeze`&
25568&` logwrite = froze message because ...`&
25569.endd
168e428f
PH
25570By default, the message is written to the main log. However, it may begin
25571with a colon, followed by a comma-separated list of log names, and then
25572another colon, to specify exactly which logs are to be written. For
25573example:
9b371988
PH
25574.code
25575logwrite = :main,reject: text for main and reject logs
25576logwrite = :panic: text for panic log only
25577.endd
168e428f 25578
3cb1b51e 25579
9b371988 25580.vitem &*message*&&~=&~<&'text'&>
f89d2485 25581.cindex "&%message%& ACL modifier"
3cb1b51e
PH
25582This modifier sets up a text string that is expanded and used as a response
25583message when an ACL statement terminates the ACL with an &"accept"&, &"deny"&,
25584or &"defer"& response. (In the case of the &%accept%& and &%discard%& verbs,
25585there is some complication if &%endpass%& is involved; see the description of
25586&%accept%& for details.)
25587
25588The expansion of the message happens at the time Exim decides that the ACL is
25589to end, not at the time it processes &%message%&. If the expansion fails, or
25590generates an empty string, the modifier is ignored. Here is an example where
25591&%message%& must be specified first, because the ACL ends with a rejection if
25592the &%hosts%& condition fails:
25593.code
25594require message = Host not recognized
25595 hosts = 10.0.0.0/8
25596.endd
25597(Once a condition has failed, no further conditions or modifiers are
25598processed.)
9b371988 25599
5abeaa6e 25600.cindex "SMTP" "error codes"
0a4e3112 25601.oindex "&%smtp_banner%&
3cb1b51e
PH
25602For ACLs that are triggered by SMTP commands, the message is returned as part
25603of the SMTP response. The use of &%message%& with &%accept%& (or &%discard%&)
25604is meaningful only for SMTP, as no message is returned when a non-SMTP message
25605is accepted. In the case of the connect ACL, accepting with a message modifier
25606overrides the value of &%smtp_banner%&. For the EHLO/HELO ACL, a customized
25607accept message may not contain more than one line (otherwise it will be
25608truncated at the first newline and a panic logged), and it cannot affect the
25609EHLO options.
25610
25611When SMTP is involved, the message may begin with an overriding response code,
25612consisting of three digits optionally followed by an &"extended response code"&
25613of the form &'n.n.n'&, each code being followed by a space. For example:
25614.code
25615deny message = 599 1.2.3 Host not welcome
25616 hosts = 192.168.34.0/24
25617.endd
25618The first digit of the supplied response code must be the same as would be sent
25619by default. A panic occurs if it is not. Exim uses a 550 code when it denies
25620access, but for the predata ACL, note that the default success code is 354, not
256212&'xx'&.
25622
25623Notwithstanding the previous paragraph, for the QUIT ACL, unlike the others,
25624the message modifier cannot override the 221 response code.
25625
25626The text in a &%message%& modifier is literal; any quotes are taken as
25627literals, but because the string is expanded, backslash escapes are processed
25628anyway. If the message contains newlines, this gives rise to a multi-line SMTP
25629response.
5abeaa6e 25630
f89d2485 25631.vindex "&$acl_verify_message$&"
9b371988 25632If &%message%& is used on a statement that verifies an address, the message
168e428f
PH
25633specified overrides any message that is generated by the verification process.
25634However, the original message is available in the variable
9b371988
PH
25635&$acl_verify_message$&, so you can incorporate it into your message if you
25636wish. In particular, if you want the text from &%:fail:%& items in &(redirect)&
25637routers to be passed back as part of the SMTP response, you should either not
25638use a &%message%& modifier, or make use of &$acl_verify_message$&.
168e428f 25639
4f578862
PH
25640For compatibility with previous releases of Exim, a &%message%& modifier that
25641is used with a &%warn%& verb behaves in a similar way to the &%add_header%&
25642modifier, but this usage is now deprecated. However, &%message%& acts only when
25643all the conditions are true, wherever it appears in an ACL command, whereas
25644&%add_header%& acts as soon as it is encountered. If &%message%& is used with
25645&%warn%& in an ACL that is not concerned with receiving a message, it has no
25646effect.
4f578862 25647
3cb1b51e 25648
9b371988 25649.vitem &*set*&&~<&'acl_name'&>&~=&~<&'value'&>
f89d2485 25650.cindex "&%set%& ACL modifier"
168e428f 25651This modifier puts a value into one of the ACL variables (see section
9b371988
PH
25652&<<SECTaclvariables>>&).
25653.endlist
168e428f
PH
25654
25655
25656
4f578862
PH
25657
25658
9b371988 25659.section "Use of the control modifier" "SECTcontrols"
f89d2485 25660.cindex "&%control%& ACL modifier"
9b371988 25661The &%control%& modifier supports the following settings:
168e428f 25662
9b371988 25663.vlist
4f578862
PH
25664.vitem &*control&~=&~allow_auth_unadvertised*&
25665This modifier allows a client host to use the SMTP AUTH command even when it
25666has not been advertised in response to EHLO. Furthermore, because there are
25667apparently some really broken clients that do this, Exim will accept AUTH after
25668HELO (rather than EHLO) when this control is set. It should be used only if you
25669really need it, and you should limit its use to those broken clients that do
25670not work without it. For example:
25671.code
25672warn hosts = 192.168.34.25
25673 control = allow_auth_unadvertised
25674.endd
25675Normally, when an Exim server receives an AUTH command, it checks the name of
25676the authentication mechanism that is given in the command to ensure that it
25677matches an advertised mechanism. When this control is set, the check that a
25678mechanism has been advertised is bypassed. Any configured mechanism can be used
25679by the client. This control is permitted only in the connection and HELO ACLs.
4f578862
PH
25680
25681
f89d2485
PH
25682.vitem &*control&~=&~caseful_local_part*& &&&
25683 &*control&~=&~caselower_local_part*&
9b371988
PH
25684.cindex "&ACL;" "case of local part in"
25685.cindex "case of local parts"
f89d2485 25686.vindex "&$local_part$&"
9b371988
PH
25687These two controls are permitted only in the ACL specified by &%acl_smtp_rcpt%&
25688(that is, during RCPT processing). By default, the contents of &$local_part$&
25689are lower cased before ACL processing. If &"caseful_local_part"& is specified,
25690any uppercase letters in the original local part are restored in &$local_part$&
25691for the rest of the ACL, or until a control that sets &"caselower_local_part"&
25692is encountered.
25693
168e428f
PH
25694These controls affect only the current recipient. Moreover, they apply only to
25695local part handling that takes place directly in the ACL (for example, as a key
25696in lookups). If a test to verify the recipient is obeyed, the case-related
25697handling of the local part during the verification is controlled by the router
9b371988
PH
25698configuration (see the &%caseful_local_part%& generic router option).
25699
168e428f 25700This facility could be used, for example, to add a spam score to local parts
9b371988 25701containing upper case letters. For example, using &$acl_m4$& to accumulate the
168e428f 25702spam score:
9b371988 25703.code
168e428f
PH
25704warn control = caseful_local_part
25705 set acl_m4 = ${eval:\
25706 $acl_m4 + \
25707 ${if match{$local_part}{[A-Z]}{1}{0}}\
25708 }
25709 control = caselower_local_part
9b371988 25710.endd
168e428f
PH
25711Notice that we put back the lower cased version afterwards, assuming that
25712is what is wanted for subsequent tests.
25713
f89d2485
PH
25714.vitem &*control&~=&~enforce_sync*& &&&
25715 &*control&~=&~no_enforce_sync*&
9b371988
PH
25716.cindex "SMTP" "synchronization checking"
25717.cindex "synchronization checking in SMTP"
168e428f 25718These controls make it possible to be selective about when SMTP synchronization
9b371988 25719is enforced. The global option &%smtp_enforce_sync%& specifies the initial
168e428f 25720state of the switch (it is true by default). See the description of this option
9b371988
PH
25721in chapter &<<CHAPmainconfig>>& for details of SMTP synchronization checking.
25722
168e428f
PH
25723The effect of these two controls lasts for the remainder of the SMTP
25724connection. They can appear in any ACL except the one for the non-SMTP
25725messages. The most straightforward place to put them is in the ACL defined by
9b371988 25726&%acl_smtp_connect%&, which is run at the start of an incoming SMTP connection,
168e428f
PH
25727before the first synchronization check. The expected use is to turn off the
25728synchronization checks for badly-behaved hosts that you nevertheless need to
25729work with.
25730
068aaea8 25731
9b371988
PH
25732.vitem &*control&~=&~fakedefer/*&<&'message'&>
25733.cindex "fake defer"
f89d2485 25734.cindex "defer, fake"
9b371988 25735This control works in exactly the same way as &%fakereject%& (described below)
068aaea8 25736except that it causes an SMTP 450 response after the message data instead of a
9b371988 25737550 response. You must take care when using &%fakedefer%& because it causes the
068aaea8 25738messages to be duplicated when the sender retries. Therefore, you should not
9b371988 25739use &%fakedefer%& if the message is to be delivered normally.
068aaea8 25740
9b371988
PH
25741.vitem &*control&~=&~fakereject/*&<&'message'&>
25742.cindex "fake rejection"
f89d2485 25743.cindex "rejection, fake"
168e428f
PH
25744This control is permitted only for the MAIL, RCPT, and DATA ACLs, in other
25745words, only when an SMTP message is being received. If Exim accepts the
25746message, instead the final 250 response, a 550 rejection message is sent.
25747However, Exim proceeds to deliver the message as normal. The control applies
25748only to the current message, not to any subsequent ones that may be received in
25749the same SMTP connection.
168e428f 25750
9b371988
PH
25751The text for the 550 response is taken from the &%control%& modifier. If no
25752message is supplied, the following is used:
25753.code
25754550-Your message has been rejected but is being
25755550-kept for evaluation.
25756550-If it was a legitimate message, it may still be
25757550 delivered to the target recipient(s).
25758.endd
f89d2485 25759This facility should be used with extreme caution.
168e428f 25760
9b371988
PH
25761.vitem &*control&~=&~freeze*&
25762.cindex "frozen messages" "forcing in ACL"
168e428f
PH
25763This control is permitted only for the MAIL, RCPT, DATA, and non-SMTP ACLs, in
25764other words, only when a message is being received. If the message is accepted,
25765it is placed on Exim's queue and frozen. The control applies only to the
25766current message, not to any subsequent ones that may be received in the same
25767SMTP connection.
25768
4f578862
PH
25769This modifier can optionally be followed by &`/no_tell`&. If the global option
25770&%freeze_tell%& is set, it is ignored for the current message (that is, nobody
25771is told about the freezing), provided all the &*control=freeze*& modifiers that
25772are obeyed for the current message have the &`/no_tell`& option.
4f578862 25773
f89d2485
PH
25774.vitem &*control&~=&~no_delay_flush*&
25775.cindex "SMTP" "output flushing, disabling for delay"
25776Exim normally flushes SMTP output before implementing a delay in an ACL, to
25777avoid unexpected timeouts in clients when the SMTP PIPELINING extension is in
25778use. This control, as long as it is encountered before the &%delay%& modifier,
25779disables such output flushing.
25780
25781.vitem &*control&~=&~no_callout_flush*&
25782.cindex "SMTP" "output flushing, disabling for callout"
25783Exim normally flushes SMTP output before performing a callout in an ACL, to
25784avoid unexpected timeouts in clients when the SMTP PIPELINING extension is in
25785use. This control, as long as it is encountered before the &%verify%& condition
25786that causes the callout, disables such output flushing.
4f578862 25787
9b371988 25788.vitem &*control&~=&~no_mbox_unspool*&
168e428f
PH
25789This control is available when Exim is compiled with the content scanning
25790extension. Content scanning may require a copy of the current message, or parts
9b371988 25791of it, to be written in &"mbox format"& to a spool file, for passing to a virus
168e428f
PH
25792or spam scanner. Normally, such copies are deleted when they are no longer
25793needed. If this control is set, the copies are not deleted. The control applies
25794only to the current message, not to any subsequent ones that may be received in
25795the same SMTP connection. It is provided for debugging purposes and is unlikely
25796to be useful in production.
25797
8a7f259d 25798.vitem &*control&~=&~no_multiline_responses*&
f89d2485 25799.cindex "multiline responses, suppressing"
168e428f
PH
25800This control is permitted for any ACL except the one for non-SMTP messages.
25801It seems that there are broken clients in use that cannot handle multiline
25802SMTP responses, despite the fact that RFC 821 defined them over 20 years ago.
9b371988 25803
168e428f
PH
25804If this control is set, multiline SMTP responses from ACL rejections are
25805suppressed. One way of doing this would have been to put out these responses as
25806one long line. However, RFC 2821 specifies a maximum of 512 bytes per response
9b371988
PH
25807(&"use multiline responses for more"& it says &-- ha!), and some of the
25808responses might get close to that. So this facility, which is after all only a
25809sop to broken clients, is implemented by doing two very easy things:
25810
25811.ilist
25812Extra information that is normally output as part of a rejection caused by
25813sender verification failure is omitted. Only the final line (typically &"sender
25814verification failed"&) is sent.
25815.next
25816If a &%message%& modifier supplies a multiline response, only the first
168e428f 25817line is output.
9b371988
PH
25818.endlist
25819
168e428f
PH
25820The setting of the switch can, of course, be made conditional on the
25821calling host. Its effect lasts until the end of the SMTP connection.
25822
f89d2485
PH
25823.vitem &*control&~=&~no_pipelining*&
25824.cindex "PIPELINING" "suppressing advertising"
25825This control turns off the advertising of the PIPELINING extension to SMTP in
25826the current session. To be useful, it must be obeyed before Exim sends its
25827response to an EHLO command. Therefore, it should normally appear in an ACL
25828controlled by &%acl_smtp_connect%& or &%acl_smtp_helo%&. See also
25829&%pipelining_advertise_hosts%&.
f89d2485 25830
9b371988 25831.vitem &*control&~=&~queue_only*&
0a4e3112 25832.oindex "&%queue_only%&"
9b371988 25833.cindex "queueing incoming messages"
168e428f
PH
25834This control is permitted only for the MAIL, RCPT, DATA, and non-SMTP ACLs, in
25835other words, only when a message is being received. If the message is accepted,
25836it is placed on Exim's queue and left there for delivery by a subsequent queue
25837runner. No immediate delivery process is started. In other words, it has the
9b371988
PH
25838effect as the &%queue_only%& global option. However, the control applies only
25839to the current message, not to any subsequent ones that may be received in the
168e428f
PH
25840same SMTP connection.
25841
9b371988
PH
25842.vitem &*control&~=&~submission/*&<&'options'&>
25843.cindex "message" "submission"
25844.cindex "submission mode"
168e428f 25845This control is permitted only for the MAIL, RCPT, and start of data ACLs (the
9b371988 25846latter is the one defined by &%acl_smtp_predata%&). Setting it tells Exim that
168e428f 25847the current message is a submission from a local MUA. In this case, Exim
9b371988 25848operates in &"submission mode"&, and applies certain fixups to the message if
9c2b45c9 25849necessary. For example, it adds a &'Date:'& header line if one is not present.
9b371988 25850This control is not permitted in the &%acl_smtp_data%& ACL, because that is too
168e428f 25851late (the message has already been created).
168e428f 25852
9b371988
PH
25853Chapter &<<CHAPmsgproc>>& describes the processing that Exim applies to
25854messages. Section &<<SECTsubmodnon>>& covers the processing that happens in
25855submission mode; the available options for this control are described there.
25856The control applies only to the current message, not to any subsequent ones
25857that may be received in the same SMTP connection.
25858
9b371988 25859.vitem &*control&~=&~suppress_local_fixups*&
f89d2485 25860.cindex "submission fixups, suppressing"
068aaea8 25861This control applies to locally submitted (non TCP/IP) messages, and is the
9c2b45c9 25862complement of &`control = submission`&. It disables the fixups that are
9b371988
PH
25863normally applied to locally-submitted messages. Specifically:
25864
25865.ilist
25866Any &'Sender:'& header line is left alone (in this respect, it is a
25867dynamic version of &%local_sender_retain%&).
25868.next
25869No &'Message-ID:'&, &'From:'&, or &'Date:'& header lines are added.
25870.next
25871There is no check that &'From:'& corresponds to the actual sender.
25872.endlist ilist
25873
db9452a9
PH
25874This control may be useful when a remotely-originated message is accepted,
25875passed to some scanning program, and then re-submitted for delivery. It can be
25876used only in the &%acl_smtp_mail%&, &%acl_smtp_rcpt%&, &%acl_smtp_predata%&,
25877and &%acl_not_smtp_start%& ACLs, because it has to be set before the message's
25878data is read.
f89d2485 25879
f89d2485
PH
25880&*Note:*& This control applies only to the current message, not to any others
25881that are being submitted at the same time using &%-bs%& or &%-bS%&.
9b371988 25882.endlist vlist
068aaea8 25883
f89d2485
PH
25884
25885.section "Summary of message fixup control" "SECTsummesfix"
068aaea8
PH
25886All four possibilities for message fixups can be specified:
25887
9b371988
PH
25888.ilist
25889Locally submitted, fixups applied: the default.
25890.next
9c2b45c9
NM
25891Locally submitted, no fixups applied: use
25892&`control = suppress_local_fixups`&.
9b371988
PH
25893.next
25894Remotely submitted, no fixups applied: the default.
25895.next
9c2b45c9 25896Remotely submitted, fixups applied: use &`control = submission`&.
9b371988 25897.endlist
9b371988
PH
25898
25899
25900
4f578862 25901.section "Adding header lines in ACLs" "SECTaddheadacl"
9b371988
PH
25902.cindex "header lines" "adding in an ACL"
25903.cindex "header lines" "position of added lines"
f89d2485 25904.cindex "&%message%& ACL modifier"
4f578862
PH
25905The &%add_header%& modifier can be used to add one or more extra header lines
25906to an incoming message, as in this example:
9b371988 25907.code
4f578862 25908warn dnslists = sbl.spamhaus.org : \
168e428f 25909 dialup.mail-abuse.org
4f578862 25910 add_header = X-blacklisted-at: $dnslist_domain
9b371988 25911.endd
4f578862
PH
25912The &%add_header%& modifier is permitted in the MAIL, RCPT, PREDATA, DATA,
25913MIME, and non-SMTP ACLs (in other words, those that are concerned with
25914receiving a message). The message must ultimately be accepted for
25915&%add_header%& to have any significant effect. You can use &%add_header%& with
25916any ACL verb, including &%deny%& (though this is potentially useful only in a
25917RCPT ACL).
25918
25919If the data for the &%add_header%& modifier contains one or more newlines that
25920are not followed by a space or a tab, it is assumed to contain multiple header
9b371988 25921lines. Each one is checked for valid syntax; &`X-ACL-Warn:`& is added to the
168e428f
PH
25922front of any line that is not a valid header line.
25923
4f578862
PH
25924Added header lines are accumulated during the MAIL, RCPT, and predata ACLs.
25925They are added to the message before processing the DATA and MIME ACLs.
25926However, if an identical header line is requested more than once, only one copy
25927is actually added to the message. Further header lines may be accumulated
25928during the DATA and MIME ACLs, after which they are added to the message, again
25929with duplicates suppressed. Thus, it is possible to add two identical header
25930lines to an SMTP message, but only if one is added before DATA and one after.
25931In the case of non-SMTP messages, new headers are accumulated during the
db9452a9
PH
25932non-SMTP ACLs, and are added to the message after all the ACLs have run. If a
25933message is rejected after DATA or by the non-SMTP ACL, all added header lines
25934are included in the entry that is written to the reject log.
4f578862
PH
25935
25936.cindex "header lines" "added; visibility of"
25937Header lines are not visible in string expansions until they are added to the
25938message. It follows that header lines defined in the MAIL, RCPT, and predata
25939ACLs are not visible until the DATA ACL and MIME ACLs are run. Similarly,
25940header lines that are added by the DATA or MIME ACLs are not visible in those
25941ACLs. Because of this restriction, you cannot use header lines as a way of
25942passing data between (for example) the MAIL and RCPT ACLs. If you want to do
25943this, you can use ACL variables, as described in section
25944&<<SECTaclvariables>>&.
25945
25946The &%add_header%& modifier acts immediately it is encountered during the
25947processing of an ACL. Notice the difference between these two cases:
25948.display
25949&`accept add_header = ADDED: some text`&
25950&` `&<&'some condition'&>
25951
25952&`accept `&<&'some condition'&>
25953&` add_header = ADDED: some text`&
25954.endd
25955In the first case, the header line is always added, whether or not the
25956condition is true. In the second case, the header line is added only if the
25957condition is true. Multiple occurrences of &%add_header%& may occur in the same
25958ACL statement. All those that are encountered before a condition fails are
25959honoured.
25960
f89d2485 25961.cindex "&%warn%& ACL verb"
4f578862
PH
25962For compatibility with previous versions of Exim, a &%message%& modifier for a
25963&%warn%& verb acts in the same way as &%add_header%&, except that it takes
25964effect only if all the conditions are true, even if it appears before some of
25965them. Furthermore, only the last occurrence of &%message%& is honoured. This
25966usage of &%message%& is now deprecated. If both &%add_header%& and &%message%&
25967are present on a &%warn%& verb, both are processed according to their
25968specifications.
25969
25970By default, new header lines are added to a message at the end of the existing
25971header lines. However, you can specify that any particular header line should
25972be added right at the start (before all the &'Received:'& lines), immediately
25973after the first block of &'Received:'& lines, or immediately before any line
25974that is not a &'Received:'& or &'Resent-something:'& header.
168e428f 25975
9b371988
PH
25976This is done by specifying &":at_start:"&, &":after_received:"&, or
25977&":at_start_rfc:"& (or, for completeness, &":at_end:"&) before the text of the
168e428f
PH
25978header line, respectively. (Header text cannot start with a colon, as there has
25979to be a header name first.) For example:
9b371988 25980.code
4f578862
PH
25981warn add_header = \
25982 :after_received:X-My-Header: something or other...
9b371988 25983.endd
4f578862
PH
25984If more than one header line is supplied in a single &%add_header%& modifier,
25985each one is treated independently and can therefore be placed differently. If
25986you add more than one line at the start, or after the Received: block, they end
25987up in reverse order.
168e428f 25988
9b371988 25989&*Warning*&: This facility currently applies only to header lines that are
168e428f
PH
25990added in an ACL. It does NOT work for header lines that are added in a
25991system filter or in a router or transport.
168e428f 25992
168e428f
PH
25993
25994
25995
9b371988
PH
25996.section "ACL conditions" "SECTaclconditions"
25997.cindex "&ACL;" "conditions; list of"
168e428f
PH
25998Some of conditions listed in this section are available only when Exim is
25999compiled with the content-scanning extension. They are included here briefly
26000for completeness. More detailed descriptions can be found in the discussion on
9b371988 26001content scanning in chapter &<<CHAPexiscan>>&.
168e428f
PH
26002
26003Not all conditions are relevant in all circumstances. For example, testing
26004senders and recipients does not make sense in an ACL that is being run as the
26005result of the arrival of an ETRN command, and checks on message headers can be
9b371988
PH
26006done only in the ACLs specified by &%acl_smtp_data%& and &%acl_not_smtp%&. You
26007can use the same condition (with different parameters) more than once in the
26008same ACL statement. This provides a way of specifying an &"and"& conjunction.
26009The conditions are as follows:
26010
26011
26012.vlist
26013.vitem &*acl&~=&~*&<&'name&~of&~acl&~or&~ACL&~string&~or&~file&~name&~'&>
26014.cindex "&ACL;" "nested"
26015.cindex "&ACL;" "indirect"
f89d2485 26016.cindex "&%acl%& ACL condition"
9b371988
PH
26017The possible values of the argument are the same as for the
26018&%acl_smtp_%&&'xxx'& options. The named or inline ACL is run. If it returns
26019&"accept"& the condition is true; if it returns &"deny"& the condition is
26020false. If it returns &"defer"&, the current ACL returns &"defer"& unless the
26021condition is on a &%warn%& verb. In that case, a &"defer"& return makes the
26022condition false. This means that further processing of the &%warn%& verb
26023ceases, but processing of the ACL continues.
26024
26025If the nested &%acl%& returns &"drop"& and the outer condition denies access,
26026the connection is dropped. If it returns &"discard"&, the verb must be
26027&%accept%& or &%discard%&, and the action is taken immediately &-- no further
26028conditions are tested.
26029
168e428f
PH
26030ACLs may be nested up to 20 deep; the limit exists purely to catch runaway
26031loops. This condition allows you to use different ACLs in different
26032circumstances. For example, different ACLs can be used to handle RCPT commands
26033for different local users or different local domains.
26034
9b371988 26035.vitem &*authenticated&~=&~*&<&'string&~list'&>
f89d2485 26036.cindex "&%authenticated%& ACL condition"
9b371988
PH
26037.cindex "authentication" "ACL checking"
26038.cindex "&ACL;" "testing for authentication"
168e428f
PH
26039If the SMTP connection is not authenticated, the condition is false. Otherwise,
26040the name of the authenticator is tested against the list. To test for
26041authentication by any authenticator, you can set
9b371988
PH
26042.code
26043authenticated = *
26044.endd
26045
26046.vitem &*condition&~=&~*&<&'string'&>
f89d2485 26047.cindex "&%condition%& ACL condition"
9b371988
PH
26048.cindex "customizing" "ACL condition"
26049.cindex "&ACL;" "customized test"
f89d2485 26050.cindex "&ACL;" "testing, customized"
168e428f
PH
26051This feature allows you to make up custom conditions. If the result of
26052expanding the string is an empty string, the number zero, or one of the strings
9b371988
PH
26053&"no"& or &"false"&, the condition is false. If the result is any non-zero
26054number, or one of the strings &"yes"& or &"true"&, the condition is true. For
db9452a9 26055any other value, some error is assumed to have occurred, and the ACL returns
3cb1b51e 26056&"defer"&. However, if the expansion is forced to fail, the condition is
db9452a9 26057ignored. The effect is to treat it as true, whether it is positive or
3cb1b51e 26058negative.
168e428f 26059
9b371988 26060.vitem &*decode&~=&~*&<&'location'&>
f89d2485 26061.cindex "&%decode%& ACL condition"
168e428f 26062This condition is available only when Exim is compiled with the
3cb1b51e 26063content-scanning extension, and it is allowed only in the ACL defined by
9b371988 26064&%acl_smtp_mime%&. It causes the current MIME part to be decoded into a file.
595028e4 26065If all goes well, the condition is true. It is false only if there are
f89d2485 26066problems such as a syntax error or a memory shortage. For more details, see
595028e4 26067chapter &<<CHAPexiscan>>&.
168e428f 26068
9b371988 26069.vitem &*demime&~=&~*&<&'extension&~list'&>
f89d2485 26070.cindex "&%demime%& ACL condition"
068aaea8 26071This condition is available only when Exim is compiled with the
9b371988
PH
26072content-scanning extension. Its use is described in section
26073&<<SECTdemimecond>>&.
26074
26075.vitem &*dnslists&~=&~*&<&'list&~of&~domain&~names&~and&~other&~data'&>
f89d2485 26076.cindex "&%dnslists%& ACL condition"
9b371988
PH
26077.cindex "DNS list" "in ACL"
26078.cindex "black list (DNS)"
26079.cindex "&ACL;" "testing a DNS list"
168e428f 26080This condition checks for entries in DNS black lists. These are also known as
9b371988
PH
26081&"RBL lists"&, after the original Realtime Blackhole List, but note that the
26082use of the lists at &'mail-abuse.org'& now carries a charge. There are too many
168e428f 26083different variants of this condition to describe briefly here. See sections
595028e4 26084&<<SECTmorednslists>>&&--&<<SECTmorednslistslast>>& for details.
168e428f 26085
9b371988 26086.vitem &*domains&~=&~*&<&'domain&~list'&>
f89d2485 26087.cindex "&%domains%& ACL condition"
9b371988
PH
26088.cindex "domain" "ACL checking"
26089.cindex "&ACL;" "testing a recipient domain"
f89d2485 26090.vindex "&$domain_data$&"
168e428f
PH
26091This condition is relevant only after a RCPT command. It checks that the domain
26092of the recipient address is in the domain list. If percent-hack processing is
26093enabled, it is done before this test is done. If the check succeeds with a
9b371988
PH
26094lookup, the result of the lookup is placed in &$domain_data$& until the next
26095&%domains%& test.
168e428f 26096
3cb1b51e
PH
26097&*Note carefully*& (because many people seem to fall foul of this): you cannot
26098use &%domains%& in a DATA ACL.
3cb1b51e
PH
26099
26100
9b371988 26101.vitem &*encrypted&~=&~*&<&'string&~list'&>
f89d2485 26102.cindex "&%encrypted%& ACL condition"
9b371988
PH
26103.cindex "encryption" "checking in an ACL"
26104.cindex "&ACL;" "testing for encryption"
168e428f
PH
26105If the SMTP connection is not encrypted, the condition is false. Otherwise, the
26106name of the cipher suite in use is tested against the list. To test for
26107encryption without testing for any specific cipher suite(s), set
9b371988
PH
26108.code
26109encrypted = *
26110.endd
26111
3cb1b51e 26112
9b371988 26113.vitem &*hosts&~=&~*&<&'&~host&~list'&>
f89d2485 26114.cindex "&%hosts%& ACL condition"
9b371988
PH
26115.cindex "host" "ACL checking"
26116.cindex "&ACL;" "testing the client host"
168e428f
PH
26117This condition tests that the calling host matches the host list. If you have
26118name lookups or wildcarded host names and IP addresses in the same host list,
26119you should normally put the IP addresses first. For example, you could have:
9b371988
PH
26120.code
26121accept hosts = 10.9.8.7 : dbm;/etc/friendly/hosts
26122.endd
3cb1b51e
PH
26123The lookup in this example uses the host name for its key. This is implied by
26124the lookup type &"dbm"&. (For a host address lookup you would use &"net-dbm"&
26125and it wouldn't matter which way round you had these two items.)
3cb1b51e
PH
26126
26127The reason for the problem with host names lies in the left-to-right way that
26128Exim processes lists. It can test IP addresses without doing any DNS lookups,
26129but when it reaches an item that requires a host name, it fails if it cannot
26130find a host name to compare with the pattern. If the above list is given in the
26131opposite order, the &%accept%& statement fails for a host whose name cannot be
26132found, even if its IP address is 10.9.8.7.
9b371988 26133
168e428f
PH
26134If you really do want to do the name check first, and still recognize the IP
26135address even if the name lookup fails, you can rewrite the ACL like this:
9b371988
PH
26136.code
26137accept hosts = dbm;/etc/friendly/hosts
26138accept hosts = 10.9.8.7
26139.endd
168e428f 26140The default action on failing to find the host name is to assume that the host
9b371988
PH
26141is not in the list, so the first &%accept%& statement fails. The second
26142statement can then check the IP address.
168e428f 26143
f89d2485 26144.vindex "&$host_data$&"
9b371988
PH
26145If a &%hosts%& condition is satisfied by means of a lookup, the result
26146of the lookup is made available in the &$host_data$& variable. This
26147allows you, for example, to set up a statement like this:
26148.code
26149deny hosts = net-lsearch;/some/file
26150message = $host_data
26151.endd
168e428f
PH
26152which gives a custom error message for each denied host.
26153
9b371988 26154.vitem &*local_parts&~=&~*&<&'local&~part&~list'&>
f89d2485 26155.cindex "&%local_parts%& ACL condition"
9b371988
PH
26156.cindex "local part" "ACL checking"
26157.cindex "&ACL;" "testing a local part"
f89d2485 26158.vindex "&$local_part_data$&"
168e428f
PH
26159This condition is relevant only after a RCPT command. It checks that the local
26160part of the recipient address is in the list. If percent-hack processing is
26161enabled, it is done before this test. If the check succeeds with a lookup, the
9b371988
PH
26162result of the lookup is placed in &$local_part_data$&, which remains set until
26163the next &%local_parts%& test.
168e428f 26164
9b371988 26165.vitem &*malware&~=&~*&<&'option'&>
f89d2485 26166.cindex "&%malware%& ACL condition"
9b371988
PH
26167.cindex "&ACL;" "virus scanning"
26168.cindex "&ACL;" "scanning for viruses"
168e428f
PH
26169This condition is available only when Exim is compiled with the
26170content-scanning extension. It causes the incoming message to be scanned for
9b371988 26171viruses. For details, see chapter &<<CHAPexiscan>>&.
168e428f 26172
9b371988 26173.vitem &*mime_regex&~=&~*&<&'list&~of&~regular&~expressions'&>
f89d2485 26174.cindex "&%mime_regex%& ACL condition"
9b371988 26175.cindex "&ACL;" "testing by regex matching"
168e428f 26176This condition is available only when Exim is compiled with the
3cb1b51e 26177content-scanning extension, and it is allowed only in the ACL defined by
9b371988
PH
26178&%acl_smtp_mime%&. It causes the current MIME part to be scanned for a match
26179with any of the regular expressions. For details, see chapter
26180&<<CHAPexiscan>>&.
168e428f 26181
9b371988
PH
26182.vitem &*ratelimit&~=&~*&<&'parameters'&>
26183.cindex "rate limiting"
068aaea8 26184This condition can be used to limit the rate at which a user or host submits
9b371988 26185messages. Details are given in section &<<SECTratelimiting>>&.
068aaea8 26186
9b371988 26187.vitem &*recipients&~=&~*&<&'address&~list'&>
f89d2485 26188.cindex "&%recipients%& ACL condition"
9b371988
PH
26189.cindex "recipient" "ACL checking"
26190.cindex "&ACL;" "testing a recipient"
168e428f
PH
26191This condition is relevant only after a RCPT command. It checks the entire
26192recipient address against a list of recipients.
26193
9b371988 26194.vitem &*regex&~=&~*&<&'list&~of&~regular&~expressions'&>
f89d2485 26195.cindex "&%regex%& ACL condition"
9b371988 26196.cindex "&ACL;" "testing by regex matching"
168e428f 26197This condition is available only when Exim is compiled with the
068aaea8
PH
26198content-scanning extension, and is available only in the DATA, MIME, and
26199non-SMTP ACLs. It causes the incoming message to be scanned for a match with
9b371988
PH
26200any of the regular expressions. For details, see chapter &<<CHAPexiscan>>&.
26201
26202.vitem &*sender_domains&~=&~*&<&'domain&~list'&>
f89d2485 26203.cindex "&%sender_domains%& ACL condition"
9b371988
PH
26204.cindex "sender" "ACL checking"
26205.cindex "&ACL;" "testing a sender domain"
f89d2485
PH
26206.vindex "&$domain$&"
26207.vindex "&$sender_address_domain$&"
168e428f 26208This condition tests the domain of the sender of the message against the given
9b371988
PH
26209domain list. &*Note*&: The domain of the sender address is in
26210&$sender_address_domain$&. It is &'not'& put in &$domain$& during the testing
26211of this condition. This is an exception to the general rule for testing domain
26212lists. It is done this way so that, if this condition is used in an ACL for a
26213RCPT command, the recipient's domain (which is in &$domain$&) can be used to
26214influence the sender checking.
26215
9b371988 26216&*Warning*&: It is a bad idea to use this condition on its own as a control on
068aaea8 26217relaying, because sender addresses are easily, and commonly, forged.
168e428f 26218
9b371988 26219.vitem &*senders&~=&~*&<&'address&~list'&>
f89d2485 26220.cindex "&%senders%& ACL condition"
9b371988
PH
26221.cindex "sender" "ACL checking"
26222.cindex "&ACL;" "testing a sender"
168e428f
PH
26223This condition tests the sender of the message against the given list. To test
26224for a bounce message, which has an empty sender, set
9b371988
PH
26225.code
26226senders = :
26227.endd
9b371988 26228&*Warning*&: It is a bad idea to use this condition on its own as a control on
068aaea8 26229relaying, because sender addresses are easily, and commonly, forged.
168e428f 26230
9b371988 26231.vitem &*spam&~=&~*&<&'username'&>
f89d2485 26232.cindex "&%spam%& ACL condition"
9b371988 26233.cindex "&ACL;" "scanning for spam"
168e428f
PH
26234This condition is available only when Exim is compiled with the
26235content-scanning extension. It causes the incoming message to be scanned by
9b371988
PH
26236SpamAssassin. For details, see chapter &<<CHAPexiscan>>&.
26237
26238.vitem &*verify&~=&~certificate*&
f89d2485 26239.cindex "&%verify%& ACL condition"
9b371988
PH
26240.cindex "TLS" "client certificate verification"
26241.cindex "certificate" "verification of client"
26242.cindex "&ACL;" "certificate verification"
26243.cindex "&ACL;" "testing a TLS certificate"
168e428f
PH
26244This condition is true in an SMTP session if the session is encrypted, and a
26245certificate was received from the client, and the certificate was verified. The
9b371988
PH
26246server requests a certificate only if the client matches &%tls_verify_hosts%&
26247or &%tls_try_verify_hosts%& (see chapter &<<CHAPTLS>>&).
168e428f 26248
9b371988
PH
26249.vitem &*verify&~=&~csa*&
26250.cindex "CSA verification"
068aaea8
PH
26251This condition checks whether the sending host (the client) is authorized to
26252send email. Details of how this works are given in section
9b371988 26253&<<SECTverifyCSA>>&.
9b371988
PH
26254
26255.vitem &*verify&~=&~header_sender/*&<&'options'&>
f89d2485 26256.cindex "&%verify%& ACL condition"
9b371988
PH
26257.cindex "&ACL;" "verifying sender in the header"
26258.cindex "header lines" "verifying the sender in"
26259.cindex "sender" "verifying in header"
26260.cindex "verifying" "sender in header"
168e428f 26261This condition is relevant only in an ACL that is run after a message has been
9b371988
PH
26262received, that is, in an ACL specified by &%acl_smtp_data%& or
26263&%acl_not_smtp%&. It checks that there is a verifiable address in at least one
26264of the &'Sender:'&, &'Reply-To:'&, or &'From:'& header lines. Such an address
26265is loosely thought of as a &"sender"& address (hence the name of the test).
26266However, an address that appears in one of these headers need not be an address
26267that accepts bounce messages; only sender addresses in envelopes are required
26268to accept bounces. Therefore, if you use the callout option on this check, you
26269might want to arrange for a non-empty address in the MAIL command.
26270
168e428f 26271Details of address verification and the options are given later, starting at
9b371988
PH
26272section &<<SECTaddressverification>>& (callouts are described in section
26273&<<SECTcallver>>&). You can combine this condition with the &%senders%&
26274condition to restrict it to bounce messages only:
26275.code
26276deny senders = :
26277 message = A valid sender header is required for bounces
26278 !verify = header_sender
26279.endd
26280
26281.vitem &*verify&~=&~header_syntax*&
f89d2485 26282.cindex "&%verify%& ACL condition"
9b371988
PH
26283.cindex "&ACL;" "verifying header syntax"
26284.cindex "header lines" "verifying syntax"
26285.cindex "verifying" "header syntax"
168e428f 26286This condition is relevant only in an ACL that is run after a message has been
9b371988
PH
26287received, that is, in an ACL specified by &%acl_smtp_data%& or
26288&%acl_not_smtp%&. It checks the syntax of all header lines that can contain
26289lists of addresses (&'Sender:'&, &'From:'&, &'Reply-To:'&, &'To:'&, &'Cc:'&,
26290and &'Bcc:'&). Unqualified addresses (local parts without domains) are
26291permitted only in locally generated messages and from hosts that match
26292&%sender_unqualified_hosts%& or &%recipient_unqualified_hosts%&, as
26293appropriate.
26294
168e428f
PH
26295Note that this condition is a syntax check only. However, a common spamming
26296ploy used to be to send syntactically invalid headers such as
9b371988
PH
26297.code
26298To: @
26299.endd
168e428f
PH
26300and this condition can be used to reject such messages, though they are not as
26301common as they used to be.
26302
9b371988 26303.vitem &*verify&~=&~helo*&
f89d2485 26304.cindex "&%verify%& ACL condition"
9b371988
PH
26305.cindex "&ACL;" "verifying HELO/EHLO"
26306.cindex "HELO" "verifying"
26307.cindex "EHLO" "verifying"
26308.cindex "verifying" "EHLO"
26309.cindex "verifying" "HELO"
168e428f 26310This condition is true if a HELO or EHLO command has been received from the
3cb1b51e
PH
26311client host, and its contents have been verified. If there has been no previous
26312attempt to verify the HELO/EHLO contents, it is carried out when this
9b371988
PH
26313condition is encountered. See the description of the &%helo_verify_hosts%& and
26314&%helo_try_verify_hosts%& options for details of how to request verification
068aaea8
PH
26315independently of this condition.
26316
3cb1b51e
PH
26317For SMTP input that does not come over TCP/IP (the &%-bs%& command line
26318option), this condition is always true.
3cb1b51e
PH
26319
26320
9b371988
PH
26321.vitem &*verify&~=&~not_blind*&
26322.cindex "verifying" "not blind"
f89d2485 26323.cindex "bcc recipients, verifying none"
068aaea8 26324This condition checks that there are no blind (bcc) recipients in the message.
9b371988
PH
26325Every envelope recipient must appear either in a &'To:'& header line or in a
26326&'Cc:'& header line for this condition to be true. Local parts are checked
26327case-sensitively; domains are checked case-insensitively. If &'Resent-To:'& or
26328&'Resent-Cc:'& header lines exist, they are also checked. This condition can be
068aaea8 26329used only in a DATA or non-SMTP ACL.
068aaea8 26330
9b371988
PH
26331There are, of course, many legitimate messages that make use of blind (bcc)
26332recipients. This check should not be used on its own for blocking messages.
068aaea8 26333
168e428f 26334
9b371988 26335.vitem &*verify&~=&~recipient/*&<&'options'&>
f89d2485 26336.cindex "&%verify%& ACL condition"
9b371988
PH
26337.cindex "&ACL;" "verifying recipient"
26338.cindex "recipient" "verifying"
26339.cindex "verifying" "recipient"
f89d2485 26340.vindex "&$address_data$&"
168e428f
PH
26341This condition is relevant only after a RCPT command. It verifies the current
26342recipient. Details of address verification are given later, starting at section
9b371988
PH
26343&<<SECTaddressverification>>&. After a recipient has been verified, the value
26344of &$address_data$& is the last value that was set while routing the address.
26345This applies even if the verification fails. When an address that is being
26346verified is redirected to a single address, verification continues with the new
26347address, and in that case, the subsequent value of &$address_data$& is the
26348value for the child address.
26349
26350.vitem &*verify&~=&~reverse_host_lookup*&
f89d2485 26351.cindex "&%verify%& ACL condition"
9b371988
PH
26352.cindex "&ACL;" "verifying host reverse lookup"
26353.cindex "host" "verifying reverse lookup"
168e428f
PH
26354This condition ensures that a verified host name has been looked up from the IP
26355address of the client host. (This may have happened already if the host name
9b371988 26356was needed for checking a host list, or if the host matched &%host_lookup%&.)
168e428f
PH
26357Verification ensures that the host name obtained from a reverse DNS lookup, or
26358one of its aliases, does, when it is itself looked up in the DNS, yield the
26359original IP address.
9b371988 26360
168e428f
PH
26361If this condition is used for a locally generated message (that is, when there
26362is no client host involved), it always succeeds.
26363
9b371988 26364.vitem &*verify&~=&~sender/*&<&'options'&>
f89d2485 26365.cindex "&%verify%& ACL condition"
9b371988
PH
26366.cindex "&ACL;" "verifying sender"
26367.cindex "sender" "verifying"
26368.cindex "verifying" "sender"
168e428f 26369This condition is relevant only after a MAIL or RCPT command, or after a
9b371988
PH
26370message has been received (the &%acl_smtp_data%& or &%acl_not_smtp%& ACLs). If
26371the message's sender is empty (that is, this is a bounce message), the
26372condition is true. Otherwise, the sender address is verified.
26373
f89d2485
PH
26374.vindex "&$address_data$&"
26375.vindex "&$sender_address_data$&"
9b371988
PH
26376If there is data in the &$address_data$& variable at the end of routing, its
26377value is placed in &$sender_address_data$& at the end of verification. This
168e428f
PH
26378value can be used in subsequent conditions and modifiers in the same ACL
26379statement. It does not persist after the end of the current statement. If you
26380want to preserve the value for longer, you can save it in an ACL variable.
9b371988 26381
168e428f 26382Details of verification are given later, starting at section
9b371988
PH
26383&<<SECTaddressverification>>&. Exim caches the result of sender verification,
26384to avoid doing it more than once per message.
168e428f 26385
9b371988 26386.vitem &*verify&~=&~sender=*&<&'address'&>&*/*&<&'options'&>
f89d2485 26387.cindex "&%verify%& ACL condition"
168e428f
PH
26388This is a variation of the previous option, in which a modified address is
26389verified as a sender.
9b371988 26390.endlist
168e428f
PH
26391
26392
26393
9b371988
PH
26394.section "Using DNS lists" "SECTmorednslists"
26395.cindex "DNS list" "in ACL"
26396.cindex "black list (DNS)"
26397.cindex "&ACL;" "testing a DNS list"
26398In its simplest form, the &%dnslists%& condition tests whether the calling host
168e428f 26399is on at least one of a number of DNS lists by looking up the inverted IP
30966db0
TF
26400address in one or more DNS domains. (Note that DNS list domains are not mail
26401domains, so the &`+`& syntax for named lists doesn't work - it is used for
26402special options instead.) For example, if the calling host's IP
168e428f 26403address is 192.168.62.43, and the ACL statement is
9b371988 26404.code
168e428f
PH
26405deny dnslists = blackholes.mail-abuse.org : \
26406 dialups.mail-abuse.org
9b371988 26407.endd
168e428f 26408the following records are looked up:
9b371988
PH
26409.code
2641043.62.168.192.blackholes.mail-abuse.org
2641143.62.168.192.dialups.mail-abuse.org
26412.endd
168e428f 26413As soon as Exim finds an existing DNS record, processing of the list stops.
9b371988
PH
26414Thus, multiple entries on the list provide an &"or"& conjunction. If you want
26415to test that a host is on more than one list (an &"and"& conjunction), you can
26416use two separate conditions:
26417.code
26418deny dnslists = blackholes.mail-abuse.org
26419 dnslists = dialups.mail-abuse.org
26420.endd
168e428f
PH
26421If a DNS lookup times out or otherwise fails to give a decisive answer, Exim
26422behaves as if the host does not match the list item, that is, as if the DNS
26423record does not exist. If there are further items in the DNS list, they are
26424processed.
26425
9b371988
PH
26426This is usually the required action when &%dnslists%& is used with &%deny%&
26427(which is the most common usage), because it prevents a DNS failure from
26428blocking mail. However, you can change this behaviour by putting one of the
26429following special items in the list:
26430.display
26431&`+include_unknown `& behave as if the item is on the list
26432&`+exclude_unknown `& behave as if the item is not on the list (default)
26433&`+defer_unknown `& give a temporary error
26434.endd
26435.cindex "&`+include_unknown`&"
26436.cindex "&`+exclude_unknown`&"
26437.cindex "&`+defer_unknown`&"
168e428f 26438Each of these applies to any subsequent items on the list. For example:
9b371988
PH
26439.code
26440deny dnslists = +defer_unknown : foo.bar.example
26441.endd
168e428f
PH
26442Testing the list of domains stops as soon as a match is found. If you want to
26443warn for one list and block for another, you can use two different statements:
9b371988
PH
26444.code
26445deny dnslists = blackholes.mail-abuse.org
26446warn message = X-Warn: sending host is on dialups list
26447 dnslists = dialups.mail-abuse.org
26448.endd
168e428f
PH
26449DNS list lookups are cached by Exim for the duration of the SMTP session,
26450so a lookup based on the IP address is done at most once for any incoming
26451connection. Exim does not share information between multiple incoming
26452connections (but your local name server cache should be active).
26453
26454
26455
f89d2485 26456.section "Specifying the IP address for a DNS list lookup" "SECID201"
9b371988 26457.cindex "DNS list" "keyed by explicit IP address"
168e428f
PH
26458By default, the IP address that is used in a DNS list lookup is the IP address
26459of the calling host. However, you can specify another IP address by listing it
26460after the domain name, introduced by a slash. For example:
9b371988
PH
26461.code
26462deny dnslists = black.list.tld/192.168.1.2
26463.endd
168e428f
PH
26464This feature is not very helpful with explicit IP addresses; it is intended for
26465use with IP addresses that are looked up, for example, the IP addresses of the
26466MX hosts or nameservers of an email sender address. For an example, see section
9b371988 26467&<<SECTmulkeyfor>>& below.
168e428f
PH
26468
26469
26470
26471
f89d2485 26472.section "DNS lists keyed on domain names" "SECID202"
9b371988 26473.cindex "DNS list" "keyed by domain name"
168e428f 26474There are some lists that are keyed on domain names rather than inverted IP
9b371988
PH
26475addresses (see for example the &'domain based zones'& link at
26476&url(http://www.rfc-ignorant.org/)). No reversing of components is used
26477with these lists. You can change the name that is looked up in a DNS list by
26478listing it after the domain name, introduced by a slash. For example,
26479.code
26480deny message = Sender's domain is listed at $dnslist_domain
26481 dnslists = dsn.rfc-ignorant.org/$sender_address_domain
26482.endd
168e428f
PH
26483This particular example is useful only in ACLs that are obeyed after the
26484RCPT or DATA commands, when a sender address is available. If (for
9b371988 26485example) the message's sender is &'user@tld.example'& the name that is looked
168e428f 26486up by this example is
9b371988
PH
26487.code
26488tld.example.dsn.rfc-ignorant.org
26489.endd
26490A single &%dnslists%& condition can contain entries for both names and IP
168e428f 26491addresses. For example:
9b371988 26492.code
168e428f
PH
26493deny dnslists = sbl.spamhaus.org : \
26494 dsn.rfc-ignorant.org/$sender_address_domain
9b371988 26495.endd
168e428f
PH
26496The first item checks the sending host's IP address; the second checks a domain
26497name. The whole condition is true if either of the DNS lookups succeeds.
26498
26499
26500
26501
9b371988
PH
26502.section "Multiple explicit keys for a DNS list" "SECTmulkeyfor"
26503.cindex "DNS list" "multiple keys for"
168e428f
PH
26504The syntax described above for looking up explicitly-defined values (either
26505names or IP addresses) in a DNS blacklist is a simplification. After the domain
26506name for the DNS list, what follows the slash can in fact be a list of items.
26507As with all lists in Exim, the default separator is a colon. However, because
26508this is a sublist within the list of DNS blacklist domains, it is necessary
26509either to double the separators like this:
9b371988
PH
26510.code
26511dnslists = black.list.tld/name.1::name.2
26512.endd
168e428f 26513or to change the separator character, like this:
9b371988
PH
26514.code
26515dnslists = black.list.tld/<;name.1;name.2
26516.endd
168e428f
PH
26517If an item in the list is an IP address, it is inverted before the DNS
26518blacklist domain is appended. If it is not an IP address, no inversion
26519occurs. Consider this condition:
9b371988
PH
26520.code
26521dnslists = black.list.tld/<;192.168.1.2;a.domain
26522.endd
168e428f 26523The DNS lookups that occur are:
9b371988
PH
26524.code
265252.1.168.192.black.list.tld
26526a.domain.black.list.tld
26527.endd
168e428f 26528Once a DNS record has been found (that matches a specific IP return
9b371988
PH
26529address, if specified &-- see section &<<SECTaddmatcon>>&), no further lookups
26530are done. If there is a temporary DNS error, the rest of the sublist of domains
26531or IP addresses is tried. A temporary error for the whole dnslists item occurs
168e428f
PH
26532only if no other DNS lookup in this sublist succeeds. In other words, a
26533successful lookup for any of the items in the sublist overrides a temporary
26534error for a previous item.
26535
26536The ability to supply a list of items after the slash is in some sense just a
26537syntactic convenience. These two examples have the same effect:
9b371988
PH
26538.code
26539dnslists = black.list.tld/a.domain : black.list.tld/b.domain
26540dnslists = black.list.tld/a.domain::b.domain
26541.endd
168e428f
PH
26542However, when the data for the list is obtained from a lookup, the second form
26543is usually much more convenient. Consider this example:
9b371988
PH
26544.code
26545deny message = The mail servers for the domain \
26546 $sender_address_domain \
26547 are listed at $dnslist_domain ($dnslist_value); \
26548 see $dnslist_text.
26549 dnslists = sbl.spamhaus.org/<|${lookup dnsdb {>|a=<|\
26550 ${lookup dnsdb {>|mxh=\
26551 $sender_address_domain} }} }
26552.endd
26553Note the use of &`>|`& in the dnsdb lookup to specify the separator for
168e428f
PH
26554multiple DNS records. The inner dnsdb lookup produces a list of MX hosts
26555and the outer dnsdb lookup finds the IP addresses for these hosts. The result
26556of expanding the condition might be something like this:
9b371988
PH
26557.code
26558dnslists = sbl.spahmaus.org/<|192.168.2.3|192.168.5.6|...
26559.endd
168e428f
PH
26560Thus, this example checks whether or not the IP addresses of the sender
26561domain's mail servers are on the Spamhaus black list.
26562
595028e4
PH
26563The key that was used for a successful DNS list lookup is put into the variable
26564&$dnslist_matched$& (see section &<<SECID204>>&).
168e428f
PH
26565
26566
26567
26568
f89d2485 26569.section "Data returned by DNS lists" "SECID203"
9b371988 26570.cindex "DNS list" "data returned from"
168e428f
PH
26571DNS lists are constructed using address records in the DNS. The original RBL
26572just used the address 127.0.0.1 on the right hand side of each record, but the
26573RBL+ list and some other lists use a number of values with different meanings.
26574The values used on the RBL+ list are:
9b371988 26575.display
168e428f
PH
26576127.1.0.1 RBL
26577127.1.0.2 DUL
26578127.1.0.3 DUL and RBL
26579127.1.0.4 RSS
26580127.1.0.5 RSS and RBL
26581127.1.0.6 RSS and DUL
26582127.1.0.7 RSS and DUL and RBL
9b371988 26583.endd
3cb1b51e 26584Section &<<SECTaddmatcon>>& below describes how you can distinguish between
f89d2485 26585different values. Some DNS lists may return more than one address record;
595028e4
PH
26586see section &<<SECThanmuldnsrec>>& for details of how they are checked.
26587
168e428f 26588
f89d2485 26589.section "Variables set from DNS lists" "SECID204"
595028e4 26590.cindex "expansion" "variables, set from DNS list"
9b371988 26591.cindex "DNS list" "variables set from"
f89d2485 26592.vindex "&$dnslist_domain$&"
595028e4 26593.vindex "&$dnslist_matched$&"
f89d2485
PH
26594.vindex "&$dnslist_text$&"
26595.vindex "&$dnslist_value$&"
595028e4
PH
26596When an entry is found in a DNS list, the variable &$dnslist_domain$& contains
26597the name of the overall domain that matched (for example,
26598&`spamhaus.example`&), &$dnslist_matched$& contains the key within that domain
26599(for example, &`192.168.5.3`&), and &$dnslist_value$& contains the data from
26600the DNS record. When the key is an IP address, it is not reversed in
26601&$dnslist_matched$& (though it is, of course, in the actual lookup). In simple
26602cases, for example:
26603.code
26604deny dnslists = spamhaus.example
26605.endd
26606the key is also available in another variable (in this case,
26607&$sender_host_address$&). In more complicated cases, however, this is not true.
26608For example, using a data lookup (as described in section &<<SECTmulkeyfor>>&)
26609might generate a dnslists lookup like this:
26610.code
26611deny dnslists = spamhaus.example/<|192.168.1.2|192.168.6.7|...
26612.endd
26613If this condition succeeds, the value in &$dnslist_matched$& might be
26614&`192.168.6.7`& (for example).
595028e4
PH
26615
26616If more than one address record is returned by the DNS lookup, all the IP
26617addresses are included in &$dnslist_value$&, separated by commas and spaces.
26618The variable &$dnslist_text$& contains the contents of any associated TXT
26619record. For lists such as RBL+ the TXT record for a merged entry is often not
26620very meaningful. See section &<<SECTmordetinf>>& for a way of obtaining more
26621information.
168e428f 26622
3cb1b51e
PH
26623You can use the DNS list variables in &%message%& or &%log_message%& modifiers
26624&-- although these appear before the condition in the ACL, they are not
26625expanded until after it has failed. For example:
9b371988 26626.code
168e428f
PH
26627deny hosts = !+local_networks
26628 message = $sender_host_address is listed \
26629 at $dnslist_domain
26630 dnslists = rbl-plus.mail-abuse.example
9b371988 26631.endd
168e428f
PH
26632
26633
26634
9b371988
PH
26635.section "Additional matching conditions for DNS lists" "SECTaddmatcon"
26636.cindex "DNS list" "matching specific returned data"
26637You can add an equals sign and an IP address after a &%dnslists%& domain name
26638in order to restrict its action to DNS records with a matching right hand side.
168e428f 26639For example,
9b371988
PH
26640.code
26641deny dnslists = rblplus.mail-abuse.org=127.0.0.2
26642.endd
168e428f 26643rejects only those hosts that yield 127.0.0.2. Without this additional data,
595028e4 26644any address record is considered to be a match. For the moment, we assume
f89d2485 26645that the DNS lookup returns just one record. Section &<<SECThanmuldnsrec>>&
595028e4 26646describes how multiple records are handled.
168e428f
PH
26647
26648More than one IP address may be given for checking, using a comma as a
9b371988
PH
26649separator. These are alternatives &-- if any one of them matches, the
26650&%dnslists%& condition is true. For example:
26651.code
26652deny dnslists = a.b.c=127.0.0.2,127.0.0.3
26653.endd
168e428f
PH
26654If you want to specify a constraining address list and also specify names or IP
26655addresses to be looked up, the constraining address list must be specified
26656first. For example:
9b371988 26657.code
168e428f
PH
26658deny dnslists = dsn.rfc-ignorant.org\
26659 =127.0.0.2/$sender_address_domain
9b371988 26660.endd
168e428f 26661
9b371988
PH
26662If the character &`&&`& is used instead of &`=`&, the comparison for each
26663listed IP address is done by a bitwise &"and"& instead of by an equality test.
26664In other words, the listed addresses are used as bit masks. The comparison is
168e428f
PH
26665true if all the bits in the mask are present in the address that is being
26666tested. For example:
9b371988
PH
26667.code
26668dnslists = a.b.c&0.0.0.3
26669.endd
26670matches if the address is &'x.x.x.'&3, &'x.x.x.'&7, &'x.x.x.'&11, etc. If you
168e428f
PH
26671want to test whether one bit or another bit is present (as opposed to both
26672being present), you must use multiple values. For example:
9b371988
PH
26673.code
26674dnslists = a.b.c&0.0.0.1,0.0.0.2
26675.endd
168e428f
PH
26676matches if the final component of the address is an odd number or two times
26677an odd number.
26678
26679
26680
f89d2485 26681.section "Negated DNS matching conditions" "SECID205"
9b371988 26682You can supply a negative list of IP addresses as part of a &%dnslists%&
168e428f 26683condition. Whereas
9b371988
PH
26684.code
26685deny dnslists = a.b.c=127.0.0.2,127.0.0.3
26686.endd
26687means &"deny if the host is in the black list at the domain &'a.b.c'& and the
26688IP address yielded by the list is either 127.0.0.2 or 127.0.0.3"&,
26689.code
26690deny dnslists = a.b.c!=127.0.0.2,127.0.0.3
26691.endd
26692means &"deny if the host is in the black list at the domain &'a.b.c'& and the
26693IP address yielded by the list is not 127.0.0.2 and not 127.0.0.3"&. In other
168e428f 26694words, the result of the test is inverted if an exclamation mark appears before
9b371988 26695the &`=`& (or the &`&&`&) sign.
168e428f 26696
9b371988 26697&*Note*&: This kind of negation is not the same as negation in a domain,
168e428f
PH
26698host, or address list (which is why the syntax is different).
26699
26700If you are using just one list, the negation syntax does not gain you much. The
26701previous example is precisely equivalent to
9b371988
PH
26702.code
26703deny dnslists = a.b.c
26704 !dnslists = a.b.c=127.0.0.2,127.0.0.3
26705.endd
168e428f
PH
26706However, if you are using multiple lists, the negation syntax is clearer.
26707Consider this example:
9b371988 26708.code
168e428f
PH
26709deny dnslists = sbl.spamhaus.org : \
26710 list.dsbl.org : \
26711 dnsbl.njabl.org!=127.0.0.3 : \
26712 relays.ordb.org
9b371988 26713.endd
168e428f 26714Using only positive lists, this would have to be:
9b371988 26715.code
168e428f
PH
26716deny dnslists = sbl.spamhaus.org : \
26717 list.dsbl.org
26718deny dnslists = dnsbl.njabl.org
26719 !dnslists = dnsbl.njabl.org=127.0.0.3
26720deny dnslists = relays.ordb.org
9b371988 26721.endd
168e428f
PH
26722which is less clear, and harder to maintain.
26723
26724
f89d2485
PH
26725
26726
f89d2485
PH
26727.section "Handling multiple DNS records from a DNS list" "SECThanmuldnsrec"
26728A DNS lookup for a &%dnslists%& condition may return more than one DNS record,
26729thereby providing more than one IP address. When an item in a &%dnslists%& list
26730is followed by &`=`& or &`&&`& and a list of IP addresses, in order to restrict
26731the match to specific results from the DNS lookup, there are two ways in which
26732the checking can be handled. For example, consider the condition:
26733.code
26734dnslists = a.b.c=127.0.0.1
26735.endd
26736What happens if the DNS lookup for the incoming IP address yields both
26737127.0.0.1 and 127.0.0.2 by means of two separate DNS records? Is the
26738condition true because at least one given value was found, or is it false
26739because at least one of the found values was not listed? And how does this
26740affect negated conditions? Both possibilities are provided for with the help of
26741additional separators &`==`& and &`=&&`&.
26742
26743.ilist
26744If &`=`& or &`&&`& is used, the condition is true if any one of the looked up
26745IP addresses matches one of the listed addresses. For the example above, the
26746condition is true because 127.0.0.1 matches.
26747.next
26748If &`==`& or &`=&&`& is used, the condition is true only if every one of the
26749looked up IP addresses matches one of the listed addresses. If the condition is
26750changed to:
26751.code
26752dnslists = a.b.c==127.0.0.1
26753.endd
26754and the DNS lookup yields both 127.0.0.1 and 127.0.0.2, the condition is
26755false because 127.0.0.2 is not listed. You would need to have:
26756.code
26757dnslists = a.b.c==127.0.0.1,127.0.0.2
26758.endd
26759for the condition to be true.
26760.endlist
26761
26762When &`!`& is used to negate IP address matching, it inverts the result, giving
26763the precise opposite of the behaviour above. Thus:
26764.ilist
26765If &`!=`& or &`!&&`& is used, the condition is true if none of the looked up IP
26766addresses matches one of the listed addresses. Consider:
26767.code
26768dnslists = a.b.c!&0.0.0.1
26769.endd
26770If the DNS lookup yields both 127.0.0.1 and 127.0.0.2, the condition is
26771false because 127.0.0.1 matches.
26772.next
26773If &`!==`& or &`!=&&`& is used, the condition is true there is at least one
26774looked up IP address that does not match. Consider:
26775.code
26776dnslists = a.b.c!=&0.0.0.1
26777.endd
26778If the DNS lookup yields both 127.0.0.1 and 127.0.0.2, the condition is
26779true, because 127.0.0.2 does not match. You would need to have:
26780.code
26781dnslists = a.b.c!=&0.0.0.1,0.0.0.2
26782.endd
26783for the condition to be false.
26784.endlist
26785When the DNS lookup yields only a single IP address, there is no difference
26786between &`=`& and &`==`& and between &`&&`& and &`=&&`&.
f89d2485
PH
26787
26788
26789
26790
3cb1b51e
PH
26791.section "Detailed information from merged DNS lists" "SECTmordetinf"
26792.cindex "DNS list" "information from merged"
26793When the facility for restricting the matching IP values in a DNS list is used,
26794the text from the TXT record that is set in &$dnslist_text$& may not reflect
26795the true reason for rejection. This happens when lists are merged and the IP
26796address in the A record is used to distinguish them; unfortunately there is
26797only one TXT record. One way round this is not to use merged lists, but that
26798can be inefficient because it requires multiple DNS lookups where one would do
26799in the vast majority of cases when the host of interest is not on any of the
26800lists.
26801
26802A less inefficient way of solving this problem is available. If
26803two domain names, comma-separated, are given, the second is used first to
26804do an initial check, making use of any IP value restrictions that are set.
26805If there is a match, the first domain is used, without any IP value
26806restrictions, to get the TXT record. As a byproduct of this, there is also
26807a check that the IP being tested is indeed on the first list. The first
26808domain is the one that is put in &$dnslist_domain$&. For example:
26809.code
26810reject message = \
f89d2485 26811 rejected because $sender_host_address is blacklisted \
3cb1b51e
PH
26812 at $dnslist_domain\n$dnslist_text
26813 dnslists = \
26814 sbl.spamhaus.org,sbl-xbl.spamhaus.org=127.0.0.2 : \
26815 dul.dnsbl.sorbs.net,dnsbl.sorbs.net=127.0.0.10
26816.endd
26817For the first blacklist item, this starts by doing a lookup in
26818&'sbl-xbl.spamhaus.org'& and testing for a 127.0.0.2 return. If there is a
26819match, it then looks in &'sbl.spamhaus.org'&, without checking the return
26820value, and as long as something is found, it looks for the corresponding TXT
26821record. If there is no match in &'sbl-xbl.spamhaus.org'&, nothing more is done.
26822The second blacklist item is processed similarly.
26823
26824If you are interested in more than one merged list, the same list must be
26825given several times, but because the results of the DNS lookups are cached,
26826the DNS calls themselves are not repeated. For example:
26827.code
26828reject dnslists = \
26829 http.dnsbl.sorbs.net,dnsbl.sorbs.net=127.0.0.2 : \
26830 socks.dnsbl.sorbs.net,dnsbl.sorbs.net=127.0.0.3 : \
26831 misc.dnsbl.sorbs.net,dnsbl.sorbs.net=127.0.0.4 : \
26832 dul.dnsbl.sorbs.net,dnsbl.sorbs.net=127.0.0.10
26833.endd
26834In this case there is one lookup in &'dnsbl.sorbs.net'&, and if none of the IP
26835values matches (or if no record is found), this is the only lookup that is
26836done. Only if there is a match is one of the more specific lists consulted.
3cb1b51e 26837
168e428f
PH
26838
26839
9b371988
PH
26840.section "DNS lists and IPv6" "SECTmorednslistslast"
26841.cindex "IPv6" "DNS black lists"
26842.cindex "DNS list" "IPv6 usage"
168e428f
PH
26843If Exim is asked to do a dnslist lookup for an IPv6 address, it inverts it
26844nibble by nibble. For example, if the calling host's IP address is
268453ffe:ffff:836f:0a00:000a:0800:200a:c031, Exim might look up
9b371988
PH
26846.code
268471.3.0.c.a.0.0.2.0.0.8.0.a.0.0.0.0.0.a.0.f.6.3.8.
26848 f.f.f.f.e.f.f.3.blackholes.mail-abuse.org
26849.endd
168e428f
PH
26850(split over two lines here to fit on the page). Unfortunately, some of the DNS
26851lists contain wildcard records, intended for IPv4, that interact badly with
26852IPv6. For example, the DNS entry
9b371988
PH
26853.code
26854*.3.some.list.example. A 127.0.0.1
26855.endd
168e428f
PH
26856is probably intended to put the entire 3.0.0.0/8 IPv4 network on the list.
26857Unfortunately, it also matches the entire 3::/4 IPv6 network.
26858
26859You can exclude IPv6 addresses from DNS lookups by making use of a suitable
9b371988
PH
26860&%condition%& condition, as in this example:
26861.code
26862deny condition = ${if isip4{$sender_host_address}}
26863 dnslists = some.list.example
26864.endd
26865
595028e4 26866.section "Rate limiting incoming messages" "SECTratelimiting"
9b371988
PH
26867.cindex "rate limiting" "client sending"
26868.cindex "limiting client sending rates"
3cb1b51e 26869.oindex "&%smtp_ratelimit_*%&"
9b371988
PH
26870The &%ratelimit%& ACL condition can be used to measure and control the rate at
26871which clients can send email. This is more powerful than the
26872&%smtp_ratelimit_*%& options, because those options control the rate of
26873commands in a single SMTP session only, whereas the &%ratelimit%& condition
26874works across all connections (concurrent and sequential) from the same client
26875host. The syntax of the &%ratelimit%& condition is:
26876.display
26877&`ratelimit =`& <&'m'&> &`/`& <&'p'&> &`/`& <&'options'&> &`/`& <&'key'&>
26878.endd
26879If the average client sending rate is less than &'m'& messages per time
26880period &'p'& then the condition is false; otherwise it is true.
26881
9b371988
PH
26882As a side-effect, the &%ratelimit%& condition sets the expansion variable
26883&$sender_rate$& to the client's computed rate, &$sender_rate_limit$& to the
26884configured value of &'m'&, and &$sender_rate_period$& to the configured value
26885of &'p'&.
26886
26887The parameter &'p'& is the smoothing time constant, in the form of an Exim
26888time interval, for example, &`8h`& for eight hours. A larger time constant
26889means that it takes Exim longer to forget a client's past behaviour. The
26890parameter &'m'& is the maximum number of messages that a client is permitted to
26891send in each time interval. It also specifies the number of messages permitted
26892in a fast burst. By increasing both &'m'& and &'p'& but keeping &'m/p'&
26893constant, you can allow a client to send more messages in a burst without
c6ac190c 26894changing its long-term sending rate limit. Conversely, if &'m'& and &'p'& are
9b371988
PH
26895both small, messages must be sent at an even rate.
26896
26897There is a script in &_util/ratelimit.pl_& which extracts sending rates from
26898log files, to assist with choosing appropriate settings for &'m'& and &'p'&
26899when deploying the &%ratelimit%& ACL condition. The script prints usage
26900instructions when it is run with no arguments.
26901
068aaea8 26902The key is used to look up the data for calculating the client's average
c6ac190c
TF
26903sending rate. This data is stored in Exim's spool directory, alongside the
26904retry and other hints databases. The default key is &$sender_host_address$&,
26905which means Exim computes the sending rate of each client host IP address.
9b371988
PH
26906By changing the key you can change how Exim identifies clients for the purpose
26907of ratelimiting. For example, to limit the sending rate of each authenticated
26908user, independent of the computer they are sending from, set the key to
26909&$authenticated_id$&. You must ensure that the lookup key is meaningful; for
26910example, &$authenticated_id$& is only meaningful if the client has
c6ac190c 26911authenticated (which you can check with the &%authenticated%& ACL condition).
9b371988 26912
c6ac190c
TF
26913The lookup key does not have to identify clients: If you want to limit the
26914rate at which a recipient receives messages, you can use the key
26915&`$local_part@$domain`& with the &%per_rcpt%& option (see below) in a RCPT
26916ACL.
595028e4 26917
c6ac190c 26918Internally, Exim appends the smoothing constant &'p'& and the options onto the
068aaea8 26919lookup key because they alter the meaning of the stored data. This is not true
9b371988 26920for the limit &'m'&, so you can alter the configured maximum rate and Exim will
068aaea8
PH
26921still remember clients' past behaviour, but if you alter the other ratelimit
26922parameters Exim forgets past behaviour.
26923
595028e4 26924Each &%ratelimit%& condition can have up to three options. One option
068aaea8 26925specifies what Exim measures the rate of, and the second specifies how Exim
595028e4
PH
26926handles excessively fast clients. The third option can be &`noupdate`&, to
26927disable updating of the ratelimiting database (see section &<<rearatdat>>&).
26928The options are separated by a slash, like the other parameters. They may
26929appear in any order.
068aaea8 26930
595028e4 26931.section "Ratelimit options for what is being measured" "ratoptmea"
9b371988
PH
26932The &%per_conn%& option limits the client's connection rate.
26933
26934The &%per_mail%& option limits the client's rate of sending messages. This is
26935the default if none of the &%per_*%& options is specified.
068aaea8 26936
9b371988
PH
26937The &%per_byte%& option limits the sender's email bandwidth. Note that it is
26938best to use this option in the DATA ACL; if it is used in an earlier ACL it
c6ac190c
TF
26939relies on the SIZE parameter specified by the client in its MAIL command,
26940which may be inaccurate or completely missing. You can follow the limit &'m'&
26941in the configuration with K, M, or G to specify limits in kilobytes,
26942megabytes, or gigabytes, respectively.
068aaea8 26943
a843aaa6
NM
26944The &%per_rcpt%& option causes Exim to limit the rate at which
26945recipients are accepted. To be effective, it would need to be used in
26946either the &%acl_smtp_rcpt%& or the &%acl_not_smtp%& ACL. In the
26947&%acl_smtp_rcpt%& ACL, the number of recipients is incremented by one.
26948In the case of a locally submitted message in the &%acl_not_smtp%& ACL,
c6ac190c 26949the number of recipients is incremented by the &%$recipients_count%&
a843aaa6
NM
26950for the entire message. Note that in either case the rate limiting
26951engine will see a message with many recipients as a large high-speed
26952burst.
26953
9b371988 26954The &%per_cmd%& option causes Exim to recompute the rate every time the
a843aaa6
NM
26955condition is processed. This can be used to limit the SMTP command rate.
26956This command is essentially an alias of &%per_rcpt%& to make it clear
26957that the effect is to limit the rate at which individual commands,
26958rather than recipients, are accepted.
068aaea8 26959
595028e4 26960.section "Ratelimit options for handling fast clients" "ratophanfas"
068aaea8
PH
26961If a client's average rate is greater than the maximum, the rate limiting
26962engine can react in two possible ways, depending on the presence of the
9b371988
PH
26963&%strict%& or &%leaky%& options. This is independent of the other
26964counter-measures (such as rejecting the message) that may be specified by the
26965rest of the ACL. The default mode is leaky, which avoids a sender's
26966over-aggressive retry rate preventing it from getting any email through.
068aaea8 26967
c6ac190c
TF
26968The &%strict%& option means that the client's recorded rate is always
26969updated. The effect of this is that Exim measures the client's average rate
26970of attempts to send email, which can be much higher than the maximum it is
26971actually allowed. If the client is over the limit it may be subjected to
26972counter-measures by the ACL until it slows down below the maximum rate. If
26973the client stops attempting to send email for the time specified in the &'p'&
26974parameter then its computed rate will decay exponentially to 37% of its peak
26975value. You can work out the time (the number of smoothing periods) that a
26976client is subjected to counter-measures after an over-limit burst with this
26977formula:
9b371988 26978.code
9e6d33da 26979 ln(peakrate/maxrate)
9b371988 26980.endd
595028e4
PH
26981The &%leaky%& (default) option means that the client's recorded rate is not
26982updated if it is above the limit. The effect of this is that Exim measures the
26983client's average rate of successfully sent email, which cannot be greater than
26984the maximum allowed. If the client is over the limit it may suffer some
f89d2485 26985counter-measures (as specified in the ACL), but it will still be able to send
3cb1b51e
PH
26986email at the configured maximum rate, whatever the rate of its attempts. This
26987is generally the better choice if you have clients that retry automatically.
068aaea8 26988
595028e4 26989.section "Using rate limiting" "useratlim"
068aaea8
PH
26990Exim's other ACL facilities are used to define what counter-measures are taken
26991when the rate limit is exceeded. This might be anything from logging a warning
26992(for example, while measuring existing sending rates in order to define
26993policy), through time delays to slow down fast senders, up to rejecting the
26994message. For example:
9b371988 26995.code
068aaea8 26996# Log all senders' rates
db9452a9
PH
26997warn ratelimit = 0 / 1h / strict
26998 log_message = Sender rate $sender_rate / $sender_rate_period
068aaea8 26999
4f578862
PH
27000# Slow down fast senders; note the need to truncate $sender_rate
27001# at the decimal point.
db9452a9
PH
27002warn ratelimit = 100 / 1h / per_rcpt / strict
27003 delay = ${eval: ${sg{$sender_rate}{[.].*}{}} - \
27004 $sender_rate_limit }s
068aaea8
PH
27005
27006# Keep authenticated users under control
db9452a9
PH
27007deny authenticated = *
27008 ratelimit = 100 / 1d / strict / $authenticated_id
068aaea8
PH
27009
27010# System-wide rate limit
db9452a9
PH
27011defer message = Sorry, too busy. Try again later.
27012 ratelimit = 10 / 1s / $primary_hostname
068aaea8
PH
27013
27014# Restrict incoming rate from each host, with a default
27015# set using a macro and special cases looked up in a table.
db9452a9
PH
27016defer message = Sender rate exceeds $sender_rate_limit \
27017 messages per $sender_rate_period
27018 ratelimit = ${lookup {$sender_host_address} \
27019 cdb {DB/ratelimits.cdb} \
27020 {$value} {RATELIMIT} }
9b371988
PH
27021.endd
27022&*Warning*&: If you have a busy server with a lot of &%ratelimit%& tests,
27023especially with the &%per_rcpt%& option, you may suffer from a performance
068aaea8
PH
27024bottleneck caused by locking on the ratelimit hints database. Apart from
27025making your ACLs less complicated, you can reduce the problem by using a
9b371988 27026RAM disk for Exim's hints directory (usually &_/var/spool/exim/db/_&). However
068aaea8
PH
27027this means that Exim will lose its hints data after a reboot (including retry
27028hints, the callout cache, and ratelimit data).
9b371988
PH
27029
27030
595028e4
PH
27031.section "Reading ratelimit data without updating" "rearatdat"
27032.cindex "rate limitint" "reading data without updating"
27033If the &%noupdate%& option is present on a &%ratelimit%& ACL condition, Exim
27034computes the rate and checks the limit as normal, but it does not update the
27035saved data. This means that, in relevant ACLs, it is possible to lookup the
27036existence of a specified (or auto-generated) ratelimit key without incrementing
27037the ratelimit counter for that key. In order for this to be useful, another ACL
27038entry must set the rate for the same key (otherwise it will always be zero).
27039For example:
27040.code
27041acl_check_connect:
f4cd9433 27042 deny ratelimit = 100 / 5m / strict / per_cmd / noupdate
595028e4
PH
27043 log_message = RATE: $sender_rate/$sender_rate_period \
27044 (max $sender_rate_limit)
27045.endd
27046.display
27047&'... some other logic and tests...'&
27048.endd
27049.code
27050acl_check_mail:
27051 warn ratelimit = 100 / 5m / strict / per_cmd
27052 condition = ${if le{$sender_rate}{$sender_rate_limit}}
27053 logwrite = RATE UPDATE: $sender_rate/$sender_rate_period \
27054 (max $sender_rate_limit)
27055.endd
27056In this example, the rate is tested and used to deny access (when it is too
27057high) in the connect ACL, but the actual computation of the remembered rate
27058happens later, on a per-command basis, in another ACL.
595028e4
PH
27059
27060
27061
9b371988
PH
27062.section "Address verification" "SECTaddressverification"
27063.cindex "verifying address" "options for"
27064.cindex "policy control" "address verification"
27065Several of the &%verify%& conditions described in section
3cb1b51e
PH
27066&<<SECTaclconditions>>& cause addresses to be verified. Section
27067&<<SECTsenaddver>>& discusses the reporting of sender verification failures.
27068The verification conditions can be followed by options that modify the
27069verification process. The options are separated from the keyword and from each
27070other by slashes, and some of them contain parameters. For example:
9b371988
PH
27071.code
27072verify = sender/callout
27073verify = recipient/defer_ok/callout=10s,defer_ok
27074.endd
168e428f 27075The first stage of address verification, which always happens, is to run the
9b371988 27076address through the routers, in &"verify mode"&. Routers can detect the
168e428f 27077difference between verification and routing for delivery, and their actions can
9b371988
PH
27078be varied by a number of generic options such as &%verify%& and &%verify_only%&
27079(see chapter &<<CHAProutergeneric>>&). If routing fails, verification fails.
168e428f
PH
27080The available options are as follows:
27081
9b371988
PH
27082.ilist
27083If the &%callout%& option is specified, successful routing to one or more
27084remote hosts is followed by a &"callout"& to those hosts as an additional
27085check. Callouts and their sub-options are discussed in the next section.
27086.next
27087If there is a defer error while doing verification routing, the ACL
27088normally returns &"defer"&. However, if you include &%defer_ok%& in the
27089options, the condition is forced to be true instead. Note that this is a main
168e428f 27090verification option as well as a suboption for callouts.
9b371988
PH
27091.next
27092The &%no_details%& option is covered in section &<<SECTsenaddver>>&, which
068aaea8 27093discusses the reporting of sender address verification failures.
9b371988 27094.next
9b371988 27095The &%success_on_redirect%& option causes verification always to succeed
068aaea8
PH
27096immediately after a successful redirection. By default, if a redirection
27097generates just one address, that address is also verified. See further
9b371988
PH
27098discussion in section &<<SECTredirwhilveri>>&.
27099.endlist
27100
27101.cindex "verifying address" "differentiating failures"
f89d2485
PH
27102.vindex "&$recipient_verify_failure$&"
27103.vindex "&$sender_verify_failure$&"
27104.vindex "&$acl_verify_message$&"
9b371988
PH
27105After an address verification failure, &$acl_verify_message$& contains the
27106error message that is associated with the failure. It can be preserved by
27107coding like this:
27108.code
27109warn !verify = sender
27110 set acl_m0 = $acl_verify_message
27111.endd
068aaea8
PH
27112If you are writing your own custom rejection message or log message when
27113denying access, you can use this variable to include information about the
27114verification failure.
27115
9b371988 27116In addition, &$sender_verify_failure$& or &$recipient_verify_failure$& (as
068aaea8 27117appropriate) contains one of the following words:
168e428f 27118
9b371988
PH
27119.ilist
27120&%qualify%&: The address was unqualified (no domain), and the message
168e428f 27121was neither local nor came from an exempted host.
9b371988
PH
27122.next
27123&%route%&: Routing failed.
27124.next
27125&%mail%&: Routing succeeded, and a callout was attempted; rejection
168e428f
PH
27126occurred at or before the MAIL command (that is, on initial
27127connection, HELO, or MAIL).
9b371988
PH
27128.next
27129&%recipient%&: The RCPT command in a callout was rejected.
27130.next
27131&%postmaster%&: The postmaster check in a callout was rejected.
27132.endlist
168e428f 27133
168e428f
PH
27134The main use of these variables is expected to be to distinguish between
27135rejections of MAIL and rejections of RCPT in callouts.
27136
27137
27138
27139
9b371988
PH
27140.section "Callout verification" "SECTcallver"
27141.cindex "verifying address" "by callout"
27142.cindex "callout" "verification"
27143.cindex "SMTP" "callout verification"
168e428f
PH
27144For non-local addresses, routing verifies the domain, but is unable to do any
27145checking of the local part. There are situations where some means of verifying
27146the local part is desirable. One way this can be done is to make an SMTP
9b371988
PH
27147&'callback'& to a delivery host for the sender address or a &'callforward'& to
27148a subsequent host for a recipient address, to see if the host accepts the
27149address. We use the term &'callout'& to cover both cases. Note that for a
27150sender address, the callback is not to the client host that is trying to
27151deliver the message, but to one of the hosts that accepts incoming mail for the
27152sender's domain.
068aaea8 27153
068aaea8 27154Exim does not do callouts by default. If you want them to happen, you must
9b371988 27155request them by setting appropriate options on the &%verify%& condition, as
068aaea8
PH
27156described below. This facility should be used with care, because it can add a
27157lot of resource usage to the cost of verifying an address. However, Exim does
27158cache the results of callouts, which helps to reduce the cost. Details of
9b371988 27159caching are in section &<<SECTcallvercache>>&.
168e428f
PH
27160
27161Recipient callouts are usually used only between hosts that are controlled by
27162the same administration. For example, a corporate gateway host could use
068aaea8
PH
27163callouts to check for valid recipients on an internal mailserver. A successful
27164callout does not guarantee that a real delivery to the address would succeed;
27165on the other hand, a failing callout does guarantee that a delivery would fail.
168e428f 27166
9b371988 27167If the &%callout%& option is present on a condition that verifies an address, a
168e428f 27168second stage of verification occurs if the address is successfully routed to
9b371988
PH
27169one or more remote hosts. The usual case is routing by a &(dnslookup)& or a
27170&(manualroute)& router, where the router specifies the hosts. However, if a
27171router that does not set up hosts routes to an &(smtp)& transport with a
27172&%hosts%& setting, the transport's hosts are used. If an &(smtp)& transport has
27173&%hosts_override%& set, its hosts are always used, whether or not the router
168e428f
PH
27174supplies a host list.
27175
27176The port that is used is taken from the transport, if it is specified and is a
27177remote transport. (For routers that do verification only, no transport need be
27178specified.) Otherwise, the default SMTP port is used. If a remote transport
27179specifies an outgoing interface, this is used; otherwise the interface is not
3cb1b51e
PH
27180specified. Likewise, the text that is used for the HELO command is taken from
27181the transport's &%helo_data%& option; if there is no transport, the value of
27182&$smtp_active_hostname$& is used.
168e428f
PH
27183
27184For a sender callout check, Exim makes SMTP connections to the remote hosts, to
27185test whether a bounce message could be delivered to the sender address. The
27186following SMTP commands are sent:
9b371988 27187.display
3cb1b51e 27188&`HELO `&<&'local host name'&>
9b371988
PH
27189&`MAIL FROM:<>`&
27190&`RCPT TO:`&<&'the address to be tested'&>
27191&`QUIT`&
27192.endd
27193LHLO is used instead of HELO if the transport's &%protocol%& option is
27194set to &"lmtp"&.
168e428f
PH
27195
27196A recipient callout check is similar. By default, it also uses an empty address
27197for the sender. This default is chosen because most hosts do not make use of
27198the sender address when verifying a recipient. Using the same address means
27199that a single cache entry can be used for each recipient. Some sites, however,
27200do make use of the sender address when verifying. These are catered for by the
9b371988 27201&%use_sender%& and &%use_postmaster%& options, described in the next section.
168e428f 27202
9b371988
PH
27203If the response to the RCPT command is a 2&'xx'& code, the verification
27204succeeds. If it is 5&'xx'&, the verification fails. For any other condition,
168e428f 27205Exim tries the next host, if any. If there is a problem with all the remote
9b371988
PH
27206hosts, the ACL yields &"defer"&, unless the &%defer_ok%& parameter of the
27207&%callout%& option is given, in which case the condition is forced to succeed.
168e428f 27208
f89d2485
PH
27209.cindex "SMTP" "output flushing, disabling for callout"
27210A callout may take a little time. For this reason, Exim normally flushes SMTP
27211output before performing a callout in an ACL, to avoid unexpected timeouts in
27212clients when the SMTP PIPELINING extension is in use. The flushing can be
27213disabled by using a &%control%& modifier to set &%no_callout_flush%&.
168e428f
PH
27214
27215
27216
168e428f 27217
9b371988
PH
27218.section "Additional parameters for callouts" "CALLaddparcall"
27219.cindex "callout" "additional parameters for"
27220The &%callout%& option can be followed by an equals sign and a number of
27221optional parameters, separated by commas. For example:
27222.code
27223verify = recipient/callout=10s,defer_ok
27224.endd
27225The old syntax, which had &%callout_defer_ok%& and &%check_postmaster%& as
168e428f 27226separate verify options, is retained for backwards compatibility, but is now
9b371988 27227deprecated. The additional parameters for &%callout%& are as follows:
168e428f
PH
27228
27229
9b371988
PH
27230.vlist
27231.vitem <&'a&~time&~interval'&>
f89d2485 27232.cindex "callout" "timeout, specifying"
168e428f
PH
27233This specifies the timeout that applies for the callout attempt to each host.
27234For example:
9b371988
PH
27235.code
27236verify = sender/callout=5s
27237.endd
168e428f 27238The default is 30 seconds. The timeout is used for each response from the
f89d2485 27239remote host. It is also used for the initial connection, unless overridden by
9b371988 27240the &%connect%& parameter.
168e428f
PH
27241
27242
9b371988 27243.vitem &*connect&~=&~*&<&'time&~interval'&>
f89d2485 27244.cindex "callout" "connection timeout, specifying"
168e428f
PH
27245This parameter makes it possible to set a different (usually smaller) timeout
27246for making the SMTP connection. For example:
9b371988
PH
27247.code
27248verify = sender/callout=5s,connect=1s
27249.endd
168e428f
PH
27250If not specified, this timeout defaults to the general timeout value.
27251
9b371988 27252.vitem &*defer_ok*&
f89d2485 27253.cindex "callout" "defer, action on"
168e428f
PH
27254When this parameter is present, failure to contact any host, or any other kind
27255of temporary error, is treated as success by the ACL. However, the cache is not
27256updated in this circumstance.
27257
9b371988
PH
27258.vitem &*fullpostmaster*&
27259.cindex "callout" "full postmaster check"
27260This operates like the &%postmaster%& option (see below), but if the check for
27261&'postmaster@domain'& fails, it tries just &'postmaster'&, without a domain, in
068aaea8 27262accordance with the specification in RFC 2821. The RFC states that the
9b371988 27263unqualified address &'postmaster'& should be accepted.
9b371988
PH
27264
27265
27266.vitem &*mailfrom&~=&~*&<&'email&~address'&>
27267.cindex "callout" "sender when verifying header"
27268When verifying addresses in header lines using the &%header_sender%&
27269verification option, Exim behaves by default as if the addresses are envelope
27270sender addresses from a message. Callout verification therefore tests to see
27271whether a bounce message could be delivered, by using an empty address in the
27272MAIL command. However, it is arguable that these addresses might never be used
27273as envelope senders, and could therefore justifiably reject bounce messages
27274(empty senders). The &%mailfrom%& callout parameter allows you to specify what
27275address to use in the MAIL command. For example:
27276.code
27277require verify = header_sender/callout=mailfrom=abcd@x.y.z
27278.endd
27279This parameter is available only for the &%header_sender%& verification option.
27280
27281
27282.vitem &*maxwait&~=&~*&<&'time&~interval'&>
f89d2485 27283.cindex "callout" "overall timeout, specifying"
168e428f
PH
27284This parameter sets an overall timeout for performing a callout verification.
27285For example:
9b371988
PH
27286.code
27287verify = sender/callout=5s,maxwait=30s
27288.endd
168e428f
PH
27289This timeout defaults to four times the callout timeout for individual SMTP
27290commands. The overall timeout applies when there is more than one host that can
27291be tried. The timeout is checked before trying the next host. This prevents
27292very long delays if there are a large number of hosts and all are timing out
27293(for example, when network connections are timing out).
27294
27295
9b371988 27296.vitem &*no_cache*&
f89d2485
PH
27297.cindex "callout" "cache, suppressing"
27298.cindex "caching callout, suppressing"
168e428f
PH
27299When this parameter is given, the callout cache is neither read nor updated.
27300
9b371988
PH
27301.vitem &*postmaster*&
27302.cindex "callout" "postmaster; checking"
f89d2485 27303When this parameter is set, a successful callout check is followed by a similar
9b371988
PH
27304check for the local part &'postmaster'& at the same domain. If this address is
27305rejected, the callout fails (but see &%fullpostmaster%& above). The result of
27306the postmaster check is recorded in a cache record; if it is a failure, this is
068aaea8
PH
27307used to fail subsequent callouts for the domain without a connection being
27308made, until the cache record expires.
168e428f 27309
9b371988 27310.vitem &*postmaster_mailfrom&~=&~*&<&'email&~address'&>
168e428f
PH
27311The postmaster check uses an empty sender in the MAIL command by default.
27312You can use this parameter to do a postmaster check using a different address.
27313For example:
9b371988
PH
27314.code
27315require verify = sender/callout=postmaster_mailfrom=abc@x.y.z
27316.endd
27317If both &%postmaster%& and &%postmaster_mailfrom%& are present, the rightmost
27318one overrides. The &%postmaster%& parameter is equivalent to this example:
27319.code
27320require verify = sender/callout=postmaster_mailfrom=
27321.endd
27322&*Warning*&: The caching arrangements for postmaster checking do not take
168e428f
PH
27323account of the sender address. It is assumed that either the empty address or
27324a fixed non-empty address will be used. All that Exim remembers is that the
27325postmaster check for the domain succeeded or failed.
27326
27327
9b371988
PH
27328.vitem &*random*&
27329.cindex "callout" "&""random""& check"
168e428f 27330When this parameter is set, before doing the normal callout check, Exim does a
9b371988
PH
27331check for a &"random"& local part at the same domain. The local part is not
27332really random &-- it is defined by the expansion of the option
27333&%callout_random_local_part%&, which defaults to
27334.code
27335$primary_host_name-$tod_epoch-testing
27336.endd
168e428f
PH
27337The idea here is to try to determine whether the remote host accepts all local
27338parts without checking. If it does, there is no point in doing callouts for
9b371988 27339specific local parts. If the &"random"& check succeeds, the result is saved in
168e428f
PH
27340a cache record, and used to force the current and subsequent callout checks to
27341succeed without a connection being made, until the cache record expires.
27342
9b371988
PH
27343.vitem &*use_postmaster*&
27344.cindex "callout" "sender for recipient check"
168e428f 27345This parameter applies to recipient callouts only. For example:
9b371988
PH
27346.code
27347deny !verify = recipient/callout=use_postmaster
27348.endd
f89d2485 27349.vindex "&$qualify_domain$&"
068aaea8 27350It causes a non-empty postmaster address to be used in the MAIL command when
9b371988
PH
27351performing the callout for the recipient, and also for a &"random"& check if
27352that is configured. The local part of the address is &`postmaster`& and the
27353domain is the contents of &$qualify_domain$&.
168e428f 27354
9b371988 27355.vitem &*use_sender*&
168e428f 27356This option applies to recipient callouts only. For example:
9b371988
PH
27357.code
27358require verify = recipient/callout=use_sender
27359.endd
168e428f
PH
27360It causes the message's actual sender address to be used in the MAIL
27361command when performing the callout, instead of an empty address. There is no
27362need to use this option unless you know that the called hosts make use of the
27363sender when checking recipients. If used indiscriminately, it reduces the
27364usefulness of callout caching.
9b371988 27365.endlist
168e428f
PH
27366
27367If you use any of the parameters that set a non-empty sender for the MAIL
9b371988
PH
27368command (&%mailfrom%&, &%postmaster_mailfrom%&, &%use_postmaster%&, or
27369&%use_sender%&), you should think about possible loops. Recipient checking is
168e428f
PH
27370usually done between two hosts that are under the same management, and the host
27371that receives the callouts is not normally configured to do callouts itself.
9b371988 27372Therefore, it is normally safe to use &%use_postmaster%& or &%use_sender%& in
168e428f
PH
27373these circumstances.
27374
27375However, if you use a non-empty sender address for a callout to an arbitrary
27376host, there is the likelihood that the remote host will itself initiate a
27377callout check back to your host. As it is checking what appears to be a message
27378sender, it is likely to use an empty address in MAIL, thus avoiding a
27379callout loop. However, to be on the safe side it would be best to set up your
27380own ACLs so that they do not do sender verification checks when the recipient
27381is the address you use for header sender or postmaster callout checking.
27382
27383Another issue to think about when using non-empty senders for callouts is
9b371988
PH
27384caching. When you set &%mailfrom%& or &%use_sender%&, the cache record is keyed
27385by the sender/recipient combination; thus, for any given recipient, many more
168e428f
PH
27386actual callouts are performed than when an empty sender or postmaster is used.
27387
27388
27389
27390
9b371988
PH
27391.section "Callout caching" "SECTcallvercache"
27392.cindex "hints database" "callout cache"
f89d2485 27393.cindex "callout" "cache, description of"
9b371988 27394.cindex "caching" "callout"
168e428f 27395Exim caches the results of callouts in order to reduce the amount of resources
9b371988
PH
27396used, unless you specify the &%no_cache%& parameter with the &%callout%&
27397option. A hints database called &"callout"& is used for the cache. Two
27398different record types are used: one records the result of a callout check for
27399a specific address, and the other records information that applies to the
27400entire domain (for example, that it accepts the local part &'postmaster'&).
168e428f
PH
27401
27402When an original callout fails, a detailed SMTP error message is given about
27403the failure. However, for subsequent failures use the cache data, this message
27404is not available.
27405
27406The expiry times for negative and positive address cache records are
9b371988
PH
27407independent, and can be set by the global options &%callout_negative_expire%&
27408(default 2h) and &%callout_positive_expire%& (default 24h), respectively.
168e428f
PH
27409
27410If a host gives a negative response to an SMTP connection, or rejects any
27411commands up to and including
9b371988
PH
27412.code
27413MAIL FROM:<>
27414.endd
168e428f
PH
27415(but not including the MAIL command with a non-empty address),
27416any callout attempt is bound to fail. Exim remembers such failures in a
27417domain cache record, which it uses to fail callouts for the domain without
27418making new connections, until the domain record times out. There are two
27419separate expiry times for domain cache records:
9b371988
PH
27420&%callout_domain_negative_expire%& (default 3h) and
27421&%callout_domain_positive_expire%& (default 7d).
168e428f
PH
27422
27423Domain records expire when the negative expiry time is reached if callouts
27424cannot be made for the domain, or if the postmaster check failed.
27425Otherwise, they expire when the positive expiry time is reached. This
9b371988 27426ensures that, for example, a host that stops accepting &"random"& local parts
168e428f
PH
27427will eventually be noticed.
27428
27429The callout caching mechanism is based on the domain of the address that is
27430being tested. If the domain routes to several hosts, it is assumed that their
27431behaviour will be the same.
27432
27433
27434
9b371988
PH
27435.section "Sender address verification reporting" "SECTsenaddver"
27436.cindex "verifying" "suppressing error details"
3cb1b51e
PH
27437See section &<<SECTaddressverification>>& for a general discussion of
27438verification. When sender verification fails in an ACL, the details of the
27439failure are given as additional output lines before the 550 response to the
27440relevant SMTP command (RCPT or DATA). For example, if sender callout is in use,
168e428f 27441you might see:
9b371988
PH
27442.code
27443MAIL FROM:<xyz@abc.example>
27444250 OK
27445RCPT TO:<pqr@def.example>
27446550-Verification failed for <xyz@abc.example>
27447550-Called: 192.168.34.43
27448550-Sent: RCPT TO:<xyz@abc.example>
27449550-Response: 550 Unknown local part xyz in <xyz@abc.example>
27450550 Sender verification failed
27451.endd
168e428f
PH
27452If more than one RCPT command fails in the same way, the details are given
27453only for the first of them. However, some administrators do not want to send
27454out this much information. You can suppress the details by adding
4f578862 27455&`/no_details`& to the ACL statement that requests sender verification. For
168e428f 27456example:
9b371988
PH
27457.code
27458verify = sender/no_details
27459.endd
168e428f 27460
9b371988
PH
27461.section "Redirection while verifying" "SECTredirwhilveri"
27462.cindex "verifying" "redirection while"
27463.cindex "address redirection" "while verifying"
168e428f
PH
27464A dilemma arises when a local address is redirected by aliasing or forwarding
27465during verification: should the generated addresses themselves be verified,
27466or should the successful expansion of the original address be enough to verify
068aaea8 27467it? By default, Exim takes the following pragmatic approach:
168e428f 27468
9b371988
PH
27469.ilist
27470When an incoming address is redirected to just one child address, verification
168e428f
PH
27471continues with the child address, and if that fails to verify, the original
27472verification also fails.
9b371988
PH
27473.next
27474When an incoming address is redirected to more than one child address,
168e428f 27475verification does not continue. A success result is returned.
9b371988 27476.endlist
168e428f
PH
27477
27478This seems the most reasonable behaviour for the common use of aliasing as a
27479way of redirecting different local parts to the same mailbox. It means, for
27480example, that a pair of alias entries of the form
9b371988
PH
27481.code
27482A.Wol: aw123
27483aw123: :fail: Gone away, no forwarding address
27484.endd
168e428f
PH
27485work as expected, with both local parts causing verification failure. When a
27486redirection generates more than one address, the behaviour is more like a
27487mailing list, where the existence of the alias itself is sufficient for
27488verification to succeed.
27489
068aaea8
PH
27490It is possible, however, to change the default behaviour so that all successful
27491redirections count as successful verifications, however many new addresses are
9b371988
PH
27492generated. This is specified by the &%success_on_redirect%& verification
27493option. For example:
27494.code
27495require verify = recipient/success_on_redirect/callout=10s
27496.endd
068aaea8
PH
27497In this example, verification succeeds if a router generates a new address, and
27498the callout does not occur, because no address was routed to a remote host.
27499
3cb1b51e
PH
27500When verification is being tested via the &%-bv%& option, the treatment of
27501redirections is as just described, unless the &%-v%& or any debugging option is
27502also specified. In that case, full verification is done for every generated
27503address and a report is output for each of them.
068aaea8
PH
27504
27505
27506
9b371988
PH
27507.section "Client SMTP authorization (CSA)" "SECTverifyCSA"
27508.cindex "CSA" "verifying"
068aaea8
PH
27509Client SMTP Authorization is a system that allows a site to advertise
27510which machines are and are not permitted to send email. This is done by placing
27511special SRV records in the DNS; these are looked up using the client's HELO
27512domain. At the time of writing, CSA is still an Internet Draft. Client SMTP
27513Authorization checks in Exim are performed by the ACL condition:
9b371988
PH
27514.code
27515verify = csa
27516.endd
068aaea8
PH
27517This fails if the client is not authorized. If there is a DNS problem, or if no
27518valid CSA SRV record is found, or if the client is authorized, the condition
27519succeeds. These three cases can be distinguished using the expansion variable
9b371988
PH
27520&$csa_status$&, which can take one of the values &"fail"&, &"defer"&,
27521&"unknown"&, or &"ok"&. The condition does not itself defer because that would
068aaea8
PH
27522be likely to cause problems for legitimate email.
27523
068aaea8 27524The error messages produced by the CSA code include slightly more
9b371988 27525detail. If &$csa_status$& is &"defer"&, this may be because of problems
068aaea8 27526looking up the CSA SRV record, or problems looking up the CSA target
9b371988
PH
27527address record. There are four reasons for &$csa_status$& being &"fail"&:
27528
27529.ilist
27530The client's host name is explicitly not authorized.
27531.next
27532The client's IP address does not match any of the CSA target IP addresses.
27533.next
27534The client's host name is authorized but it has no valid target IP addresses
068aaea8 27535(for example, the target's addresses are IPv6 and the client is using IPv4).
9b371988
PH
27536.next
27537The client's host name has no CSA SRV record but a parent domain has asserted
068aaea8 27538that all subdomains must be explicitly authorized.
9b371988 27539.endlist
068aaea8 27540
9b371988 27541The &%csa%& verification condition can take an argument which is the domain to
068aaea8 27542use for the DNS query. The default is:
9b371988
PH
27543.code
27544verify = csa/$sender_helo_name
27545.endd
068aaea8
PH
27546This implementation includes an extension to CSA. If the query domain
27547is an address literal such as [192.0.2.95], or if it is a bare IP
27548address, Exim searches for CSA SRV records in the reverse DNS as if
9b371988 27549the HELO domain was (for example) &'95.2.0.192.in-addr.arpa'&. Therefore it is
068aaea8 27550meaningful to say:
9b371988
PH
27551.code
27552verify = csa/$sender_host_address
27553.endd
068aaea8
PH
27554In fact, this is the check that Exim performs if the client does not say HELO.
27555This extension can be turned off by setting the main configuration option
9b371988 27556&%dns_csa_use_reverse%& to be false.
068aaea8 27557
068aaea8
PH
27558If a CSA SRV record is not found for the domain itself, a search
27559is performed through its parent domains for a record which might be
27560making assertions about subdomains. The maximum depth of this search is limited
9b371988 27561using the main configuration option &%dns_csa_search_limit%&, which is 5 by
068aaea8
PH
27562default. Exim does not look for CSA SRV records in a top level domain, so the
27563default settings handle HELO domains as long as seven
9b371988
PH
27564(&'hostname.five.four.three.two.one.com'&). This encompasses the vast majority
27565of legitimate HELO domains.
068aaea8 27566
9b371988 27567The &'dnsdb'& lookup also has support for CSA. Although &'dnsdb'& also supports
068aaea8 27568direct SRV lookups, this is not sufficient because of the extra parent domain
9b371988 27569search behaviour of CSA, and (as with PTR lookups) &'dnsdb'& also turns IP
068aaea8
PH
27570addresses into lookups in the reverse DNS space. The result of a successful
27571lookup such as:
9b371988 27572.code
068aaea8 27573${lookup dnsdb {csa=$sender_helo_name}}
9b371988 27574.endd
068aaea8 27575has two space-separated fields: an authorization code and a target host name.
9b371988
PH
27576The authorization code can be &"Y"& for yes, &"N"& for no, &"X"& for explicit
27577authorization required but absent, or &"?"& for unknown.
068aaea8
PH
27578
27579
27580
27581
9b371988 27582.section "Bounce address tag validation" "SECTverifyPRVS"
f89d2485 27583.cindex "BATV, verifying"
068aaea8 27584Bounce address tag validation (BATV) is a scheme whereby the envelope senders
9b371988 27585of outgoing messages have a cryptographic, timestamped &"tag"& added to them.
068aaea8
PH
27586Genuine incoming bounce messages should therefore always be addressed to
27587recipients that have a valid tag. This scheme is a way of detecting unwanted
9b371988 27588bounce messages caused by sender address forgeries (often called &"collateral
4f578862 27589spam"&), because the recipients of such messages do not include valid tags.
068aaea8 27590
068aaea8 27591There are two expansion items to help with the implementation of the BATV
9b371988 27592&"prvs"& (private signature) scheme in an Exim configuration. This scheme signs
db9452a9
PH
27593the original envelope sender address by using a simple key to add a hash of the
27594address and some time-based randomizing information. The &%prvs%& expansion
27595item creates a signed address, and the &%prvscheck%& expansion item checks one.
27596The syntax of these expansion items is described in section
9b371988 27597&<<SECTexpansionitems>>&.
068aaea8 27598
068aaea8
PH
27599As an example, suppose the secret per-address keys are stored in an MySQL
27600database. A query to look up the key for an address could be defined as a macro
27601like this:
9b371988 27602.code
068aaea8
PH
27603PRVSCHECK_SQL = ${lookup mysql{SELECT secret FROM batv_prvs \
27604 WHERE sender='${quote_mysql:$prvscheck_address}'\
27605 }{$value}}
9b371988 27606.endd
068aaea8 27607Suppose also that the senders who make use of BATV are defined by an address
9b371988 27608list called &%batv_senders%&. Then, in the ACL for RCPT commands, you could
068aaea8 27609use this:
9b371988 27610.code
068aaea8 27611# Bounces: drop unsigned addresses for BATV senders
f89d2485 27612deny message = This address does not send an unsigned reverse path
068aaea8
PH
27613 senders = :
27614 recipients = +batv_senders
27615
27616# Bounces: In case of prvs-signed address, check signature.
27617deny message = Invalid reverse path signature.
27618 senders = :
27619 condition = ${prvscheck {$local_part@$domain}\
27620 {PRVSCHECK_SQL}{1}}
27621 !condition = $prvscheck_result
9b371988 27622.endd
068aaea8
PH
27623The first statement rejects recipients for bounce messages that are addressed
27624to plain BATV sender addresses, because it is known that BATV senders do not
27625send out messages with plain sender addresses. The second statement rejects
27626recipients that are prvs-signed, but with invalid signatures (either because
27627the key is wrong, or the signature has timed out).
27628
068aaea8 27629A non-prvs-signed address is not rejected by the second statement, because the
9b371988
PH
27630&%prvscheck%& expansion yields an empty string if its first argument is not a
27631prvs-signed address, thus causing the &%condition%& condition to be false. If
27632the first argument is a syntactically valid prvs-signed address, the yield is
27633the third string (in this case &"1"&), whether or not the cryptographic and
27634timeout checks succeed. The &$prvscheck_result$& variable contains the result
27635of the checks (empty for failure, &"1"& for success).
27636
71e1673f 27637.new
2e317712
TF
27638There is one more issue you must consider when implementing prvs-signing:
27639you have to ensure that the routers accept prvs-signed addresses and
4f578862
PH
27640deliver them correctly. The easiest way to handle this is to use a &(redirect)&
27641router to remove the signature with a configuration along these lines:
71e1673f 27642.wen
9b371988 27643.code
068aaea8
PH
27644batv_redirect:
27645 driver = redirect
27646 data = ${prvscheck {$local_part@$domain}{PRVSCHECK_SQL}}
9b371988
PH
27647.endd
27648This works because, if the third argument of &%prvscheck%& is empty, the result
068aaea8
PH
27649of the expansion of a prvs-signed address is the decoded value of the original
27650address. This router should probably be the first of your routers that handles
27651local addresses.
27652
068aaea8
PH
27653To create BATV-signed addresses in the first place, a transport of this form
27654can be used:
9b371988 27655.code
068aaea8
PH
27656external_smtp_batv:
27657 driver = smtp
27658 return_path = ${prvs {$return_path} \
27659 {${lookup mysql{SELECT \
27660 secret FROM batv_prvs WHERE \
27661 sender='${quote_mysql:$sender_address}'} \
27662 {$value}fail}}}
9b371988 27663.endd
068aaea8
PH
27664If no key can be found for the existing return path, no signing takes place.
27665
27666
168e428f 27667
9b371988
PH
27668.section "Using an ACL to control relaying" "SECTrelaycontrol"
27669.cindex "&ACL;" "relay control"
27670.cindex "relaying" "control by ACL"
27671.cindex "policy control" "relay control"
27672An MTA is said to &'relay'& a message if it receives it from some host and
168e428f
PH
27673delivers it directly to another host as a result of a remote address contained
27674within it. Redirecting a local address via an alias or forward file and then
27675passing the message on to another host is not relaying,
9b371988
PH
27676.cindex "&""percent hack""&"
27677but a redirection as a result of the &"percent hack"& is.
168e428f 27678
9b371988 27679Two kinds of relaying exist, which are termed &"incoming"& and &"outgoing"&.
168e428f
PH
27680A host which is acting as a gateway or an MX backup is concerned with incoming
27681relaying from arbitrary hosts to a specific set of domains. On the other hand,
27682a host which is acting as a smart host for a number of clients is concerned
27683with outgoing relaying from those clients to the Internet at large. Often the
27684same host is fulfilling both functions,
9b371988
PH
27685. ///
27686. as illustrated in the diagram below,
27687. ///
168e428f
PH
27688but in principle these two kinds of relaying are entirely independent. What is
27689not wanted is the transmission of mail from arbitrary remote hosts through your
27690system to arbitrary domains.
27691
27692
27693You can implement relay control by means of suitable statements in the ACL that
27694runs for each RCPT command. For convenience, it is often easiest to use
27695Exim's named list facility to define the domains and hosts involved. For
27696example, suppose you want to do the following:
27697
9b371988
PH
27698.ilist
27699Deliver a number of domains to mailboxes on the local host (or process them
27700locally in some other way). Let's say these are &'my.dom1.example'& and
27701&'my.dom2.example'&.
27702.next
27703Relay mail for a number of other domains for which you are the secondary MX.
27704These might be &'friend1.example'& and &'friend2.example'&.
27705.next
27706Relay mail from the hosts on your local LAN, to whatever domains are involved.
168e428f 27707Suppose your LAN is 192.168.45.0/24.
9b371988 27708.endlist
168e428f
PH
27709
27710
27711In the main part of the configuration, you put the following definitions:
9b371988
PH
27712.code
27713domainlist local_domains = my.dom1.example : my.dom2.example
27714domainlist relay_domains = friend1.example : friend2.example
27715hostlist relay_hosts = 192.168.45.0/24
27716.endd
168e428f
PH
27717Now you can use these definitions in the ACL that is run for every RCPT
27718command:
9b371988
PH
27719.code
27720acl_check_rcpt:
27721 accept domains = +local_domains : +relay_domains
27722 accept hosts = +relay_hosts
27723.endd
168e428f
PH
27724The first statement accepts any RCPT command that contains an address in
27725the local or relay domains. For any other domain, control passes to the second
27726statement, which accepts the command only if it comes from one of the relay
27727hosts. In practice, you will probably want to make your ACL more sophisticated
27728than this, for example, by including sender and recipient verification. The
27729default configuration includes a more comprehensive example, which is described
9b371988 27730in chapter &<<CHAPdefconfil>>&.
168e428f
PH
27731
27732
27733
9b371988
PH
27734.section "Checking a relay configuration" "SECTcheralcon"
27735.cindex "relaying" "checking control of"
168e428f
PH
27736You can check the relay characteristics of your configuration in the same way
27737that you can test any ACL behaviour for an incoming SMTP connection, by using
9b371988 27738the &%-bh%& option to run a fake SMTP session with which you interact.
168e428f
PH
27739
27740For specifically testing for unwanted relaying, the host
9b371988 27741&'relay-test.mail-abuse.org'& provides a useful service. If you telnet to this
168e428f
PH
27742host from the host on which Exim is running, using the normal telnet port, you
27743will see a normal telnet connection message and then quite a long delay. Be
27744patient. The remote host is making an SMTP connection back to your host, and
27745trying a number of common probes to test for open relay vulnerability. The
27746results of the tests will eventually appear on your terminal.
4f578862 27747.ecindex IIDacl
168e428f
PH
27748
27749
27750
9b371988
PH
27751. ////////////////////////////////////////////////////////////////////////////
27752. ////////////////////////////////////////////////////////////////////////////
168e428f 27753
9b371988 27754.chapter "Content scanning at ACL time" "CHAPexiscan"
4f578862 27755.scindex IIDcosca "content scanning" "at ACL time"
068aaea8 27756The extension of Exim to include content scanning at ACL time, formerly known
9b371988 27757as &"exiscan"&, was originally implemented as a patch by Tom Kistner. The code
068aaea8
PH
27758was integrated into the main source for Exim release 4.50, and Tom continues to
27759maintain it. Most of the wording of this chapter is taken from Tom's
27760specification.
27761
068aaea8 27762It is also possible to scan the content of messages at other times. The
9b371988 27763&[local_scan()]& function (see chapter &<<CHAPlocalscan>>&) allows for content
068aaea8 27764scanning after all the ACLs have run. A transport filter can be used to scan
9b371988
PH
27765messages at delivery time (see the &%transport_filter%& option, described in
27766chapter &<<CHAPtransportgeneric>>&).
068aaea8
PH
27767
27768If you want to include the ACL-time content-scanning features when you compile
27769Exim, you need to arrange for WITH_CONTENT_SCAN to be defined in your
9b371988
PH
27770&_Local/Makefile_&. When you do that, the Exim binary is built with:
27771
27772.ilist
9b371988
PH
27773Two additional ACLs (&%acl_smtp_mime%& and &%acl_not_smtp_mime%&) that are run
27774for all MIME parts for SMTP and non-SMTP messages, respectively.
9b371988
PH
27775.next
27776Additional ACL conditions and modifiers: &%decode%&, &%malware%&,
27777&%mime_regex%&, &%regex%&, and &%spam%&. These can be used in the ACL that is
27778run at the end of message reception (the &%acl_smtp_data%& ACL).
27779.next
27780An additional control feature (&"no_mbox_unspool"&) that saves spooled copies
168e428f 27781of messages, or parts of messages, for debugging purposes.
9b371988
PH
27782.next
27783Additional expansion variables that are set in the new ACL and by the new
168e428f 27784conditions.
9b371988
PH
27785.next
27786Two new main configuration options: &%av_scanner%& and &%spamd_address%&.
27787.endlist
168e428f 27788
9b371988
PH
27789There is another content-scanning configuration option for &_Local/Makefile_&,
27790called WITH_OLD_DEMIME. If this is set, the old, deprecated &%demime%& ACL
168e428f
PH
27791condition is compiled, in addition to all the other content-scanning features.
27792
27793Content-scanning is continually evolving, and new features are still being
27794added. While such features are still unstable and liable to incompatible
27795changes, they are made available in Exim by setting options whose names begin
9b371988 27796EXPERIMENTAL_ in &_Local/Makefile_&. Such features are not documented in
168e428f 27797this manual. You can find out about them by reading the file called
9b371988 27798&_doc/experimental.txt_&.
168e428f 27799
f89d2485 27800All the content-scanning facilities work on a MBOX copy of the message that is
168e428f 27801temporarily created in a file called:
9b371988
PH
27802.display
27803<&'spool_directory'&>&`/scan/`&<&'message_id'&>/<&'message_id'&>&`.eml`&
27804.endd
27805The &_.eml_& extension is a friendly hint to virus scanners that they can
168e428f
PH
27806expect an MBOX-like structure inside that file. The file is created when the
27807first content scanning facility is called. Subsequent calls to content
27808scanning conditions open the same file again. The directory is recursively
9b371988
PH
27809removed when the &%acl_smtp_data%& ACL has finished running, unless
27810.code
27811control = no_mbox_unspool
27812.endd
168e428f
PH
27813has been encountered. When the MIME ACL decodes files, they are put into the
27814same directory by default.
27815
27816
27817
9b371988
PH
27818.section "Scanning for viruses" "SECTscanvirus"
27819.cindex "virus scanning"
27820.cindex "content scanning" "for viruses"
27821.cindex "content scanning" "the &%malware%& condition"
27822The &%malware%& ACL condition lets you connect virus scanner software to Exim.
27823It supports a &"generic"& interface to scanners called via the shell, and
27824specialized interfaces for &"daemon"& type virus scanners, which are resident
27825in memory and thus are much faster.
168e428f 27826
0a4e3112 27827.oindex "&%av_scanner%&"
9b371988 27828You can set the &%av_scanner%& option in first part of the Exim configuration
168e428f
PH
27829file to specify which scanner to use, together with any additional options that
27830are needed. The basic syntax is as follows:
9b371988
PH
27831.display
27832&`av_scanner = <`&&'scanner-type'&&`>:<`&&'option1'&&`>:<`&&'option2'&&`>:[...]`&
27833.endd
27834If you do not set &%av_scanner%&, it defaults to
27835.code
27836av_scanner = sophie:/var/run/sophie
27837.endd
27838If the value of &%av_scanner%& starts with dollar character, it is expanded
27839before use. The following scanner types are supported in this release:
27840
27841.vlist
27842.vitem &%aveserver%&
27843.cindex "virus scanners" "Kaspersky"
168e428f 27844This is the scanner daemon of Kaspersky Version 5. You can get a trial version
9b371988
PH
27845at &url(http://www.kaspersky.com). This scanner type takes one option,
27846which is the path to the daemon's UNIX socket. The default is shown in this
27847example:
27848.code
27849av_scanner = aveserver:/var/run/aveserver
27850.endd
168e428f 27851
9b371988
PH
27852.vitem &%clamd%&
27853.cindex "virus scanners" "clamd"
168e428f 27854This daemon-type scanner is GPL and free. You can get it at
9b371988
PH
27855&url(http://www.clamav.net/). Some older versions of clamd do not seem to
27856unpack MIME containers, so it used to be recommended to unpack MIME attachments
27857in the MIME ACL. This no longer believed to be necessary. One option is
27858required: either the path and name of a UNIX socket file, or a hostname or IP
27859number, and a port, separated by space, as in the second of these examples:
27860.code
27861av_scanner = clamd:/opt/clamd/socket
27862av_scanner = clamd:192.168.2.100 1234
27863.endd
27864If the option is unset, the default is &_/tmp/clamd_&. Thanks to David Saez for
168e428f
PH
27865contributing the code for this scanner.
27866
9b371988
PH
27867.vitem &%cmdline%&
27868.cindex "virus scanners" "command line interface"
168e428f
PH
27869This is the keyword for the generic command line scanner interface. It can be
27870used to attach virus scanners that are invoked from the shell. This scanner
27871type takes 3 mandatory options:
168e428f 27872
9b371988
PH
27873.olist
27874The full path and name of the scanner binary, with all command line options,
27875and a placeholder (&`%s`&) for the directory to scan.
27876
27877.next
27878A regular expression to match against the STDOUT and STDERR output of the
168e428f 27879virus scanner. If the expression matches, a virus was found. You must make
9b371988
PH
27880absolutely sure that this expression matches on &"virus found"&. This is called
27881the &"trigger"& expression.
168e428f 27882
9b371988
PH
27883.next
27884Another regular expression, containing exactly one pair of parentheses, to
168e428f 27885match the name of the virus found in the scanners output. This is called the
9b371988
PH
27886&"name"& expression.
27887.endlist olist
168e428f 27888
9b371988
PH
27889For example, Sophos Sweep reports a virus on a line like this:
27890.code
27891Virus 'W32/Magistr-B' found in file ./those.bat
27892.endd
3cb1b51e
PH
27893For the trigger expression, we can match the phrase &"found in file"&. For the
27894name expression, we want to extract the W32/Magistr-B string, so we can match
27895for the single quotes left and right of it. Altogether, this makes the
168e428f 27896configuration setting:
9b371988 27897.code
168e428f 27898av_scanner = cmdline:\
3cb1b51e
PH
27899 /path/to/sweep -ss -all -rec -archive %s:\
27900 found in file:'(.+)'
9b371988
PH
27901.endd
27902.vitem &%drweb%&
27903.cindex "virus scanners" "DrWeb"
27904The DrWeb daemon scanner (&url(http://www.sald.com/)) interface takes one
168e428f 27905argument, either a full path to a UNIX socket, or an IP address and port
068aaea8 27906separated by white space, as in these examples:
9b371988
PH
27907.code
27908av_scanner = drweb:/var/run/drwebd.sock
27909av_scanner = drweb:192.168.2.20 31337
27910.endd
27911If you omit the argument, the default path &_/usr/local/drweb/run/drwebd.sock_&
168e428f
PH
27912is used. Thanks to Alex Miller for contributing the code for this scanner.
27913
9b371988
PH
27914.vitem &%fsecure%&
27915.cindex "virus scanners" "F-Secure"
27916The F-Secure daemon scanner (&url(http://www.f-secure.com)) takes one
27917argument which is the path to a UNIX socket. For example:
27918.code
27919av_scanner = fsecure:/path/to/.fsav
27920.endd
27921If no argument is given, the default is &_/var/run/.fsav_&. Thanks to Johan
168e428f
PH
27922Thelmen for contributing the code for this scanner.
27923
9b371988
PH
27924.vitem &%kavdaemon%&
27925.cindex "virus scanners" "Kaspersky"
168e428f 27926This is the scanner daemon of Kaspersky Version 4. This version of the
9b371988 27927Kaspersky scanner is outdated. Please upgrade (see &%aveserver%& above). This
168e428f
PH
27928scanner type takes one option, which is the path to the daemon's UNIX socket.
27929For example:
9b371988
PH
27930.code
27931av_scanner = kavdaemon:/opt/AVP/AvpCtl
27932.endd
27933The default path is &_/var/run/AvpCtl_&.
168e428f 27934
9b371988
PH
27935.vitem &%mksd%&
27936.cindex "virus scanners" "mksd"
168e428f
PH
27937This is a daemon type scanner that is aimed mainly at Polish users, though some
27938parts of documentation are now available in English. You can get it at
9b371988
PH
27939&url(http://linux.mks.com.pl/). The only option for this scanner type is
27940the maximum number of processes used simultaneously to scan the attachments,
168e428f
PH
27941provided that the demime facility is employed and also provided that mksd has
27942been run with at least the same number of child processes. For example:
9b371988
PH
27943.code
27944av_scanner = mksd:2
27945.endd
168e428f
PH
27946You can safely omit this option (the default value is 1).
27947
9b371988
PH
27948.vitem &%sophie%&
27949.cindex "virus scanners" "Sophos and Sophie"
27950Sophie is a daemon that uses Sophos' &%libsavi%& library to scan for viruses.
db9452a9
PH
27951You can get Sophie at &url(http://www.clanfield.info/sophie/). The only option
27952for this scanner type is the path to the UNIX socket that Sophie uses for
27953client communication. For example:
9b371988
PH
27954.code
27955av_scanner = sophie:/tmp/sophie
27956.endd
27957The default path is &_/var/run/sophie_&, so if you are using this, you can omit
168e428f 27958the option.
9b371988
PH
27959.endlist
27960
9b371988
PH
27961When &%av_scanner%& is correctly set, you can use the &%malware%& condition in
27962the DATA ACL. &*Note*&: You cannot use the &%malware%& condition in the MIME
27963ACL.
9b371988
PH
27964
27965The &%av_scanner%& option is expanded each time &%malware%& is called. This
27966makes it possible to use different scanners. See further below for an example.
27967The &%malware%& condition caches its results, so when you use it multiple times
27968for the same message, the actual scanning process is only carried out once.
27969However, using expandable items in &%av_scanner%& disables this caching, in
27970which case each use of the &%malware%& condition causes a new scan of the
27971message.
168e428f 27972
9b371988 27973The &%malware%& condition takes a right-hand argument that is expanded before
168e428f
PH
27974use. It can then be one of
27975
9b371988
PH
27976.ilist
27977&"true"&, &"*"&, or &"1"&, in which case the message is scanned for viruses.
168e428f
PH
27978The condition succeeds if a virus was found, and fail otherwise. This is the
27979recommended usage.
9b371988 27980.next
db9452a9
PH
27981&"false"& or &"0"& or an empty string, in which case no scanning is done and
27982the condition fails immediately.
9b371988
PH
27983.next
27984A regular expression, in which case the message is scanned for viruses. The
168e428f
PH
27985condition succeeds if a virus is found and its name matches the regular
27986expression. This allows you to take special actions on certain types of virus.
9b371988 27987.endlist
168e428f 27988
9b371988 27989You can append &`/defer_ok`& to the &%malware%& condition to accept messages
db9452a9
PH
27990even if there is a problem with the virus scanner. Otherwise, such a problem
27991causes the ACL to defer.
168e428f 27992
f89d2485 27993.vindex "&$malware_name$&"
168e428f 27994When a virus is found, the condition sets up an expansion variable called
9b371988
PH
27995&$malware_name$& that contains the name of the virus. You can use it in a
27996&%message%& modifier that specifies the error returned to the sender, and/or in
168e428f
PH
27997logging data.
27998
27999If your virus scanner cannot unpack MIME and TNEF containers itself, you should
9b371988
PH
28000use the &%demime%& condition (see section &<<SECTdemimecond>>&) before the
28001&%malware%& condition.
168e428f
PH
28002
28003Here is a very simple scanning example:
9b371988
PH
28004.code
28005deny message = This message contains malware ($malware_name)
168e428f
PH
28006 demime = *
28007 malware = *
9b371988 28008.endd
168e428f 28009The next example accepts messages when there is a problem with the scanner:
9b371988
PH
28010.code
28011deny message = This message contains malware ($malware_name)
168e428f
PH
28012 demime = *
28013 malware = */defer_ok
9b371988 28014.endd
168e428f
PH
28015The next example shows how to use an ACL variable to scan with both sophie and
28016aveserver. It assumes you have set:
9b371988
PH
28017.code
28018av_scanner = $acl_m0
28019.endd
168e428f 28020in the main Exim configuration.
9b371988
PH
28021.code
28022deny message = This message contains malware ($malware_name)
168e428f
PH
28023 set acl_m0 = sophie
28024 malware = *
28025
9b371988 28026deny message = This message contains malware ($malware_name)
168e428f
PH
28027 set acl_m0 = aveserver
28028 malware = *
9b371988 28029.endd
168e428f
PH
28030
28031
9b371988
PH
28032.section "Scanning with SpamAssassin" "SECTscanspamass"
28033.cindex "content scanning" "for spam"
28034.cindex "spam scanning"
f89d2485 28035.cindex "SpamAssassin"
9b371988 28036The &%spam%& ACL condition calls SpamAssassin's &%spamd%& daemon to get a spam
168e428f 28037score and a report for the message. You can get SpamAssassin at
9b371988
PH
28038&url(http://www.spamassassin.org), or, if you have a working Perl
28039installation, you can use CPAN by running:
28040.code
28041perl -MCPAN -e 'install Mail::SpamAssassin'
28042.endd
168e428f
PH
28043SpamAssassin has its own set of configuration files. Please review its
28044documentation to see how you can tweak it. The default installation should work
28045nicely, however.
28046
0a4e3112 28047.oindex "&%spamd_address%&"
9b371988 28048After having installed and configured SpamAssassin, start the &%spamd%& daemon.
168e428f 28049By default, it listens on 127.0.0.1, TCP port 783. If you use another host or
9b371988
PH
28050port for &%spamd%&, you must set the &%spamd_address%& option in the global
28051part of the Exim configuration as follows (example):
28052.code
28053spamd_address = 192.168.99.45 387
28054.endd
168e428f 28055You do not need to set this option if you use the default. As of version 2.60,
9b371988
PH
28056&%spamd%& also supports communication over UNIX sockets. If you want to use
28057these, supply &%spamd_address%& with an absolute file name instead of a
168e428f 28058address/port pair:
9b371988
PH
28059.code
28060spamd_address = /var/run/spamd_socket
28061.endd
28062You can have multiple &%spamd%& servers to improve scalability. These can
28063reside on other hardware reachable over the network. To specify multiple
28064&%spamd%& servers, put multiple address/port pairs in the &%spamd_address%&
28065option, separated with colons:
28066.code
168e428f
PH
28067spamd_address = 192.168.2.10 783 : \
28068 192.168.2.11 783 : \
28069 192.168.2.12 783
9b371988
PH
28070.endd
28071Up to 32 &%spamd%& servers are supported. The servers are queried in a random
068aaea8 28072fashion. When a server fails to respond to the connection attempt, all other
9b371988 28073servers are tried until one succeeds. If no server responds, the &%spam%&
168e428f
PH
28074condition defers.
28075
9b371988
PH
28076&*Warning*&: It is not possible to use the UNIX socket connection method with
28077multiple &%spamd%& servers.
168e428f 28078
8fde9903
NM
28079The &%spamd_address%& variable is expanded before use if it starts with
28080a dollar sign. In this case, the expansion may return a string that is
28081used as the list so that multiple spamd servers can be the result of an
28082expansion.
168e428f 28083
f89d2485 28084.section "Calling SpamAssassin from an Exim ACL" "SECID206"
9b371988
PH
28085Here is a simple example of the use of the &%spam%& condition in a DATA ACL:
28086.code
28087deny message = This message was classified as SPAM
28088 spam = joe
28089.endd
3cb1b51e
PH
28090The right-hand side of the &%spam%& condition specifies a name. This is
28091relevant if you have set up multiple SpamAssassin profiles. If you do not want
28092to scan using a specific profile, but rather use the SpamAssassin system-wide
28093default profile, you can scan for an unknown name, or simply use &"nobody"&.
28094However, you must put something on the right-hand side.
28095
28096The name allows you to use per-domain or per-user antispam profiles in
28097principle, but this is not straightforward in practice, because a message may
28098have multiple recipients, not necessarily all in the same domain. Because the
28099&%spam%& condition has to be called from a DATA ACL in order to be able to
28100read the contents of the message, the variables &$local_part$& and &$domain$&
28101are not set.
28102
28103The right-hand side of the &%spam%& condition is expanded before being used, so
28104you can put lookups or conditions there. When the right-hand side evaluates to
28105&"0"& or &"false"&, no scanning is done and the condition fails immediately.
168e428f 28106
168e428f 28107
068aaea8 28108Scanning with SpamAssassin uses a lot of resources. If you scan every message,
f89d2485 28109large ones may cause significant performance degradation. As most spam messages
068aaea8
PH
28110are quite small, it is recommended that you do not scan the big ones. For
28111example:
9b371988 28112.code
068aaea8
PH
28113deny message = This message was classified as SPAM
28114 condition = ${if < {$message_size}{10K}}
28115 spam = nobody
9b371988 28116.endd
068aaea8 28117
9b371988 28118The &%spam%& condition returns true if the threshold specified in the user's
168e428f 28119SpamAssassin profile has been matched or exceeded. If you want to use the
9b371988
PH
28120&%spam%& condition for its side effects (see the variables below), you can make
28121it always return &"true"& by appending &`:true`& to the username.
168e428f 28122
9b371988 28123.cindex "spam scanning" "returned variables"
c0712871
PH
28124When the &%spam%& condition is run, it sets up a number of expansion
28125variables. With the exception of &$spam_score_int$&, these are usable only
28126within ACLs; their values are not retained with the message and so cannot be
28127used at delivery time.
168e428f 28128
9b371988
PH
28129.vlist
28130.vitem &$spam_score$&
28131The spam score of the message, for example &"3.4"& or &"30.5"&. This is useful
168e428f
PH
28132for inclusion in log or reject messages.
28133
9b371988 28134.vitem &$spam_score_int$&
168e428f 28135The spam score of the message, multiplied by ten, as an integer value. For
b049e222
TF
28136example &"34"& or &"305"&. It may appear to disagree with &$spam_score$&
28137because &$spam_score$& is rounded and &$spam_score_int$& is truncated.
28138The integer value is useful for numeric comparisons in
c0712871
PH
28139conditions. This variable is special; its value is saved with the message, and
28140written to Exim's spool file. This means that it can be used during the whole
28141life of the message on your Exim system, in particular, in routers or
28142transports during the later delivery phase.
168e428f 28143
9b371988
PH
28144.vitem &$spam_bar$&
28145A string consisting of a number of &"+"& or &"-"& characters, representing the
168e428f 28146integer part of the spam score value. A spam score of 4.4 would have a
9b371988
PH
28147&$spam_bar$& value of &"++++"&. This is useful for inclusion in warning
28148headers, since MUAs can match on such strings.
168e428f 28149
9b371988 28150.vitem &$spam_report$&
168e428f
PH
28151A multiline text table, containing the full SpamAssassin report for the
28152message. Useful for inclusion in headers or reject messages.
9b371988 28153.endlist
168e428f 28154
8fde9903
NM
28155The &%spam%& condition caches its results unless expansion in
28156spamd_address was used. If you call it again with the same user name, it
28157does not scan again, but rather returns the same values as before.
168e428f 28158
8fde9903
NM
28159The &%spam%& condition returns DEFER if there is any error while running
28160the message through SpamAssassin or if the expansion of spamd_address
28161failed. If you want to treat DEFER as FAIL (to pass on to the next ACL
28162statement block), append &`/defer_ok`& to the right-hand side of the
28163spam condition, like this:
9b371988
PH
28164.code
28165deny message = This message was classified as SPAM
28166 spam = joe/defer_ok
28167.endd
28168This causes messages to be accepted even if there is a problem with &%spamd%&.
168e428f 28169
9b371988 28170Here is a longer, commented example of the use of the &%spam%&
168e428f 28171condition:
9b371988
PH
28172.code
28173# put headers in all messages (no matter if spam or not)
db9452a9
PH
28174warn spam = nobody:true
28175 add_header = X-Spam-Score: $spam_score ($spam_bar)
28176 add_header = X-Spam-Report: $spam_report
9b371988
PH
28177
28178# add second subject line with *SPAM* marker when message
28179# is over threshold
db9452a9
PH
28180warn spam = nobody
28181 add_header = Subject: *SPAM* $h_Subject:
9b371988
PH
28182
28183# reject spam at high scores (> 12)
28184deny message = This message scored $spam_score spam points.
28185 spam = nobody:true
28186 condition = ${if >{$spam_score_int}{120}{1}{0}}
28187.endd
28188
28189
28190
28191.section "Scanning MIME parts" "SECTscanmimepart"
28192.cindex "content scanning" "MIME parts"
28193.cindex "MIME content scanning"
0a4e3112
PH
28194.oindex "&%acl_smtp_mime%&"
28195.oindex "&%acl_not_smtp_mime%&"
9b371988
PH
28196The &%acl_smtp_mime%& global option specifies an ACL that is called once for
28197each MIME part of an SMTP message, including multipart types, in the sequence
28198of their position in the message. Similarly, the &%acl_not_smtp_mime%& option
068aaea8
PH
28199specifies an ACL that is used for the MIME parts of non-SMTP messages. These
28200options may both refer to the same ACL if you want the same processing in both
28201cases.
28202
595028e4
PH
28203These ACLs are called (possibly many times) just before the &%acl_smtp_data%&
28204ACL in the case of an SMTP message, or just before the &%acl_not_smtp%& ACL in
28205the case of a non-SMTP message. However, a MIME ACL is called only if the
7d0ab55c 28206message contains a &'Content-Type:'& header line. When a call to a MIME
595028e4
PH
28207ACL does not yield &"accept"&, ACL processing is aborted and the appropriate
28208result code is sent to the client. In the case of an SMTP message, the
28209&%acl_smtp_data%& ACL is not called when this happens.
9b371988
PH
28210
28211You cannot use the &%malware%& or &%spam%& conditions in a MIME ACL; these can
28212only be used in the DATA or non-SMTP ACLs. However, you can use the &%regex%&
28213condition to match against the raw MIME part. You can also use the
28214&%mime_regex%& condition to match against the decoded MIME part (see section
28215&<<SECTscanregex>>&).
168e428f 28216
068aaea8 28217At the start of a MIME ACL, a number of variables are set from the header
168e428f
PH
28218information for the relevant MIME part. These are described below. The contents
28219of the MIME part are not by default decoded into a disk file except for MIME
9b371988 28220parts whose content-type is &"message/rfc822"&. If you want to decode a MIME
f89d2485
PH
28221part into a disk file, you can use the &%decode%& condition. The general
28222syntax is:
9b371988
PH
28223.display
28224&`decode = [/`&<&'path'&>&`/]`&<&'filename'&>
28225.endd
168e428f
PH
28226The right hand side is expanded before use. After expansion,
28227the value can be:
28228
9b371988
PH
28229.olist
28230&"0"& or &"false"&, in which case no decoding is done.
28231.next
28232The string &"default"&. In that case, the file is put in the temporary
28233&"default"& directory <&'spool_directory'&>&_/scan/_&<&'message_id'&>&_/_& with
28234a sequential file name consisting of the message id and a sequence number. The
28235full path and name is available in &$mime_decoded_filename$& after decoding.
28236.next
28237A full path name starting with a slash. If the full name is an existing
168e428f
PH
28238directory, it is used as a replacement for the default directory. The filename
28239is then sequentially assigned. If the path does not exist, it is used as
28240the full path and file name.
9b371988
PH
28241.next
28242If the string does not start with a slash, it is used as the
168e428f 28243filename, and the default path is then used.
9b371988 28244.endlist
595028e4
PH
28245The &%decode%& condition normally succeeds. It is only false for syntax
28246errors or unusual circumstances such as memory shortages. You can easily decode
28247a file with its original, proposed filename using
9b371988
PH
28248.code
28249decode = $mime_filename
28250.endd
28251However, you should keep in mind that &$mime_filename$& might contain
168e428f
PH
28252anything. If you place files outside of the default path, they are not
28253automatically unlinked.
28254
28255For RFC822 attachments (these are messages attached to messages, with a
9b371988
PH
28256content-type of &"message/rfc822"&), the ACL is called again in the same manner
28257as for the primary message, only that the &$mime_is_rfc822$& expansion
168e428f
PH
28258variable is set (see below). Attached messages are always decoded to disk
28259before being checked, and the files are unlinked once the check is done.
28260
9b371988 28261The MIME ACL supports the &%regex%& and &%mime_regex%& conditions. These can be
168e428f 28262used to match regular expressions against raw and decoded MIME parts,
9b371988 28263respectively. They are described in section &<<SECTscanregex>>&.
168e428f 28264
9b371988 28265.cindex "MIME content scanning" "returned variables"
168e428f
PH
28266The following list describes all expansion variables that are
28267available in the MIME ACL:
28268
9b371988
PH
28269.vlist
28270.vitem &$mime_boundary$&
28271If the current part is a multipart (see &$mime_is_multipart$&) below, it should
168e428f 28272have a boundary string, which is stored in this variable. If the current part
9b371988
PH
28273has no boundary parameter in the &'Content-Type:'& header, this variable
28274contains the empty string.
168e428f 28275
9b371988 28276.vitem &$mime_charset$&
168e428f 28277This variable contains the character set identifier, if one was found in the
9b371988
PH
28278&'Content-Type:'& header. Examples for charset identifiers are:
28279.code
28280us-ascii
28281gb2312 (Chinese)
28282iso-8859-1
28283.endd
168e428f
PH
28284Please note that this value is not normalized, so you should do matches
28285case-insensitively.
28286
9b371988
PH
28287.vitem &$mime_content_description$&
28288This variable contains the normalized content of the &'Content-Description:'&
168e428f
PH
28289header. It can contain a human-readable description of the parts content. Some
28290implementations repeat the filename for attachments here, but they are usually
28291only used for display purposes.
28292
9b371988
PH
28293.vitem &$mime_content_disposition$&
28294This variable contains the normalized content of the &'Content-Disposition:'&
28295header. You can expect strings like &"attachment"& or &"inline"& here.
168e428f 28296
9b371988
PH
28297.vitem &$mime_content_id$&
28298This variable contains the normalized content of the &'Content-ID:'& header.
168e428f
PH
28299This is a unique ID that can be used to reference a part from another part.
28300
9b371988
PH
28301.vitem &$mime_content_size$&
28302This variable is set only after the &%decode%& modifier (see above) has been
168e428f
PH
28303successfully run. It contains the size of the decoded part in kilobytes. The
28304size is always rounded up to full kilobytes, so only a completely empty part
9b371988 28305has a &$mime_content_size$& of zero.
168e428f 28306
9b371988 28307.vitem &$mime_content_transfer_encoding$&
168e428f 28308This variable contains the normalized content of the
9b371988
PH
28309&'Content-transfer-encoding:'& header. This is a symbolic name for an encoding
28310type. Typical values are &"base64"& and &"quoted-printable"&.
168e428f 28311
9b371988
PH
28312.vitem &$mime_content_type$&
28313If the MIME part has a &'Content-Type:'& header, this variable contains its
28314value, lowercased, and without any options (like &"name"& or &"charset"&). Here
168e428f 28315are some examples of popular MIME types, as they may appear in this variable:
9b371988
PH
28316.code
28317text/plain
28318text/html
28319application/octet-stream
28320image/jpeg
28321audio/midi
28322.endd
28323If the MIME part has no &'Content-Type:'& header, this variable contains the
168e428f
PH
28324empty string.
28325
9b371988
PH
28326.vitem &$mime_decoded_filename$&
28327This variable is set only after the &%decode%& modifier (see above) has been
168e428f
PH
28328successfully run. It contains the full path and file name of the file
28329containing the decoded data.
9b371988 28330.endlist
168e428f 28331
9b371988
PH
28332.cindex "RFC 2047"
28333.vlist
28334.vitem &$mime_filename$&
168e428f
PH
28335This is perhaps the most important of the MIME variables. It contains a
28336proposed filename for an attachment, if one was found in either the
9b371988
PH
28337&'Content-Type:'& or &'Content-Disposition:'& headers. The filename will be
28338RFC2047 decoded, but no additional sanity checks are done. If no filename was
28339found, this variable contains the empty string.
168e428f 28340
9b371988
PH
28341.vitem &$mime_is_coverletter$&
28342This variable attempts to differentiate the &"cover letter"& of an e-mail from
f89d2485 28343attached data. It can be used to clamp down on flashy or unnecessarily encoded
168e428f 28344content in the cover letter, while not restricting attachments at all.
9b371988 28345
168e428f
PH
28346The variable contains 1 (true) for a MIME part believed to be part of the
28347cover letter, and 0 (false) for an attachment. At present, the algorithm is as
28348follows:
168e428f 28349
9b371988
PH
28350.olist
28351The outermost MIME part of a message is always a cover letter.
28352
28353.next
28354If a multipart/alternative or multipart/related MIME part is a cover letter,
d1e83bff 28355so are all MIME subparts within that multipart.
168e428f 28356
9b371988
PH
28357.next
28358If any other multipart is a cover letter, the first subpart is a cover letter,
168e428f
PH
28359and the rest are attachments.
28360
9b371988
PH
28361.next
28362All parts contained within an attachment multipart are attachments.
28363.endlist olist
28364
28365As an example, the following will ban &"HTML mail"& (including that sent with
168e428f
PH
28366alternative plain text), while allowing HTML files to be attached. HTML
28367coverletter mail attached to non-HMTL coverletter mail will also be allowed:
9b371988
PH
28368.code
28369deny message = HTML mail is not accepted here
28370!condition = $mime_is_rfc822
28371condition = $mime_is_coverletter
28372condition = ${if eq{$mime_content_type}{text/html}{1}{0}}
28373.endd
28374.vitem &$mime_is_multipart$&
168e428f 28375This variable has the value 1 (true) when the current part has the main type
9b371988 28376&"multipart"&, for example &"multipart/alternative"& or &"multipart/mixed"&.
168e428f
PH
28377Since multipart entities only serve as containers for other parts, you may not
28378want to carry out specific actions on them.
28379
9b371988 28380.vitem &$mime_is_rfc822$&
168e428f
PH
28381This variable has the value 1 (true) if the current part is not a part of the
28382checked message itself, but part of an attached message. Attached message
28383decoding is fully recursive.
28384
9b371988 28385.vitem &$mime_part_count$&
168e428f
PH
28386This variable is a counter that is raised for each processed MIME part. It
28387starts at zero for the very first part (which is usually a multipart). The
28388counter is per-message, so it is reset when processing RFC822 attachments (see
9b371988 28389&$mime_is_rfc822$&). The counter stays set after &%acl_smtp_mime%& is
168e428f
PH
28390complete, so you can use it in the DATA ACL to determine the number of MIME
28391parts of a message. For non-MIME messages, this variable contains the value -1.
9b371988 28392.endlist
168e428f
PH
28393
28394
28395
9b371988
PH
28396.section "Scanning with regular expressions" "SECTscanregex"
28397.cindex "content scanning" "with regular expressions"
28398.cindex "regular expressions" "content scanning with"
168e428f
PH
28399You can specify your own custom regular expression matches on the full body of
28400the message, or on individual MIME parts.
28401
9b371988 28402The &%regex%& condition takes one or more regular expressions as arguments and
168e428f 28403matches them against the full message (when called in the DATA ACL) or a raw
9b371988 28404MIME part (when called in the MIME ACL). The &%regex%& condition matches
168e428f 28405linewise, with a maximum line length of 32K characters. That means you cannot
9b371988 28406have multiline matches with the &%regex%& condition.
168e428f 28407
9b371988 28408The &%mime_regex%& condition can be called only in the MIME ACL. It matches up
168e428f 28409to 32K of decoded content (the whole content at once, not linewise). If the
9b371988
PH
28410part has not been decoded with the &%decode%& modifier earlier in the ACL, it
28411is decoded automatically when &%mime_regex%& is executed (using default path
28412and filename values). If the decoded data is larger than 32K, only the first
2841332K characters are checked.
168e428f
PH
28414
28415The regular expressions are passed as a colon-separated list. To include a
28416literal colon, you must double it. Since the whole right-hand side string is
28417expanded before being used, you must also escape dollar signs and backslashes
9b371988 28418with more backslashes, or use the &`\N`& facility to disable expansion.
168e428f 28419Here is a simple example that contains two regular expressions:
9b371988
PH
28420.code
28421deny message = contains blacklisted regex ($regex_match_string)
28422 regex = [Mm]ortgage : URGENT BUSINESS PROPOSAL
28423.endd
168e428f 28424The conditions returns true if any one of the regular expressions matches. The
9b371988 28425&$regex_match_string$& expansion variable is then set up and contains the
168e428f
PH
28426matching regular expression.
28427
9b371988 28428&*Warning*&: With large messages, these conditions can be fairly
168e428f
PH
28429CPU-intensive.
28430
28431
28432
28433
9b371988
PH
28434.section "The demime condition" "SECTdemimecond"
28435.cindex "content scanning" "MIME checking"
28436.cindex "MIME content scanning"
28437The &%demime%& ACL condition provides MIME unpacking, sanity checking and file
068aaea8 28438extension blocking. It is usable only in the DATA and non-SMTP ACLs. The
9b371988
PH
28439&%demime%& condition uses a simpler interface to MIME decoding than the MIME
28440ACL functionality, but provides no additional facilities. Please note that this
068aaea8 28441condition is deprecated and kept only for backward compatibility. You must set
9b371988
PH
28442the WITH_OLD_DEMIME option in &_Local/Makefile_& at build time to be able to
28443use the &%demime%& condition.
168e428f 28444
9b371988 28445The &%demime%& condition unpacks MIME containers in the message. It detects
168e428f
PH
28446errors in MIME containers and can match file extensions found in the message
28447against a list. Using this facility produces files containing the unpacked MIME
28448parts of the message in the temporary scan directory. If you do antivirus
f89d2485 28449scanning, it is recommended that you use the &%demime%& condition before the
9b371988 28450antivirus (&%malware%&) condition.
168e428f 28451
9b371988
PH
28452On the right-hand side of the &%demime%& condition you can pass a
28453colon-separated list of file extensions that it should match against. For
28454example:
28455.code
28456deny message = Found blacklisted file attachment
28457 demime = vbs:com:bat:pif:prf:lnk
28458.endd
168e428f 28459If one of the file extensions is found, the condition is true, otherwise it is
9b371988
PH
28460false. If there is a temporary error while demimeing (for example, &"disk
28461full"&), the condition defers, and the message is temporarily rejected (unless
28462the condition is on a &%warn%& verb).
168e428f
PH
28463
28464The right-hand side is expanded before being treated as a list, so you can have
9b371988
PH
28465conditions and lookups there. If it expands to an empty string, &"false"&, or
28466zero (&"0"&), no demimeing is done and the condition is false.
168e428f 28467
9b371988 28468The &%demime%& condition set the following variables:
168e428f 28469
9b371988
PH
28470.vlist
28471.vitem &$demime_errorlevel$&
f89d2485 28472.vindex "&$demime_errorlevel$&"
168e428f
PH
28473When an error is detected in a MIME container, this variable contains the
28474severity of the error, as an integer number. The higher the value, the more
068aaea8
PH
28475severe the error (the current maximum value is 3). If this variable is unset or
28476zero, no error occurred.
168e428f 28477
9b371988 28478.vitem &$demime_reason$&
f89d2485 28479.vindex "&$demime_reason$&"
9b371988 28480When &$demime_errorlevel$& is greater than zero, this variable contains a
168e428f 28481human-readable text string describing the MIME error that occurred.
9b371988 28482.endlist
168e428f 28483
9b371988
PH
28484.vlist
28485.vitem &$found_extension$&
f89d2485 28486.vindex "&$found_extension$&"
9b371988
PH
28487When the &%demime%& condition is true, this variable contains the file
28488extension it found.
28489.endlist
168e428f 28490
9b371988
PH
28491Both &$demime_errorlevel$& and &$demime_reason$& are set by the first call of
28492the &%demime%& condition, and are not changed on subsequent calls.
168e428f 28493
9b371988
PH
28494If you do not want to check for file extensions, but rather use the &%demime%&
28495condition for unpacking or error checking purposes, pass &"*"& as the
168e428f
PH
28496right-hand side value. Here is a more elaborate example of how to use this
28497facility:
9b371988
PH
28498.code
28499# Reject messages with serious MIME container errors
28500deny message = Found MIME error ($demime_reason).
28501 demime = *
28502 condition = ${if >{$demime_errorlevel}{2}{1}{0}}
168e428f 28503
9b371988
PH
28504# Reject known virus spreading file extensions.
28505# Accepting these is pretty much braindead.
28506deny message = contains $found_extension file (blacklisted).
28507 demime = com:vbs:bat:pif:scr
168e428f 28508
9b371988
PH
28509# Freeze .exe and .doc files. Postmaster can
28510# examine them and eventually thaw them.
28511deny log_message = Another $found_extension file.
28512 demime = exe:doc
28513 control = freeze
28514.endd
4f578862 28515.ecindex IIDcosca
168e428f
PH
28516
28517
28518
28519
9b371988
PH
28520. ////////////////////////////////////////////////////////////////////////////
28521. ////////////////////////////////////////////////////////////////////////////
168e428f 28522
9b371988
PH
28523.chapter "Adding a local scan function to Exim" "CHAPlocalscan" &&&
28524 "Local scan function"
4f578862 28525.scindex IIDlosca "&[local_scan()]& function" "description of"
9b371988
PH
28526.cindex "customizing" "input scan using C function"
28527.cindex "policy control" "by local scan function"
168e428f
PH
28528In these days of email worms, viruses, and ever-increasing spam, some sites
28529want to apply a lot of checking to messages before accepting them.
28530
9b371988 28531The content scanning extension (chapter &<<CHAPexiscan>>&) has facilities for
168e428f 28532passing messages to external virus and spam scanning software. You can also do
9b371988 28533a certain amount in Exim itself through string expansions and the &%condition%&
168e428f 28534condition in the ACL that runs after the SMTP DATA command or the ACL for
9b371988 28535non-SMTP messages (see chapter &<<CHAPACL>>&), but this has its limitations.
168e428f
PH
28536
28537To allow for further customization to a site's own requirements, there is the
28538possibility of linking Exim with a private message scanning function, written
28539in C. If you want to run code that is written in something other than C, you
28540can of course use a little C stub to call it.
28541
28542The local scan function is run once for every incoming message, at the point
28543when Exim is just about to accept the message.
28544It can therefore be used to control non-SMTP messages from local processes as
28545well as messages arriving via SMTP.
28546
28547Exim applies a timeout to calls of the local scan function, and there is an
9b371988
PH
28548option called &%local_scan_timeout%& for setting it. The default is 5 minutes.
28549Zero means &"no timeout"&.
168e428f
PH
28550Exim also sets up signal handlers for SIGSEGV, SIGILL, SIGFPE, and SIGBUS
28551before calling the local scan function, so that the most common types of crash
28552are caught. If the timeout is exceeded or one of those signals is caught, the
28553incoming message is rejected with a temporary error if it is an SMTP message.
28554For a non-SMTP message, the message is dropped and Exim ends with a non-zero
28555code. The incident is logged on the main and reject logs.
28556
28557
28558
f89d2485 28559.section "Building Exim to use a local scan function" "SECID207"
9b371988 28560.cindex "&[local_scan()]& function" "building Exim to use"
168e428f
PH
28561To make use of the local scan function feature, you must tell Exim where your
28562function is before building Exim, by setting LOCAL_SCAN_SOURCE in your
9b371988 28563&_Local/Makefile_&. A recommended place to put it is in the &_Local_&
168e428f 28564directory, so you might set
9b371988
PH
28565.code
28566LOCAL_SCAN_SOURCE=Local/local_scan.c
28567.endd
28568for example. The function must be called &[local_scan()]&. It is called by
168e428f
PH
28569Exim after it has received a message, when the success return code is about to
28570be sent. This is after all the ACLs have been run. The return code from your
28571function controls whether the message is actually accepted or not. There is a
28572commented template function (that just accepts the message) in the file
28573_src/local_scan.c_.
28574
28575If you want to make use of Exim's run time configuration file to set options
9b371988
PH
28576for your &[local_scan()]& function, you must also set
28577.code
28578LOCAL_SCAN_HAS_OPTIONS=yes
28579.endd
28580in &_Local/Makefile_& (see section &<<SECTconoptloc>>& below).
168e428f
PH
28581
28582
28583
28584
9b371988
PH
28585.section "API for local_scan()" "SECTapiforloc"
28586.cindex "&[local_scan()]& function" "API description"
168e428f 28587You must include this line near the start of your code:
9b371988
PH
28588.code
28589#include "local_scan.h"
28590.endd
168e428f
PH
28591This header file defines a number of variables and other values, and the
28592prototype for the function itself. Exim is coded to use unsigned char values
28593almost exclusively, and one of the things this header defines is a shorthand
9b371988 28594for &`unsigned char`& called &`uschar`&.
168e428f
PH
28595It also contains the following macro definitions, to simplify casting character
28596strings and pointers to character strings:
9b371988
PH
28597.code
28598#define CS (char *)
28599#define CCS (const char *)
28600#define CSS (char **)
28601#define US (unsigned char *)
28602#define CUS (const unsigned char *)
28603#define USS (unsigned char **)
28604.endd
28605The function prototype for &[local_scan()]& is:
28606.code
28607extern int local_scan(int fd, uschar **return_text);
28608.endd
168e428f
PH
28609The arguments are as follows:
28610
9b371988
PH
28611.ilist
28612&%fd%& is a file descriptor for the file that contains the body of the message
168e428f 28613(the -D file). The file is open for reading and writing, but updating it is not
9b371988
PH
28614recommended. &*Warning*&: You must &'not'& close this file descriptor.
28615
168e428f
PH
28616The descriptor is positioned at character 19 of the file, which is the first
28617character of the body itself, because the first 19 characters are the message
9b371988 28618id followed by &`-D`& and a newline. If you rewind the file, you should use the
168e428f
PH
28619macro SPOOL_DATA_START_OFFSET to reset to the start of the data, just in
28620case this changes in some future version.
9b371988
PH
28621.next
28622&%return_text%& is an address which you can use to return a pointer to a text
168e428f 28623string at the end of the function. The value it points to on entry is NULL.
9b371988 28624.endlist
168e428f 28625
9b371988 28626The function must return an &%int%& value which is one of the following macros:
168e428f 28627
9b371988
PH
28628.vlist
28629.vitem &`LOCAL_SCAN_ACCEPT`&
f89d2485 28630.vindex "&$local_scan_data$&"
168e428f 28631The message is accepted. If you pass back a string of text, it is saved with
9b371988 28632the message, and made available in the variable &$local_scan_data$&. No
168e428f
PH
28633newlines are permitted (if there are any, they are turned into spaces) and the
28634maximum length of text is 1000 characters.
28635
9b371988 28636.vitem &`LOCAL_SCAN_ACCEPT_FREEZE`&
168e428f
PH
28637This behaves as LOCAL_SCAN_ACCEPT, except that the accepted message is
28638queued without immediate delivery, and is frozen.
28639
9b371988 28640.vitem &`LOCAL_SCAN_ACCEPT_QUEUE`&
168e428f
PH
28641This behaves as LOCAL_SCAN_ACCEPT, except that the accepted message is
28642queued without immediate delivery.
28643
9b371988 28644.vitem &`LOCAL_SCAN_REJECT`&
168e428f 28645The message is rejected; the returned text is used as an error message which is
9b371988
PH
28646passed back to the sender and which is also logged. Newlines are permitted &--
28647they cause a multiline response for SMTP rejections, but are converted to
28648&`\n`& in log lines. If no message is given, &"Administrative prohibition"& is
28649used.
168e428f 28650
9b371988 28651.vitem &`LOCAL_SCAN_TEMPREJECT`&
168e428f 28652The message is temporarily rejected; the returned text is used as an error
9b371988
PH
28653message as for LOCAL_SCAN_REJECT. If no message is given, &"Temporary local
28654problem"& is used.
168e428f 28655
9b371988 28656.vitem &`LOCAL_SCAN_REJECT_NOLOGHDR`&
168e428f
PH
28657This behaves as LOCAL_SCAN_REJECT, except that the header of the rejected
28658message is not written to the reject log. It has the effect of unsetting the
9b371988
PH
28659&%rejected_header%& log selector for just this rejection. If
28660&%rejected_header%& is already unset (see the discussion of the
28661&%log_selection%& option in section &<<SECTlogselector>>&), this code is the
28662same as LOCAL_SCAN_REJECT.
168e428f 28663
9b371988 28664.vitem &`LOCAL_SCAN_TEMPREJECT_NOLOGHDR`&
168e428f
PH
28665This code is a variation of LOCAL_SCAN_TEMPREJECT in the same way that
28666LOCAL_SCAN_REJECT_NOLOGHDR is a variation of LOCAL_SCAN_REJECT.
9b371988 28667.endlist
168e428f
PH
28668
28669If the message is not being received by interactive SMTP, rejections are
9b371988
PH
28670reported by writing to &%stderr%& or by sending an email, as configured by the
28671&%-oe%& command line options.
168e428f
PH
28672
28673
28674
9b371988
PH
28675.section "Configuration options for local_scan()" "SECTconoptloc"
28676.cindex "&[local_scan()]& function" "configuration options"
168e428f 28677It is possible to have option settings in the main configuration file
9b371988 28678that set values in static variables in the &[local_scan()]& module. If you
168e428f 28679want to do this, you must have the line
9b371988
PH
28680.code
28681LOCAL_SCAN_HAS_OPTIONS=yes
28682.endd
28683in your &_Local/Makefile_& when you build Exim. (This line is in
28684&_OS/Makefile-Default_&, commented out). Then, in the &[local_scan()]& source
28685file, you must define static variables to hold the option values, and a table
28686to define them.
28687
28688The table must be a vector called &%local_scan_options%&, of type
28689&`optionlist`&. Each entry is a triplet, consisting of a name, an option type,
168e428f 28690and a pointer to the variable that holds the value. The entries must appear in
9b371988
PH
28691alphabetical order. Following &%local_scan_options%& you must also define a
28692variable called &%local_scan_options_count%& that contains the number of
168e428f 28693entries in the table. Here is a short example, showing two kinds of option:
9b371988
PH
28694.code
28695static int my_integer_option = 42;
28696static uschar *my_string_option = US"a default string";
28697
28698optionlist local_scan_options[] = {
28699 { "my_integer", opt_int, &my_integer_option },
28700 { "my_string", opt_stringptr, &my_string_option }
28701};
28702
28703int local_scan_options_count =
28704 sizeof(local_scan_options)/sizeof(optionlist);
28705.endd
168e428f
PH
28706The values of the variables can now be changed from Exim's runtime
28707configuration file by including a local scan section as in this example:
9b371988
PH
28708.code
28709begin local_scan
28710my_integer = 99
28711my_string = some string of text...
28712.endd
168e428f
PH
28713The available types of option data are as follows:
28714
9b371988
PH
28715.vlist
28716.vitem &*opt_bool*&
168e428f 28717This specifies a boolean (true/false) option. The address should point to a
9b371988
PH
28718variable of type &`BOOL`&, which will be set to TRUE or FALSE, which are macros
28719that are defined as &"1"& and &"0"&, respectively. If you want to detect
168e428f
PH
28720whether such a variable has been set at all, you can initialize it to
28721TRUE_UNSET. (BOOL variables are integers underneath, so can hold more than two
28722values.)
28723
9b371988 28724.vitem &*opt_fixed*&
168e428f 28725This specifies a fixed point number, such as is used for load averages.
9b371988 28726The address should point to a variable of type &`int`&. The value is stored
168e428f
PH
28727multiplied by 1000, so, for example, 1.4142 is truncated and stored as 1414.
28728
9b371988 28729.vitem &*opt_int*&
168e428f 28730This specifies an integer; the address should point to a variable of type
9b371988 28731&`int`&. The value may be specified in any of the integer formats accepted by
168e428f
PH
28732Exim.
28733
9b371988
PH
28734.vitem &*opt_mkint*&
28735This is the same as &%opt_int%&, except that when such a value is output in a
28736&%-bP%& listing, if it is an exact number of kilobytes or megabytes, it is
168e428f
PH
28737printed with the suffix K or M.
28738
9b371988 28739.vitem &*opt_octint*&
f89d2485 28740This also specifies an integer, but the value is always interpreted as an
168e428f
PH
28741octal integer, whether or not it starts with the digit zero, and it is
28742always output in octal.
28743
9b371988 28744.vitem &*opt_stringptr*&
168e428f 28745This specifies a string value; the address must be a pointer to a
9b371988 28746variable that points to a string (for example, of type &`uschar *`&).
168e428f 28747
9b371988 28748.vitem &*opt_time*&
168e428f 28749This specifies a time interval value. The address must point to a variable of
9b371988
PH
28750type &`int`&. The value that is placed there is a number of seconds.
28751.endlist
168e428f 28752
9b371988
PH
28753If the &%-bP%& command line option is followed by &`local_scan`&, Exim prints
28754out the values of all the &[local_scan()]& options.
168e428f
PH
28755
28756
28757
f89d2485 28758.section "Available Exim variables" "SECID208"
9b371988
PH
28759.cindex "&[local_scan()]& function" "available Exim variables"
28760The header &_local_scan.h_& gives you access to a number of C variables. These
168e428f 28761are the only ones that are guaranteed to be maintained from release to release.
595028e4
PH
28762Note, however, that you can obtain the value of any Exim expansion variable,
28763including &$recipients$&, by calling &'expand_string()'&. The exported
28764C variables are as follows:
168e428f 28765
9b371988 28766.vlist
595028e4 28767.vitem &*int&~body_linecount*&
595028e4
PH
28768This variable contains the number of lines in the message's body.
28769
28770.vitem &*int&~body_zerocount*&
28771This variable contains the number of binary zero bytes in the message's body.
595028e4 28772
9b371988 28773.vitem &*unsigned&~int&~debug_selector*&
168e428f
PH
28774This variable is set to zero when no debugging is taking place. Otherwise, it
28775is a bitmap of debugging selectors. Two bits are identified for use in
9b371988
PH
28776&[local_scan()]&; they are defined as macros:
28777
28778.ilist
28779The &`D_v`& bit is set when &%-v%& was present on the command line. This is a
28780testing option that is not privileged &-- any caller may set it. All the
168e428f
PH
28781other selector bits can be set only by admin users.
28782
9b371988
PH
28783.next
28784The &`D_local_scan`& bit is provided for use by &[local_scan()]&; it is set
28785by the &`+local_scan`& debug selector. It is not included in the default set
168e428f 28786of debugging bits.
9b371988 28787.endlist ilist
168e428f 28788
9b371988
PH
28789Thus, to write to the debugging output only when &`+local_scan`& has been
28790selected, you should use code like this:
28791.code
28792if ((debug_selector & D_local_scan) != 0)
28793 debug_printf("xxx", ...);
28794.endd
28795.vitem &*uschar&~*expand_string_message*&
28796After a failing call to &'expand_string()'& (returned value NULL), the
28797variable &%expand_string_message%& contains the error message, zero-terminated.
28798
28799.vitem &*header_line&~*header_list*&
28800A pointer to a chain of header lines. The &%header_line%& structure is
28801discussed below.
28802
28803.vitem &*header_line&~*header_last*&
168e428f
PH
28804A pointer to the last of the header lines.
28805
9b371988
PH
28806.vitem &*uschar&~*headers_charset*&
28807The value of the &%headers_charset%& configuration option.
168e428f 28808
9b371988 28809.vitem &*BOOL&~host_checking*&
168e428f 28810This variable is TRUE during a host checking session that is initiated by the
9b371988 28811&%-bh%& command line option.
168e428f 28812
9b371988 28813.vitem &*uschar&~*interface_address*&
168e428f
PH
28814The IP address of the interface that received the message, as a string. This
28815is NULL for locally submitted messages.
28816
9b371988 28817.vitem &*int&~interface_port*&
3cb1b51e
PH
28818The port on which this message was received. When testing with the &%-bh%&
28819command line option, the value of this variable is -1 unless a port has been
28820specified via the &%-oMi%& option.
168e428f 28821
9b371988 28822.vitem &*uschar&~*message_id*&
d1e83bff 28823This variable contains Exim's message id for the incoming message (the value of
9b371988 28824&$message_exim_id$&) as a zero-terminated string.
168e428f 28825
9b371988 28826.vitem &*uschar&~*received_protocol*&
168e428f
PH
28827The name of the protocol by which the message was received.
28828
9b371988 28829.vitem &*int&~recipients_count*&
168e428f
PH
28830The number of accepted recipients.
28831
9b371988
PH
28832.vitem &*recipient_item&~*recipients_list*&
28833.cindex "recipient" "adding in local scan"
28834.cindex "recipient" "removing in local scan"
28835The list of accepted recipients, held in a vector of length
28836&%recipients_count%&. The &%recipient_item%& structure is discussed below. You
28837can add additional recipients by calling &'receive_add_recipient()'& (see
f89d2485
PH
28838below). You can delete recipients by removing them from the vector and
28839adjusting the value in &%recipients_count%&. In particular, by setting
9b371988
PH
28840&%recipients_count%& to zero you remove all recipients. If you then return the
28841value &`LOCAL_SCAN_ACCEPT`&, the message is accepted, but immediately
28842blackholed. To replace the recipients, you can set &%recipients_count%& to zero
28843and then call &'receive_add_recipient()'& as often as needed.
28844
28845.vitem &*uschar&~*sender_address*&
168e428f
PH
28846The envelope sender address. For bounce messages this is the empty string.
28847
9b371988 28848.vitem &*uschar&~*sender_host_address*&
168e428f
PH
28849The IP address of the sending host, as a string. This is NULL for
28850locally-submitted messages.
28851
9b371988 28852.vitem &*uschar&~*sender_host_authenticated*&
168e428f
PH
28853The name of the authentication mechanism that was used, or NULL if the message
28854was not received over an authenticated SMTP connection.
28855
9b371988 28856.vitem &*uschar&~*sender_host_name*&
168e428f
PH
28857The name of the sending host, if known.
28858
9b371988 28859.vitem &*int&~sender_host_port*&
168e428f
PH
28860The port on the sending host.
28861
9b371988 28862.vitem &*BOOL&~smtp_input*&
168e428f
PH
28863This variable is TRUE for all SMTP input, including BSMTP.
28864
9b371988 28865.vitem &*BOOL&~smtp_batched_input*&
168e428f
PH
28866This variable is TRUE for BSMTP input.
28867
9b371988 28868.vitem &*int&~store_pool*&
168e428f 28869The contents of this variable control which pool of memory is used for new
9b371988
PH
28870requests. See section &<<SECTmemhanloc>>& for details.
28871.endlist
168e428f
PH
28872
28873
f89d2485 28874.section "Structure of header lines" "SECID209"
9b371988
PH
28875The &%header_line%& structure contains the members listed below.
28876You can add additional header lines by calling the &'header_add()'& function
168e428f 28877(see below). You can cause header lines to be ignored (deleted) by setting
9b371988 28878their type to *.
168e428f
PH
28879
28880
9b371988
PH
28881.vlist
28882.vitem &*struct&~header_line&~*next*&
168e428f
PH
28883A pointer to the next header line, or NULL for the last line.
28884
9b371988 28885.vitem &*int&~type*&
168e428f 28886A code identifying certain headers that Exim recognizes. The codes are printing
9b371988
PH
28887characters, and are documented in chapter &<<CHAPspool>>& of this manual.
28888Notice in particular that any header line whose type is * is not transmitted
28889with the message. This flagging is used for header lines that have been
28890rewritten, or are to be removed (for example, &'Envelope-sender:'& header
28891lines.) Effectively, * means &"deleted"&.
168e428f 28892
9b371988 28893.vitem &*int&~slen*&
168e428f
PH
28894The number of characters in the header line, including the terminating and any
28895internal newlines.
28896
9b371988 28897.vitem &*uschar&~*text*&
168e428f
PH
28898A pointer to the text of the header. It always ends with a newline, followed by
28899a zero byte. Internal newlines are preserved.
9b371988 28900.endlist
168e428f
PH
28901
28902
28903
f89d2485 28904.section "Structure of recipient items" "SECID210"
9b371988 28905The &%recipient_item%& structure contains these members:
168e428f 28906
9b371988
PH
28907.vlist
28908.vitem &*uschar&~*address*&
168e428f
PH
28909This is a pointer to the recipient address as it was received.
28910
9b371988 28911.vitem &*int&~pno*&
168e428f 28912This is used in later Exim processing when top level addresses are created by
9b371988
PH
28913the &%one_time%& option. It is not relevant at the time &[local_scan()]& is run
28914and must always contain -1 at this stage.
168e428f 28915
9b371988 28916.vitem &*uschar&~*errors_to*&
168e428f
PH
28917If this value is not NULL, bounce messages caused by failing to deliver to the
28918recipient are sent to the address it contains. In other words, it overrides the
9b371988
PH
28919envelope sender for this one recipient. (Compare the &%errors_to%& generic
28920router option.) If a &[local_scan()]& function sets an &%errors_to%& field to
28921an unqualified address, Exim qualifies it using the domain from
28922&%qualify_recipient%&. When &[local_scan()]& is called, the &%errors_to%& field
28923is NULL for all recipients.
28924.endlist
168e428f
PH
28925
28926
28927
f89d2485 28928.section "Available Exim functions" "SECID211"
9b371988
PH
28929.cindex "&[local_scan()]& function" "available Exim functions"
28930The header &_local_scan.h_& gives you access to a number of Exim functions.
168e428f
PH
28931These are the only ones that are guaranteed to be maintained from release to
28932release:
28933
9b371988
PH
28934.vlist
28935.vitem "&*pid_t&~child_open(uschar&~**argv,&~uschar&~**envp,&~int&~newumask,&&&
28936 &~int&~*infdptr,&~int&~*outfdptr, &~&~BOOL&~make_leader)*&"
168e428f
PH
28937
28938This function creates a child process that runs the command specified by
9b371988
PH
28939&%argv%&. The environment for the process is specified by &%envp%&, which can
28940be NULL if no environment variables are to be passed. A new umask is supplied
28941for the process in &%newumask%&.
28942
168e428f 28943Pipes to the standard input and output of the new process are set up
9b371988 28944and returned to the caller via the &%infdptr%& and &%outfdptr%& arguments. The
168e428f 28945standard error is cloned to the standard output. If there are any file
9b371988 28946descriptors &"in the way"& in the new process, they are closed. If the final
168e428f 28947argument is TRUE, the new process is made into a process group leader.
9b371988 28948
168e428f
PH
28949The function returns the pid of the new process, or -1 if things go wrong.
28950
9b371988 28951.vitem &*int&~child_close(pid_t&~pid,&~int&~timeout)*&
168e428f
PH
28952This function waits for a child process to terminate, or for a timeout (in
28953seconds) to expire. A timeout value of zero means wait as long as it takes. The
28954return value is as follows:
9b371988
PH
28955
28956.ilist
28957>= 0
28958
28959The process terminated by a normal exit and the value is the process
28960ending status.
28961
28962.next
28963< 0 and > &--256
28964
168e428f
PH
28965The process was terminated by a signal and the value is the negation of the
28966signal number.
28967
9b371988
PH
28968.next
28969&--256
168e428f 28970
9b371988
PH
28971The process timed out.
28972.next
28973&--257
168e428f 28974
9b371988
PH
28975The was some other error in wait(); &%errno%& is still set.
28976.endlist
168e428f 28977
9b371988 28978.vitem &*pid_t&~child_open_exim(int&~*fd)*&
168e428f 28979This function provide you with a means of submitting a new message to
9b371988 28980Exim. (Of course, you can also call &_/usr/sbin/sendmail_& yourself if you
168e428f
PH
28981want, but this packages it all up for you.) The function creates a pipe,
28982forks a subprocess that is running
9b371988
PH
28983.code
28984exim -t -oem -oi -f <>
28985.endd
28986and returns to you (via the &`int *`& argument) a file descriptor for the pipe
168e428f
PH
28987that is connected to the standard input. The yield of the function is the PID
28988of the subprocess. You can then write a message to the file descriptor, with
9b371988
PH
28989recipients in &'To:'&, &'Cc:'&, and/or &'Bcc:'& header lines.
28990
28991When you have finished, call &'child_close()'& to wait for the process to
168e428f
PH
28992finish and to collect its ending status. A timeout value of zero is usually
28993fine in this circumstance. Unless you have made a mistake with the recipient
28994addresses, you should get a return code of zero.
28995
4f578862 28996
4f578862
PH
28997.vitem &*pid_t&~child_open_exim2(int&~*fd,&~uschar&~*sender,&~uschar&~&&&
28998 *sender_authentication)*&
28999This function is a more sophisticated version of &'child_open()'&. The command
29000that it runs is:
29001.display
29002&`exim -t -oem -oi -f `&&'sender'&&` -oMas `&&'sender_authentication'&
29003.endd
29004The third argument may be NULL, in which case the &%-oMas%& option is omitted.
4f578862
PH
29005
29006
9b371988
PH
29007.vitem &*void&~debug_printf(char&~*,&~...)*&
29008This is Exim's debugging function, with arguments as for &'(printf()'&. The
168e428f 29009output is written to the standard error stream. If no debugging is selected,
9b371988
PH
29010calls to &'debug_printf()'& have no effect. Normally, you should make calls
29011conditional on the &`local_scan`& debug selector by coding like this:
29012.code
29013if ((debug_selector & D_local_scan) != 0)
29014 debug_printf("xxx", ...);
29015.endd
4f578862 29016
9b371988 29017.vitem &*uschar&~*expand_string(uschar&~*string)*&
168e428f
PH
29018This is an interface to Exim's string expansion code. The return value is the
29019expanded string, or NULL if there was an expansion failure.
9b371988 29020The C variable &%expand_string_message%& contains an error message after an
168e428f
PH
29021expansion failure. If expansion does not change the string, the return value is
29022the pointer to the input string. Otherwise, the return value points to a new
9b371988
PH
29023block of memory that was obtained by a call to &'store_get()'&. See section
29024&<<SECTmemhanloc>>& below for a discussion of memory handling.
168e428f 29025
9b371988 29026.vitem &*void&~header_add(int&~type,&~char&~*format,&~...)*&
168e428f
PH
29027This function allows you to an add additional header line at the end of the
29028existing ones. The first argument is the type, and should normally be a space
29029character. The second argument is a format string and any number of
9b371988
PH
29030substitution arguments as for &[sprintf()]&. You may include internal newlines
29031if you want, and you must ensure that the string ends with a newline.
168e428f 29032
9b371988
PH
29033.vitem "&*void&~header_add_at_position(BOOL&~after,&~uschar&~*name,&~&&&
29034 BOOL&~topnot,&~int&~type,&~char&~*format, &~&~...)*&"
168e428f 29035This function adds a new header line at a specified point in the header
9b371988
PH
29036chain. The header itself is specified as for &'header_add()'&.
29037
29038If &%name%& is NULL, the new header is added at the end of the chain if
29039&%after%& is true, or at the start if &%after%& is false. If &%name%& is not
29040NULL, the header lines are searched for the first non-deleted header that
29041matches the name. If one is found, the new header is added before it if
29042&%after%& is false. If &%after%& is true, the new header is added after the
29043found header and any adjacent subsequent ones with the same name (even if
29044marked &"deleted"&). If no matching non-deleted header is found, the &%topnot%&
29045option controls where the header is added. If it is true, addition is at the
29046top; otherwise at the bottom. Thus, to add a header after all the &'Received:'&
29047headers, or at the top if there are no &'Received:'& headers, you could use
29048.code
29049header_add_at_position(TRUE, US"Received", TRUE,
29050 ' ', "X-xxx: ...");
29051.endd
29052Normally, there is always at least one non-deleted &'Received:'& header, but
29053there may not be if &%received_header_text%& expands to an empty string.
29054
29055
29056.vitem &*void&~header_remove(int&~occurrence,&~uschar&~*name)*&
29057This function removes header lines. If &%occurrence%& is zero or negative, all
168e428f
PH
29058occurrences of the header are removed. If occurrence is greater than zero, that
29059particular instance of the header is removed. If no header(s) can be found that
29060match the specification, the function does nothing.
29061
29062
9b371988
PH
29063.vitem "&*BOOL&~header_testname(header_line&~*hdr,&~uschar&~*name,&~&&&
29064 int&~length,&~BOOL&~notdel)*&"
168e428f 29065This function tests whether the given header has the given name. It is not just
068aaea8 29066a string comparison, because white space is permitted between the name and the
9b371988
PH
29067colon. If the &%notdel%& argument is true, a false return is forced for all
29068&"deleted"& headers; otherwise they are not treated specially. For example:
29069.code
29070if (header_testname(h, US"X-Spam", 6, TRUE)) ...
29071.endd
29072.vitem &*uschar&~*lss_b64encode(uschar&~*cleartext,&~int&~length)*&
29073.cindex "base64 encoding" "functions for &[local_scan()]& use"
168e428f
PH
29074This function base64-encodes a string, which is passed by address and length.
29075The text may contain bytes of any value, including zero. The result is passed
9b371988 29076back in dynamic memory that is obtained by calling &'store_get()'&. It is
168e428f
PH
29077zero-terminated.
29078
9b371988 29079.vitem &*int&~lss_b64decode(uschar&~*codetext,&~uschar&~**cleartext)*&
168e428f
PH
29080This function decodes a base64-encoded string. Its arguments are a
29081zero-terminated base64-encoded string and the address of a variable that is set
29082to point to the result, which is in dynamic memory. The length of the decoded
29083string is the yield of the function. If the input is invalid base64 data, the
29084yield is -1. A zero byte is added to the end of the output string to make it
29085easy to interpret as a C string (assuming it contains no zeros of its own). The
29086added zero byte is not included in the returned count.
29087
9b371988 29088.vitem &*int&~lss_match_domain(uschar&~*domain,&~uschar&~*list)*&
168e428f
PH
29089This function checks for a match in a domain list. Domains are always
29090matched caselessly. The return value is one of the following:
9b371988
PH
29091.display
29092&`OK `& match succeeded
29093&`FAIL `& match failed
29094&`DEFER `& match deferred
29095.endd
168e428f
PH
29096DEFER is usually caused by some kind of lookup defer, such as the
29097inability to contact a database.
29098
9b371988
PH
29099.vitem "&*int&~lss_match_local_part(uschar&~*localpart,&~uschar&~*list,&~&&&
29100 BOOL&~caseless)*&"
168e428f
PH
29101This function checks for a match in a local part list. The third argument
29102controls case-sensitivity. The return values are as for
9b371988 29103&'lss_match_domain()'&.
168e428f 29104
9b371988
PH
29105.vitem "&*int&~lss_match_address(uschar&~*address,&~uschar&~*list,&~&&&
29106 BOOL&~caseless)*&"
168e428f
PH
29107This function checks for a match in an address list. The third argument
29108controls the case-sensitivity of the local part match. The domain is always
9b371988 29109matched caselessly. The return values are as for &'lss_match_domain()'&.
168e428f 29110
9b371988
PH
29111.vitem "&*int&~lss_match_host(uschar&~*host_name,&~uschar&~*host_address,&~&&&
29112 uschar&~*list)*&"
168e428f
PH
29113This function checks for a match in a host list. The most common usage is
29114expected to be
9b371988
PH
29115.code
29116lss_match_host(sender_host_name, sender_host_address, ...)
29117.endd
f89d2485 29118.vindex "&$sender_host_address$&"
068aaea8 29119An empty address field matches an empty item in the host list. If the host name
9b371988 29120is NULL, the name corresponding to &$sender_host_address$& is automatically
068aaea8 29121looked up if a host name is required to match an item in the list. The return
9b371988 29122values are as for &'lss_match_domain()'&, but in addition, &'lss_match_host()'&
068aaea8
PH
29123returns ERROR in the case when it had to look up a host name, but the lookup
29124failed.
168e428f 29125
9b371988
PH
29126.vitem "&*void&~log_write(unsigned&~int&~selector,&~int&~which,&~char&~&&&
29127 *format,&~...)*&"
168e428f 29128This function writes to Exim's log files. The first argument should be zero (it
9b371988
PH
29129is concerned with &%log_selector%&). The second argument can be &`LOG_MAIN`& or
29130&`LOG_REJECT`& or &`LOG_PANIC`& or the inclusive &"or"& of any combination of
29131them. It specifies to which log or logs the message is written. The remaining
168e428f
PH
29132arguments are a format and relevant insertion arguments. The string should not
29133contain any newlines, not even at the end.
29134
29135
9b371988 29136.vitem &*void&~receive_add_recipient(uschar&~*address,&~int&~pno)*&
168e428f
PH
29137This function adds an additional recipient to the message. The first argument
29138is the recipient address. If it is unqualified (has no domain), it is qualified
9b371988
PH
29139with the &%qualify_recipient%& domain. The second argument must always be -1.
29140
29141This function does not allow you to specify a private &%errors_to%& address (as
29142described with the structure of &%recipient_item%& above), because it pre-dates
168e428f
PH
29143the addition of that field to the structure. However, it is easy to add such a
29144value afterwards. For example:
9b371988 29145.code
db9452a9
PH
29146 receive_add_recipient(US"monitor@mydom.example", -1);
29147 recipients_list[recipients_count-1].errors_to =
29148 US"postmaster@mydom.example";
9b371988 29149.endd
168e428f 29150
9b371988 29151.vitem &*BOOL&~receive_remove_recipient(uschar&~*recipient)*&
168e428f
PH
29152This is a convenience function to remove a named recipient from the list of
29153recipients. It returns true if a recipient was removed, and false if no
29154matching recipient could be found. The argument must be a complete email
29155address.
9b371988 29156.endlist
168e428f
PH
29157
29158
9b371988
PH
29159.cindex "RFC 2047"
29160.vlist
29161.vitem "&*uschar&~rfc2047_decode(uschar&~*string,&~BOOL&~lencheck,&&&
29162 &~uschar&~*target,&~int&~zeroval,&~int&~*lenptr, &~&~uschar&~**error)*&"
168e428f 29163This function decodes strings that are encoded according to RFC 2047. Typically
9b371988 29164these are the contents of header lines. First, each &"encoded word"& is decoded
168e428f 29165from the Q or B encoding into a byte-string. Then, if provided with the name of
9b371988 29166a charset encoding, and if the &[iconv()]& function is available, an attempt is
168e428f
PH
29167made to translate the result to the named character set. If this fails, the
29168binary string is returned with an error message.
9b371988
PH
29169
29170The first argument is the string to be decoded. If &%lencheck%& is TRUE, the
168e428f
PH
29171maximum MIME word length is enforced. The third argument is the target
29172encoding, or NULL if no translation is wanted.
9b371988
PH
29173
29174.cindex "binary zero" "in RFC 2047 decoding"
29175.cindex "RFC 2047" "binary zero in"
168e428f 29176If a binary zero is encountered in the decoded string, it is replaced by the
9b371988 29177contents of the &%zeroval%& argument. For use with Exim headers, the value must
168e428f 29178not be 0 because header lines are handled as zero-terminated strings.
9b371988 29179
168e428f 29180The function returns the result of processing the string, zero-terminated; if
9b371988
PH
29181&%lenptr%& is not NULL, the length of the result is set in the variable to
29182which it points. When &%zeroval%& is 0, &%lenptr%& should not be NULL.
29183
29184If an error is encountered, the function returns NULL and uses the &%error%&
29185argument to return an error message. The variable pointed to by &%error%& is
29186set to NULL if there is no error; it may be set non-NULL even when the function
168e428f
PH
29187returns a non-NULL value if decoding was successful, but there was a problem
29188with translation.
29189
29190
9b371988
PH
29191.vitem &*int&~smtp_fflush(void)*&
29192This function is used in conjunction with &'smtp_printf()'&, as described
168e428f
PH
29193below.
29194
9b371988
PH
29195.vitem &*void&~smtp_printf(char&~*,&~...)*&
29196The arguments of this function are like &[printf()]&; it writes to the SMTP
168e428f
PH
29197output stream. You should use this function only when there is an SMTP output
29198stream, that is, when the incoming message is being received via interactive
9b371988
PH
29199SMTP. This is the case when &%smtp_input%& is TRUE and &%smtp_batched_input%&
29200is FALSE. If you want to test for an incoming message from another host (as
29201opposed to a local process that used the &%-bs%& command line option), you can
29202test the value of &%sender_host_address%&, which is non-NULL when a remote host
168e428f 29203is involved.
9b371988
PH
29204
29205If an SMTP TLS connection is established, &'smtp_printf()'& uses the TLS
168e428f 29206output function, so it can be used for all forms of SMTP connection.
9b371988
PH
29207
29208Strings that are written by &'smtp_printf()'& from within &[local_scan()]&
168e428f
PH
29209must start with an appropriate response code: 550 if you are going to return
29210LOCAL_SCAN_REJECT, 451 if you are going to return
29211LOCAL_SCAN_TEMPREJECT, and 250 otherwise. Because you are writing the
29212initial lines of a multi-line response, the code must be followed by a hyphen
29213to indicate that the line is not the final response line. You must also ensure
29214that the lines you write terminate with CRLF. For example:
9b371988
PH
29215.code
29216smtp_printf("550-this is some extra info\r\n");
29217return LOCAL_SCAN_REJECT;
29218.endd
168e428f 29219Note that you can also create multi-line responses by including newlines in
9b371988
PH
29220the data returned via the &%return_text%& argument. The added value of using
29221&'smtp_printf()'& is that, for instance, you could introduce delays between
168e428f 29222multiple output lines.
9b371988
PH
29223
29224The &'smtp_printf()'& function does not return any error indication, because it
168e428f
PH
29225does not automatically flush pending output, and therefore does not test
29226the state of the stream. (In the main code of Exim, flushing and error
29227detection is done when Exim is ready for the next SMTP input command.) If
29228you want to flush the output and check for an error (for example, the
9b371988 29229dropping of a TCP/IP connection), you can call &'smtp_fflush()'&, which has no
168e428f
PH
29230arguments. It flushes the output stream, and returns a non-zero value if there
29231is an error.
29232
9b371988 29233.vitem &*void&~*store_get(int)*&
168e428f
PH
29234This function accesses Exim's internal store (memory) manager. It gets a new
29235chunk of memory whose size is given by the argument. Exim bombs out if it ever
29236runs out of memory. See the next section for a discussion of memory handling.
29237
9b371988
PH
29238.vitem &*void&~*store_get_perm(int)*&
29239This function is like &'store_get()'&, but it always gets memory from the
168e428f
PH
29240permanent pool. See the next section for a discussion of memory handling.
29241
9b371988 29242.vitem &*uschar&~*string_copy(uschar&~*string)*&
168e428f
PH
29243See below.
29244
9b371988 29245.vitem &*uschar&~*string_copyn(uschar&~*string,&~int&~length)*&
168e428f
PH
29246See below.
29247
9b371988 29248.vitem &*uschar&~*string_sprintf(char&~*format,&~...)*&
168e428f
PH
29249These three functions create strings using Exim's dynamic memory facilities.
29250The first makes a copy of an entire string. The second copies up to a maximum
29251number of characters, indicated by the second argument. The third uses a format
29252and insertion arguments to create a new string. In each case, the result is a
29253pointer to a new string in the current memory pool. See the next section for
29254more discussion.
9b371988 29255.endlist
168e428f
PH
29256
29257
29258
9b371988
PH
29259.section "More about Exim's memory handling" "SECTmemhanloc"
29260.cindex "&[local_scan()]& function" "memory handling"
168e428f
PH
29261No function is provided for freeing memory, because that is never needed.
29262The dynamic memory that Exim uses when receiving a message is automatically
29263recycled if another message is received by the same process (this applies only
9b371988
PH
29264to incoming SMTP connections &-- other input methods can supply only one
29265message at a time). After receiving the last message, a reception process
29266terminates.
168e428f
PH
29267
29268Because it is recycled, the normal dynamic memory cannot be used for holding
29269data that must be preserved over a number of incoming messages on the same SMTP
29270connection. However, Exim in fact uses two pools of dynamic memory; the second
29271one is not recycled, and can be used for this purpose.
29272
29273If you want to allocate memory that remains available for subsequent messages
29274in the same SMTP connection, you should set
9b371988
PH
29275.code
29276store_pool = POOL_PERM
29277.endd
168e428f
PH
29278before calling the function that does the allocation. There is no need to
29279restore the value if you do not need to; however, if you do want to revert to
9b371988 29280the normal pool, you can either restore the previous value of &%store_pool%& or
168e428f
PH
29281set it explicitly to POOL_MAIN.
29282
29283The pool setting applies to all functions that get dynamic memory, including
9b371988
PH
29284&'expand_string()'&, &'store_get()'&, and the &'string_xxx()'& functions.
29285There is also a convenience function called &'store_get_perm()'& that gets a
168e428f 29286block of memory from the permanent pool while preserving the value of
9b371988 29287&%store_pool%&.
4f578862 29288.ecindex IIDlosca
168e428f
PH
29289
29290
29291
29292
9b371988
PH
29293. ////////////////////////////////////////////////////////////////////////////
29294. ////////////////////////////////////////////////////////////////////////////
168e428f 29295
9b371988 29296.chapter "System-wide message filtering" "CHAPsystemfilter"
4f578862
PH
29297.scindex IIDsysfil1 "filter" "system filter"
29298.scindex IIDsysfil2 "filtering all mail"
29299.scindex IIDsysfil3 "system filter"
168e428f
PH
29300The previous chapters (on ACLs and the local scan function) describe checks
29301that can be applied to messages before they are accepted by a host. There is
29302also a mechanism for checking messages once they have been received, but before
9b371988 29303they are delivered. This is called the &'system filter'&.
168e428f
PH
29304
29305The system filter operates in a similar manner to users' filter files, but it
29306is run just once per message (however many recipients the message has).
9b371988 29307It should not normally be used as a substitute for routing, because &%deliver%&
168e428f
PH
29308commands in a system router provide new envelope recipient addresses.
29309The system filter must be an Exim filter. It cannot be a Sieve filter.
29310
29311The system filter is run at the start of a delivery attempt, before any routing
29312is done. If a message fails to be completely delivered at the first attempt,
29313the system filter is run again at the start of every retry.
29314If you want your filter to do something only once per message, you can make use
9b371988
PH
29315of the &%first_delivery%& condition in an &%if%& command in the filter to
29316prevent it happening on retries.
29317
f89d2485
PH
29318.vindex "&$domain$&"
29319.vindex "&$local_part$&"
9b371988
PH
29320&*Warning*&: Because the system filter runs just once, variables that are
29321specific to individual recipient addresses, such as &$local_part$& and
29322&$domain$&, are not set, and the &"personal"& condition is not meaningful. If
29323you want to run a centrally-specified filter for each recipient address
29324independently, you can do so by setting up a suitable &(redirect)& router, as
29325described in section &<<SECTperaddfil>>& below.
29326
29327
f89d2485 29328.section "Specifying a system filter" "SECID212"
9b371988
PH
29329.cindex "uid (user id)" "system filter"
29330.cindex "gid (group id)" "system filter"
168e428f 29331The name of the file that contains the system filter must be specified by
9b371988
PH
29332setting &%system_filter%&. If you want the filter to run under a uid and gid
29333other than root, you must also set &%system_filter_user%& and
29334&%system_filter_group%& as appropriate. For example:
29335.code
29336system_filter = /etc/mail/exim.filter
29337system_filter_user = exim
29338.endd
168e428f 29339If a system filter generates any deliveries directly to files or pipes (via the
9b371988
PH
29340&%save%& or &%pipe%& commands), transports to handle these deliveries must be
29341specified by setting &%system_filter_file_transport%& and
29342&%system_filter_pipe_transport%&, respectively. Similarly,
29343&%system_filter_reply_transport%& must be set to handle any messages generated
29344by the &%reply%& command.
168e428f
PH
29345
29346
f89d2485 29347.section "Testing a system filter" "SECID213"
168e428f 29348You can run simple tests of a system filter in the same way as for a user
9b371988 29349filter, but you should use &%-bF%& rather than &%-bf%&, so that features that
168e428f
PH
29350are permitted only in system filters are recognized.
29351
29352If you want to test the combined effect of a system filter and a user filter,
9b371988 29353you can use both &%-bF%& and &%-bf%& on the same command line.
168e428f
PH
29354
29355
29356
f89d2485 29357.section "Contents of a system filter" "SECID214"
168e428f 29358The language used to specify system filters is the same as for users' filter
9b371988
PH
29359files. It is described in the separate end-user document &'Exim's interface to
29360mail filtering'&. However, there are some additional features that are
168e428f 29361available only in system filters; these are described in subsequent sections.
9b371988 29362If they are encountered in a user's filter file or when testing with &%-bf%&,
168e428f
PH
29363they cause errors.
29364
9b371988 29365.cindex "frozen messages" "manual thaw; testing in filter"
168e428f 29366There are two special conditions which, though available in users' filter
9b371988 29367files, are designed for use in system filters. The condition &%first_delivery%&
168e428f 29368is true only for the first attempt at delivering a message, and
9b371988 29369&%manually_thawed%& is true only if the message has been frozen, and
168e428f 29370subsequently thawed by an admin user. An explicit forced delivery counts as a
9b371988 29371manual thaw, but thawing as a result of the &%auto_thaw%& setting does not.
168e428f 29372
9b371988
PH
29373&*Warning*&: If a system filter uses the &%first_delivery%& condition to
29374specify an &"unseen"& (non-significant) delivery, and that delivery does not
168e428f
PH
29375succeed, it will not be tried again.
29376If you want Exim to retry an unseen delivery until it succeeds, you should
29377arrange to set it up every time the filter runs.
29378
9b371988
PH
29379When a system filter finishes running, the values of the variables &$n0$& &--
29380&$n9$& are copied into &$sn0$& &-- &$sn9$& and are thereby made available to
29381users' filter files. Thus a system filter can, for example, set up &"scores"&
29382to which users' filter files can refer.
168e428f
PH
29383
29384
29385
f89d2485
PH
29386.section "Additional variable for system filters" "SECID215"
29387.vindex "&$recipients$&"
9b371988 29388The expansion variable &$recipients$&, containing a list of all the recipients
168e428f
PH
29389of the message (separated by commas and white space), is available in system
29390filters. It is not available in users' filters for privacy reasons.
29391
29392
29393
f89d2485 29394.section "Defer, freeze, and fail commands for system filters" "SECID216"
9b371988
PH
29395.cindex "freezing messages"
29396.cindex "message" "freezing"
29397.cindex "message" "forced failure"
29398.cindex "&%fail%&" "in system filter"
29399.cindex "&%freeze%& in system filter"
29400.cindex "&%defer%& in system filter"
29401There are three extra commands (&%defer%&, &%freeze%& and &%fail%&) which are
29402always available in system filters, but are not normally enabled in users'
29403filters. (See the &%allow_defer%&, &%allow_freeze%& and &%allow_fail%& options
29404for the &(redirect)& router.) These commands can optionally be followed by the
29405word &%text%& and a string containing an error message, for example:
29406.code
29407fail text "this message looks like spam to me"
29408.endd
29409The keyword &%text%& is optional if the next character is a double quote.
29410
29411The &%defer%& command defers delivery of the original recipients of the
29412message. The &%fail%& command causes all the original recipients to be failed,
29413and a bounce message to be created. The &%freeze%& command suspends all
29414delivery attempts for the original recipients. In all cases, any new deliveries
29415that are specified by the filter are attempted as normal after the filter has
29416run.
29417
29418The &%freeze%& command is ignored if the message has been manually unfrozen and
168e428f
PH
29419not manually frozen since. This means that automatic freezing by a system
29420filter can be used as a way of checking out suspicious messages. If a message
29421is found to be all right, manually unfreezing it allows it to be delivered.
29422
9b371988
PH
29423.cindex "log" "&%fail%& command log line"
29424.cindex "&%fail%&" "log line; reducing"
168e428f
PH
29425The text given with a fail command is used as part of the bounce message as
29426well as being written to the log. If the message is quite long, this can fill
29427up a lot of log space when such failures are common. To reduce the size of the
29428log message, Exim interprets the text in a special way if it starts with the
9b371988 29429two characters &`<<`& and contains &`>>`& later. The text between these two
168e428f
PH
29430strings is written to the log, and the rest of the text is used in the bounce
29431message. For example:
9b371988 29432.code
168e428f
PH
29433fail "<<filter test 1>>Your message is rejected \
29434 because it contains attachments that we are \
29435 not prepared to receive."
9b371988
PH
29436.endd
29437
29438.cindex "loop" "caused by &%fail%&"
29439Take great care with the &%fail%& command when basing the decision to fail on
29440the contents of the message, because the bounce message will of course include
29441the contents of the original message and will therefore trigger the &%fail%&
29442command again (causing a mail loop) unless steps are taken to prevent this.
29443Testing the &%error_message%& condition is one way to prevent this. You could
29444use, for example
29445.code
29446if $message_body contains "this is spam" and not error_message
29447then fail text "spam is not wanted here" endif
29448.endd
168e428f
PH
29449though of course that might let through unwanted bounce messages. The
29450alternative is clever checking of the body and/or headers to detect bounces
29451generated by the filter.
29452
29453The interpretation of a system filter file ceases after a
9b371988
PH
29454&%defer%&,
29455&%freeze%&, or &%fail%& command is obeyed. However, any deliveries that were
29456set up earlier in the filter file are honoured, so you can use a sequence such
29457as
29458.code
29459mail ...
29460freeze
29461.endd
168e428f
PH
29462to send a specified message when the system filter is freezing (or deferring or
29463failing) a message. The normal deliveries for the message do not, of course,
29464take place.
29465
29466
29467
9b371988
PH
29468.section "Adding and removing headers in a system filter" "SECTaddremheasys"
29469.cindex "header lines" "adding; in system filter"
29470.cindex "header lines" "removing; in system filter"
29471.cindex "filter" "header lines; adding/removing"
168e428f 29472Two filter commands that are available only in system filters are:
9b371988
PH
29473.code
29474headers add <string>
29475headers remove <string>
29476.endd
29477The argument for the &%headers add%& is a string that is expanded and then
29478added to the end of the message's headers. It is the responsibility of the
29479filter maintainer to make sure it conforms to RFC 2822 syntax. Leading white
29480space is ignored, and if the string is otherwise empty, or if the expansion is
29481forced to fail, the command has no effect.
29482
29483You can use &"\n"& within the string, followed by white space, to specify
168e428f 29484continued header lines. More than one header may be added in one command by
9b371988 29485including &"\n"& within the string without any following white space. For
168e428f 29486example:
9b371988 29487.code
168e428f
PH
29488headers add "X-header-1: ....\n \
29489 continuation of X-header-1 ...\n\
29490 X-header-2: ...."
9b371988 29491.endd
168e428f
PH
29492Note that the header line continuation white space after the first newline must
29493be placed before the backslash that continues the input string, because white
29494space after input continuations is ignored.
29495
9b371988 29496The argument for &%headers remove%& is a colon-separated list of header names.
168e428f 29497This command applies only to those headers that are stored with the message;
9b371988
PH
29498those that are added at delivery time (such as &'Envelope-To:'& and
29499&'Return-Path:'&) cannot be removed by this means. If there is more than one
168e428f
PH
29500header with the same name, they are all removed.
29501
9b371988 29502The &%headers%& command in a system filter makes an immediate change to the set
168e428f
PH
29503of header lines that was received with the message (with possible additions
29504from ACL processing). Subsequent commands in the system filter operate on the
29505modified set, which also forms the basis for subsequent message delivery.
29506Unless further modified during routing or transporting, this set of headers is
29507used for all recipients of the message.
29508
29509During routing and transporting, the variables that refer to the contents of
29510header lines refer only to those lines that are in this set. Thus, header lines
29511that are added by a system filter are visible to users' filter files and to all
29512routers and transports. This contrasts with the manipulation of header lines by
29513routers and transports, which is not immediate, but which instead is saved up
9b371988
PH
29514until the message is actually being written (see section
29515&<<SECTheadersaddrem>>&).
168e428f
PH
29516
29517If the message is not delivered at the first attempt, header lines that were
29518added by the system filter are stored with the message, and so are still
29519present at the next delivery attempt. Header lines that were removed are still
9b371988
PH
29520present, but marked &"deleted"& so that they are not transported with the
29521message. For this reason, it is usual to make the &%headers%& command
29522conditional on &%first_delivery%& so that the set of header lines is not
29523modified more than once.
168e428f
PH
29524
29525Because header modification in a system filter acts immediately, you have to
29526use an indirect approach if you want to modify the contents of a header line.
29527For example:
9b371988
PH
29528.code
29529headers add "Old-Subject: $h_subject:"
29530headers remove "Subject"
29531headers add "Subject: new subject (was: $h_old-subject:)"
29532headers remove "Old-Subject"
29533.endd
168e428f
PH
29534
29535
29536
f89d2485 29537.section "Setting an errors address in a system filter" "SECID217"
9b371988
PH
29538.cindex "envelope sender"
29539In a system filter, if a &%deliver%& command is followed by
29540.code
29541errors_to <some address>
29542.endd
168e428f
PH
29543in order to change the envelope sender (and hence the error reporting) for that
29544delivery, any address may be specified. (In a user filter, only the current
29545user's address can be set.) For example, if some mail is being monitored, you
29546might use
9b371988
PH
29547.code
29548unseen deliver monitor@spying.example errors_to root@local.example
29549.endd
168e428f
PH
29550to take a copy which would not be sent back to the normal error reporting
29551address if its delivery failed.
29552
29553
29554
9b371988 29555.section "Per-address filtering" "SECTperaddfil"
f89d2485
PH
29556.vindex "&$domain$&"
29557.vindex "&$local_part$&"
168e428f
PH
29558In contrast to the system filter, which is run just once per message for each
29559delivery attempt, it is also possible to set up a system-wide filtering
29560operation that runs once for each recipient address. In this case, variables
9b371988 29561such as &$local_part$& and &$domain$& can be used, and indeed, the choice of
168e428f
PH
29562filter file could be made dependent on them. This is an example of a router
29563which implements such a filter:
9b371988
PH
29564.code
29565central_filter:
29566 check_local_user
29567 driver = redirect
29568 domains = +local_domains
29569 file = /central/filters/$local_part
29570 no_verify
29571 allow_filter
29572 allow_freeze
29573.endd
168e428f 29574The filter is run in a separate process under its own uid. Therefore, either
9b371988
PH
29575&%check_local_user%& must be set (as above), in which case the filter is run as
29576the local user, or the &%user%& option must be used to specify which user to
29577use. If both are set, &%user%& overrides.
168e428f
PH
29578
29579Care should be taken to ensure that none of the commands in the filter file
29580specify a significant delivery if the message is to go on to be delivered to
29581its intended recipient. The router will not then claim to have dealt with the
29582address, so it will be passed on to subsequent routers to be delivered in the
29583normal way.
4f578862
PH
29584.ecindex IIDsysfil1
29585.ecindex IIDsysfil2
29586.ecindex IIDsysfil3
168e428f
PH
29587
29588
29589
29590
29591
29592
9b371988
PH
29593. ////////////////////////////////////////////////////////////////////////////
29594. ////////////////////////////////////////////////////////////////////////////
168e428f 29595
9b371988 29596.chapter "Message processing" "CHAPmsgproc"
4f578862 29597.scindex IIDmesproc "message" "general processing"
168e428f
PH
29598Exim performs various transformations on the sender and recipient addresses of
29599all messages that it handles, and also on the messages' header lines. Some of
29600these are optional and configurable, while others always take place. All of
29601this processing, except rewriting as a result of routing, and the addition or
29602removal of header lines while delivering, happens when a message is received,
29603before it is placed on Exim's queue.
29604
29605Some of the automatic processing takes place by default only for
9b371988
PH
29606&"locally-originated"& messages. This adjective is used to describe messages
29607that are not received over TCP/IP, but instead are passed to an Exim process on
29608its standard input. This includes the interactive &"local SMTP"& case that is
29609set up by the &%-bs%& command line option.
168e428f 29610
9b371988 29611&*Note*&: Messages received over TCP/IP on the loopback interface (127.0.0.1
168e428f
PH
29612or ::1) are not considered to be locally-originated. Exim does not treat the
29613loopback interface specially in any way.
29614
29615If you want the loopback interface to be treated specially, you must ensure
29616that there are appropriate entries in your ACLs.
29617
29618
29619
29620
9b371988
PH
29621.section "Submission mode for non-local messages" "SECTsubmodnon"
29622.cindex "message" "submission"
29623.cindex "submission mode"
068aaea8 29624Processing that happens automatically for locally-originated messages (unless
9b371988
PH
29625&%suppress_local_fixups%& is set) can also be requested for messages that are
29626received over TCP/IP. The term &"submission mode"& is used to describe this
f89d2485 29627state. Submission mode is set by the modifier
9b371988
PH
29628.code
29629control = submission
29630.endd
068aaea8 29631in a MAIL, RCPT, or pre-data ACL for an incoming message (see sections
9b371988
PH
29632&<<SECTACLmodi>>& and &<<SECTcontrols>>&). This makes Exim treat the message as
29633a local submission, and is normally used when the source of the message is
29634known to be an MUA running on a client host (as opposed to an MTA). For
29635example, to set submission mode for messages originating on the IPv4 loopback
29636interface, you could include the following in the MAIL ACL:
29637.code
29638warn hosts = 127.0.0.1
29639 control = submission
29640.endd
0a4e3112 29641.cindex "&%sender_retain%& submission option"
168e428f
PH
29642There are some options that can be used when setting submission mode. A slash
29643is used to separate options. For example:
9b371988
PH
29644.code
29645control = submission/sender_retain
29646.endd
29647Specifying &%sender_retain%& has the effect of setting &%local_sender_retain%&
29648true and &%local_from_check%& false for the current incoming message. The first
29649of these allows an existing &'Sender:'& header in the message to remain, and
29650the second suppresses the check to ensure that &'From:'& matches the
29651authenticated sender. With this setting, Exim still fixes up messages by adding
29652&'Date:'& and &'Message-ID:'& header lines if they are missing, but makes no
29653attempt to check sender authenticity in header lines.
29654
29655When &%sender_retain%& is not set, a submission mode setting may specify a
29656domain to be used when generating a &'From:'& or &'Sender:'& header line. For
29657example:
29658.code
29659control = submission/domain=some.domain
29660.endd
168e428f 29661The domain may be empty. How this value is used is described in sections
9b371988
PH
29662&<<SECTthefrohea>>& and &<<SECTthesenhea>>&. There is also a &%name%& option
29663that allows you to specify the user's full name for inclusion in a created
29664&'Sender:'& or &'From:'& header line. For example:
29665.code
068aaea8
PH
29666accept authenticated = *
29667 control = submission/domain=wonderland.example/\
29668 name=${lookup {$authenticated_id} \
29669 lsearch {/etc/exim/namelist}}
9b371988
PH
29670.endd
29671Because the name may contain any characters, including slashes, the &%name%&
068aaea8 29672option must be given last. The remainder of the string is used as the name. For
9b371988
PH
29673the example above, if &_/etc/exim/namelist_& contains:
29674.code
068aaea8 29675bigegg: Humpty Dumpty
9b371988
PH
29676.endd
29677then when the sender has authenticated as &'bigegg'&, the generated &'Sender:'&
068aaea8 29678line would be:
9b371988 29679.code
068aaea8 29680Sender: Humpty Dumpty <bigegg@wonderland.example>
9b371988
PH
29681.endd
29682.cindex "return path" "in submission mode"
068aaea8 29683By default, submission mode forces the return path to the same address as is
9b371988
PH
29684used to create the &'Sender:'& header. However, if &%sender_retain%& is
29685specified, the return path is also left unchanged.
068aaea8 29686
9b371988 29687&*Note*&: The changes caused by submission mode take effect after the predata
068aaea8
PH
29688ACL. This means that any sender checks performed before the fix-ups use the
29689untrusted sender address specified by the user, not the trusted sender address
29690specified by submission mode. Although this might be slightly unexpected, it
29691does mean that you can configure ACL checks to spot that a user is trying to
29692spoof another's address.
168e428f 29693
9b371988
PH
29694.section "Line endings" "SECTlineendings"
29695.cindex "line endings"
29696.cindex "carriage return"
29697.cindex "linefeed"
168e428f
PH
29698RFC 2821 specifies that CRLF (two characters: carriage-return, followed by
29699linefeed) is the line ending for messages transmitted over the Internet using
29700SMTP over TCP/IP. However, within individual operating systems, different
29701conventions are used. For example, Unix-like systems use just LF, but others
29702use CRLF or just CR.
29703
29704Exim was designed for Unix-like systems, and internally, it stores messages
29705using the system's convention of a single LF as a line terminator. When
29706receiving a message, all line endings are translated to this standard format.
29707Originally, it was thought that programs that passed messages directly to an
29708MTA within an operating system would use that system's convention. Experience
29709has shown that this is not the case; for example, there are Unix applications
29710that use CRLF in this circumstance. For this reason, and for compatibility with
29711other MTAs, the way Exim handles line endings for all messages is now as
29712follows:
29713
9b371988
PH
29714.ilist
29715LF not preceded by CR is treated as a line ending.
29716.next
29717CR is treated as a line ending; if it is immediately followed by LF, the LF
168e428f 29718is ignored.
9b371988
PH
29719.next
29720The sequence &"CR, dot, CR"& does not terminate an incoming SMTP message,
168e428f
PH
29721nor a local message in the state where a line containing only a dot is a
29722terminator.
9b371988
PH
29723.next
29724If a bare CR is encountered within a header line, an extra space is added after
168e428f
PH
29725the line terminator so as not to end the header line. The reasoning behind this
29726is that bare CRs in header lines are most likely either to be mistakes, or
29727people trying to play silly games.
9b371988
PH
29728.next
29729If the first header line received in a message ends with CRLF, a subsequent
168e428f
PH
29730bare LF in a header line is treated in the same way as a bare CR in a header
29731line.
9b371988 29732.endlist
168e428f
PH
29733
29734
29735
29736
29737
f89d2485 29738.section "Unqualified addresses" "SECID218"
9b371988
PH
29739.cindex "unqualified addresses"
29740.cindex "address" "qualification"
168e428f
PH
29741By default, Exim expects every envelope address it receives from an external
29742host to be fully qualified. Unqualified addresses cause negative responses to
29743SMTP commands. However, because SMTP is used as a means of transporting
29744messages from MUAs running on personal workstations, there is sometimes a
29745requirement to accept unqualified addresses from specific hosts or IP networks.
29746
29747Exim has two options that separately control which hosts may send unqualified
f89d2485 29748sender or recipient addresses in SMTP commands, namely
9b371988 29749&%sender_unqualified_hosts%& and &%recipient_unqualified_hosts%&. In both
168e428f 29750cases, if an unqualified address is accepted, it is qualified by adding the
9b371988 29751value of &%qualify_domain%& or &%qualify_recipient%&, as appropriate.
168e428f 29752
0a4e3112
PH
29753.oindex "&%qualify_domain%&"
29754.oindex "&%qualify_recipient%&"
168e428f 29755Unqualified addresses in header lines are automatically qualified for messages
9b371988 29756that are locally originated, unless the &%-bnq%& option is given on the command
168e428f
PH
29757line. For messages received over SMTP, unqualified addresses in header lines
29758are qualified only if unqualified addresses are permitted in SMTP commands. In
29759other words, such qualification is also controlled by
9b371988 29760&%sender_unqualified_hosts%& and &%recipient_unqualified_hosts%&,
168e428f
PH
29761
29762
29763
29764
f89d2485 29765.section "The UUCP From line" "SECID219"
9b371988
PH
29766.cindex "&""From""& line"
29767.cindex "UUCP" "&""From""& line"
29768.cindex "sender" "address"
0a4e3112
PH
29769.oindex "&%uucp_from_pattern%&"
29770.oindex "&%uucp_from_sender%&"
9b371988
PH
29771.cindex "envelope sender"
29772.cindex "Sendmail compatibility" "&""From""& line"
168e428f
PH
29773Messages that have come from UUCP (and some other applications) often begin
29774with a line containing the envelope sender and a timestamp, following the word
9b371988
PH
29775&"From"&. Examples of two common formats are:
29776.code
29777From a.oakley@berlin.mus Fri Jan 5 12:35 GMT 1996
29778From f.butler@berlin.mus Fri, 7 Jan 97 14:00:00 GMT
29779.endd
168e428f
PH
29780This line precedes the RFC 2822 header lines. For compatibility with Sendmail,
29781Exim recognizes such lines at the start of messages that are submitted to it
29782via the command line (that is, on the standard input). It does not recognize
29783such lines in incoming SMTP messages, unless the sending host matches
9b371988
PH
29784&%ignore_fromline_hosts%& or the &%-bs%& option was used for a local message
29785and &%ignore_fromline_local%& is set. The recognition is controlled by a
29786regular expression that is defined by the &%uucp_from_pattern%& option, whose
29787default value matches the two common cases shown above and puts the address
29788that follows &"From"& into &$1$&.
29789
29790.cindex "numerical variables (&$1$& &$2$& etc)" "in &""From ""& line handling"
29791When the caller of Exim for a non-SMTP message that contains a &"From"& line is
29792a trusted user, the message's sender address is constructed by expanding the
29793contents of &%uucp_sender_address%&, whose default value is &"$1"&. This is
29794then parsed as an RFC 2822 address. If there is no domain, the local part is
29795qualified with &%qualify_domain%& unless it is the empty string. However, if
29796the command line &%-f%& option is used, it overrides the &"From"& line.
29797
29798If the caller of Exim is not trusted, the &"From"& line is recognized, but the
168e428f 29799sender address is not changed. This is also the case for incoming SMTP messages
9b371988 29800that are permitted to contain &"From"& lines.
168e428f 29801
9b371988 29802Only one &"From"& line is recognized. If there is more than one, the second is
168e428f 29803treated as a data line that starts the body of the message, as it is not valid
9b371988
PH
29804as a header line. This also happens if a &"From"& line is present in an
29805incoming SMTP message from a source that is not permitted to send them.
168e428f
PH
29806
29807
29808
f89d2485 29809.section "Resent- header lines" "SECID220"
9b371988 29810.cindex "&%Resent-%& header lines"
168e428f 29811RFC 2822 makes provision for sets of header lines starting with the string
9b371988
PH
29812&`Resent-`& to be added to a message when it is resent by the original
29813recipient to somebody else. These headers are &'Resent-Date:'&,
29814&'Resent-From:'&, &'Resent-Sender:'&, &'Resent-To:'&, &'Resent-Cc:'&,
29815&'Resent-Bcc:'& and &'Resent-Message-ID:'&. The RFC says:
168e428f 29816
9b371988
PH
29817.blockquote
29818&'Resent fields are strictly informational. They MUST NOT be used in the normal
29819processing of replies or other such automatic actions on messages.'&
29820.endblockquote
168e428f
PH
29821
29822This leaves things a bit vague as far as other processing actions such as
9b371988 29823address rewriting are concerned. Exim treats &%Resent-%& header lines as
168e428f
PH
29824follows:
29825
9b371988
PH
29826.ilist
29827A &'Resent-From:'& line that just contains the login id of the submitting user
29828is automatically rewritten in the same way as &'From:'& (see below).
29829.next
29830If there's a rewriting rule for a particular header line, it is also applied to
29831&%Resent-%& header lines of the same type. For example, a rule that rewrites
29832&'From:'& also rewrites &'Resent-From:'&.
29833.next
29834For local messages, if &'Sender:'& is removed on input, &'Resent-Sender:'& is
29835also removed.
29836.next
29837For a locally-submitted message,
29838if there are any &%Resent-%& header lines but no &'Resent-Date:'&,
29839&'Resent-From:'&, or &'Resent-Message-Id:'&, they are added as necessary. It is
29840the contents of &'Resent-Message-Id:'& (rather than &'Message-Id:'&) which are
168e428f 29841included in log lines in this case.
9b371988
PH
29842.next
29843The logic for adding &'Sender:'& is duplicated for &'Resent-Sender:'& when any
29844&%Resent-%& header lines are present.
29845.endlist
168e428f 29846
168e428f
PH
29847
29848
29849
f89d2485 29850.section "The Auto-Submitted: header line" "SECID221"
4f578862
PH
29851Whenever Exim generates an autoreply, a bounce, or a delay warning message, it
29852includes the header line:
9b371988
PH
29853.code
29854Auto-Submitted: auto-replied
29855.endd
9b371988 29856
f89d2485 29857.section "The Bcc: header line" "SECID222"
9b371988
PH
29858.cindex "&'Bcc:'& header line"
29859If Exim is called with the &%-t%& option, to take recipient addresses from a
29860message's header, it removes any &'Bcc:'& header line that may exist (after
29861extracting its addresses). If &%-t%& is not present on the command line, any
29862existing &'Bcc:'& is not removed.
29863
29864
f89d2485 29865.section "The Date: header line" "SECID223"
9b371988 29866.cindex "&'Date:'& header line"
9b371988 29867If a locally-generated or submission-mode message has no &'Date:'& header line,
068aaea8 29868Exim adds one, using the current date and time, unless the
9b371988 29869&%suppress_local_fixups%& control has been specified.
168e428f 29870
f89d2485 29871.section "The Delivery-date: header line" "SECID224"
9b371988 29872.cindex "&'Delivery-date:'& header line"
0a4e3112 29873.oindex "&%delivery_date_remove%&"
9b371988 29874&'Delivery-date:'& header lines are not part of the standard RFC 2822 header
168e428f 29875set. Exim can be configured to add them to the final delivery of messages. (See
9b371988
PH
29876the generic &%delivery_date_add%& transport option.) They should not be present
29877in messages in transit. If the &%delivery_date_remove%& configuration option is
29878set (the default), Exim removes &'Delivery-date:'& header lines from incoming
168e428f
PH
29879messages.
29880
29881
f89d2485 29882.section "The Envelope-to: header line" "SECID225"
9b371988 29883.cindex "&'Envelope-to:'& header line"
0a4e3112 29884.oindex "&%envelope_to_remove%&"
9b371988 29885&'Envelope-to:'& header lines are not part of the standard RFC 2822 header set.
168e428f 29886Exim can be configured to add them to the final delivery of messages. (See the
9b371988
PH
29887generic &%envelope_to_add%& transport option.) They should not be present in
29888messages in transit. If the &%envelope_to_remove%& configuration option is set
29889(the default), Exim removes &'Envelope-to:'& header lines from incoming
168e428f
PH
29890messages.
29891
29892
9b371988
PH
29893.section "The From: header line" "SECTthefrohea"
29894.cindex "&'From:'& header line"
29895.cindex "Sendmail compatibility" "&""From""& line"
29896.cindex "message" "submission"
29897.cindex "submission mode"
29898If a submission-mode message does not contain a &'From:'& header line, Exim
29899adds one if either of the following conditions is true:
168e428f 29900
9b371988
PH
29901.ilist
29902The envelope sender address is not empty (that is, this is not a bounce
168e428f 29903message). The added header line copies the envelope sender address.
9b371988 29904.next
f89d2485 29905.vindex "&$authenticated_id$&"
9b371988
PH
29906The SMTP session is authenticated and &$authenticated_id$& is not empty.
29907.olist
f89d2485 29908.vindex "&$qualify_domain$&"
068aaea8 29909If no domain is specified by the submission control, the local part is
9b371988
PH
29910&$authenticated_id$& and the domain is &$qualify_domain$&.
29911.next
29912If a non-empty domain is specified by the submission control, the local
3cb1b51e 29913part is &$authenticated_id$&, and the domain is the specified domain.
9b371988
PH
29914.next
29915If an empty domain is specified by the submission control,
29916&$authenticated_id$& is assumed to be the complete address.
29917.endlist
29918.endlist
168e428f
PH
29919
29920A non-empty envelope sender takes precedence.
29921
9b371988
PH
29922If a locally-generated incoming message does not contain a &'From:'& header
29923line, and the &%suppress_local_fixups%& control is not set, Exim adds one
29924containing the sender's address. The calling user's login name and full name
29925are used to construct the address, as described in section &<<SECTconstr>>&.
29926They are obtained from the password data by calling &[getpwuid()]& (but see the
29927&%unknown_login%& configuration option). The address is qualified with
29928&%qualify_domain%&.
168e428f
PH
29929
29930For compatibility with Sendmail, if an incoming, non-SMTP message has a
9b371988 29931&'From:'& header line containing just the unqualified login name of the calling
168e428f 29932user, this is replaced by an address containing the user's login name and full
9b371988 29933name as described in section &<<SECTconstr>>&.
168e428f
PH
29934
29935
f89d2485 29936.section "The Message-ID: header line" "SECID226"
9b371988
PH
29937.cindex "&'Message-ID:'& header line"
29938.cindex "message" "submission"
0a4e3112 29939.oindex "&%message_id_header_text%&"
168e428f 29940If a locally-generated or submission-mode incoming message does not contain a
9b371988
PH
29941&'Message-ID:'& or &'Resent-Message-ID:'& header line, and the
29942&%suppress_local_fixups%& control is not set, Exim adds a suitable header line
29943to the message. If there are any &'Resent-:'& headers in the message, it
29944creates &'Resent-Message-ID:'&. The id is constructed from Exim's internal
29945message id, preceded by the letter E to ensure it starts with a letter, and
29946followed by @ and the primary host name. Additional information can be included
29947in this header line by setting the &%message_id_header_text%& and/or
29948&%message_id_header_domain%& options.
9b371988
PH
29949
29950
f89d2485 29951.section "The Received: header line" "SECID227"
9b371988
PH
29952.cindex "&'Received:'& header line"
29953A &'Received:'& header line is added at the start of every message. The
29954contents are defined by the &%received_header_text%& configuration option, and
29955Exim automatically adds a semicolon and a timestamp to the configured string.
29956
29957The &'Received:'& header is generated as soon as the message's header lines
29958have been received. At this stage, the timestamp in the &'Received:'& header
29959line is the time that the message started to be received. This is the value
29960that is seen by the DATA ACL and by the &[local_scan()]& function.
29961
29962Once a message is accepted, the timestamp in the &'Received:'& header line is
168e428f
PH
29963changed to the time of acceptance, which is (apart from a small delay while the
29964-H spool file is written) the earliest time at which delivery could start.
29965
29966
f89d2485 29967.section "The References: header line" "SECID228"
4f578862
PH
29968.cindex "&'References:'& header line"
29969Messages created by the &(autoreply)& transport include a &'References:'&
29970header line. This is constructed according to the rules that are described in
29971section 3.64 of RFC 2822 (which states that replies should contain such a
29972header line), and section 3.14 of RFC 3834 (which states that automatic
29973responses are not different in this respect). However, because some mail
29974processing software does not cope well with very long header lines, no more
29975than 12 message IDs are copied from the &'References:'& header line in the
29976incoming message. If there are more than 12, the first one and then the final
2997711 are copied, before adding the message ID of the incoming message.
4f578862
PH
29978
29979
168e428f 29980
f89d2485 29981.section "The Return-path: header line" "SECID229"
9b371988 29982.cindex "&'Return-path:'& header line"
0a4e3112 29983.oindex "&%return_path_remove%&"
9b371988
PH
29984&'Return-path:'& header lines are defined as something an MTA may insert when
29985it does the final delivery of messages. (See the generic &%return_path_add%&
168e428f 29986transport option.) Therefore, they should not be present in messages in
9b371988
PH
29987transit. If the &%return_path_remove%& configuration option is set (the
29988default), Exim removes &'Return-path:'& header lines from incoming messages.
168e428f
PH
29989
29990
29991
9b371988
PH
29992.section "The Sender: header line" "SECTthesenhea"
29993.cindex "&'Sender:'& header line"
29994.cindex "message" "submission"
168e428f 29995For a locally-originated message from an untrusted user, Exim may remove an
9b371988
PH
29996existing &'Sender:'& header line, and it may add a new one. You can modify
29997these actions by setting the &%local_sender_retain%& option true, the
29998&%local_from_check%& option false, or by using the &%suppress_local_fixups%&
068aaea8 29999control setting.
168e428f 30000
9b371988
PH
30001When a local message is received from an untrusted user and
30002&%local_from_check%& is true (the default), and the &%suppress_local_fixups%&
30003control has not been set, a check is made to see if the address given in the
30004&'From:'& header line is the correct (local) sender of the message. The address
30005that is expected has the login name as the local part and the value of
30006&%qualify_domain%& as the domain. Prefixes and suffixes for the local part can
30007be permitted by setting &%local_from_prefix%& and &%local_from_suffix%&
30008appropriately. If &'From:'& does not contain the correct sender, a &'Sender:'&
30009line is added to the message.
9b371988
PH
30010
30011If you set &%local_from_check%& false, this checking does not occur. However,
30012the removal of an existing &'Sender:'& line still happens, unless you also set
30013&%local_sender_retain%& to be true. It is not possible to set both of these
168e428f
PH
30014options true at the same time.
30015
9b371988
PH
30016.cindex "submission mode"
30017By default, no processing of &'Sender:'& header lines is done for messages
168e428f 30018received over TCP/IP or for messages submitted by trusted users. However, when
9b371988 30019a message is received over TCP/IP in submission mode, and &%sender_retain%& is
168e428f
PH
30020not specified on the submission control, the following processing takes place:
30021
f89d2485 30022.vindex "&$authenticated_id$&"
9b371988
PH
30023First, any existing &'Sender:'& lines are removed. Then, if the SMTP session is
30024authenticated, and &$authenticated_id$& is not empty, a sender address is
168e428f
PH
30025created as follows:
30026
9b371988 30027.ilist
f89d2485 30028.vindex "&$qualify_domain$&"
068aaea8 30029If no domain is specified by the submission control, the local part is
9b371988
PH
30030&$authenticated_id$& and the domain is &$qualify_domain$&.
30031.next
30032If a non-empty domain is specified by the submission control, the local part
3cb1b51e 30033is &$authenticated_id$&, and the domain is the specified domain.
9b371988
PH
30034.next
30035If an empty domain is specified by the submission control,
30036&$authenticated_id$& is assumed to be the complete address.
30037.endlist
30038
30039This address is compared with the address in the &'From:'& header line. If they
30040are different, a &'Sender:'& header line containing the created address is
30041added. Prefixes and suffixes for the local part in &'From:'& can be permitted
30042by setting &%local_from_prefix%& and &%local_from_suffix%& appropriately.
30043
9b371988
PH
30044.cindex "return path" "created from &'Sender:'&"
30045&*Note*&: Whenever a &'Sender:'& header line is created, the return path for
30046the message (the envelope sender address) is changed to be the same address,
30047except in the case of submission mode when &%sender_retain%& is specified.
9b371988
PH
30048
30049
30050
30051.section "Adding and removing header lines in routers and transports" &&&
30052 "SECTheadersaddrem"
30053.cindex "header lines" "adding; in router or transport"
30054.cindex "header lines" "removing; in router or transport"
168e428f
PH
30055When a message is delivered, the addition and removal of header lines can be
30056specified in a system filter, or on any of the routers and transports that
9b371988 30057process the message. Section &<<SECTaddremheasys>>& contains details about
068aaea8 30058modifying headers in a system filter. Header lines can also be added in an ACL
4f578862 30059as a message is received (see section &<<SECTaddheadacl>>&).
168e428f
PH
30060
30061In contrast to what happens in a system filter, header modifications that are
30062specified on routers and transports apply only to the particular recipient
30063addresses that are being processed by those routers and transports. These
30064changes do not actually take place until a copy of the message is being
30065transported. Therefore, they do not affect the basic set of header lines, and
30066they do not affect the values of the variables that refer to header lines.
30067
9b371988 30068&*Note*&: In particular, this means that any expansions in the configuration of
068aaea8
PH
30069the transport cannot refer to the modified header lines, because such
30070expansions all occur before the message is actually transported.
30071
9b371988 30072For both routers and transports, the result of expanding a &%headers_add%&
168e428f 30073option must be in the form of one or more RFC 2822 header lines, separated by
9b371988
PH
30074newlines (coded as &"\n"&). For example:
30075.code
168e428f
PH
30076headers_add = X-added-header: added by $primary_hostname\n\
30077 X-added-second: another added header line
9b371988 30078.endd
168e428f
PH
30079Exim does not check the syntax of these added header lines.
30080
9b371988 30081The result of expanding &%headers_remove%& must consist of a colon-separated
168e428f
PH
30082list of header names. This is confusing, because header names themselves are
30083often terminated by colons. In this case, the colons are the list separators,
30084not part of the names. For example:
9b371988
PH
30085.code
30086headers_remove = return-receipt-to:acknowledge-to
30087.endd
30088When &%headers_add%& or &%headers_remove%& is specified on a router, its value
30089is expanded at routing time, and then associated with all addresses that are
168e428f
PH
30090accepted by that router, and also with any new addresses that it generates. If
30091an address passes through several routers as a result of aliasing or
30092forwarding, the changes are cumulative.
30093
0a4e3112 30094.oindex "&%unseen%&"
168e428f 30095However, this does not apply to multiple routers that result from the use of
9b371988
PH
30096the &%unseen%& option. Any header modifications that were specified by the
30097&"unseen"& router or its predecessors apply only to the &"unseen"& delivery.
168e428f 30098
9b371988 30099Addresses that end up with different &%headers_add%& or &%headers_remove%&
168e428f
PH
30100settings cannot be delivered together in a batch, so a transport is always
30101dealing with a set of addresses that have the same header-processing
30102requirements.
30103
30104The transport starts by writing the original set of header lines that arrived
30105with the message, possibly modified by the system filter. As it writes out
30106these lines, it consults the list of header names that were attached to the
9b371988
PH
30107recipient address(es) by &%headers_remove%& options in routers, and it also
30108consults the transport's own &%headers_remove%& option. Header lines whose
30109names are on either of these lists are not written out. If there are multiple
168e428f
PH
30110instances of any listed header, they are all skipped.
30111
30112After the remaining original header lines have been written, new header
9b371988 30113lines that were specified by routers' &%headers_add%& options are written, in
168e428f 30114the order in which they were attached to the address. These are followed by any
9b371988 30115header lines specified by the transport's &%headers_add%& option.
168e428f
PH
30116
30117This way of handling header line modifications in routers and transports has
30118the following consequences:
30119
9b371988
PH
30120.ilist
30121The original set of header lines, possibly modified by the system filter,
30122remains &"visible"&, in the sense that the &$header_$&&'xxx'& variables refer
30123to it, at all times.
30124.next
30125Header lines that are added by a router's
30126&%headers_add%& option are not accessible by means of the &$header_$&&'xxx'&
168e428f 30127expansion syntax in subsequent routers or the transport.
9b371988
PH
30128.next
30129Conversely, header lines that are specified for removal by &%headers_remove%&
30130in a router remain visible to subsequent routers and the transport.
30131.next
30132Headers added to an address by &%headers_add%& in a router cannot be removed by
168e428f 30133a later router or by a transport.
9b371988
PH
30134.next
30135An added header can refer to the contents of an original header that is to be
168e428f 30136removed, even it has the same name as the added header. For example:
9b371988
PH
30137.code
30138headers_remove = subject
30139headers_add = Subject: new subject (was: $h_subject:)
30140.endd
30141.endlist
168e428f 30142
9b371988
PH
30143&*Warning*&: The &%headers_add%& and &%headers_remove%& options cannot be used
30144for a &(redirect)& router that has the &%one_time%& option set.
168e428f 30145
168e428f
PH
30146
30147
30148
30149
9b371988
PH
30150.section "Constructed addresses" "SECTconstr"
30151.cindex "address" "constructed"
30152.cindex "constructed address"
168e428f
PH
30153When Exim constructs a sender address for a locally-generated message, it uses
30154the form
9b371988
PH
30155.display
30156<&'user name'&>&~&~<&'login'&&`@`&&'qualify_domain'&>
30157.endd
168e428f 30158For example:
9b371988
PH
30159.code
30160Zaphod Beeblebrox <zaphod@end.univ.example>
30161.endd
30162The user name is obtained from the &%-F%& command line option if set, or
30163otherwise by looking up the calling user by &[getpwuid()]& and extracting the
30164&"gecos"& field from the password entry. If the &"gecos"& field contains an
168e428f
PH
30165ampersand character, this is replaced by the login name with the first letter
30166upper cased, as is conventional in a number of operating systems. See the
9b371988
PH
30167&%gecos_name%& option for a way to tailor the handling of the &"gecos"& field.
30168The &%unknown_username%& option can be used to specify user names in cases when
168e428f
PH
30169there is no password file entry.
30170
9b371988 30171.cindex "RFC 2047"
168e428f
PH
30172In all cases, the user name is made to conform to RFC 2822 by quoting all or
30173parts of it if necessary. In addition, if it contains any non-printing
30174characters, it is encoded as described in RFC 2047, which defines a way of
d1e83bff 30175including non-ASCII characters in header lines. The value of the
9b371988 30176&%headers_charset%& option specifies the name of the encoding that is used (the
d1e83bff 30177characters are assumed to be in this encoding). The setting of
9b371988
PH
30178&%print_topbitchars%& controls whether characters with the top bit set (that
30179is, with codes greater than 127) count as printing characters or not.
168e428f
PH
30180
30181
30182
f89d2485 30183.section "Case of local parts" "SECID230"
9b371988
PH
30184.cindex "case of local parts"
30185.cindex "local part" "case of"
168e428f
PH
30186RFC 2822 states that the case of letters in the local parts of addresses cannot
30187be assumed to be non-significant. Exim preserves the case of local parts of
30188addresses, but by default it uses a lower-cased form when it is routing,
30189because on most Unix systems, usernames are in lower case and case-insensitive
30190routing is required. However, any particular router can be made to use the
9b371988 30191original case for local parts by setting the &%caseful_local_part%& generic
168e428f
PH
30192router option.
30193
9b371988 30194.cindex "mixed-case login names"
168e428f
PH
30195If you must have mixed-case user names on your system, the best way to proceed,
30196assuming you want case-independent handling of incoming email, is to set up
30197your first router to convert incoming local parts in your domains to the
30198correct case by means of a file lookup. For example:
9b371988 30199.code
168e428f
PH
30200correct_case:
30201 driver = redirect
30202 domains = +local_domains
30203 data = ${lookup{$local_part}cdb\
30204 {/etc/usercased.cdb}{$value}fail}\
30205 @$domain
9b371988 30206.endd
168e428f 30207For this router, the local part is forced to lower case by the default action
9b371988
PH
30208(&%caseful_local_part%& is not set). The lower-cased local part is used to look
30209up a new local part in the correct case. If you then set &%caseful_local_part%&
168e428f
PH
30210on any subsequent routers which process your domains, they will operate on
30211local parts with the correct case in a case-sensitive manner.
30212
30213
30214
f89d2485 30215.section "Dots in local parts" "SECID231"
9b371988
PH
30216.cindex "dot" "in local part"
30217.cindex "local part" "dots in"
168e428f
PH
30218RFC 2822 forbids empty components in local parts. That is, an unquoted local
30219part may not begin or end with a dot, nor have two consecutive dots in the
30220middle. However, it seems that many MTAs do not enforce this, so Exim permits
30221empty components for compatibility.
30222
30223
30224
f89d2485 30225.section "Rewriting addresses" "SECID232"
9b371988 30226.cindex "rewriting" "addresses"
168e428f
PH
30227Rewriting of sender and recipient addresses, and addresses in headers, can
30228happen automatically, or as the result of configuration options, as described
9b371988
PH
30229in chapter &<<CHAPrewrite>>&. The headers that may be affected by this are
30230&'Bcc:'&, &'Cc:'&, &'From:'&, &'Reply-To:'&, &'Sender:'&, and &'To:'&.
168e428f
PH
30231
30232Automatic rewriting includes qualification, as mentioned above. The other case
30233in which it can happen is when an incomplete non-local domain is given. The
30234routing process may cause this to be expanded into the full domain name. For
30235example, a header such as
9b371988
PH
30236.code
30237To: hare@teaparty
30238.endd
168e428f 30239might get rewritten as
9b371988
PH
30240.code
30241To: hare@teaparty.wonderland.fict.example
30242.endd
168e428f
PH
30243Rewriting as a result of routing is the one kind of message processing that
30244does not happen at input time, as it cannot be done until the address has
30245been routed.
30246
9b371988 30247Strictly, one should not do &'any'& deliveries of a message until all its
168e428f
PH
30248addresses have been routed, in case any of the headers get changed as a
30249result of routing. However, doing this in practice would hold up many
30250deliveries for unreasonable amounts of time, just because one address could not
30251immediately be routed. Exim therefore does not delay other deliveries when
30252routing of one or more addresses is deferred.
4f578862
PH
30253.ecindex IIDmesproc
30254
168e428f
PH
30255
30256
9b371988
PH
30257. ////////////////////////////////////////////////////////////////////////////
30258. ////////////////////////////////////////////////////////////////////////////
168e428f 30259
9b371988 30260.chapter "SMTP processing" "CHAPSMTP"
4f578862
PH
30261.scindex IIDsmtpproc1 "SMTP" "processing details"
30262.scindex IIDsmtpproc2 "LMTP" "processing details"
168e428f
PH
30263Exim supports a number of different ways of using the SMTP protocol, and its
30264LMTP variant, which is an interactive protocol for transferring messages into a
30265closed mail store application. This chapter contains details of how SMTP is
30266processed. For incoming mail, the following are available:
30267
9b371988
PH
30268.ilist
30269SMTP over TCP/IP (Exim daemon or &'inetd'&);
30270.next
30271SMTP over the standard input and output (the &%-bs%& option);
30272.next
30273Batched SMTP on the standard input (the &%-bS%& option).
30274.endlist
168e428f
PH
30275
30276For mail delivery, the following are available:
30277
9b371988
PH
30278.ilist
30279SMTP over TCP/IP (the &(smtp)& transport);
30280.next
30281LMTP over TCP/IP (the &(smtp)& transport with the &%protocol%& option set to
30282&"lmtp"&);
30283.next
30284LMTP over a pipe to a process running in the local host (the &(lmtp)&
168e428f 30285transport);
9b371988
PH
30286.next
30287Batched SMTP to a file or pipe (the &(appendfile)& and &(pipe)& transports with
30288the &%use_bsmtp%& option set).
30289.endlist
168e428f 30290
9b371988 30291&'Batched SMTP'& is the name for a process in which batches of messages are
168e428f
PH
30292stored in or read from files (or pipes), in a format in which SMTP commands are
30293used to contain the envelope information.
30294
30295
30296
9b371988
PH
30297.section "Outgoing SMTP and LMTP over TCP/IP" "SECToutSMTPTCP"
30298.cindex "SMTP" "outgoing over TCP/IP"
30299.cindex "outgoing SMTP over TCP/IP"
30300.cindex "LMTP" "over TCP/IP"
30301.cindex "outgoing LMTP over TCP/IP"
30302.cindex "EHLO"
30303.cindex "HELO"
30304.cindex "SIZE option on MAIL command"
30305Outgoing SMTP and LMTP over TCP/IP is implemented by the &(smtp)& transport.
30306The &%protocol%& option selects which protocol is to be used, but the actual
168e428f
PH
30307processing is the same in both cases.
30308
30309If, in response to its EHLO command, Exim is told that the SIZE
9b371988
PH
30310parameter is supported, it adds SIZE=<&'n'&> to each subsequent MAIL
30311command. The value of <&'n'&> is the message size plus the value of the
30312&%size_addition%& option (default 1024) to allow for additions to the message
168e428f 30313such as per-transport header lines, or changes made in a
9b371988
PH
30314.cindex "transport" "filter"
30315.cindex "filter" "transport filter"
30316transport filter. If &%size_addition%& is set negative, the use of SIZE is
168e428f
PH
30317suppressed.
30318
30319If the remote server advertises support for PIPELINING, Exim uses the
30320pipelining extension to SMTP (RFC 2197) to reduce the number of TCP/IP packets
30321required for the transaction.
30322
30323If the remote server advertises support for the STARTTLS command, and Exim
30324was built to support TLS encryption, it tries to start a TLS session unless the
9b371988 30325server matches &%hosts_avoid_tls%&. See chapter &<<CHAPTLS>>& for more details.
168e428f
PH
30326
30327If the remote server advertises support for the AUTH command, Exim scans
30328the authenticators configuration for any suitable client settings, as described
9b371988 30329in chapter &<<CHAPSMTPAUTH>>&.
168e428f 30330
9b371988
PH
30331.cindex "carriage return"
30332.cindex "linefeed"
168e428f
PH
30333Responses from the remote host are supposed to be terminated by CR followed by
30334LF. However, there are known to be hosts that do not send CR characters, so in
30335order to be able to interwork with such hosts, Exim treats LF on its own as a
30336line terminator.
30337
30338If a message contains a number of different addresses, all those with the same
30339characteristics (for example, the same envelope sender) that resolve to the
30340same set of hosts, in the same order, are sent in a single SMTP transaction,
30341even if they are for different domains, unless there are more than the setting
9b371988
PH
30342of the &%max_rcpts%& option in the &(smtp)& transport allows, in which case
30343they are split into groups containing no more than &%max_rcpts%& addresses
30344each. If &%remote_max_parallel%& is greater than one, such groups may be sent
30345in parallel sessions. The order of hosts with identical MX values is not
168e428f
PH
30346significant when checking whether addresses can be batched in this way.
30347
9b371988 30348When the &(smtp)& transport suffers a temporary failure that is not
168e428f
PH
30349message-related, Exim updates its transport-specific database, which contains
30350records indexed by host name that remember which messages are waiting for each
30351particular host. It also updates the retry database with new retry times.
30352
9b371988 30353.cindex "hints database" "retry keys"
168e428f
PH
30354Exim's retry hints are based on host name plus IP address, so if one address of
30355a multi-homed host is broken, it will soon be skipped most of the time.
30356See the next section for more detail about error handling.
30357
9b371988
PH
30358.cindex "SMTP" "passed connection"
30359.cindex "SMTP" "batching over TCP/IP"
168e428f
PH
30360When a message is successfully delivered over a TCP/IP SMTP connection, Exim
30361looks in the hints database for the transport to see if there are any queued
30362messages waiting for the host to which it is connected. If it finds one, it
9b371988
PH
30363creates a new Exim process using the &%-MC%& option (which can only be used by
30364a process running as root or the Exim user) and passes the TCP/IP socket to it
30365so that it can deliver another message using the same socket. The new process
30366does only those deliveries that are routed to the connected host, and may in
30367turn pass the socket on to a third process, and so on.
168e428f 30368
9b371988 30369The &%connection_max_messages%& option of the &(smtp)& transport can be used to
168e428f
PH
30370limit the number of messages sent down a single TCP/IP connection.
30371
9b371988 30372.cindex "asterisk" "after IP address"
168e428f
PH
30373The second and subsequent messages delivered down an existing connection are
30374identified in the main log by the addition of an asterisk after the closing
30375square bracket of the IP address.
30376
30377
30378
30379
9b371988
PH
30380.section "Errors in outgoing SMTP" "SECToutSMTPerr"
30381.cindex "error" "in outgoing SMTP"
30382.cindex "SMTP" "errors in outgoing"
30383.cindex "host" "error"
168e428f
PH
30384Three different kinds of error are recognized for outgoing SMTP: host errors,
30385message errors, and recipient errors.
30386
9b371988
PH
30387.vlist
30388.vitem "&*Host errors*&"
30389A host error is not associated with a particular message or with a
168e428f 30390particular recipient of a message. The host errors are:
168e428f 30391
9b371988
PH
30392.ilist
30393Connection refused or timed out,
30394.next
30395Any error response code on connection,
30396.next
30397Any error response code to EHLO or HELO,
30398.next
30399Loss of connection at any time, except after &"."&,
30400.next
30401I/O errors at any time,
30402.next
30403Timeouts during the session, other than in response to MAIL, RCPT or
30404the &"."& at the end of the data.
30405.endlist ilist
168e428f 30406
168e428f
PH
30407For a host error, a permanent error response on connection, or in response to
30408EHLO, causes all addresses routed to the host to be failed. Any other host
30409error causes all addresses to be deferred, and retry data to be created for the
30410host. It is not tried again, for any message, until its retry time arrives. If
30411the current set of addresses are not all delivered in this run (to some
30412alternative host), the message is added to the list of those waiting for this
30413host, so if it is still undelivered when a subsequent successful delivery is
30414made to the host, it will be sent down the same SMTP connection.
30415
9b371988
PH
30416.vitem "&*Message errors*&"
30417.cindex "message" "error"
168e428f
PH
30418A message error is associated with a particular message when sent to a
30419particular host, but not with a particular recipient of the message. The
30420message errors are:
168e428f 30421
9b371988
PH
30422.ilist
30423Any error response code to MAIL, DATA, or the &"."& that terminates
30424the data,
30425.next
30426Timeout after MAIL,
30427.next
30428Timeout or loss of connection after the &"."& that terminates the data. A
168e428f
PH
30429timeout after the DATA command itself is treated as a host error, as is loss of
30430connection at any other time.
9b371988
PH
30431.endlist ilist
30432
30433For a message error, a permanent error response (5&'xx'&) causes all addresses
168e428f 30434to be failed, and a delivery error report to be returned to the sender. A
9b371988 30435temporary error response (4&'xx'&), or one of the timeouts, causes all
168e428f
PH
30436addresses to be deferred. Retry data is not created for the host, but instead,
30437a retry record for the combination of host plus message id is created. The
30438message is not added to the list of those waiting for this host. This ensures
30439that the failing message will not be sent to this host again until the retry
30440time arrives. However, other messages that are routed to the host are not
30441affected, so if it is some property of the message that is causing the error,
30442it will not stop the delivery of other mail.
9b371988 30443
168e428f 30444If the remote host specified support for the SIZE parameter in its response
9b371988 30445to EHLO, Exim adds SIZE=&'nnn'& to the MAIL command, so an
168e428f
PH
30446over-large message will cause a message error because the error arrives as a
30447response to MAIL.
30448
9b371988
PH
30449.vitem "&*Recipient errors*&"
30450.cindex "recipient" "error"
168e428f
PH
30451A recipient error is associated with a particular recipient of a message. The
30452recipient errors are:
9b371988
PH
30453
30454.ilist
30455Any error response to RCPT,
30456.next
30457Timeout after RCPT.
30458.endlist
30459
30460For a recipient error, a permanent error response (5&'xx'&) causes the
168e428f 30461recipient address to be failed, and a bounce message to be returned to the
9b371988 30462sender. A temporary error response (4&'xx'&) or a timeout causes the failing
168e428f
PH
30463address to be deferred, and routing retry data to be created for it. This is
30464used to delay processing of the address in subsequent queue runs, until its
30465routing retry time arrives. This applies to all messages, but because it
30466operates only in queue runs, one attempt will be made to deliver a new message
30467to the failing address before the delay starts to operate. This ensures that,
30468if the failure is really related to the message rather than the recipient
9b371988 30469(&"message too big for this recipient"& is a possible example), other messages
168e428f
PH
30470have a chance of getting delivered. If a delivery to the address does succeed,
30471the retry information gets cleared, so all stuck messages get tried again, and
30472the retry clock is reset.
9b371988 30473
168e428f
PH
30474The message is not added to the list of those waiting for this host. Use of the
30475host for other messages is unaffected, and except in the case of a timeout,
30476other recipients are processed independently, and may be successfully delivered
30477in the current SMTP session. After a timeout it is of course impossible to
30478proceed with the session, so all addresses get deferred. However, those other
30479than the one that failed do not suffer any subsequent retry delays. Therefore,
30480if one recipient is causing trouble, the others have a chance of getting
30481through when a subsequent delivery attempt occurs before the failing
30482recipient's retry time.
9b371988 30483.endlist
168e428f
PH
30484
30485In all cases, if there are other hosts (or IP addresses) available for the
30486current set of addresses (for example, from multiple MX records), they are
30487tried in this run for any undelivered addresses, subject of course to their
30488own retry data. In other words, recipient error retry data does not take effect
30489until the next delivery attempt.
30490
30491Some hosts have been observed to give temporary error responses to every
9b371988 30492MAIL command at certain times (&"insufficient space"& has been seen). It
168e428f
PH
30493would be nice if such circumstances could be recognized, and defer data for the
30494host itself created, but this is not possible within the current Exim design.
30495What actually happens is that retry data for every (host, message) combination
30496is created.
30497
30498The reason that timeouts after MAIL and RCPT are treated specially is that
30499these can sometimes arise as a result of the remote host's verification
30500procedures. Exim makes this assumption, and treats them as if a temporary error
9b371988 30501response had been received. A timeout after &"."& is treated specially because
168e428f
PH
30502it is known that some broken implementations fail to recognize the end of the
30503message if the last character of the last line is a binary zero. Thus, it is
30504helpful to treat this case as a message error.
30505
30506Timeouts at other times are treated as host errors, assuming a problem with the
30507host, or the connection to it. If a timeout after MAIL, RCPT,
9b371988 30508or &"."& is really a connection problem, the assumption is that at the next try
168e428f
PH
30509the timeout is likely to occur at some other point in the dialogue, causing it
30510then to be treated as a host error.
30511
30512There is experimental evidence that some MTAs drop the connection after the
9b371988
PH
30513terminating &"."& if they do not like the contents of the message for some
30514reason, in contravention of the RFC, which indicates that a 5&'xx'& response
168e428f
PH
30515should be given. That is why Exim treats this case as a message rather than a
30516host error, in order not to delay other messages to the same host.
30517
30518
30519
30520
f89d2485 30521.section "Incoming SMTP messages over TCP/IP" "SECID233"
9b371988
PH
30522.cindex "SMTP" "incoming over TCP/IP"
30523.cindex "incoming SMTP over TCP/IP"
30524.cindex "inetd"
30525.cindex "daemon"
168e428f 30526Incoming SMTP messages can be accepted in one of two ways: by running a
9b371988
PH
30527listening daemon, or by using &'inetd'&. In the latter case, the entry in
30528&_/etc/inetd.conf_& should be like this:
30529.code
30530smtp stream tcp nowait exim /opt/exim/bin/exim in.exim -bs
30531.endd
168e428f 30532Exim distinguishes between this case and the case of a locally running user
9b371988 30533agent using the &%-bs%& option by checking whether or not the standard input is
168e428f
PH
30534a socket. When it is, either the port must be privileged (less than 1024), or
30535the caller must be root or the Exim user. If any other user passes a socket
30536with an unprivileged port number, Exim prints a message on the standard error
30537stream and exits with an error code.
30538
30539By default, Exim does not make a log entry when a remote host connects or
9b371988 30540disconnects (either via the daemon or &'inetd'&), unless the disconnection is
168e428f 30541unexpected. It can be made to write such log entries by setting the
9b371988 30542&%smtp_connection%& log selector.
168e428f 30543
9b371988
PH
30544.cindex "carriage return"
30545.cindex "linefeed"
168e428f
PH
30546Commands from the remote host are supposed to be terminated by CR followed by
30547LF. However, there are known to be hosts that do not send CR characters. In
30548order to be able to interwork with such hosts, Exim treats LF on its own as a
30549line terminator.
30550Furthermore, because common code is used for receiving messages from all
30551sources, a CR on its own is also interpreted as a line terminator. However, the
9b371988 30552sequence &"CR, dot, CR"& does not terminate incoming SMTP data.
168e428f 30553
9b371988
PH
30554.cindex "EHLO" "invalid data"
30555.cindex "HELO" "invalid data"
168e428f
PH
30556One area that sometimes gives rise to problems concerns the EHLO or
30557HELO commands. Some clients send syntactically invalid versions of these
30558commands, which Exim rejects by default. (This is nothing to do with verifying
9b371988
PH
30559the data that is sent, so &%helo_verify_hosts%& is not relevant.) You can tell
30560Exim not to apply a syntax check by setting &%helo_accept_junk_hosts%& to
168e428f
PH
30561match the broken hosts that send invalid commands.
30562
9b371988
PH
30563.cindex "SIZE option on MAIL command"
30564.cindex "MAIL" "SIZE option"
168e428f 30565The amount of disk space available is checked whenever SIZE is received on
9b371988
PH
30566a MAIL command, independently of whether &%message_size_limit%& or
30567&%check_spool_space%& is configured, unless &%smtp_check_spool_space%& is set
168e428f 30568false. A temporary error is given if there is not enough space. If
9b371988 30569&%check_spool_space%& is set, the check is for that amount of space plus the
168e428f
PH
30570value given with SIZE, that is, it checks that the addition of the incoming
30571message will not reduce the space below the threshold.
30572
30573When a message is successfully received, Exim includes the local message id in
9b371988
PH
30574its response to the final &"."& that terminates the data. If the remote host
30575logs this text it can help with tracing what has happened to a message.
168e428f
PH
30576
30577The Exim daemon can limit the number of simultaneous incoming connections it is
9b371988 30578prepared to handle (see the &%smtp_accept_max%& option). It can also limit the
168e428f 30579number of simultaneous incoming connections from a single remote host (see the
9b371988 30580&%smtp_accept_max_per_host%& option). Additional connection attempts are
168e428f
PH
30581rejected using the SMTP temporary error code 421.
30582
30583The Exim daemon does not rely on the SIGCHLD signal to detect when a
30584subprocess has finished, as this can get lost at busy times. Instead, it looks
30585for completed subprocesses every time it wakes up. Provided there are other
30586things happening (new incoming calls, starts of queue runs), completed
30587processes will be noticed and tidied away. On very quiet systems you may
9b371988
PH
30588sometimes see a &"defunct"& Exim process hanging about. This is not a problem;
30589it will be noticed when the daemon next wakes up.
168e428f
PH
30590
30591When running as a daemon, Exim can reserve some SMTP slots for specific hosts,
30592and can also be set up to reject SMTP calls from non-reserved hosts at times of
9b371988
PH
30593high system load &-- for details see the &%smtp_accept_reserve%&,
30594&%smtp_load_reserve%&, and &%smtp_reserve_hosts%& options. The load check
30595applies in both the daemon and &'inetd'& cases.
168e428f
PH
30596
30597Exim normally starts a delivery process for each message received, though this
9b371988
PH
30598can be varied by means of the &%-odq%& command line option and the
30599&%queue_only%&, &%queue_only_file%&, and &%queue_only_load%& options. The
30600number of simultaneously running delivery processes started in this way from
30601SMTP input can be limited by the &%smtp_accept_queue%& and
30602&%smtp_accept_queue_per_connection%& options. When either limit is reached,
168e428f
PH
30603subsequently received messages are just put on the input queue without starting
30604a delivery process.
30605
9b371988
PH
30606The controls that involve counts of incoming SMTP calls (&%smtp_accept_max%&,
30607&%smtp_accept_queue%&, &%smtp_accept_reserve%&) are not available when Exim is
30608started up from the &'inetd'& daemon, because in that case each connection is
168e428f 30609handled by an entirely independent Exim process. Control by load average is,
9b371988 30610however, available with &'inetd'&.
168e428f
PH
30611
30612Exim can be configured to verify addresses in incoming SMTP commands as they
9b371988
PH
30613are received. See chapter &<<CHAPACL>>& for details. It can also be configured
30614to rewrite addresses at this time &-- before any syntax checking is done. See
30615section &<<SECTrewriteS>>&.
168e428f
PH
30616
30617Exim can also be configured to limit the rate at which a client host submits
30618MAIL and RCPT commands in a single SMTP session. See the
9b371988 30619&%smtp_ratelimit_hosts%& option.
168e428f
PH
30620
30621
30622
f89d2485 30623.section "Unrecognized SMTP commands" "SECID234"
9b371988
PH
30624.cindex "SMTP" "unrecognized commands"
30625If Exim receives more than &%smtp_max_unknown_commands%& unrecognized SMTP
168e428f
PH
30626commands during a single SMTP connection, it drops the connection after sending
30627the error response to the last command. The default value for
9b371988 30628&%smtp_max_unknown_commands%& is 3. This is a defence against some kinds of
168e428f
PH
30629abuse that subvert web servers into making connections to SMTP ports; in these
30630circumstances, a number of non-SMTP lines are sent first.
30631
30632
f89d2485 30633.section "Syntax and protocol errors in SMTP commands" "SECID235"
9b371988
PH
30634.cindex "SMTP" "syntax errors"
30635.cindex "SMTP" "protocol errors"
168e428f
PH
30636A syntax error is detected if an SMTP command is recognized, but there is
30637something syntactically wrong with its data, for example, a malformed email
30638address in a RCPT command. Protocol errors include invalid command
30639sequencing such as RCPT before MAIL. If Exim receives more than
9b371988 30640&%smtp_max_synprot_errors%& such commands during a single SMTP connection, it
168e428f 30641drops the connection after sending the error response to the last command. The
9b371988 30642default value for &%smtp_max_synprot_errors%& is 3. This is a defence against
168e428f
PH
30643broken clients that loop sending bad commands (yes, it has been seen).
30644
30645
30646
f89d2485 30647.section "Use of non-mail SMTP commands" "SECID236"
9b371988
PH
30648.cindex "SMTP" "non-mail commands"
30649The &"non-mail"& SMTP commands are those other than MAIL, RCPT, and
168e428f
PH
30650DATA. Exim counts such commands, and drops the connection if there are too
30651many of them in a single SMTP session. This action catches some
30652denial-of-service attempts and things like repeated failing AUTHs, or a mad
9b371988
PH
30653client looping sending EHLO. The global option &%smtp_accept_max_nonmail%&
30654defines what &"too many"& means. Its default value is 10.
168e428f
PH
30655
30656When a new message is expected, one occurrence of RSET is not counted. This
30657allows a client to send one RSET between messages (this is not necessary,
f89d2485 30658but some clients do it). Exim also allows one uncounted occurrence of HELO
168e428f
PH
30659or EHLO, and one occurrence of STARTTLS between messages. After
30660starting up a TLS session, another EHLO is expected, and so it too is not
30661counted.
30662
30663The first occurrence of AUTH in a connection, or immediately following
30664STARTTLS is also not counted. Otherwise, all commands other than MAIL,
30665RCPT, DATA, and QUIT are counted.
30666
30667You can control which hosts are subject to the limit set by
9b371988
PH
30668&%smtp_accept_max_nonmail%& by setting
30669&%smtp_accept_max_nonmail_hosts%&. The default value is &`*`&, which makes
168e428f
PH
30670the limit apply to all hosts. This option means that you can exclude any
30671specific badly-behaved hosts that you have to live with.
30672
30673
30674
30675
f89d2485 30676.section "The VRFY and EXPN commands" "SECID237"
168e428f 30677When Exim receives a VRFY or EXPN command on a TCP/IP connection, it
9b371988 30678runs the ACL specified by &%acl_smtp_vrfy%& or &%acl_smtp_expn%& (as
168e428f
PH
30679appropriate) in order to decide whether the command should be accepted or not.
30680If no ACL is defined, the command is rejected.
30681
9b371988 30682.cindex "VRFY" "processing"
168e428f 30683When VRFY is accepted, it runs exactly the same code as when Exim is
9b371988 30684called with the &%-bv%& option.
168e428f 30685
9b371988 30686.cindex "EXPN" "processing"
168e428f 30687When EXPN is accepted, a single-level expansion of the address is done.
9b371988
PH
30688EXPN is treated as an &"address test"& (similar to the &%-bt%& option) rather
30689than a verification (the &%-bv%& option). If an unqualified local part is given
30690as the argument to EXPN, it is qualified with &%qualify_domain%&. Rejections
168e428f
PH
30691of VRFY and EXPN commands are logged on the main and reject logs, and
30692VRFY verification failures are logged on the main log for consistency with
30693RCPT failures.
30694
30695
30696
9b371988
PH
30697.section "The ETRN command" "SECTETRN"
30698.cindex "ETRN" "processing"
168e428f
PH
30699RFC 1985 describes an SMTP command called ETRN that is designed to
30700overcome the security problems of the TURN command (which has fallen into
30701disuse). When Exim receives an ETRN command on a TCP/IP connection, it runs
9b371988 30702the ACL specified by &%acl_smtp_etrn%& in order to decide whether the command
168e428f
PH
30703should be accepted or not. If no ACL is defined, the command is rejected.
30704
9b371988 30705The ETRN command is concerned with &"releasing"& messages that are awaiting
168e428f
PH
30706delivery to certain hosts. As Exim does not organize its message queue by host,
30707the only form of ETRN that is supported by default is the one where the
9b371988 30708text starts with the &"#"& prefix, in which case the remainder of the text is
168e428f 30709specific to the SMTP server. A valid ETRN command causes a run of Exim with
9b371988 30710the &%-R%& option to happen, with the remainder of the ETRN text as its
168e428f 30711argument. For example,
9b371988
PH
30712.code
30713ETRN #brigadoon
30714.endd
168e428f 30715runs the command
9b371988
PH
30716.code
30717exim -R brigadoon
30718.endd
168e428f 30719which causes a delivery attempt on all messages with undelivered addresses
9b371988 30720containing the text &"brigadoon"&. When &%smtp_etrn_serialize%& is set (the
168e428f
PH
30721default), Exim prevents the simultaneous execution of more than one queue run
30722for the same argument string as a result of an ETRN command. This stops
30723a misbehaving client from starting more than one queue runner at once.
30724
9b371988 30725.cindex "hints database" "ETRN serialization"
168e428f
PH
30726Exim implements the serialization by means of a hints database in which a
30727record is written whenever a process is started by ETRN, and deleted when
30728the process completes. However, Exim does not keep the SMTP session waiting for
30729the ETRN process to complete. Once ETRN is accepted, the client is sent
9b371988
PH
30730a &"success"& return code. Obviously there is scope for hints records to get
30731left lying around if there is a system or program crash. To guard against this,
30732Exim ignores any records that are more than six hours old.
168e428f 30733
0a4e3112 30734.oindex "&%smtp_etrn_command%&"
9b371988 30735For more control over what ETRN does, the &%smtp_etrn_command%& option can
168e428f
PH
30736used. This specifies a command that is run whenever ETRN is received,
30737whatever the form of its argument. For
30738example:
9b371988
PH
30739.code
30740smtp_etrn_command = /etc/etrn_command $domain \
30741 $sender_host_address
30742.endd
f89d2485 30743.vindex "&$domain$&"
168e428f 30744The string is split up into arguments which are independently expanded. The
9b371988 30745expansion variable &$domain$& is set to the argument of the ETRN command,
168e428f
PH
30746and no syntax checking is done on the contents of this argument. Exim does not
30747wait for the command to complete, so its status code is not checked. Exim runs
30748under its own uid and gid when receiving incoming SMTP, so it is not possible
30749for it to change them before running the command.
30750
30751
30752
f89d2485 30753.section "Incoming local SMTP" "SECID238"
9b371988 30754.cindex "SMTP" "local incoming"
168e428f
PH
30755Some user agents use SMTP to pass messages to their local MTA using the
30756standard input and output, as opposed to passing the envelope on the command
30757line and writing the message to the standard input. This is supported by the
9b371988 30758&%-bs%& option. This form of SMTP is handled in the same way as incoming
168e428f
PH
30759messages over TCP/IP (including the use of ACLs), except that the envelope
30760sender given in a MAIL command is ignored unless the caller is trusted. In
30761an ACL you can detect this form of SMTP input by testing for an empty host
30762identification. It is common to have this as the first line in the ACL that
30763runs for RCPT commands:
9b371988
PH
30764.code
30765accept hosts = :
30766.endd
168e428f
PH
30767This accepts SMTP messages from local processes without doing any other tests.
30768
30769
30770
9b371988
PH
30771.section "Outgoing batched SMTP" "SECTbatchSMTP"
30772.cindex "SMTP" "batched outgoing"
30773.cindex "batched SMTP output"
30774Both the &(appendfile)& and &(pipe)& transports can be used for handling
30775batched SMTP. Each has an option called &%use_bsmtp%& which causes messages to
30776be output in BSMTP format. No SMTP responses are possible for this form of
30777delivery. All it is doing is using SMTP commands as a way of transmitting the
30778envelope along with the message.
168e428f
PH
30779
30780The message is written to the file or pipe preceded by the SMTP commands
30781MAIL and RCPT, and followed by a line containing a single dot. Lines in
30782the message that start with a dot have an extra dot added. The SMTP command
9b371988 30783HELO is not normally used. If it is required, the &%message_prefix%& option
168e428f
PH
30784can be used to specify it.
30785
9b371988 30786Because &(appendfile)& and &(pipe)& are both local transports, they accept only
168e428f 30787one recipient address at a time by default. However, you can arrange for them
9b371988 30788to handle several addresses at once by setting the &%batch_max%& option. When
168e428f 30789this is done for BSMTP, messages may contain multiple RCPT commands. See
9b371988 30790chapter &<<CHAPbatching>>& for more details.
168e428f 30791
f89d2485 30792.vindex "&$host$&"
168e428f
PH
30793When one or more addresses are routed to a BSMTP transport by a router that
30794sets up a host list, the name of the first host on the list is available to the
9b371988 30795transport in the variable &$host$&. Here is an example of such a transport and
168e428f 30796router:
9b371988
PH
30797.code
30798begin routers
30799route_append:
30800 driver = manualroute
30801 transport = smtp_appendfile
30802 route_list = domain.example batch.host.example
168e428f 30803
9b371988
PH
30804begin transports
30805smtp_appendfile:
30806 driver = appendfile
30807 directory = /var/bsmtp/$host
30808 batch_max = 1000
30809 use_bsmtp
30810 user = exim
30811.endd
30812This causes messages addressed to &'domain.example'& to be written in BSMTP
30813format to &_/var/bsmtp/batch.host.example_&, with only a single copy of each
168e428f
PH
30814message (unless there are more than 1000 recipients).
30815
30816
30817
9b371988
PH
30818.section "Incoming batched SMTP" "SECTincomingbatchedSMTP"
30819.cindex "SMTP" "batched incoming"
30820.cindex "batched SMTP input"
30821The &%-bS%& command line option causes Exim to accept one or more messages by
168e428f
PH
30822reading SMTP on the standard input, but to generate no responses. If the caller
30823is trusted, the senders in the MAIL commands are believed; otherwise the
30824sender is always the caller of Exim. Unqualified senders and receivers are not
30825rejected (there seems little point) but instead just get qualified. HELO
30826and EHLO act as RSET; VRFY, EXPN, ETRN and HELP, act
30827as NOOP; QUIT quits.
30828
30829No policy checking is done for BSMTP input. That is, no ACL is run at anytime.
30830In this respect it is like non-SMTP local input.
30831
9b371988 30832If an error is detected while reading a message, including a missing &"."& at
168e428f
PH
30833the end, Exim gives up immediately. It writes details of the error to the
30834standard output in a stylized way that the calling program should be able to
30835make some use of automatically, for example:
9b371988
PH
30836.code
30837554 Unexpected end of file
30838Transaction started in line 10
30839Error detected in line 14
30840.endd
168e428f
PH
30841It writes a more verbose version, for human consumption, to the standard error
30842file, for example:
9b371988
PH
30843.code
30844An error was detected while processing a file of BSMTP input.
30845The error message was:
168e428f 30846
9b371988 30847501 '>' missing at end of address
168e428f 30848
9b371988
PH
30849The SMTP transaction started in line 10.
30850The error was detected in line 12.
30851The SMTP command at fault was:
168e428f 30852
9b371988 30853rcpt to:<malformed@in.com.plete
168e428f 30854
9b371988
PH
308551 previous message was successfully processed.
30856The rest of the batch was abandoned.
30857.endd
168e428f
PH
30858The return code from Exim is zero only if there were no errors. It is 1 if some
30859messages were accepted before an error was detected, and 2 if no messages were
30860accepted.
4f578862
PH
30861.ecindex IIDsmtpproc1
30862.ecindex IIDsmtpproc2
168e428f
PH
30863
30864
30865
9b371988
PH
30866. ////////////////////////////////////////////////////////////////////////////
30867. ////////////////////////////////////////////////////////////////////////////
168e428f 30868
9b371988
PH
30869.chapter "Customizing bounce and warning messages" "CHAPemsgcust" &&&
30870 "Customizing messages"
168e428f
PH
30871When a message fails to be delivered, or remains on the queue for more than a
30872configured amount of time, Exim sends a message to the original sender, or
30873to an alternative configured address. The text of these messages is built into
30874the code of Exim, but it is possible to change it, either by adding a single
30875string, or by replacing each of the paragraphs by text supplied in a file.
30876
9b371988
PH
30877The &'From:'& and &'To:'& header lines are automatically generated; you can
30878cause a &'Reply-To:'& line to be added by setting the &%errors_reply_to%&
30879option. Exim also adds the line
30880.code
30881Auto-Submitted: auto-generated
30882.endd
168e428f
PH
30883to all warning and bounce messages,
30884
30885
f89d2485 30886.section "Customizing bounce messages" "SECID239"
9b371988
PH
30887.cindex "customizing" "bounce message"
30888.cindex "bounce message" "customizing"
30889If &%bounce_message_text%& is set, its contents are included in the default
30890message immediately after &"This message was created automatically by mail
30891delivery software."& The string is not expanded. It is not used if
30892&%bounce_message_file%& is set.
168e428f 30893
9b371988 30894When &%bounce_message_file%& is set, it must point to a template file for
168e428f
PH
30895constructing error messages. The file consists of a series of text items,
30896separated by lines consisting of exactly four asterisks. If the file cannot be
30897opened, default text is used and a message is written to the main and panic
30898logs. If any text item in the file is empty, default text is used for that
30899item.
30900
f89d2485
PH
30901.vindex "&$bounce_recipient$&"
30902.vindex "&$bounce_return_size_limit$&"
168e428f 30903Each item of text that is read from the file is expanded, and there are two
9b371988
PH
30904expansion variables which can be of use here: &$bounce_recipient$& is set to
30905the recipient of an error message while it is being created, and
30906&$bounce_return_size_limit$& contains the value of the &%return_size_limit%&
068aaea8 30907option, rounded to a whole number.
168e428f
PH
30908
30909The items must appear in the file in the following order:
30910
9b371988
PH
30911.ilist
30912The first item is included in the headers, and should include at least a
30913&'Subject:'& header. Exim does not check the syntax of these headers.
30914.next
30915The second item forms the start of the error message. After it, Exim lists the
168e428f 30916failing addresses with their error messages.
9b371988
PH
30917.next
30918The third item is used to introduce any text from pipe transports that is to be
168e428f 30919returned to the sender. It is omitted if there is no such text.
9b371988
PH
30920.next
30921The fourth item is used to introduce the copy of the message that is returned
168e428f 30922as part of the error report.
9b371988
PH
30923.next
30924The fifth item is added after the fourth one if the returned message is
30925truncated because it is bigger than &%return_size_limit%&.
30926.next
30927The sixth item is added after the copy of the original message.
30928.endlist
30929
30930The default state (&%bounce_message_file%& unset) is equivalent to the
30931following file, in which the sixth item is empty. The &'Subject:'& and some
30932other lines have been split in order to fit them on the page:
30933.code
30934Subject: Mail delivery failed
30935 ${if eq{$sender_address}{$bounce_recipient}
30936 {: returning message to sender}}
30937****
30938This message was created automatically by mail delivery software.
30939
30940A message ${if eq{$sender_address}{$bounce_recipient}
30941 {that you sent }{sent by
30942
30943<$sender_address>
30944
30945}}could not be delivered to all of its recipients.
3cb1b51e 30946This is a permanent error. The following address(es) failed:
9b371988
PH
30947****
30948The following text was generated during the delivery attempt(s):
30949****
30950------ This is a copy of the message, including all the headers.
30951 ------
30952****
30953------ The body of the message is $message_size characters long;
30954 only the first
30955------ $bounce_return_size_limit or so are included here.
30956****
30957.endd
30958.section "Customizing warning messages" "SECTcustwarn"
30959.cindex "customizing" "warning message"
30960.cindex "warning of delay" "customizing the message"
30961The option &%warn_message_file%& can be pointed at a template file for use when
168e428f
PH
30962warnings about message delays are created. In this case there are only three
30963text sections:
30964
9b371988
PH
30965.ilist
30966The first item is included in the headers, and should include at least a
30967&'Subject:'& header. Exim does not check the syntax of these headers.
30968.next
30969The second item forms the start of the warning message. After it, Exim lists
168e428f 30970the delayed addresses.
9b371988
PH
30971.next
30972The third item then ends the message.
30973.endlist
30974
30975The default state is equivalent to the following file, except that some lines
30976have been split here, in order to fit them on the page:
30977.code
30978Subject: Warning: message $message_exim_id delayed
30979 $warn_message_delay
30980****
30981This message was created automatically by mail delivery software.
30982
30983A message ${if eq{$sender_address}{$warn_message_recipients}
30984{that you sent }{sent by
30985
30986<$sender_address>
30987
30988}}has not been delivered to all of its recipients after
30989more than $warn_message_delay on the queue on $primary_hostname.
30990
30991The message identifier is: $message_exim_id
30992The subject of the message is: $h_subject
30993The date of the message is: $h_date
30994
30995The following address(es) have not yet been delivered:
30996****
30997No action is required on your part. Delivery attempts will
30998continue for some time, and this warning may be repeated at
30999intervals if the message remains undelivered. Eventually the
31000mail delivery software will give up, and when that happens,
31001the message will be returned to you.
31002.endd
f89d2485
PH
31003.vindex "&$warn_message_delay$&"
31004.vindex "&$warn_message_recipients$&"
9b371988 31005However, in the default state the subject and date lines are omitted if no
168e428f 31006appropriate headers exist. During the expansion of this file,
9b371988
PH
31007&$warn_message_delay$& is set to the delay time in one of the forms &"<&'n'&>
31008minutes"& or &"<&'n'&> hours"&, and &$warn_message_recipients$& contains a list
31009of recipients for the warning message. There may be more than one if there are
31010multiple addresses with different &%errors_to%& settings on the routers that
168e428f
PH
31011handled them.
31012
31013
31014
31015
9b371988
PH
31016. ////////////////////////////////////////////////////////////////////////////
31017. ////////////////////////////////////////////////////////////////////////////
168e428f 31018
9b371988 31019.chapter "Some common configuration settings" "CHAPcomconreq"
168e428f
PH
31020This chapter discusses some configuration settings that seem to be fairly
31021common. More examples and discussion can be found in the Exim book.
31022
31023
31024
f89d2485 31025.section "Sending mail to a smart host" "SECID240"
9b371988
PH
31026.cindex "smart host" "example router"
31027If you want to send all mail for non-local domains to a &"smart host"&, you
31028should replace the default &(dnslookup)& router with a router which does the
168e428f 31029routing explicitly:
9b371988
PH
31030.code
31031send_to_smart_host:
31032 driver = manualroute
31033 route_list = !+local_domains smart.host.name
31034 transport = remote_smtp
31035.endd
168e428f 31036You can use the smart host's IP address instead of the name if you wish.
168e428f
PH
31037If you are using Exim only to submit messages to a smart host, and not for
31038receiving incoming messages, you can arrange for it to do the submission
9b371988
PH
31039synchronously by setting the &%mua_wrapper%& option (see chapter
31040&<<CHAPnonqueueing>>&).
168e428f
PH
31041
31042
31043
31044
9b371988
PH
31045.section "Using Exim to handle mailing lists" "SECTmailinglists"
31046.cindex "mailing lists"
168e428f
PH
31047Exim can be used to run simple mailing lists, but for large and/or complicated
31048requirements, the use of additional specialized mailing list software such as
31049Majordomo or Mailman is recommended.
31050
9b371988 31051The &(redirect)& router can be used to handle mailing lists where each list
168e428f 31052is maintained in a separate file, which can therefore be managed by an
9b371988 31053independent manager. The &%domains%& router option can be used to run these
168e428f 31054lists in a separate domain from normal mail. For example:
9b371988
PH
31055.code
31056lists:
31057 driver = redirect
31058 domains = lists.example
31059 file = /usr/lists/$local_part
31060 forbid_pipe
31061 forbid_file
31062 errors_to = $local_part-request@lists.example
31063 no_more
31064.endd
31065This router is skipped for domains other than &'lists.example'&. For addresses
168e428f 31066in that domain, it looks for a file that matches the local part. If there is no
9b371988 31067such file, the router declines, but because &%no_more%& is set, no subsequent
168e428f
PH
31068routers are tried, and so the whole delivery fails.
31069
9b371988 31070The &%forbid_pipe%& and &%forbid_file%& options prevent a local part from being
168e428f
PH
31071expanded into a file name or a pipe delivery, which is usually inappropriate in
31072a mailing list.
31073
0a4e3112 31074.oindex "&%errors_to%&"
9b371988 31075The &%errors_to%& option specifies that any delivery errors caused by addresses
168e428f
PH
31076taken from a mailing list are to be sent to the given address rather than the
31077original sender of the message. However, before acting on this, Exim verifies
31078the error address, and ignores it if verification fails.
31079
31080For example, using the configuration above, mail sent to
9b371988
PH
31081&'dicts@lists.example'& is passed on to those addresses contained in
31082&_/usr/lists/dicts_&, with error reports directed to
31083&'dicts-request@lists.example'&, provided that this address can be verified.
31084There could be a file called &_/usr/lists/dicts-request_& containing
168e428f 31085the address(es) of this particular list's manager(s), but other approaches,
9b371988
PH
31086such as setting up an earlier router (possibly using the &%local_part_prefix%&
31087or &%local_part_suffix%& options) to handle addresses of the form
31088&%owner-%&&'xxx'& or &%xxx-%&&'request'&, are also possible.
168e428f
PH
31089
31090
31091
f89d2485 31092.section "Syntax errors in mailing lists" "SECID241"
9b371988 31093.cindex "mailing lists" "syntax errors in"
168e428f
PH
31094If an entry in redirection data contains a syntax error, Exim normally defers
31095delivery of the original address. That means that a syntax error in a mailing
31096list holds up all deliveries to the list. This may not be appropriate when a
31097list is being maintained automatically from data supplied by users, and the
31098addresses are not rigorously checked.
31099
9b371988 31100If the &%skip_syntax_errors%& option is set, the &(redirect)& router just skips
168e428f 31101entries that fail to parse, noting the incident in the log. If in addition
9b371988 31102&%syntax_errors_to%& is set to a verifiable address, a message is sent to it
168e428f 31103whenever a broken address is skipped. It is usually appropriate to set
9b371988 31104&%syntax_errors_to%& to the same address as &%errors_to%&.
168e428f
PH
31105
31106
31107
f89d2485 31108.section "Re-expansion of mailing lists" "SECID242"
9b371988 31109.cindex "mailing lists" "re-expansion of"
168e428f
PH
31110Exim remembers every individual address to which a message has been delivered,
31111in order to avoid duplication, but it normally stores only the original
31112recipient addresses with a message. If all the deliveries to a mailing list
31113cannot be done at the first attempt, the mailing list is re-expanded when the
31114delivery is next tried. This means that alterations to the list are taken into
31115account at each delivery attempt, so addresses that have been added to
31116the list since the message arrived will therefore receive a copy of the
31117message, even though it pre-dates their subscription.
31118
9b371988
PH
31119If this behaviour is felt to be undesirable, the &%one_time%& option can be set
31120on the &(redirect)& router. If this is done, any addresses generated by the
168e428f 31121router that fail to deliver at the first attempt are added to the message as
9b371988
PH
31122&"top level"& addresses, and the parent address that generated them is marked
31123&"delivered"&. Thus, expansion of the mailing list does not happen again at the
168e428f
PH
31124subsequent delivery attempts. The disadvantage of this is that if any of the
31125failing addresses are incorrect, correcting them in the file has no effect on
31126pre-existing messages.
31127
31128The original top-level address is remembered with each of the generated
31129addresses, and is output in any log messages. However, any intermediate parent
31130addresses are not recorded. This makes a difference to the log only if the
9b371988 31131&%all_parents%& selector is set, but for mailing lists there is normally only
168e428f
PH
31132one level of expansion anyway.
31133
31134
31135
f89d2485 31136.section "Closed mailing lists" "SECID243"
9b371988 31137.cindex "mailing lists" "closed"
168e428f
PH
31138The examples so far have assumed open mailing lists, to which anybody may
31139send mail. It is also possible to set up closed lists, where mail is accepted
31140from specified senders only. This is done by making use of the generic
9b371988 31141&%senders%& option to restrict the router that handles the list.
168e428f
PH
31142
31143The following example uses the same file as a list of recipients and as a list
31144of permitted senders. It requires three routers:
9b371988 31145.code
168e428f
PH
31146lists_request:
31147 driver = redirect
31148 domains = lists.example
31149 local_part_suffix = -request
31150 file = /usr/lists/$local_part$local_part_suffix
31151 no_more
31152
31153lists_post:
31154 driver = redirect
31155 domains = lists.example
31156 senders = ${if exists {/usr/lists/$local_part}\
31157 {lsearch;/usr/lists/$local_part}{*}}
31158 file = /usr/lists/$local_part
31159 forbid_pipe
31160 forbid_file
31161 errors_to = $local_part-request@lists.example
31162 no_more
31163
31164lists_closed:
31165 driver = redirect
31166 domains = lists.example
31167 allow_fail
31168 data = :fail: $local_part@lists.example is a closed mailing list
9b371988
PH
31169.endd
31170All three routers have the same &%domains%& setting, so for any other domains,
168e428f 31171they are all skipped. The first router runs only if the local part ends in
9b371988 31172&%-request%&. It handles messages to the list manager(s) by means of an open
168e428f
PH
31173mailing list.
31174
9b371988 31175The second router runs only if the &%senders%& precondition is satisfied. It
168e428f
PH
31176checks for the existence of a list that corresponds to the local part, and then
31177checks that the sender is on the list by means of a linear search. It is
31178necessary to check for the existence of the file before trying to search it,
31179because otherwise Exim thinks there is a configuration error. If the file does
9b371988 31180not exist, the expansion of &%senders%& is *, which matches all senders. This
168e428f 31181means that the router runs, but because there is no list, declines, and
9b371988
PH
31182&%no_more%& ensures that no further routers are run. The address fails with an
31183&"unrouteable address"& error.
168e428f
PH
31184
31185The third router runs only if the second router is skipped, which happens when
31186a mailing list exists, but the sender is not on it. This router forcibly fails
31187the address, giving a suitable error message.
31188
31189
31190
31191
4f578862
PH
31192.section "Variable Envelope Return Paths (VERP)" "SECTverp"
31193.cindex "VERP"
31194.cindex "Variable Envelope Return Paths"
31195.cindex "envelope sender"
31196Variable Envelope Return Paths &-- see &url(http://cr.yp.to/proto/verp.txt) &--
31197are a way of helping mailing list administrators discover which subscription
31198address is the cause of a particular delivery failure. The idea is to encode
31199the original recipient address in the outgoing envelope sender address, so that
31200if the message is forwarded by another host and then subsequently bounces, the
31201original recipient can be extracted from the recipient address of the bounce.
31202
31203.oindex &%errors_to%&
31204.oindex &%return_path%&
31205Envelope sender addresses can be modified by Exim using two different
31206facilities: the &%errors_to%& option on a router (as shown in previous mailing
31207list examples), or the &%return_path%& option on a transport. The second of
31208these is effective only if the message is successfully delivered to another
31209host; it is not used for errors detected on the local host (see the description
31210of &%return_path%& in chapter &<<CHAPtransportgeneric>>&). Here is an example
31211of the use of &%return_path%& to implement VERP on an &(smtp)& transport:
31212.code
31213verp_smtp:
31214 driver = smtp
31215 max_rcpt = 1
31216 return_path = \
31217 ${if match {$return_path}{^(.+?)-request@your.dom.example\$}\
3cb1b51e 31218 {$1-request+$local_part=$domain@your.dom.example}fail}
4f578862
PH
31219.endd
31220This has the effect of rewriting the return path (envelope sender) on outgoing
31221SMTP messages, if the local part of the original return path ends in
31222&"-request"&, and the domain is &'your.dom.example'&. The rewriting inserts the
31223local part and domain of the recipient into the return path. Suppose, for
31224example, that a message whose return path has been set to
31225&'somelist-request@your.dom.example'& is sent to
31226&'subscriber@other.dom.example'&. In the transport, the return path is
31227rewritten as
31228.code
3cb1b51e 31229somelist-request+subscriber=other.dom.example@your.dom.example
4f578862 31230.endd
f89d2485 31231.vindex "&$local_part$&"
db9452a9
PH
31232For this to work, you must tell Exim to send multiple copies of messages that
31233have more than one recipient, so that each copy has just one recipient. This is
4f578862
PH
31234achieved by setting &%max_rcpt%& to 1. Without this, a single copy of a message
31235might be sent to several different recipients in the same domain, in which case
31236&$local_part$& is not available in the transport, because it is not unique.
31237
31238Unless your host is doing nothing but mailing list deliveries, you should
31239probably use a separate transport for the VERP deliveries, so as not to use
db9452a9
PH
31240extra resources in making one-per-recipient copies for other deliveries. This
31241can easily be done by expanding the &%transport%& option in the router:
4f578862
PH
31242.code
31243dnslookup:
31244 driver = dnslookup
31245 domains = ! +local_domains
31246 transport = \
31247 ${if match {$return_path}{^(.+?)-request@your.dom.example\$}\
31248 {verp_smtp}{remote_smtp}}
31249 no_more
31250.endd
31251If you want to change the return path using &%errors_to%& in a router instead
31252of using &%return_path%& in the transport, you need to set &%errors_to%& on all
31253routers that handle mailing list addresses. This will ensure that all delivery
31254errors, including those detected on the local host, are sent to the VERP
31255address.
31256
31257On a host that does no local deliveries and has no manual routing, only the
31258&(dnslookup)& router needs to be changed. A special transport is not needed for
31259SMTP deliveries. Every mailing list recipient has its own return path value,
31260and so Exim must hand them to the transport one at a time. Here is an example
31261of a &(dnslookup)& router that implements VERP:
31262.code
31263verp_dnslookup:
31264 driver = dnslookup
31265 domains = ! +local_domains
31266 transport = remote_smtp
31267 errors_to = \
31268 ${if match {$return_path}{^(.+?)-request@your.dom.example\$}}
3cb1b51e 31269 {$1-request+$local_part=$domain@your.dom.example}fail}
4f578862
PH
31270 no_more
31271.endd
31272Before you start sending out messages with VERPed return paths, you must also
31273configure Exim to accept the bounce messages that come back to those paths.
31274Typically this is done by setting a &%local_part_suffix%& option for a
31275router, and using this to route the messages to wherever you want to handle
31276them.
31277
31278The overhead incurred in using VERP depends very much on the size of the
31279message, the number of recipient addresses that resolve to the same remote
31280host, and the speed of the connection over which the message is being sent. If
31281a lot of addresses resolve to the same host and the connection is slow, sending
31282a separate copy of the message for each address may take substantially longer
31283than sending a single copy with many recipients (for which VERP cannot be
31284used).
4f578862
PH
31285
31286
31287
31288
31289
31290
9b371988
PH
31291.section "Virtual domains" "SECTvirtualdomains"
31292.cindex "virtual domains"
31293.cindex "domain" "virtual"
31294The phrase &'virtual domain'& is unfortunately used with two rather different
168e428f
PH
31295meanings:
31296
9b371988
PH
31297.ilist
31298A domain for which there are no real mailboxes; all valid local parts are
168e428f 31299aliases for other email addresses. Common examples are organizational
9b371988
PH
31300top-level domains and &"vanity"& domains.
31301.next
31302One of a number of independent domains that are all handled by the same host,
168e428f
PH
31303with mailboxes on that host, but where the mailbox owners do not necessarily
31304have login accounts on that host.
9b371988 31305.endlist
168e428f 31306
9b371988
PH
31307The first usage is probably more common, and does seem more &"virtual"& than
31308the second. This kind of domain can be handled in Exim with a straightforward
168e428f
PH
31309aliasing router. One approach is to create a separate alias file for each
31310virtual domain. Exim can test for the existence of the alias file to determine
9b371988 31311whether the domain exists. The &(dsearch)& lookup type is useful here, leading
168e428f 31312to a router of this form:
9b371988
PH
31313.code
31314virtual:
31315 driver = redirect
31316 domains = dsearch;/etc/mail/virtual
31317 data = ${lookup{$local_part}lsearch{/etc/mail/virtual/$domain}}
31318 no_more
31319.endd
31320The &%domains%& option specifies that the router is to be skipped, unless there
31321is a file in the &_/etc/mail/virtual_& directory whose name is the same as the
168e428f 31322domain that is being processed. When the router runs, it looks up the local
9b371988
PH
31323part in the file to find a new address (or list of addresses). The &%no_more%&
31324setting ensures that if the lookup fails (leading to &%data%& being an empty
168e428f
PH
31325string), Exim gives up on the address without trying any subsequent routers.
31326
31327This one router can handle all the virtual domains because the alias file names
31328follow a fixed pattern. Permissions can be arranged so that appropriate people
31329can edit the different alias files. A successful aliasing operation results in
31330a new envelope recipient address, which is then routed from scratch.
31331
9b371988 31332The other kind of &"virtual"& domain can also be handled in a straightforward
168e428f
PH
31333way. One approach is to create a file for each domain containing a list of
31334valid local parts, and use it in a router like this:
9b371988
PH
31335.code
31336my_domains:
31337 driver = accept
31338 domains = dsearch;/etc/mail/domains
31339 local_parts = lsearch;/etc/mail/domains/$domain
31340 transport = my_mailboxes
31341.endd
168e428f 31342The address is accepted if there is a file for the domain, and the local part
9b371988
PH
31343can be found in the file. The &%domains%& option is used to check for the
31344file's existence because &%domains%& is tested before the &%local_parts%&
31345option (see section &<<SECTrouprecon>>&). You cannot use &%require_files%&,
31346because that option is tested after &%local_parts%&. The transport is as
31347follows:
31348.code
31349my_mailboxes:
31350 driver = appendfile
31351 file = /var/mail/$domain/$local_part
31352 user = mail
31353.endd
31354This uses a directory of mailboxes for each domain. The &%user%& setting is
168e428f
PH
31355required, to specify which uid is to be used for writing to the mailboxes.
31356
31357The configuration shown here is just one example of how you might support this
31358requirement. There are many other ways this kind of configuration can be set
31359up, for example, by using a database instead of separate files to hold all the
31360information about the domains.
31361
31362
31363
9b371988
PH
31364.section "Multiple user mailboxes" "SECTmulbox"
31365.cindex "multiple mailboxes"
31366.cindex "mailbox" "multiple"
31367.cindex "local part" "prefix"
31368.cindex "local part" "suffix"
168e428f
PH
31369Heavy email users often want to operate with multiple mailboxes, into which
31370incoming mail is automatically sorted. A popular way of handling this is to
31371allow users to use multiple sender addresses, so that replies can easily be
31372identified. Users are permitted to add prefixes or suffixes to their local
31373parts for this purpose. The wildcard facility of the generic router options
9b371988 31374&%local_part_prefix%& and &%local_part_suffix%& can be used for this. For
168e428f 31375example, consider this router:
9b371988
PH
31376.code
31377userforward:
31378 driver = redirect
31379 check_local_user
31380 file = $home/.forward
31381 local_part_suffix = -*
31382 local_part_suffix_optional
31383 allow_filter
31384.endd
f89d2485 31385.vindex "&$local_part_suffix$&"
9b371988
PH
31386It runs a user's &_.forward_& file for all local parts of the form
31387&'username-*'&. Within the filter file the user can distinguish different
31388cases by testing the variable &$local_part_suffix$&. For example:
31389.code
31390if $local_part_suffix contains -special then
31391save /home/$local_part/Mail/special
31392endif
31393.endd
168e428f
PH
31394If the filter file does not exist, or does not deal with such addresses, they
31395fall through to subsequent routers, and, assuming no subsequent use of the
9b371988 31396&%local_part_suffix%& option is made, they presumably fail. Thus, users have
168e428f
PH
31397control over which suffixes are valid.
31398
31399Alternatively, a suffix can be used to trigger the use of a different
9b371988 31400&_.forward_& file &-- which is the way a similar facility is implemented in
168e428f 31401another MTA:
9b371988
PH
31402.code
31403userforward:
31404 driver = redirect
31405 check_local_user
31406 file = $home/.forward$local_part_suffix
31407 local_part_suffix = -*
31408 local_part_suffix_optional
31409 allow_filter
31410.endd
31411If there is no suffix, &_.forward_& is used; if the suffix is &'-special'&, for
31412example, &_.forward-special_& is used. Once again, if the appropriate file
168e428f
PH
31413does not exist, or does not deal with the address, it is passed on to
31414subsequent routers, which could, if required, look for an unqualified
9b371988 31415&_.forward_& file to use as a default.
168e428f
PH
31416
31417
31418
f89d2485 31419.section "Simplified vacation processing" "SECID244"
9b371988
PH
31420.cindex "vacation processing"
31421The traditional way of running the &'vacation'& program is for a user to set up
31422a pipe command in a &_.forward_& file
31423(see section &<<SECTspecitredli>>& for syntax details).
168e428f
PH
31424This is prone to error by inexperienced users. There are two features of Exim
31425that can be used to make this process simpler for users:
31426
9b371988
PH
31427.ilist
31428A local part prefix such as &"vacation-"& can be specified on a router which
31429can cause the message to be delivered directly to the &'vacation'& program, or
31430alternatively can use Exim's &(autoreply)& transport. The contents of a user's
31431&_.forward_& file are then much simpler. For example:
31432.code
31433spqr, vacation-spqr
31434.endd
31435.next
31436The &%require_files%& generic router option can be used to trigger a
168e428f 31437vacation delivery by checking for the existence of a certain file in the
9b371988 31438user's home directory. The &%unseen%& generic option should also be used, to
168e428f 31439ensure that the original delivery also proceeds. In this case, all the user has
9b371988 31440to do is to create a file called, say, &_.vacation_&, containing a vacation
168e428f 31441message.
9b371988 31442.endlist
168e428f
PH
31443
31444Another advantage of both these methods is that they both work even when the
31445use of arbitrary pipes by users is locked out.
31446
31447
31448
f89d2485 31449.section "Taking copies of mail" "SECID245"
9b371988 31450.cindex "message" "copying every"
168e428f
PH
31451Some installations have policies that require archive copies of all messages to
31452be made. A single copy of each message can easily be taken by an appropriate
31453command in a system filter, which could, for example, use a different file for
31454each day's messages.
31455
31456There is also a shadow transport mechanism that can be used to take copies of
31457messages that are successfully delivered by local transports, one copy per
9b371988 31458delivery. This could be used, &'inter alia'&, to implement automatic
168e428f
PH
31459notification of delivery by sites that insist on doing such things.
31460
31461
31462
f89d2485 31463.section "Intermittently connected hosts" "SECID246"
9b371988 31464.cindex "intermittently connected hosts"
168e428f
PH
31465It has become quite common (because it is cheaper) for hosts to connect to the
31466Internet periodically rather than remain connected all the time. The normal
31467arrangement is that mail for such hosts accumulates on a system that is
31468permanently connected.
31469
31470Exim was designed for use on permanently connected hosts, and so it is not
31471particularly well-suited to use in an intermittently connected environment.
31472Nevertheless there are some features that can be used.
31473
31474
f89d2485 31475.section "Exim on the upstream server host" "SECID247"
168e428f
PH
31476It is tempting to arrange for incoming mail for the intermittently connected
31477host to remain on Exim's queue until the client connects. However, this
31478approach does not scale very well. Two different kinds of waiting message are
9b371988 31479being mixed up in the same queue &-- those that cannot be delivered because of
168e428f
PH
31480some temporary problem, and those that are waiting for their destination host
31481to connect. This makes it hard to manage the queue, as well as wasting
31482resources, because each queue runner scans the entire queue.
31483
31484A better approach is to separate off those messages that are waiting for an
31485intermittently connected host. This can be done by delivering these messages
9b371988 31486into local files in batch SMTP, &"mailstore"&, or other envelope-preserving
168e428f
PH
31487format, from where they are transmitted by other software when their
31488destination connects. This makes it easy to collect all the mail for one host
31489in a single directory, and to apply local timeout rules on a per-message basis
31490if required.
31491
31492On a very small scale, leaving the mail on Exim's queue can be made to work. If
31493you are doing this, you should configure Exim with a long retry period for the
31494intermittent host. For example:
9b371988
PH
31495.code
31496cheshire.wonderland.fict.example * F,5d,24h
31497.endd
168e428f
PH
31498This stops a lot of failed delivery attempts from occurring, but Exim remembers
31499which messages it has queued up for that host. Once the intermittent host comes
9b371988
PH
31500online, forcing delivery of one message (either by using the &%-M%& or &%-R%&
31501options, or by using the ETRN SMTP command (see section &<<SECTETRN>>&)
168e428f
PH
31502causes all the queued up messages to be delivered, often down a single SMTP
31503connection. While the host remains connected, any new messages get delivered
31504immediately.
31505
31506If the connecting hosts do not have fixed IP addresses, that is, if a host is
31507issued with a different IP address each time it connects, Exim's retry
31508mechanisms on the holding host get confused, because the IP address is normally
31509used as part of the key string for holding retry information. This can be
9b371988 31510avoided by unsetting &%retry_include_ip_address%& on the &(smtp)& transport.
168e428f
PH
31511Since this has disadvantages for permanently connected hosts, it is best to
31512arrange a separate transport for the intermittently connected ones.
31513
31514
31515
f89d2485 31516.section "Exim on the intermittently connected client host" "SECID248"
9b371988 31517The value of &%smtp_accept_queue_per_connection%& should probably be
168e428f
PH
31518increased, or even set to zero (that is, disabled) on the intermittently
31519connected host, so that all incoming messages down a single connection get
31520delivered immediately.
31521
9b371988
PH
31522.cindex "SMTP" "passed connection"
31523.cindex "SMTP" "multiple deliveries"
31524.cindex "multiple SMTP deliveries"
168e428f
PH
31525Mail waiting to be sent from an intermittently connected host will probably
31526not have been routed, because without a connection DNS lookups are not
31527possible. This means that if a normal queue run is done at connection time,
31528each message is likely to be sent in a separate SMTP session. This can be
31529avoided by starting the queue run with a command line option beginning with
9b371988
PH
31530&%-qq%& instead of &%-q%&. In this case, the queue is scanned twice. In the
31531first pass, routing is done but no deliveries take place. The second pass is a
31532normal queue run; since all the messages have been previously routed, those
31533destined for the same host are likely to get sent as multiple deliveries in a
31534single SMTP connection.
168e428f
PH
31535
31536
31537
9b371988
PH
31538. ////////////////////////////////////////////////////////////////////////////
31539. ////////////////////////////////////////////////////////////////////////////
168e428f 31540
9b371988
PH
31541.chapter "Using Exim as a non-queueing client" "CHAPnonqueueing" &&&
31542 "Exim as a non-queueing client"
f89d2485
PH
31543.cindex "client, non-queueing"
31544.cindex "smart host" "suppressing queueing"
168e428f 31545On a personal computer, it is a common requirement for all
9b371988 31546email to be sent to a &"smart host"&. There are plenty of MUAs that can be
168e428f
PH
31547configured to operate that way, for all the popular operating systems.
31548However, there are some MUAs for Unix-like systems that cannot be so
31549configured: they submit messages using the command line interface of
9b371988 31550&_/usr/sbin/sendmail_&. Furthermore, utility programs such as &'cron'& submit
168e428f
PH
31551messages this way.
31552
31553If the personal computer runs continuously, there is no problem, because it can
31554run a conventional MTA that handles delivery to the smart host, and deal with
31555any delays via its queueing mechanism. However, if the computer does not run
31556continuously or runs different operating systems at different times, queueing
31557email is not desirable.
31558
31559There is therefore a requirement for something that can provide the
9b371988 31560&_/usr/sbin/sendmail_& interface but deliver messages to a smart host without
168e428f
PH
31561any queueing or retrying facilities. Furthermore, the delivery to the smart
31562host should be synchronous, so that if it fails, the sending MUA is immediately
31563informed. In other words, we want something that extends an MUA that submits
31564to a local MTA via the command line so that it behaves like one that submits
31565to a remote smart host using TCP/SMTP.
31566
9b371988 31567There are a number of applications (for example, there is one called &'ssmtp'&)
168e428f
PH
31568that do this job. However, people have found them to be lacking in various
31569ways. For instance, you might want to allow aliasing and forwarding to be done
31570before sending a message to the smart host.
31571
31572Exim already had the necessary infrastructure for doing this job. Just a few
31573tweaks were needed to make it behave as required, though it is somewhat of an
31574overkill to use a fully-featured MTA for this purpose.
31575
0a4e3112 31576.oindex "&%mua_wrapper%&"
9b371988
PH
31577There is a Boolean global option called &%mua_wrapper%&, defaulting false.
31578Setting &%mua_wrapper%& true causes Exim to run in a special mode where it
31579assumes that it is being used to &"wrap"& a command-line MUA in the manner
31580just described. As well as setting &%mua_wrapper%&, you also need to provide a
168e428f
PH
31581compatible router and transport configuration. Typically there will be just one
31582router and one transport, sending everything to a smart host.
31583
31584When run in MUA wrapping mode, the behaviour of Exim changes in the
31585following ways:
31586
9b371988
PH
31587.ilist
31588A daemon cannot be run, nor will Exim accept incoming messages from &'inetd'&.
168e428f 31589In other words, the only way to submit messages is via the command line.
9b371988 31590.next
f89d2485 31591Each message is synchronously delivered as soon as it is received (&%-odi%& is
9b371988
PH
31592assumed). All queueing options (&%queue_only%&, &%queue_smtp_domains%&,
31593&%control%& in an ACL, etc.) are quietly ignored. The Exim reception process
31594does not finish until the delivery attempt is complete. If the delivery is
168e428f 31595successful, a zero return code is given.
9b371988
PH
31596.next
31597Address redirection is permitted, but the final routing for all addresses must
168e428f
PH
31598be to the same remote transport, and to the same list of hosts. Furthermore,
31599the return address (envelope sender) must be the same for all recipients, as
31600must any added or deleted header lines. In other words, it must be possible to
31601deliver the message in a single SMTP transaction, however many recipients there
31602are.
9b371988
PH
31603.next
31604If these conditions are not met, or if routing any address results in a
168e428f
PH
31605failure or defer status, or if Exim is unable to deliver all the recipients
31606successfully to one of the smart hosts, delivery of the entire message fails.
9b371988
PH
31607.next
31608Because no queueing is allowed, all failures are treated as permanent; there
31609is no distinction between 4&'xx'& and 5&'xx'& SMTP response codes from the
168e428f
PH
31610smart host. Furthermore, because only a single yes/no response can be given to
31611the caller, it is not possible to deliver to some recipients and not others. If
31612there is an error (temporary or permanent) for any recipient, all are failed.
9b371988
PH
31613.next
31614If more than one smart host is listed, Exim will try another host after a
168e428f
PH
31615connection failure or a timeout, in the normal way. However, if this kind of
31616failure happens for all the hosts, the delivery fails.
9b371988
PH
31617.next
31618When delivery fails, an error message is written to the standard error stream
168e428f
PH
31619(as well as to Exim's log), and Exim exits to the caller with a return code
31620value 1. The message is expunged from Exim's spool files. No bounce messages
31621are ever generated.
9b371988
PH
31622.next
31623No retry data is maintained, and any retry rules are ignored.
31624.next
31625A number of Exim options are overridden: &%deliver_drop_privilege%& is forced
595028e4 31626true, &%max_rcpt%& in the &(smtp)& transport is forced to &"unlimited"&,
9b371988
PH
31627&%remote_max_parallel%& is forced to one, and fallback hosts are ignored.
31628.endlist
168e428f
PH
31629
31630The overall effect is that Exim makes a single synchronous attempt to deliver
31631the message, failing if there is any kind of problem. Because no local
31632deliveries are done and no daemon can be run, Exim does not need root
9b371988
PH
31633privilege. It should be possible to run it setuid to &'exim'& instead of setuid
31634to &'root'&. See section &<<SECTrunexiwitpri>>& for a general discussion about
31635the advantages and disadvantages of running without root privilege.
168e428f
PH
31636
31637
31638
31639
9b371988
PH
31640. ////////////////////////////////////////////////////////////////////////////
31641. ////////////////////////////////////////////////////////////////////////////
168e428f 31642
9b371988 31643.chapter "Log files" "CHAPlog"
4f578862 31644.scindex IIDloggen "log" "general description"
9b371988 31645.cindex "log" "types of"
168e428f
PH
31646Exim writes three different logs, referred to as the main log, the reject log,
31647and the panic log:
31648
9b371988
PH
31649.ilist
31650.cindex "main log"
168e428f
PH
31651The main log records the arrival of each message and each delivery in a single
31652line in each case. The format is as compact as possible, in an attempt to keep
31653down the size of log files. Two-character flag sequences make it easy to pick
31654out these lines. A number of other events are recorded in the main log. Some of
9b371988
PH
31655them are optional, in which case the &%log_selector%& option controls whether
31656they are included or not. A Perl script called &'eximstats'&, which does simple
168e428f 31657analysis of main log files, is provided in the Exim distribution (see section
9b371988
PH
31658&<<SECTmailstat>>&).
31659.next
31660.cindex "reject log"
168e428f
PH
31661The reject log records information from messages that are rejected as a result
31662of a configuration option (that is, for policy reasons).
31663The first line of each rejection is a copy of the line that is also written to
31664the main log. Then, if the message's header has been read at the time the log
31665is written, its contents are written to this log. Only the original header
31666lines are available; header lines added by ACLs are not logged. You can use the
31667reject log to check that your policy controls are working correctly; on a busy
31668host this may be easier than scanning the main log for rejection messages. You
9b371988
PH
31669can suppress the writing of the reject log by setting &%write_rejectlog%&
31670false.
31671.next
31672.cindex "panic log"
31673.cindex "system log"
168e428f
PH
31674When certain serious errors occur, Exim writes entries to its panic log. If the
31675error is sufficiently disastrous, Exim bombs out afterwards. Panic log entries
31676are usually written to the main log as well, but can get lost amid the mass of
31677other entries. The panic log should be empty under normal circumstances. It is
9b371988 31678therefore a good idea to check it (or to have a &'cron'& script check it)
168e428f
PH
31679regularly, in order to become aware of any problems. When Exim cannot open its
31680panic log, it tries as a last resort to write to the system log (syslog). This
31681is opened with LOG_PID+LOG_CONS and the facility code of LOG_MAIL. The
31682message itself is written at priority LOG_CRIT.
9b371988
PH
31683.endlist
31684
31685Every log line starts with a timestamp, in the format shown in the following
31686example. Note that many of the examples shown in this chapter are line-wrapped.
31687In the log file, this would be all on one line:
31688.code
316892001-09-16 16:09:47 SMTP connection from [127.0.0.1] closed
31690 by QUIT
31691.endd
168e428f
PH
31692By default, the timestamps are in the local timezone. There are two
31693ways of changing this:
31694
9b371988
PH
31695.ilist
31696You can set the &%timezone%& option to a different time zone; in particular, if
168e428f 31697you set
9b371988
PH
31698.code
31699timezone = UTC
31700.endd
168e428f 31701the timestamps will be in UTC (aka GMT).
9b371988
PH
31702.next
31703If you set &%log_timezone%& true, the time zone is added to the timestamp, for
168e428f 31704example:
9b371988
PH
31705.code
317062003-04-25 11:17:07 +0100 Start queue run: pid=12762
31707.endd
31708.endlist
168e428f 31709
f89d2485
PH
31710.cindex "log" "process ids in"
31711.cindex "pid (process id)" "in log lines"
31712Exim does not include its process id in log lines by default, but you can
31713request that it does so by specifying the &`pid`& log selector (see section
31714&<<SECTlogselector>>&). When this is set, the process id is output, in square
31715brackets, immediately after the time and date.
f89d2485 31716
168e428f
PH
31717
31718
31719
9b371988
PH
31720.section "Where the logs are written" "SECTwhelogwri"
31721.cindex "log" "destination"
31722.cindex "log" "to file"
31723.cindex "log" "to syslog"
31724.cindex "syslog"
168e428f
PH
31725The logs may be written to local files, or to syslog, or both. However, it
31726should be noted that many syslog implementations use UDP as a transport, and
31727are therefore unreliable in the sense that messages are not guaranteed to
31728arrive at the loghost, nor is the ordering of messages necessarily maintained.
31729It has also been reported that on large log files (tens of megabytes) you may
9b371988
PH
31730need to tweak syslog to prevent it syncing the file with each write &-- on
31731Linux this has been seen to make syslog take 90% plus of CPU time.
168e428f
PH
31732
31733The destination for Exim's logs is configured by setting LOG_FILE_PATH in
9b371988 31734&_Local/Makefile_& or by setting &%log_file_path%& in the run time
168e428f
PH
31735configuration. This latter string is expanded, so it can contain, for example,
31736references to the host name:
9b371988
PH
31737.code
31738log_file_path = /var/log/$primary_hostname/exim_%slog
31739.endd
31740It is generally advisable, however, to set the string in &_Local/Makefile_&
168e428f
PH
31741rather than at run time, because then the setting is available right from the
31742start of Exim's execution. Otherwise, if there's something it wants to log
31743before it has read the configuration file (for example, an error in the
31744configuration file) it will not use the path you want, and may not be able to
31745log at all.
31746
9b371988 31747The value of LOG_FILE_PATH or &%log_file_path%& is a colon-separated
168e428f
PH
31748list, currently limited to at most two items. This is one option where the
31749facility for changing a list separator may not be used. The list must always be
9b371988
PH
31750colon-separated. If an item in the list is &"syslog"& then syslog is used;
31751otherwise the item must either be an absolute path, containing &`%s`& at the
31752point where &"main"&, &"reject"&, or &"panic"& is to be inserted, or be empty,
168e428f
PH
31753implying the use of a default path.
31754
31755When Exim encounters an empty item in the list, it searches the list defined by
31756LOG_FILE_PATH, and uses the first item it finds that is neither empty nor
9b371988
PH
31757&"syslog"&. This means that an empty item in &%log_file_path%& can be used to
31758mean &"use the path specified at build time"&. It no such item exists, log
31759files are written in the &_log_& subdirectory of the spool directory. This is
168e428f 31760equivalent to the setting:
9b371988
PH
31761.code
31762log_file_path = $spool_directory/log/%slog
31763.endd
168e428f
PH
31764If you do not specify anything at build time or run time, that is where the
31765logs are written.
31766
9b371988
PH
31767A log file path may also contain &`%D`& if datestamped log file names are in
31768use &-- see section &<<SECTdatlogfil>>& below.
168e428f
PH
31769
31770Here are some examples of possible settings:
9b371988
PH
31771.display
31772&`LOG_FILE_PATH=syslog `& syslog only
31773&`LOG_FILE_PATH=:syslog `& syslog and default path
31774&`LOG_FILE_PATH=syslog : /usr/log/exim_%s `& syslog and specified path
31775&`LOG_FILE_PATH=/usr/log/exim_%s `& specified path only
31776.endd
168e428f
PH
31777If there are more than two paths in the list, the first is used and a panic
31778error is logged.
31779
31780
31781
f89d2485 31782.section "Logging to local files that are periodically &""cycled""&" "SECID285"
9b371988
PH
31783.cindex "log" "cycling local files"
31784.cindex "cycling logs"
31785.cindex "&'exicyclog'&"
31786.cindex "log" "local files; writing to"
f89d2485 31787Some operating systems provide centralized and standardized methods for cycling
9b371988
PH
31788log files. For those that do not, a utility script called &'exicyclog'& is
31789provided (see section &<<SECTcyclogfil>>&). This renames and compresses the
31790main and reject logs each time it is called. The maximum number of old logs to
31791keep can be set. It is suggested this script is run as a daily &'cron'& job.
168e428f
PH
31792
31793An Exim delivery process opens the main log when it first needs to write to it,
9b371988 31794and it keeps the file open in case subsequent entries are required &-- for
168e428f
PH
31795example, if a number of different deliveries are being done for the same
31796message. However, remote SMTP deliveries can take a long time, and this means
9b371988 31797that the file may be kept open long after it is renamed if &'exicyclog'& or
168e428f
PH
31798something similar is being used to rename log files on a regular basis. To
31799ensure that a switch of log files is noticed as soon as possible, Exim calls
9b371988 31800&[stat()]& on the main log's name before reusing an open file, and if the file
168e428f
PH
31801does not exist, or its inode has changed, the old file is closed and Exim
31802tries to open the main log from scratch. Thus, an old log file may remain open
31803for quite some time, but no Exim processes should write to it once it has been
31804renamed.
31805
31806
31807
9b371988
PH
31808.section "Datestamped log files" "SECTdatlogfil"
31809.cindex "log" "datestamped files"
168e428f
PH
31810Instead of cycling the main and reject log files by renaming them
31811periodically, some sites like to use files whose names contain a datestamp,
9b371988 31812for example, &_mainlog-20031225_&. The datestamp is in the form &_yyyymmdd_&.
168e428f 31813Exim has support for this way of working. It is enabled by setting the
9b371988 31814&%log_file_path%& option to a path that includes &`%D`& at the point where the
168e428f 31815datestamp is required. For example:
9b371988
PH
31816.code
31817log_file_path = /var/spool/exim/log/%slog-%D
31818log_file_path = /var/log/exim-%s-%D.log
31819log_file_path = /var/spool/exim/log/%D-%slog
31820.endd
31821As before, &`%s`& is replaced by &"main"& or &"reject"&; the following are
31822examples of names generated by the above examples:
31823.code
31824/var/spool/exim/log/mainlog-20021225
31825/var/log/exim-reject-20021225.log
31826/var/spool/exim/log/20021225-mainlog
31827.endd
168e428f
PH
31828When this form of log file is specified, Exim automatically switches to new
31829files at midnight. It does not make any attempt to compress old logs; you
31830will need to write your own script if you require this. You should not
9b371988 31831run &'exicyclog'& with this form of logging.
168e428f 31832
9b371988 31833The location of the panic log is also determined by &%log_file_path%&, but it
168e428f 31834is not datestamped, because rotation of the panic log does not make sense.
9b371988 31835When generating the name of the panic log, &`%D`& is removed from the string.
168e428f
PH
31836In addition, if it immediately follows a slash, a following non-alphanumeric
31837character is removed; otherwise a preceding non-alphanumeric character is
31838removed. Thus, the three examples above would give these panic log names:
9b371988
PH
31839.code
31840/var/spool/exim/log/paniclog
31841/var/log/exim-panic.log
31842/var/spool/exim/log/paniclog
31843.endd
168e428f
PH
31844
31845
f89d2485 31846.section "Logging to syslog" "SECID249"
9b371988 31847.cindex "log" "syslog; writing to"
168e428f 31848The use of syslog does not change what Exim logs or the format of its messages,
9b371988 31849except in one respect. If &%syslog_timestamp%& is set false, the timestamps on
168e428f
PH
31850Exim's log lines are omitted when these lines are sent to syslog. Apart from
31851that, the same strings are written to syslog as to log files. The syslog
9b371988
PH
31852&"facility"& is set to LOG_MAIL, and the program name to &"exim"&
31853by default, but you can change these by setting the &%syslog_facility%& and
31854&%syslog_processname%& options, respectively. If Exim was compiled with
31855SYSLOG_LOG_PID set in &_Local/Makefile_& (this is the default in
31856&_src/EDITME_&), then, on systems that permit it (all except ULTRIX), the
31857LOG_PID flag is set so that the &[syslog()]& call adds the pid as well as
168e428f
PH
31858the time and host name to each line.
31859The three log streams are mapped onto syslog priorities as follows:
31860
9b371988
PH
31861.ilist
31862&'mainlog'& is mapped to LOG_INFO
31863.next
31864&'rejectlog'& is mapped to LOG_NOTICE
31865.next
31866&'paniclog'& is mapped to LOG_ALERT
31867.endlist
168e428f 31868
9b371988
PH
31869Many log lines are written to both &'mainlog'& and &'rejectlog'&, and some are
31870written to both &'mainlog'& and &'paniclog'&, so there will be duplicates if
168e428f 31871these are routed by syslog to the same place. You can suppress this duplication
9b371988 31872by setting &%syslog_duplication%& false.
168e428f 31873
9b371988 31874Exim's log lines can sometimes be very long, and some of its &'rejectlog'&
168e428f 31875entries contain multiple lines when headers are included. To cope with both
9b371988 31876these cases, entries written to syslog are split into separate &[syslog()]&
168e428f
PH
31877calls at each internal newline, and also after a maximum of
31878870 data characters. (This allows for a total syslog line length of 1024, when
31879additions such as timestamps are added.) If you are running a syslog
31880replacement that can handle lines longer than the 1024 characters allowed by
31881RFC 3164, you should set
9b371988
PH
31882.code
31883SYSLOG_LONG_LINES=yes
31884.endd
31885in &_Local/Makefile_& before building Exim. That stops Exim from splitting long
31886lines, but it still splits at internal newlines in &'reject'& log entries.
168e428f
PH
31887
31888To make it easy to re-assemble split lines later, each component of a split
9b371988
PH
31889entry starts with a string of the form [<&'n'&>/<&'m'&>] or [<&'n'&>\<&'m'&>]
31890where <&'n'&> is the component number and <&'m'&> is the total number of
31891components in the entry. The / delimiter is used when the line was split
31892because it was too long; if it was split because of an internal newline, the \
31893delimiter is used. For example, supposing the length limit to be 50 instead of
31894870, the following would be the result of a typical rejection message to
31895&'mainlog'& (LOG_INFO), each line in addition being preceded by the time, host
31896name, and pid as added by syslog:
31897.code
31898[1/5] 2002-09-16 16:09:43 16RdAL-0006pc-00 rejected from
31899[2/5] [127.0.0.1] (ph10): syntax error in 'From' header
31900[3/5] when scanning for sender: missing or malformed lo
31901[4/5] cal part in "<>" (envelope sender is <ph10@cam.exa
31902[5/5] mple>)
31903.endd
31904The same error might cause the following lines to be written to &"rejectlog"&
168e428f 31905(LOG_NOTICE):
9b371988
PH
31906.code
31907[1/18] 2002-09-16 16:09:43 16RdAL-0006pc-00 rejected fro
31908[2/18] m [127.0.0.1] (ph10): syntax error in 'From' head
31909[3/18] er when scanning for sender: missing or malformed
31910[4/18] local part in "<>" (envelope sender is <ph10@cam
31911[5\18] .example>)
31912[6\18] Recipients: ph10@some.domain.cam.example
31913[7\18] P Received: from [127.0.0.1] (ident=ph10)
31914[8\18] by xxxxx.cam.example with smtp (Exim 4.00)
31915[9\18] id 16RdAL-0006pc-00
31916[10/18] for ph10@cam.example; Mon, 16 Sep 2002 16:
31917[11\18] 09:43 +0100
31918[12\18] F From: <>
31919[13\18] Subject: this is a test header
31920[18\18] X-something: this is another header
31921[15/18] I Message-Id: <E16RdAL-0006pc-00@xxxxx.cam.examp
31922[16\18] le>
31923[17\18] B Bcc:
31924[18/18] Date: Mon, 16 Sep 2002 16:09:43 +0100
31925.endd
168e428f
PH
31926Log lines that are neither too long nor contain newlines are written to syslog
31927without modification.
31928
31929If only syslog is being used, the Exim monitor is unable to provide a log tail
9b371988 31930display, unless syslog is routing &'mainlog'& to a file on the local host and
168e428f
PH
31931the environment variable EXIMON_LOG_FILE_PATH is set to tell the monitor
31932where it is.
31933
31934
31935
f89d2485 31936.section "Log line flags" "SECID250"
168e428f
PH
31937One line is written to the main log for each message received, and for each
31938successful, unsuccessful, and delayed delivery. These lines can readily be
31939picked out by the distinctive two-character flags that immediately follow the
31940timestamp. The flags are:
9b371988
PH
31941.display
31942&`<=`& message arrival
31943&`=>`& normal message delivery
31944&`->`& additional address in same delivery
31945&`*>`& delivery suppressed by &%-N%&
31946&`**`& delivery failed; address bounced
31947&`==`& delivery deferred; temporary problem
31948.endd
31949
31950
f89d2485 31951.section "Logging message reception" "SECID251"
9b371988 31952.cindex "log" "reception line"
168e428f
PH
31953The format of the single-line entry in the main log that is written for every
31954message received is shown in the basic example below, which is split over
31955several lines in order to fit it on the page:
9b371988
PH
31956.code
319572002-10-31 08:57:53 16ZCW1-0005MB-00 <= kryten@dwarf.fict.example
31958 H=mailer.fict.example [192.168.123.123] U=exim
31959 P=smtp S=5678 id=<incoming message id>
31960.endd
31961The address immediately following &"<="& is the envelope sender address. A
31962bounce message is shown with the sender address &"<>"&, and if it is locally
31963generated, this is followed by an item of the form
31964.code
31965R=<message id>
31966.endd
168e428f
PH
31967which is a reference to the message that caused the bounce to be sent.
31968
9b371988
PH
31969.cindex "HELO"
31970.cindex "EHLO"
168e428f
PH
31971For messages from other hosts, the H and U fields identify the remote host and
31972record the RFC 1413 identity of the user that sent the message, if one was
31973received. The number given in square brackets is the IP address of the sending
31974host. If there is a single, unparenthesized host name in the H field, as
31975above, it has been verified to correspond to the IP address (see the
9b371988 31976&%host_lookup%& option). If the name is in parentheses, it was the name quoted
168e428f
PH
31977by the remote host in the SMTP HELO or EHLO command, and has not been
31978verified. If verification yields a different name to that given for HELO or
31979EHLO, the verified name appears first, followed by the HELO or EHLO
31980name in parentheses.
31981
31982Misconfigured hosts (and mail forgers) sometimes put an IP address, with or
31983without brackets, in the HELO or EHLO command, leading to entries in
31984the log containing text like these examples:
9b371988
PH
31985.code
31986H=(10.21.32.43) [192.168.8.34]
31987H=([10.21.32.43]) [192.168.8.34]
31988.endd
168e428f
PH
31989This can be confusing. Only the final address in square brackets can be relied
31990on.
31991
31992For locally generated messages (that is, messages not received over TCP/IP),
31993the H field is omitted, and the U field contains the login name of the caller
31994of Exim.
31995
9b371988
PH
31996.cindex "authentication" "logging"
31997.cindex "AUTH" "logging"
168e428f 31998For all messages, the P field specifies the protocol used to receive the
9b371988 31999message. This is the value that is stored in &$received_protocol$&. In the case
068aaea8
PH
32000of incoming SMTP messages, the value indicates whether or not any SMTP
32001extensions (ESMTP), encryption, or authentication were used. If the SMTP
32002session was encrypted, there is an additional X field that records the cipher
32003suite that was used.
32004
3cb1b51e 32005The protocol is set to &"esmtpsa"& or &"esmtpa"& for messages received from
068aaea8 32006hosts that have authenticated themselves using the SMTP AUTH command. The first
9b371988 32007value is used when the SMTP connection was encrypted (&"secure"&). In this case
068aaea8
PH
32008there is an additional item A= followed by the name of the authenticator that
32009was used. If an authenticated identification was set up by the authenticator's
9b371988 32010&%server_set_id%& option, this is logged too, separated by a colon from the
168e428f
PH
32011authenticator name.
32012
9b371988 32013.cindex "size" "of message"
068aaea8
PH
32014The id field records the existing message id, if present. The size of the
32015received message is given by the S field. When the message is delivered,
32016headers may be removed or added, so that the size of delivered copies of the
32017message may not correspond with this value (and indeed may be different to each
32018other).
168e428f 32019
9b371988
PH
32020The &%log_selector%& option can be used to request the logging of additional
32021data when a message is received. See section &<<SECTlogselector>>& below.
168e428f
PH
32022
32023
32024
f89d2485 32025.section "Logging deliveries" "SECID252"
9b371988 32026.cindex "log" "delivery line"
168e428f 32027The format of the single-line entry in the main log that is written for every
9b371988
PH
32028delivery is shown in one of the examples below, for local and remote
32029deliveries, respectively. Each example has been split into two lines in order
32030to fit it on the page:
32031.code
320322002-10-31 08:59:13 16ZCW1-0005MB-00 => marv
32033 <marv@hitch.fict.example> R=localuser T=local_delivery
320342002-10-31 09:00:10 16ZCW1-0005MB-00 =>
32035 monk@holistic.fict.example R=dnslookup T=remote_smtp
32036 H=holistic.fict.example [192.168.234.234]
32037.endd
168e428f
PH
32038For ordinary local deliveries, the original address is given in angle brackets
32039after the final delivery address, which might be a pipe or a file. If
32040intermediate address(es) exist between the original and the final address, the
32041last of these is given in parentheses after the final address. The R and T
32042fields record the router and transport that were used to process the address.
32043
32044If a shadow transport was run after a successful local delivery, the log line
32045for the successful delivery has an item added on the end, of the form
9b371988
PH
32046.display
32047&`ST=<`&&'shadow transport name'&&`>`&
32048.endd
168e428f
PH
32049If the shadow transport did not succeed, the error message is put in
32050parentheses afterwards.
32051
9b371988 32052.cindex "asterisk" "after IP address"
168e428f 32053When more than one address is included in a single delivery (for example, two
068aaea8 32054SMTP RCPT commands in one transaction) the second and subsequent addresses are
9b371988
PH
32055flagged with &`->`& instead of &`=>`&. When two or more messages are delivered
32056down a single SMTP connection, an asterisk follows the IP address in the log
32057lines for the second and subsequent messages.
168e428f 32058
9b371988
PH
32059The generation of a reply message by a filter file gets logged as a
32060&"delivery"& to the addressee, preceded by &">"&.
168e428f 32061
9b371988
PH
32062The &%log_selector%& option can be used to request the logging of additional
32063data when a message is delivered. See section &<<SECTlogselector>>& below.
168e428f
PH
32064
32065
f89d2485 32066.section "Discarded deliveries" "SECID253"
9b371988
PH
32067.cindex "discarded messages"
32068.cindex "message" "discarded"
32069.cindex "delivery" "discarded; logging"
32070When a message is discarded as a result of the command &"seen finish"& being
168e428f 32071obeyed in a filter file which generates no deliveries, a log entry of the form
9b371988
PH
32072.code
320732002-12-10 00:50:49 16auJc-0001UB-00 => discarded
32074 <low.club@bridge.example> R=userforward
32075.endd
168e428f 32076is written, to record why no deliveries are logged. When a message is discarded
9b371988
PH
32077because it is aliased to &":blackhole:"& the log line is like this:
32078.code
320791999-03-02 09:44:33 10HmaX-0005vi-00 => :blackhole:
32080 <hole@nowhere.example> R=blackhole_router
32081.endd
168e428f
PH
32082
32083
f89d2485 32084.section "Deferred deliveries" "SECID254"
168e428f 32085When a delivery is deferred, a line of the following form is logged:
9b371988
PH
32086.code
320872002-12-19 16:20:23 16aiQz-0002Q5-00 == marvin@endrest.example
32088 R=dnslookup T=smtp defer (146): Connection refused
32089.endd
168e428f
PH
32090In the case of remote deliveries, the error is the one that was given for the
32091last IP address that was tried. Details of individual SMTP failures are also
32092written to the log, so the above line would be preceded by something like
9b371988
PH
32093.code
320942002-12-19 16:20:23 16aiQz-0002Q5-00 Failed to connect to
32095 mail1.endrest.example [192.168.239.239]: Connection refused
32096.endd
168e428f
PH
32097When a deferred address is skipped because its retry time has not been reached,
32098a message is written to the log, but this can be suppressed by setting an
9b371988 32099appropriate value in &%log_selector%&.
168e428f
PH
32100
32101
32102
f89d2485 32103.section "Delivery failures" "SECID255"
9b371988 32104.cindex "delivery" "failure; logging"
168e428f
PH
32105If a delivery fails because an address cannot be routed, a line of the
32106following form is logged:
9b371988
PH
32107.code
321081995-12-19 16:20:23 0tRiQz-0002Q5-00 ** jim@trek99.example
32109 <jim@trek99.example>: unknown mail domain
32110.endd
168e428f
PH
32111If a delivery fails at transport time, the router and transport are shown, and
32112the response from the remote host is included, as in this example:
9b371988
PH
32113.code
321142002-07-11 07:14:17 17SXDU-000189-00 ** ace400@pb.example
32115 R=dnslookup T=remote_smtp: SMTP error from remote mailer
32116 after pipelined RCPT TO:<ace400@pb.example>: host
32117 pbmail3.py.example [192.168.63.111]: 553 5.3.0
32118 <ace400@pb.example>...Addressee unknown
32119.endd
32120The word &"pipelined"& indicates that the SMTP PIPELINING extension was being
32121used. See &%hosts_avoid_esmtp%& in the &(smtp)& transport for a way of
32122disabling PIPELINING. The log lines for all forms of delivery failure are
32123flagged with &`**`&.
32124
32125
32126
f89d2485 32127.section "Fake deliveries" "SECID256"
9b371988
PH
32128.cindex "delivery" "fake; logging"
32129If a delivery does not actually take place because the &%-N%& option has been
168e428f 32130used to suppress it, a normal delivery line is written to the log, except that
9b371988 32131&"=>"& is replaced by &"*>"&.
168e428f
PH
32132
32133
32134
f89d2485 32135.section "Completion" "SECID257"
168e428f 32136A line of the form
9b371988
PH
32137.code
321382002-10-31 09:00:11 16ZCW1-0005MB-00 Completed
32139.endd
168e428f
PH
32140is written to the main log when a message is about to be removed from the spool
32141at the end of its processing.
32142
32143
32144
32145
f89d2485 32146.section "Summary of Fields in Log Lines" "SECID258"
9b371988 32147.cindex "log" "summary of fields"
168e428f
PH
32148A summary of the field identifiers that are used in log lines is shown in
32149the following table:
9b371988
PH
32150.display
32151&`A `& authenticator name (and optional id)
32152&`C `& SMTP confirmation on delivery
f89d2485 32153&` `& command list for &"no mail in SMTP session"&
9b371988 32154&`CV `& certificate verification status
f89d2485 32155&`D `& duration of &"no mail in SMTP session"&
9b371988
PH
32156&`DN `& distinguished name from peer certificate
32157&`DT `& on &`=>`& lines: time taken for a delivery
32158&`F `& sender address (on delivery lines)
32159&`H `& host name and IP address
32160&`I `& local interface used
32161&`id `& message id for incoming message
32162&`P `& on &`<=`& lines: protocol used
32163&` `& on &`=>`& and &`**`& lines: return path
32164&`QT `& on &`=>`& lines: time spent on queue so far
32165&` `& on &"Completed"& lines: time spent on queue
32166&`R `& on &`<=`& lines: reference for local bounce
32167&` `& on &`=>`& &`**`& and &`==`& lines: router name
32168&`S `& size of message
32169&`ST `& shadow transport name
32170&`T `& on &`<=`& lines: message subject (topic)
32171&` `& on &`=>`& &`**`& and &`==`& lines: transport name
32172&`U `& local user or RFC 1413 identity
32173&`X `& TLS cipher suite
32174.endd
32175
32176
f89d2485 32177.section "Other log entries" "SECID259"
168e428f
PH
32178Various other types of log entry are written from time to time. Most should be
32179self-explanatory. Among the more common are:
32180
9b371988
PH
32181.ilist
32182.cindex "retry" "time not reached"
32183&'retry time not reached'&&~&~An address previously suffered a temporary error
168e428f
PH
32184during routing or local delivery, and the time to retry has not yet arrived.
32185This message is not written to an individual message log file unless it happens
32186during the first delivery attempt.
9b371988
PH
32187.next
32188&'retry time not reached for any host'&&~&~An address previously suffered
168e428f
PH
32189temporary errors during remote delivery, and the retry time has not yet arrived
32190for any of the hosts to which it is routed.
9b371988
PH
32191.next
32192.cindex "spool directory" "file locked"
32193&'spool file locked'&&~&~An attempt to deliver a message cannot proceed because
168e428f
PH
32194some other Exim process is already working on the message. This can be quite
32195common if queue running processes are started at frequent intervals. The
9b371988 32196&'exiwhat'& utility script can be used to find out what Exim processes are
168e428f 32197doing.
9b371988
PH
32198.next
32199.cindex "error" "ignored"
32200&'error ignored'&&~&~There are several circumstances that give rise to this
168e428f 32201message:
9b371988
PH
32202.olist
32203Exim failed to deliver a bounce message whose age was greater than
32204&%ignore_bounce_errors_after%&. The bounce was discarded.
32205.next
32206A filter file set up a delivery using the &"noerror"& option, and the delivery
168e428f 32207failed. The delivery was discarded.
9b371988
PH
32208.next
32209A delivery set up by a router configured with
32210. ==== As this is a nested list, any displays it contains must be indented
32211. ==== as otherwise they are too far to the left.
32212.code
168e428f 32213 errors_to = <>
9b371988 32214.endd
168e428f 32215failed. The delivery was discarded.
9b371988
PH
32216.endlist olist
32217.endlist ilist
168e428f
PH
32218
32219
32220
32221
32222
9b371988
PH
32223.section "Reducing or increasing what is logged" "SECTlogselector"
32224.cindex "log" "selectors"
32225By setting the &%log_selector%& global option, you can disable some of Exim's
168e428f 32226default logging, or you can request additional logging. The value of
9b371988 32227&%log_selector%& is made up of names preceded by plus or minus characters. For
168e428f 32228example:
9b371988
PH
32229.code
32230log_selector = +arguments -retry_defer
32231.endd
168e428f
PH
32232The list of optional log items is in the following table, with the default
32233selection marked by asterisks:
9b371988
PH
32234.display
32235&`*acl_warn_skipped `& skipped &%warn%& statement in ACL
32236&` address_rewrite `& address rewriting
32237&` all_parents `& all parents in => lines
32238&` arguments `& command line arguments
32239&`*connection_reject `& connection rejections
32240&`*delay_delivery `& immediate delivery delayed
32241&` deliver_time `& time taken to perform delivery
32242&` delivery_size `& add &`S=`&&'nnn'& to => lines
32243&`*dnslist_defer `& defers of DNS list (aka RBL) lookups
32244&`*etrn `& ETRN commands
32245&`*host_lookup_failed `& as it says
32246&` ident_timeout `& timeout for ident connection
32247&` incoming_interface `& incoming interface on <= lines
32248&` incoming_port `& incoming port on <= lines
32249&`*lost_incoming_connection `& as it says (includes timeouts)
32250&` outgoing_port `& add remote port to => lines
32251&`*queue_run `& start and end queue runs
32252&` queue_time `& time on queue for one recipient
32253&` queue_time_overall `& time on queue for whole message
f89d2485 32254&` pid `& Exim process id
9b371988
PH
32255&` received_recipients `& recipients on <= lines
32256&` received_sender `& sender on <= lines
32257&`*rejected_header `& header contents on reject log
32258&`*retry_defer `& &"retry time not reached"&
db9452a9 32259&` return_path_on_delivery `& put return path on => and ** lines
9b371988 32260&` sender_on_delivery `& add sender to => lines
4f578862 32261&`*sender_verify_fail `& sender verification failures
9b371988
PH
32262&`*size_reject `& rejection because too big
32263&`*skip_delivery `& delivery skipped in a queue run
32264&` smtp_confirmation `& SMTP confirmation on => lines
32265&` smtp_connection `& SMTP connections
32266&` smtp_incomplete_transaction`& incomplete SMTP transactions
f89d2485 32267&` smtp_no_mail `& session with no MAIL commands
9b371988
PH
32268&` smtp_protocol_error `& SMTP protocol errors
32269&` smtp_syntax_error `& SMTP syntax errors
32270&` subject `& contents of &'Subject:'& on <= lines
32271&` tls_certificate_verified `& certificate verification status
32272&`*tls_cipher `& TLS cipher suite on <= and => lines
32273&` tls_peerdn `& TLS peer DN on <= and => lines
32274&` unknown_in_list `& DNS lookup failed in list match
32275
32276&` all `& all of the above
32277.endd
168e428f
PH
32278More details on each of these items follows:
32279
9b371988 32280.ilist
f89d2485 32281.cindex "&%warn%& ACL verb" "log when skipping"
9b371988
PH
32282&%acl_warn_skipped%&: When an ACL &%warn%& statement is skipped because one of
32283its conditions cannot be evaluated, a log line to this effect is written if
32284this log selector is set.
9b371988
PH
32285.next
32286.cindex "log" "rewriting"
32287.cindex "rewriting" "logging"
32288&%address_rewrite%&: This applies both to global rewrites and per-transport
d1e83bff
PH
32289rewrites, but not to rewrites in filters run as an unprivileged user (because
32290such users cannot access the log).
9b371988
PH
32291.next
32292.cindex "log" "full parentage"
32293&%all_parents%&: Normally only the original and final addresses are logged on
168e428f
PH
32294delivery lines; with this selector, intermediate parents are given in
32295parentheses between them.
9b371988
PH
32296.next
32297.cindex "log" "Exim arguments"
f89d2485 32298.cindex "Exim arguments, logging"
9b371988 32299&%arguments%&: This causes Exim to write the arguments with which it was called
168e428f
PH
32300to the main log, preceded by the current working directory. This is a debugging
32301feature, added to make it easier to find out how certain MUAs call
9b371988
PH
32302&_/usr/sbin/sendmail_&. The logging does not happen if Exim has given up root
32303privilege because it was called with the &%-C%& or &%-D%& options. Arguments
32304that are empty or that contain white space are quoted. Non-printing characters
32305are shown as escape sequences. This facility cannot log unrecognized arguments,
168e428f 32306because the arguments are checked before the configuration file is read. The
9b371988 32307only way to log such cases is to interpose a script such as &_util/logargs.sh_&
168e428f 32308between the caller and Exim.
9b371988
PH
32309.next
32310.cindex "log" "connection rejections"
32311&%connection_reject%&: A log entry is written whenever an incoming SMTP
168e428f 32312connection is rejected, for whatever reason.
9b371988
PH
32313.next
32314.cindex "log" "delayed delivery"
f89d2485 32315.cindex "delayed delivery, logging"
9b371988 32316&%delay_delivery%&: A log entry is written whenever a delivery process is not
168e428f
PH
32317started for an incoming message because the load is too high or too many
32318messages were received on one connection. Logging does not occur if no delivery
9b371988
PH
32319process is started because &%queue_only%& is set or &%-odq%& was used.
32320.next
32321.cindex "log" "delivery duration"
32322&%deliver_time%&: For each delivery, the amount of real time it has taken to
32323perform the actual delivery is logged as DT=<&'time'&>, for example, &`DT=1s`&.
32324.next
32325.cindex "log" "message size on delivery"
32326.cindex "size" "of message"
32327&%delivery_size%&: For each delivery, the size of message delivered is added to
32328the &"=>"& line, tagged with S=.
32329.next
32330.cindex "log" "dnslist defer"
32331.cindex "DNS list" "logging defer"
32332.cindex "black list (DNS)"
32333&%dnslist_defer%&: A log entry is written if an attempt to look up a host in a
168e428f 32334DNS black list suffers a temporary error.
9b371988
PH
32335.next
32336.cindex "log" "ETRN commands"
32337.cindex "ETRN" "logging"
3cb1b51e 32338&%etrn%&: Every valid ETRN command that is received is logged, before the ACL
9b371988 32339is run to determine whether or not it is actually accepted. An invalid ETRN
168e428f 32340command, or one received within a message transaction is not logged by this
9b371988
PH
32341selector (see &%smtp_syntax_error%& and &%smtp_protocol_error%&).
32342.next
32343.cindex "log" "host lookup failure"
32344&%host_lookup_failed%&: When a lookup of a host's IP addresses fails to find
168e428f
PH
32345any addresses, or when a lookup of an IP address fails to find a host name, a
32346log line is written. This logging does not apply to direct DNS lookups when
9b371988
PH
32347routing email addresses, but it does apply to &"byname"& lookups.
32348.next
32349.cindex "log" "ident timeout"
32350.cindex "RFC 1413" "logging timeout"
32351&%ident_timeout%&: A log line is written whenever an attempt to connect to a
168e428f 32352client's ident port times out.
9b371988
PH
32353.next
32354.cindex "log" "incoming interface"
32355.cindex "interface" "logging"
32356&%incoming_interface%&: The interface on which a message was received is added
32357to the &"<="& line as an IP address in square brackets, tagged by I= and
32358followed by a colon and the port number. The local interface and port are also
32359added to other SMTP log lines, for example &"SMTP connection from"&, and to
32360rejection lines.
32361.next
32362.cindex "log" "incoming remote port"
32363.cindex "port" "logging remote"
32364.cindex "TCP/IP" "logging incoming remote port"
f89d2485
PH
32365.vindex "&$sender_fullhost$&"
32366.vindex "&$sender_rcvhost$&"
9b371988
PH
32367&%incoming_port%&: The remote port number from which a message was received is
32368added to log entries and &'Received:'& header lines, following the IP address
32369in square brackets, and separated from it by a colon. This is implemented by
32370changing the value that is put in the &$sender_fullhost$& and
32371&$sender_rcvhost$& variables. Recording the remote port number has become more
168e428f 32372important with the widening use of NAT (see RFC 2505).
9b371988
PH
32373.next
32374.cindex "log" "dropped connection"
32375&%lost_incoming_connection%&: A log line is written when an incoming SMTP
168e428f 32376connection is unexpectedly dropped.
9b371988
PH
32377.next
32378.cindex "log" "outgoing remote port"
32379.cindex "port" "logging outgoint remote"
32380.cindex "TCP/IP" "logging ougtoing remote port"
32381&%outgoing_port%&: The remote port number is added to delivery log lines (those
168e428f
PH
32382containing => tags) following the IP address. This option is not included in
32383the default setting, because for most ordinary configurations, the remote port
32384number is always 25 (the SMTP port).
9b371988 32385.next
f89d2485
PH
32386.cindex "log" "process ids in"
32387.cindex "pid (process id)" "in log lines"
32388&%pid%&: The current process id is added to every log line, in square brackets,
32389immediately after the time and date.
f89d2485 32390.next
9b371988
PH
32391.cindex "log" "queue run"
32392.cindex "queue runner" "logging"
32393&%queue_run%&: The start and end of every queue run are logged.
32394.next
32395.cindex "log" "queue time"
32396&%queue_time%&: The amount of time the message has been in the queue on the
32397local host is logged as QT=<&'time'&> on delivery (&`=>`&) lines, for example,
32398&`QT=3m45s`&. The clock starts when Exim starts to receive the message, so it
168e428f
PH
32399includes reception time as well as the delivery time for the current address.
32400This means that it may be longer than the difference between the arrival and
32401delivery log line times, because the arrival log line is not written until the
32402message has been successfully received.
9b371988
PH
32403.next
32404&%queue_time_overall%&: The amount of time the message has been in the queue on
32405the local host is logged as QT=<&'time'&> on &"Completed"& lines, for
32406example, &`QT=3m45s`&. The clock starts when Exim starts to receive the
168e428f 32407message, so it includes reception time as well as the total delivery time.
9b371988
PH
32408.next
32409.cindex "log" "recipients"
32410&%received_recipients%&: The recipients of a message are listed in the main log
168e428f 32411as soon as the message is received. The list appears at the end of the log line
9b371988 32412that is written when a message is received, preceded by the word &"for"&. The
168e428f
PH
32413addresses are listed after they have been qualified, but before any rewriting
32414has taken place.
32415Recipients that were discarded by an ACL for MAIL or RCPT do not appear
32416in the list.
9b371988
PH
32417.next
32418.cindex "log" "sender reception"
32419&%received_sender%&: The unrewritten original sender of a message is added to
168e428f 32420the end of the log line that records the message's arrival, after the word
9b371988
PH
32421&"from"& (before the recipients if &%received_recipients%& is also set).
32422.next
32423.cindex "log" "header lines for rejection"
32424&%rejected_header%&: If a message's header has been received at the time a
168e428f
PH
32425rejection is written to the reject log, the complete header is added to the
32426log. Header logging can be turned off individually for messages that are
9b371988
PH
32427rejected by the &[local_scan()]& function (see section &<<SECTapiforloc>>&).
32428.next
32429.cindex "log" "retry defer"
32430&%retry_defer%&: A log line is written if a delivery is deferred because a
32431retry time has not yet been reached. However, this &"retry time not reached"&
32432message is always omitted from individual message logs after the first delivery
168e428f 32433attempt.
9b371988
PH
32434.next
32435.cindex "log" "return path"
32436&%return_path_on_delivery%&: The return path that is being transmitted with
168e428f
PH
32437the message is included in delivery and bounce lines, using the tag P=.
32438This is omitted if no delivery actually happens, for example, if routing fails,
9b371988
PH
32439or if delivery is to &_/dev/null_& or to &`:blackhole:`&.
32440.next
32441.cindex "log" "sender on delivery"
32442&%sender_on_delivery%&: The message's sender address is added to every delivery
32443and bounce line, tagged by F= (for &"from"&).
168e428f
PH
32444This is the original sender that was received with the message; it is not
32445necessarily the same as the outgoing return path.
9b371988 32446.next
4f578862 32447.cindex "log" "sender verify failure"
db9452a9
PH
32448&%sender_verify_fail%&: If this selector is unset, the separate log line that
32449gives details of a sender verification failure is not written. Log lines for
32450the rejection of SMTP commands contain just &"sender verify failed"&, so some
32451detail is lost.
4f578862 32452.next
9b371988
PH
32453.cindex "log" "size rejection"
32454&%size_reject%&: A log line is written whenever a message is rejected because
32455it is too big.
32456.next
32457.cindex "log" "frozen messages; skipped"
32458.cindex "frozen messages" "logging skipping"
32459&%skip_delivery%&: A log line is written whenever a message is skipped during a
168e428f
PH
32460queue run because it is frozen or because another process is already delivering
32461it.
9b371988
PH
32462.cindex "&""spool file is locked""&"
32463The message that is written is &"spool file is locked"&.
32464.next
32465.cindex "log" "smtp confirmation"
32466.cindex "SMTP" "logging confirmation"
32467&%smtp_confirmation%&: The response to the final &"."& in the SMTP dialogue for
32468outgoing messages is added to delivery log lines in the form &`C=`&<&'text'&>.
32469A number of MTAs (including Exim) return an identifying string in this
32470response.
32471.next
32472.cindex "log" "SMTP connections"
32473.cindex "SMTP" "logging connections"
32474&%smtp_connection%&: A log line is written whenever an SMTP connection is
168e428f 32475established or closed, unless the connection is from a host that matches
9b371988
PH
32476&%hosts_connection_nolog%&. (In contrast, &%lost_incoming_connection%& applies
32477only when the closure is unexpected.) This applies to connections from local
32478processes that use &%-bs%& as well as to TCP/IP connections. If a connection is
168e428f
PH
32479dropped in the middle of a message, a log line is always written, whether or
32480not this selector is set, but otherwise nothing is written at the start and end
32481of connections unless this selector is enabled.
9b371988 32482
168e428f
PH
32483For TCP/IP connections to an Exim daemon, the current number of connections is
32484included in the log message for each new connection, but note that the count is
32485reset if the daemon is restarted.
32486Also, because connections are closed (and the closure is logged) in
32487subprocesses, the count may not include connections that have been closed but
32488whose termination the daemon has not yet noticed. Thus, while it is possible to
32489match up the opening and closing of connections in the log, the value of the
32490logged counts may not be entirely accurate.
9b371988
PH
32491.next
32492.cindex "log" "SMTP transaction; incomplete"
32493.cindex "SMTP" "logging incomplete transactions"
32494&%smtp_incomplete_transaction%&: When a mail transaction is aborted by
168e428f
PH
32495RSET, QUIT, loss of connection, or otherwise, the incident is logged,
32496and the message sender plus any accepted recipients are included in the log
32497line. This can provide evidence of dictionary attacks.
9b371988 32498.next
f89d2485
PH
32499.cindex "log" "non-MAIL SMTP sessions"
32500.cindex "MAIL" "logging session without"
32501&%smtp_no_mail%&: A line is written to the main log whenever an accepted SMTP
32502connection terminates without having issued a MAIL command. This includes both
32503the case when the connection is dropped, and the case when QUIT is used. It
32504does not include cases where the connection is rejected right at the start (by
32505an ACL, or because there are too many connections, or whatever). These cases
32506already have their own log lines.
32507
32508The log line that is written contains the identity of the client in the usual
32509way, followed by D= and a time, which records the duration of the connection.
32510If the connection was authenticated, this fact is logged exactly as it is for
32511an incoming message, with an A= item. If the connection was encrypted, CV=,
32512DN=, and X= items may appear as they do for an incoming message, controlled by
32513the same logging options.
32514
32515Finally, if any SMTP commands were issued during the connection, a C= item
32516is added to the line, listing the commands that were used. For example,
32517.code
32518C=EHLO,QUIT
32519.endd
32520shows that the client issued QUIT straight after EHLO. If there were fewer
32521than 20 commands, they are all listed. If there were more than 20 commands,
32522the last 20 are listed, preceded by &"..."&. However, with the default
32523setting of 10 for &%smtp_accep_max_nonmail%&, the connection will in any case
32524have been aborted before 20 non-mail commands are processed.
f89d2485 32525.next
9b371988
PH
32526.cindex "log" "SMTP protocol error"
32527.cindex "SMTP" "logging protocol error"
32528&%smtp_protocol_error%&: A log line is written for every SMTP protocol error
168e428f
PH
32529encountered. Exim does not have perfect detection of all protocol errors
32530because of transmission delays and the use of pipelining. If PIPELINING has
32531been advertised to a client, an Exim server assumes that the client will use
9b371988 32532it, and therefore it does not count &"expected"& errors (for example, RCPT
168e428f 32533received after rejecting MAIL) as protocol errors.
9b371988
PH
32534.next
32535.cindex "SMTP" "logging syntax errors"
32536.cindex "SMTP" "syntax errors; logging"
32537.cindex "SMTP" "unknown command; logging"
32538.cindex "log" "unknown SMTP command"
32539.cindex "log" "SMTP syntax error"
32540&%smtp_syntax_error%&: A log line is written for every SMTP syntax error
168e428f
PH
32541encountered. An unrecognized command is treated as a syntax error. For an
32542external connection, the host identity is given; for an internal connection
9b371988
PH
32543using &%-bs%& the sender identification (normally the calling user) is given.
32544.next
32545.cindex "log" "subject"
f89d2485 32546.cindex "subject, logging"
9b371988
PH
32547&%subject%&: The subject of the message is added to the arrival log line,
32548preceded by &"T="& (T for &"topic"&, since S is already used for &"size"&).
32549Any MIME &"words"& in the subject are decoded. The &%print_topbitchars%& option
168e428f
PH
32550specifies whether characters with values greater than 127 should be logged
32551unchanged, or whether they should be rendered as escape sequences.
9b371988
PH
32552.next
32553.cindex "log" "certificate verification"
32554&%tls_certificate_verified%&: An extra item is added to <= and => log lines
32555when TLS is in use. The item is &`CV=yes`& if the peer's certificate was
32556verified, and &`CV=no`& if not.
32557.next
32558.cindex "log" "TLS cipher"
32559.cindex "TLS" "logging cipher"
32560&%tls_cipher%&: When a message is sent or received over an encrypted
32561connection, the cipher suite used is added to the log line, preceded by X=.
32562.next
32563.cindex "log" "TLS peer DN"
32564.cindex "TLS" "logging peer DN"
32565&%tls_peerdn%&: When a message is sent or received over an encrypted
32566connection, and a certificate is supplied by the remote host, the peer DN is
32567added to the log line, preceded by DN=.
32568.next
9b371988
PH
32569.cindex "log" "DNS failure in list"
32570&%unknown_in_list%&: This setting causes a log entry to be written when the
068aaea8 32571result of a list match is failure because a DNS lookup failed.
9b371988 32572.endlist
168e428f
PH
32573
32574
f89d2485 32575.section "Message log" "SECID260"
9b371988
PH
32576.cindex "message" "log file for"
32577.cindex "log" "message log; description of"
32578.cindex "&_msglog_& directory"
0a4e3112 32579.oindex "&%preserve_message_logs%&"
168e428f
PH
32580In addition to the general log files, Exim writes a log file for each message
32581that it handles. The names of these per-message logs are the message ids, and
9b371988 32582they are kept in the &_msglog_& sub-directory of the spool directory. Each
168e428f
PH
32583message log contains copies of the log lines that apply to the message. This
32584makes it easier to inspect the status of an individual message without having
32585to search the main log. A message log is deleted when processing of the message
9b371988
PH
32586is complete, unless &%preserve_message_logs%& is set, but this should be used
32587only with great care because they can fill up your disk very quickly.
168e428f
PH
32588
32589On a heavily loaded system, it may be desirable to disable the use of
32590per-message logs, in order to reduce disk I/O. This can be done by setting the
9b371988 32591&%message_logs%& option false.
4f578862 32592.ecindex IIDloggen
168e428f
PH
32593
32594
f89d2485
PH
32595
32596
9b371988
PH
32597. ////////////////////////////////////////////////////////////////////////////
32598. ////////////////////////////////////////////////////////////////////////////
168e428f 32599
9b371988 32600.chapter "Exim utilities" "CHAPutils"
4f578862 32601.scindex IIDutils "utilities"
168e428f
PH
32602A number of utility scripts and programs are supplied with Exim and are
32603described in this chapter. There is also the Exim Monitor, which is covered in
32604the next chapter. The utilities described here are:
32605
f89d2485
PH
32606.itable none 0 0 3 7* left 15* left 40* left
32607.irow &<<SECTfinoutwha>>& &'exiwhat'& &&&
9b371988 32608 "list what Exim processes are doing"
f89d2485
PH
32609.irow &<<SECTgreptheque>>& &'exiqgrep'& "grep the queue"
32610.irow &<<SECTsumtheque>>& &'exiqsumm'& "summarize the queue"
32611.irow &<<SECTextspeinf>>& &'exigrep'& "search the main log"
32612.irow &<<SECTexipick>>& &'exipick'& "select messages on &&&
32613 various criteria"
32614.irow &<<SECTcyclogfil>>& &'exicyclog'& "cycle (rotate) log files"
32615.irow &<<SECTmailstat>>& &'eximstats'& &&&
9b371988 32616 "extract statistics from the log"
f89d2485 32617.irow &<<SECTcheckaccess>>& &'exim_checkaccess'& &&&
9b371988 32618 "check address acceptance from given IP"
f89d2485
PH
32619.irow &<<SECTdbmbuild>>& &'exim_dbmbuild'& "build a DBM file"
32620.irow &<<SECTfinindret>>& &'exinext'& "extract retry information"
32621.irow &<<SECThindatmai>>& &'exim_dumpdb'& "dump a hints database"
32622.irow &<<SECThindatmai>>& &'exim_tidydb'& "clean up a hints database"
32623.irow &<<SECThindatmai>>& &'exim_fixdb'& "patch a hints database"
32624.irow &<<SECTmailboxmaint>>& &'exim_lock'& "lock a mailbox file"
9b371988
PH
32625.endtable
32626
068aaea8 32627Another utility that might be of use to sites with many MTAs is Tom Kistner's
9b371988
PH
32628&'exilog'&. It provides log visualizations across multiple Exim servers. See
32629&url(http://duncanthrax.net/exilog/) for details.
068aaea8
PH
32630
32631
32632
32633
9b371988
PH
32634.section "Finding out what Exim processes are doing (exiwhat)" "SECTfinoutwha"
32635.cindex "&'exiwhat'&"
f89d2485 32636.cindex "process, querying"
9b371988 32637.cindex "SIGUSR1"
168e428f
PH
32638On operating systems that can restart a system call after receiving a signal
32639(most modern OS), an Exim process responds to the SIGUSR1 signal by writing
9b371988
PH
32640a line describing what it is doing to the file &_exim-process.info_& in the
32641Exim spool directory. The &'exiwhat'& script sends the signal to all Exim
168e428f
PH
32642processes it can find, having first emptied the file. It then waits for one
32643second to allow the Exim processes to react before displaying the results. In
9b371988 32644order to run &'exiwhat'& successfully you have to have sufficient privilege to
168e428f
PH
32645send the signal to the Exim processes, so it is normally run as root.
32646
9b371988 32647&*Warning*&: This is not an efficient process. It is intended for occasional
168e428f
PH
32648use by system administrators. It is not sensible, for example, to set up a
32649script that sends SIGUSR1 signals to Exim processes at short intervals.
32650
32651
9b371988 32652Unfortunately, the &'ps'& command that &'exiwhat'& uses to find Exim processes
168e428f
PH
32653varies in different operating systems. Not only are different options used,
32654but the format of the output is different. For this reason, there are some
9b371988
PH
32655system configuration options that configure exactly how &'exiwhat'& works. If
32656it doesn't seem to be working for you, check the following compile-time
32657options:
32658.display
32659&`EXIWHAT_PS_CMD `& the command for running &'ps'&
32660&`EXIWHAT_PS_ARG `& the argument for &'ps'&
32661&`EXIWHAT_EGREP_ARG `& the argument for &'egrep'& to select from &'ps'& output
32662&`EXIWHAT_KILL_ARG `& the argument for the &'kill'& command
32663.endd
32664An example of typical output from &'exiwhat'& is
32665.code
32666164 daemon: -q1h, listening on port 25
3266710483 running queue: waiting for 0tAycK-0002ij-00 (10492)
3266810492 delivering 0tAycK-0002ij-00 to mail.ref.example
32669 [10.19.42.42] (editor@ref.example)
3267010592 handling incoming call from [192.168.243.242]
3267110628 accepting a local non-SMTP message
32672.endd
168e428f
PH
32673The first number in the output line is the process number. The third line has
32674been split here, in order to fit it on the page.
32675
32676
32677
9b371988
PH
32678.section "Selective queue listing (exiqgrep)" "SECTgreptheque"
32679.cindex "&'exiqgrep'&"
32680.cindex "queue" "grepping"
168e428f 32681This utility is a Perl script contributed by Matt Hubbard. It runs
9b371988
PH
32682.code
32683exim -bpu
32684.endd
168e428f
PH
32685to obtain a queue listing with undelivered recipients only, and then greps the
32686output to select messages that match given criteria. The following selection
32687options are available:
32688
9b371988
PH
32689.vlist
32690.vitem &*-f*&&~<&'regex'&>
168e428f
PH
32691Match the sender address. The field that is tested is enclosed in angle
32692brackets, so you can test for bounce messages with
9b371988
PH
32693.code
32694exiqgrep -f '^<>$'
32695.endd
32696.vitem &*-r*&&~<&'regex'&>
168e428f
PH
32697Match a recipient address. The field that is tested is not enclosed in angle
32698brackets.
32699
9b371988 32700.vitem &*-s*&&~<&'regex'&>
168e428f
PH
32701Match against the size field.
32702
9b371988 32703.vitem &*-y*&&~<&'seconds'&>
168e428f
PH
32704Match messages that are younger than the given time.
32705
9b371988 32706.vitem &*-o*&&~<&'seconds'&>
168e428f
PH
32707Match messages that are older than the given time.
32708
9b371988 32709.vitem &*-z*&
168e428f
PH
32710Match only frozen messages.
32711
9b371988 32712.vitem &*-x*&
168e428f 32713Match only non-frozen messages.
9b371988 32714.endlist
168e428f
PH
32715
32716The following options control the format of the output:
32717
9b371988
PH
32718.vlist
32719.vitem &*-c*&
168e428f
PH
32720Display only the count of matching messages.
32721
9b371988
PH
32722.vitem &*-l*&
32723Long format &-- display the full message information as output by Exim. This is
168e428f
PH
32724the default.
32725
9b371988 32726.vitem &*-i*&
168e428f
PH
32727Display message ids only.
32728
9b371988
PH
32729.vitem &*-b*&
32730Brief format &-- one line per message.
168e428f 32731
9b371988 32732.vitem &*-R*&
168e428f 32733Display messages in reverse order.
9b371988 32734.endlist
168e428f 32735
9b371988 32736There is one more option, &%-h%&, which outputs a list of options.
168e428f 32737
168e428f
PH
32738
32739
f89d2485 32740.section "Summarizing the queue (exiqsumm)" "SECTsumtheque"
9b371988
PH
32741.cindex "&'exiqsumm'&"
32742.cindex "queue" "summary"
32743The &'exiqsumm'& utility is a Perl script which reads the output of &`exim
32744-bp`& and produces a summary of the messages on the queue. Thus, you use it by
168e428f 32745running a command such as
9b371988
PH
32746.code
32747exim -bp | exiqsumm
32748.endd
168e428f
PH
32749The output consists of one line for each domain that has messages waiting for
32750it, as in the following example:
9b371988
PH
32751.code
327523 2322 74m 66m msn.com.example
32753.endd
3cb1b51e
PH
32754Each line lists the number of pending deliveries for a domain, their total
32755volume, and the length of time that the oldest and the newest messages have
32756been waiting. Note that the number of pending deliveries is greater than the
32757number of messages when messages have more than one recipient.
168e428f
PH
32758
32759A summary line is output at the end. By default the output is sorted on the
9b371988
PH
32760domain name, but &'exiqsumm'& has the options &%-a%& and &%-c%&, which cause
32761the output to be sorted by oldest message and by count of messages,
3cb1b51e
PH
32762respectively. There are also three options that split the messages for each
32763domain into two or more subcounts: &%-b%& separates bounce messages, &%-f%&
32764separates frozen messages, and &%-s%& separates messages according to their
32765sender.
168e428f 32766
9b371988
PH
32767The output of &'exim -bp'& contains the original addresses in the message, so
32768this also applies to the output from &'exiqsumm'&. No domains from addresses
32769generated by aliasing or forwarding are included (unless the &%one_time%&
32770option of the &(redirect)& router has been used to convert them into &"top
32771level"& addresses).
168e428f
PH
32772
32773
32774
32775
9b371988
PH
32776.section "Extracting specific information from the log (exigrep)" &&&
32777 "SECTextspeinf"
32778.cindex "&'exigrep'&"
32779.cindex "log" "extracts; grepping for"
9b371988 32780The &'exigrep'& utility is a Perl script that searches one or more main log
168e428f
PH
32781files for entries that match a given pattern. When it finds a match, it
32782extracts all the log entries for the relevant message, not just those that
9b371988 32783match the pattern. Thus, &'exigrep'& can extract complete log entries for a
168e428f 32784given message, or all mail for a given user, or for a given host, for example.
068aaea8 32785The input files can be in Exim log format or syslog format.
f89d2485
PH
32786If a matching log line is not associated with a specific message, it is
32787included in &'exigrep'&'s output without any additional lines. The usage is:
9b371988 32788.display
f89d2485 32789&`exigrep [-t<`&&'n'&&`>] [-I] [-l] [-v] <`&&'pattern'&&`> [<`&&'log file'&&`>] ...`&
9b371988 32790.endd
f89d2485
PH
32791If no log file names are given on the command line, the standard input is read.
32792
9b371988 32793The &%-t%& argument specifies a number of seconds. It adds an additional
168e428f 32794condition for message selection. Messages that are complete are shown only if
9b371988 32795they spent more than <&'n'&> seconds on the queue.
168e428f 32796
f89d2485
PH
32797By default, &'exigrep'& does case-insensitive matching. The &%-I%& option
32798makes it case-sensitive. This may give a performance improvement when searching
32799large log files. Without &%-I%&, the Perl pattern matches use Perl's &`/i`&
32800option; with &%-I%& they do not. In both cases it is possible to change the
32801case sensitivity within the pattern by using &`(?i)`& or &`(?-i)`&.
32802
32803The &%-l%& option means &"literal"&, that is, treat all characters in the
168e428f 32804pattern as standing for themselves. Otherwise the pattern must be a Perl
f89d2485
PH
32805regular expression.
32806
32807The &%-v%& option inverts the matching condition. That is, a line is selected
32808if it does &'not'& match the pattern.
168e428f 32809
9b371988
PH
32810If the location of a &'zcat'& command is known from the definition of
32811ZCAT_COMMAND in &_Local/Makefile_&, &'exigrep'& automatically passes any file
32812whose name ends in COMPRESS_SUFFIX through &'zcat'& as it searches it.
168e428f
PH
32813
32814
9b371988
PH
32815.section "Selecting messages by various criteria (exipick)" "SECTexipick"
32816.cindex "&'exipick'&"
32817John Jetmore's &'exipick'& utility is included in the Exim distribution. It
f89d2485
PH
32818lists messages from the queue according to a variety of criteria. For details
32819of &'exipick'&'s facilities, visit the web page at
32820&url(http://www.exim.org/eximwiki/ToolExipickManPage) or run &'exipick'& with
32821the &%--help%& option.
168e428f
PH
32822
32823
9b371988
PH
32824.section "Cycling log files (exicyclog)" "SECTcyclogfil"
32825.cindex "log" "cycling local files"
32826.cindex "cycling logs"
32827.cindex "&'exicyclog'&"
32828The &'exicyclog'& script can be used to cycle (rotate) &'mainlog'& and
32829&'rejectlog'& files. This is not necessary if only syslog is being used, or if
168e428f 32830you are using log files with datestamps in their names (see section
9b371988
PH
32831&<<SECTdatlogfil>>&). Some operating systems have their own standard mechanisms
32832for log cycling, and these can be used instead of &'exicyclog'& if preferred.
4f578862
PH
32833There are two command line options for &'exicyclog'&:
32834.ilist
32835&%-k%& <&'count'&> specifies the number of log files to keep, overriding the
32836default that is set when Exim is built. The default default is 10.
32837.next
32838&%-l%& <&'path'&> specifies the log file path, in the same format as Exim's
32839&%log_file_path%& option (for example, &`/var/log/exim_%slog`&), again
32840overriding the script's default, which is to find the setting from Exim's
32841configuration.
32842.endlist
168e428f 32843
9b371988
PH
32844Each time &'exicyclog'& is run the file names get &"shuffled down"& by one. If
32845the main log file name is &_mainlog_& (the default) then when &'exicyclog'& is
32846run &_mainlog_& becomes &_mainlog.01_&, the previous &_mainlog.01_& becomes
4f578862
PH
32847&_mainlog.02_& and so on, up to the limit that is set in the script or by the
32848&%-k%& option. Log files whose numbers exceed the limit are discarded. Reject
168e428f
PH
32849logs are handled similarly.
32850
32851If the limit is greater than 99, the script uses 3-digit numbers such as
9b371988
PH
32852&_mainlog.001_&, &_mainlog.002_&, etc. If you change from a number less than 99
32853to one that is greater, or &'vice versa'&, you will have to fix the names of
168e428f
PH
32854any existing log files.
32855
9b371988 32856If no &_mainlog_& file exists, the script does nothing. Files that &"drop off"&
168e428f
PH
32857the end are deleted. All files with numbers greater than 01 are compressed,
32858using a compression command which is configured by the COMPRESS_COMMAND
9b371988
PH
32859setting in &_Local/Makefile_&. It is usual to run &'exicyclog'& daily from a
32860root &%crontab%& entry of the form
32861.code
328621 0 * * * su exim -c /usr/exim/bin/exicyclog
32863.endd
32864assuming you have used the name &"exim"& for the Exim user. You can run
32865&'exicyclog'& as root if you wish, but there is no need.
168e428f
PH
32866
32867
32868
9b371988
PH
32869.section "Mail statistics (eximstats)" "SECTmailstat"
32870.cindex "statistics"
32871.cindex "&'eximstats'&"
32872A Perl script called &'eximstats'& is provided for extracting statistical
168e428f 32873information from log files. The output is either plain text, or HTML.
f89d2485 32874Exim log files are also supported by the &'Lire'& system produced by the
9b371988 32875LogReport Foundation &url(http://www.logreport.org).
168e428f 32876
9b371988 32877The &'eximstats'& script has been hacked about quite a bit over time. The
168e428f
PH
32878latest version is the result of some extensive revision by Steve Campbell. A
32879lot of information is given by default, but there are options for suppressing
32880various parts of it. Following any options, the arguments to the script are a
32881list of files, which should be main log files. For example:
9b371988
PH
32882.code
32883eximstats -nr /var/spool/exim/log/mainlog.01
32884.endd
32885By default, &'eximstats'& extracts information about the number and volume of
168e428f
PH
32886messages received from or delivered to various hosts. The information is sorted
32887both by message count and by volume, and the top fifty hosts in each category
32888are listed on the standard output. Similar information, based on email
32889addresses or domains instead of hosts can be requested by means of various
32890options. For messages delivered and received locally, similar statistics are
32891also produced per user.
32892
32893The output also includes total counts and statistics about delivery errors, and
32894histograms showing the number of messages received and deliveries made in each
32895hour of the day. A delivery with more than one address in its envelope (for
32896example, an SMTP transaction with more than one RCPT command) is counted
9b371988 32897as a single delivery by &'eximstats'&.
168e428f
PH
32898
32899Though normally more deliveries than receipts are reported (as messages may
9b371988 32900have multiple recipients), it is possible for &'eximstats'& to report more
168e428f
PH
32901messages received than delivered, even though the queue is empty at the start
32902and end of the period in question. If an incoming message contains no valid
32903recipients, no deliveries are recorded for it. A bounce message is handled as
32904an entirely separate message.
32905
9b371988 32906&'eximstats'& always outputs a grand total summary giving the volume and number
168e428f
PH
32907of messages received and deliveries made, and the number of hosts involved in
32908each case. It also outputs the number of messages that were delayed (that is,
32909not completely delivered at the first attempt), and the number that had at
32910least one address that failed.
32911
32912The remainder of the output is in sections that can be independently disabled
32913or modified by various options. It consists of a summary of deliveries by
32914transport, histograms of messages received and delivered per time interval
32915(default per hour), information about the time messages spent on the queue,
32916a list of relayed messages, lists of the top fifty sending hosts, local
32917senders, destination hosts, and destination local users by count and by volume,
32918and a list of delivery errors that occurred.
32919
32920The relay information lists messages that were actually relayed, that is, they
32921came from a remote host and were directly delivered to some other remote host,
32922without being processed (for example, for aliasing or forwarding) locally.
32923
9b371988 32924There are quite a few options for &'eximstats'& to control exactly what it
168e428f 32925outputs. These are documented in the Perl script itself, and can be extracted
9b371988
PH
32926by running the command &(perldoc)& on the script. For example:
32927.code
32928perldoc /usr/exim/bin/eximstats
32929.endd
32930
32931.section "Checking access policy (exim_checkaccess)" "SECTcheckaccess"
32932.cindex "&'exim_checkaccess'&"
32933.cindex "policy control" "checking access"
32934.cindex "checking access"
32935The &%-bh%& command line argument allows you to run a fake SMTP session with
168e428f
PH
32936debugging output, in order to check what Exim is doing when it is applying
32937policy controls to incoming SMTP mail. However, not everybody is sufficiently
9b371988
PH
32938familiar with the SMTP protocol to be able to make full use of &%-bh%&, and
32939sometimes you just want to answer the question &"Does this address have
32940access?"& without bothering with any further details.
168e428f 32941
9b371988 32942The &'exim_checkaccess'& utility is a &"packaged"& version of &%-bh%&. It takes
168e428f 32943two arguments, an IP address and an email address:
9b371988
PH
32944.code
32945exim_checkaccess 10.9.8.7 A.User@a.domain.example
32946.endd
32947The utility runs a call to Exim with the &%-bh%& option, to test whether the
168e428f
PH
32948given email address would be accepted in a RCPT command in a TCP/IP
32949connection from the host with the given IP address. The output of the utility
9b371988
PH
32950is either the word &"accepted"&, or the SMTP error response, for example:
32951.code
32952Rejected:
32953550 Relay not permitted
32954.endd
32955When running this test, the utility uses &`<>`& as the envelope sender address
168e428f
PH
32956for the MAIL command, but you can change this by providing additional
32957options. These are passed directly to the Exim command. For example, to specify
9b371988 32958that the test is to be run with the sender address &'himself@there.example'&
168e428f 32959you can use:
9b371988 32960.code
168e428f
PH
32961exim_checkaccess 10.9.8.7 A.User@a.domain.example \
32962 -f himself@there.example
9b371988 32963.endd
168e428f
PH
32964Note that these additional Exim command line items must be given after the two
32965mandatory arguments.
32966
9b371988
PH
32967Because the &%exim_checkaccess%& uses &%-bh%&, it does not perform callouts
32968while running its checks. You can run checks that include callouts by using
32969&%-bhc%&, but this is not yet available in a &"packaged"& form.
168e428f
PH
32970
32971
32972
9b371988
PH
32973.section "Making DBM files (exim_dbmbuild)" "SECTdbmbuild"
32974.cindex "DBM" "building dbm files"
32975.cindex "building DBM files"
32976.cindex "&'exim_dbmbuild'&"
32977.cindex "lower casing"
32978.cindex "binary zero" "in lookup key"
32979The &'exim_dbmbuild'& program reads an input file containing keys and data in
32980the format used by the &(lsearch)& lookup (see section
32981&<<SECTsinglekeylookups>>&). It writes a DBM file using the lower-cased alias
32982names as keys and the remainder of the information as data. The lower-casing
32983can be prevented by calling the program with the &%-nolc%& option.
168e428f
PH
32984
32985A terminating zero is included as part of the key string. This is expected by
9b371988
PH
32986the &(dbm)& lookup type. However, if the option &%-nozero%& is given,
32987&'exim_dbmbuild'& creates files without terminating zeroes in either the key
32988strings or the data strings. The &(dbmnz)& lookup type can be used with such
168e428f
PH
32989files.
32990
32991The program requires two arguments: the name of the input file (which can be a
32992single hyphen to indicate the standard input), and the name of the output file.
32993It creates the output under a temporary name, and then renames it if all went
32994well.
32995
9b371988 32996.cindex "USE_DB"
168e428f 32997If the native DB interface is in use (USE_DB is set in a compile-time
9b371988 32998configuration file &-- this is common in free versions of Unix) the two file
168e428f
PH
32999names must be different, because in this mode the Berkeley DB functions create
33000a single output file using exactly the name given. For example,
9b371988
PH
33001.code
33002exim_dbmbuild /etc/aliases /etc/aliases.db
33003.endd
168e428f 33004reads the system alias file and creates a DBM version of it in
9b371988 33005&_/etc/aliases.db_&.
168e428f 33006
9b371988
PH
33007In systems that use the &'ndbm'& routines (mostly proprietary versions of
33008Unix), two files are used, with the suffixes &_.dir_& and &_.pag_&. In this
168e428f 33009environment, the suffixes are added to the second argument of
9b371988 33010&'exim_dbmbuild'&, so it can be the same as the first. This is also the case
168e428f 33011when the Berkeley functions are used in compatibility mode (though this is not
9b371988 33012recommended), because in that case it adds a &_.db_& suffix to the file name.
168e428f
PH
33013
33014If a duplicate key is encountered, the program outputs a warning, and when it
9b371988
PH
33015finishes, its return code is 1 rather than zero, unless the &%-noduperr%&
33016option is used. By default, only the first of a set of duplicates is used &--
33017this makes it compatible with &(lsearch)& lookups. There is an option
33018&%-lastdup%& which causes it to use the data for the last duplicate instead.
33019There is also an option &%-nowarn%&, which stops it listing duplicate keys to
33020&%stderr%&. For other errors, where it doesn't actually make a new file, the
33021return code is 2.
168e428f
PH
33022
33023
33024
33025
9b371988
PH
33026.section "Finding individual retry times (exinext)" "SECTfinindret"
33027.cindex "retry" "times"
33028.cindex "&'exinext'&"
33029A utility called &'exinext'& (mostly a Perl script) provides the ability to
33030fish specific information out of the retry database. Given a mail domain (or a
168e428f
PH
33031complete address), it looks up the hosts for that domain, and outputs any retry
33032information for the hosts or for the domain. At present, the retry information
9b371988 33033is obtained by running &'exim_dumpdb'& (see below) and post-processing the
168e428f 33034output. For example:
9b371988
PH
33035.code
33036$ exinext piglet@milne.fict.example
33037kanga.milne.example:192.168.8.1 error 146: Connection refused
33038 first failed: 21-Feb-1996 14:57:34
33039 last tried: 21-Feb-1996 14:57:34
33040 next try at: 21-Feb-1996 15:02:34
33041roo.milne.example:192.168.8.3 error 146: Connection refused
33042 first failed: 20-Jan-1996 13:12:08
33043 last tried: 21-Feb-1996 11:42:03
33044 next try at: 21-Feb-1996 19:42:03
33045 past final cutoff time
33046.endd
33047You can also give &'exinext'& a local part, without a domain, and it
168e428f
PH
33048will give any retry information for that local part in your default domain.
33049A message id can be used to obtain retry information pertaining to a specific
33050message. This exists only when an attempt to deliver a message to a remote host
9b371988
PH
33051suffers a message-specific error (see section &<<SECToutSMTPerr>>&).
33052&'exinext'& is not particularly efficient, but then it is not expected to be
33053run very often.
168e428f 33054
9b371988
PH
33055The &'exinext'& utility calls Exim to find out information such as the location
33056of the spool directory. The utility has &%-C%& and &%-D%& options, which are
33057passed on to the &'exim'& commands. The first specifies an alternate Exim
168e428f
PH
33058configuration file, and the second sets macros for use within the configuration
33059file. These features are mainly to help in testing, but might also be useful in
33060environments where more than one configuration file is in use.
33061
33062
33063
9b371988
PH
33064.section "Hints database maintenance" "SECThindatmai"
33065.cindex "hints database" "maintenance"
33066.cindex "maintaining Exim's hints database"
168e428f
PH
33067Three utility programs are provided for maintaining the DBM files that Exim
33068uses to contain its delivery hint information. Each program requires two
33069arguments. The first specifies the name of Exim's spool directory, and the
068aaea8 33070second is the name of the database it is to operate on. These are as follows:
168e428f 33071
9b371988
PH
33072.ilist
33073&'retry'&: the database of retry information
33074.next
33075&'wait-'&<&'transport name'&>: databases of information about messages waiting
168e428f 33076for remote hosts
9b371988
PH
33077.next
33078&'callout'&: the callout cache
9b371988
PH
33079.next
33080&'ratelimit'&: the data for implementing the ratelimit ACL condition
9b371988
PH
33081.next
33082&'misc'&: other hints data
33083.endlist
168e428f 33084
9b371988 33085The &'misc'& database is used for
168e428f 33086
9b371988
PH
33087.ilist
33088Serializing ETRN runs (when &%smtp_etrn_serialize%& is set)
33089.next
33090Serializing delivery to a specific host (when &%serialize_hosts%& is set in an
33091&(smtp)& transport)
33092.endlist
168e428f 33093
168e428f
PH
33094
33095
f89d2485 33096.section "exim_dumpdb" "SECID261"
9b371988 33097.cindex "&'exim_dumpdb'&"
168e428f 33098The entire contents of a database are written to the standard output by the
9b371988 33099&'exim_dumpdb'& program, which has no options or arguments other than the
168e428f 33100spool and database names. For example, to dump the retry database:
9b371988
PH
33101.code
33102exim_dumpdb /var/spool/exim retry
33103.endd
168e428f 33104Two lines of output are produced for each entry:
9b371988
PH
33105.code
33106T:mail.ref.example:192.168.242.242 146 77 Connection refused
3310731-Oct-1995 12:00:12 02-Nov-1995 12:21:39 02-Nov-1995 20:21:39 *
33108.endd
168e428f
PH
33109The first item on the first line is the key of the record. It starts with one
33110of the letters R, or T, depending on whether it refers to a routing or
33111transport retry. For a local delivery, the next part is the local address; for
33112a remote delivery it is the name of the remote host, followed by its failing IP
f89d2485 33113address (unless &%retry_include_ip_address%& is set false on the &(smtp)&
168e428f
PH
33114transport). If the remote port is not the standard one (port 25), it is added
33115to the IP address. Then there follows an error code, an additional error code,
33116and a textual description of the error.
33117
33118The three times on the second line are the time of first failure, the time of
33119the last delivery attempt, and the computed time for the next attempt. The line
33120ends with an asterisk if the cutoff time for the last retry rule has been
33121exceeded.
33122
9b371988 33123Each output line from &'exim_dumpdb'& for the &'wait-xxx'& databases
168e428f
PH
33124consists of a host name followed by a list of ids for messages that are or were
33125waiting to be delivered to that host. If there are a very large number for any
33126one host, continuation records, with a sequence number added to the host name,
33127may be seen. The data in these records is often out of date, because a message
33128may be routed to several alternative hosts, and Exim makes no effort to keep
33129cross-references.
33130
33131
33132
f89d2485 33133.section "exim_tidydb" "SECID262"
9b371988 33134.cindex "&'exim_tidydb'&"
9b371988 33135The &'exim_tidydb'& utility program is used to tidy up the contents of a hints
068aaea8
PH
33136database. If run with no options, it removes all records that are more than 30
33137days old. The age is calculated from the date and time that the record was last
9b371988 33138updated. Note that, in the case of the retry database, it is &'not'& the time
068aaea8
PH
33139since the first delivery failure. Information about a host that has been down
33140for more than 30 days will remain in the database, provided that the record is
33141updated sufficiently often.
33142
9b371988 33143The cutoff date can be altered by means of the &%-t%& option, which must be
068aaea8
PH
33144followed by a time. For example, to remove all records older than a week from
33145the retry database:
9b371988
PH
33146.code
33147exim_tidydb -t 7d /var/spool/exim retry
33148.endd
33149Both the &'wait-xxx'& and &'retry'& databases contain items that involve
33150message ids. In the former these appear as data in records keyed by host &--
33151they were messages that were waiting for that host &-- and in the latter they
168e428f 33152are the keys for retry information for messages that have suffered certain
9b371988 33153types of error. When &'exim_tidydb'& is run, a check is made to ensure that
168e428f
PH
33154message ids in database records are those of messages that are still on the
33155queue. Message ids for messages that no longer exist are removed from
9b371988
PH
33156&'wait-xxx'& records, and if this leaves any records empty, they are deleted.
33157For the &'retry'& database, records whose keys are non-existent message ids are
33158removed. The &'exim_tidydb'& utility outputs comments on the standard output
33159whenever it removes information from the database.
168e428f
PH
33160
33161Certain records are automatically removed by Exim when they are no longer
33162needed, but others are not. For example, if all the MX hosts for a domain are
33163down, a retry record is created for each one. If the primary MX host comes back
33164first, its record is removed when Exim successfully delivers to it, but the
33165records for the others remain because Exim has not tried to use those hosts.
33166
9b371988 33167It is important, therefore, to run &'exim_tidydb'& periodically on all the
168e428f
PH
33168hints databases. You should do this at a quiet time of day, because it requires
33169a database to be locked (and therefore inaccessible to Exim) while it does its
33170work. Removing records from a DBM file does not normally make the file smaller,
33171but all the common DBM libraries are able to re-use the space that is released.
33172After an initial phase of increasing in size, the databases normally reach a
33173point at which they no longer get any bigger, as long as they are regularly
33174tidied.
33175
9b371988 33176&*Warning*&: If you never run &'exim_tidydb'&, the space used by the hints
168e428f
PH
33177databases is likely to keep on increasing.
33178
33179
33180
33181
f89d2485 33182.section "exim_fixdb" "SECID263"
9b371988
PH
33183.cindex "&'exim_fixdb'&"
33184The &'exim_fixdb'& program is a utility for interactively modifying databases.
168e428f
PH
33185Its main use is for testing Exim, but it might also be occasionally useful for
33186getting round problems in a live system. It has no options, and its interface
33187is somewhat crude. On entry, it prompts for input with a right angle-bracket. A
33188key of a database record can then be entered, and the data for that record is
33189displayed.
33190
9b371988
PH
33191If &"d"& is typed at the next prompt, the entire record is deleted. For all
33192except the &'retry'& database, that is the only operation that can be carried
33193out. For the &'retry'& database, each field is output preceded by a number, and
168e428f
PH
33194data for individual fields can be changed by typing the field number followed
33195by new data, for example:
9b371988
PH
33196.code
33197> 4 951102:1000
33198.endd
168e428f
PH
33199resets the time of the next delivery attempt. Time values are given as a
33200sequence of digit pairs for year, month, day, hour, and minute. Colons can be
33201used as optional separators.
33202
33203
33204
33205
9b371988
PH
33206.section "Mailbox maintenance (exim_lock)" "SECTmailboxmaint"
33207.cindex "mailbox" "maintenance"
33208.cindex "&'exim_lock'&"
33209.cindex "locking mailboxes"
33210The &'exim_lock'& utility locks a mailbox file using the same algorithm as
33211Exim. For a discussion of locking issues, see section &<<SECTopappend>>&.
33212&'Exim_lock'& can be used to prevent any modification of a mailbox by Exim or
168e428f
PH
33213a user agent while investigating a problem. The utility requires the name of
33214the file as its first argument. If the locking is successful, the second
9b371988 33215argument is run as a command (using C's &[system()]& function); if there is no
168e428f 33216second argument, the value of the SHELL environment variable is used; if this
9b371988 33217is unset or empty, &_/bin/sh_& is run. When the command finishes, the mailbox
168e428f
PH
33218is unlocked and the utility ends. The following options are available:
33219
9b371988
PH
33220.vlist
33221.vitem &%-fcntl%&
33222Use &[fcntl()]& locking on the open mailbox.
33223
33224.vitem &%-flock%&
33225Use &[flock()]& locking on the open mailbox, provided the operating system
33226supports it.
33227
33228.vitem &%-interval%&
33229This must be followed by a number, which is a number of seconds; it sets the
33230interval to sleep between retries (default 3).
33231
33232.vitem &%-lockfile%&
33233Create a lock file before opening the mailbox.
33234
33235.vitem &%-mbx%&
33236Lock the mailbox using MBX rules.
33237
33238.vitem &%-q%&
33239Suppress verification output.
33240
33241.vitem &%-retries%&
33242This must be followed by a number; it sets the number of times to try to get
33243the lock (default 10).
33244
33245.vitem &%-restore_time%&
33246This option causes &%exim_lock%& to restore the modified and read times to the
33247locked file before exiting. This allows you to access a locked mailbox (for
33248example, to take a backup copy) without disturbing the times that the user
33249subsequently sees.
33250
33251.vitem &%-timeout%&
33252This must be followed by a number, which is a number of seconds; it sets a
33253timeout to be used with a blocking &[fcntl()]& lock. If it is not set (the
33254default), a non-blocking call is used.
33255
33256.vitem &%-v%&
33257Generate verbose output.
33258.endlist
33259
33260If none of &%-fcntl%&, &%-flock%&, &%-lockfile%& or &%-mbx%& are given, the
33261default is to create a lock file and also to use &[fcntl()]& locking on the
33262mailbox, which is the same as Exim's default. The use of &%-flock%& or
33263&%-fcntl%& requires that the file be writeable; the use of &%-lockfile%&
33264requires that the directory containing the file be writeable. Locking by lock
33265file does not last for ever; Exim assumes that a lock file is expired if it is
33266more than 30 minutes old.
33267
33268The &%-mbx%& option can be used with either or both of &%-fcntl%& or
33269&%-flock%&. It assumes &%-fcntl%& by default. MBX locking causes a shared lock
33270to be taken out on the open mailbox, and an exclusive lock on the file
33271&_/tmp/.n.m_& where &'n'& and &'m'& are the device number and inode
33272number of the mailbox file. When the locking is released, if an exclusive lock
33273can be obtained for the mailbox, the file in &_/tmp_& is deleted.
168e428f
PH
33274
33275The default output contains verification of the locking that takes place. The
9b371988 33276&%-v%& option causes some additional information to be given. The &%-q%& option
168e428f
PH
33277suppresses all output except error messages.
33278
33279A command such as
9b371988
PH
33280.code
33281exim_lock /var/spool/mail/spqr
33282.endd
168e428f 33283runs an interactive shell while the file is locked, whereas
9b371988
PH
33284.display
33285&`exim_lock -q /var/spool/mail/spqr <<End`&
33286<&'some commands'&>
33287&`End`&
33288.endd
168e428f
PH
33289runs a specific non-interactive sequence of commands while the file is locked,
33290suppressing all verification output. A single command can be run by a command
33291such as
9b371988 33292.code
168e428f
PH
33293exim_lock -q /var/spool/mail/spqr \
33294 "cp /var/spool/mail/spqr /some/where"
9b371988 33295.endd
168e428f 33296Note that if a command is supplied, it must be entirely contained within the
9b371988 33297second argument &-- hence the quotes.
4f578862 33298.ecindex IIDutils
168e428f
PH
33299
33300
9b371988
PH
33301. ////////////////////////////////////////////////////////////////////////////
33302. ////////////////////////////////////////////////////////////////////////////
168e428f 33303
9b371988 33304.chapter "The Exim monitor" "CHAPeximon"
4f578862 33305.scindex IIDeximon "Exim monitor" "description"
9b371988
PH
33306.cindex "X-windows"
33307.cindex "&'eximon'&"
33308.cindex "Local/eximon.conf"
3cb1b51e 33309.cindex "&_exim_monitor/EDITME_&"
168e428f
PH
33310The Exim monitor is an application which displays in an X window information
33311about the state of Exim's queue and what Exim is doing. An admin user can
33312perform certain operations on messages from this GUI interface; however all
33313such facilities are also available from the command line, and indeed, the
33314monitor itself makes use of the command line to perform any actions requested.
33315
33316
33317
f89d2485 33318.section "Running the monitor" "SECID264"
9b371988 33319The monitor is started by running the script called &'eximon'&. This is a shell
168e428f 33320script that sets up a number of environment variables, and then runs the
9b371988
PH
33321binary called &_eximon.bin_&. The default appearance of the monitor window can
33322be changed by editing the &_Local/eximon.conf_& file created by editing
33323&_exim_monitor/EDITME_&. Comments in that file describe what the various
168e428f
PH
33324parameters are for.
33325
9b371988
PH
33326The parameters that get built into the &'eximon'& script can be overridden for
33327a particular invocation by setting up environment variables of the same names,
33328preceded by &`EXIMON_`&. For example, a shell command such as
33329.code
33330EXIMON_LOG_DEPTH=400 eximon
33331.endd
33332(in a Bourne-compatible shell) runs &'eximon'& with an overriding setting of
33333the LOG_DEPTH parameter. If EXIMON_LOG_FILE_PATH is set in the environment, it
33334overrides the Exim log file configuration. This makes it possible to have
33335&'eximon'& tailing log data that is written to syslog, provided that MAIL.INFO
33336syslog messages are routed to a file on the local host.
168e428f
PH
33337
33338X resources can be used to change the appearance of the window in the normal
33339way. For example, a resource setting of the form
9b371988
PH
33340.code
33341Eximon*background: gray94
33342.endd
168e428f
PH
33343changes the colour of the background to light grey rather than white. The
33344stripcharts are drawn with both the data lines and the reference lines in
33345black. This means that the reference lines are not visible when on top of the
33346data. However, their colour can be changed by setting a resource called
9b371988 33347&"highlight"& (an odd name, but that's what the Athena stripchart widget uses).
168e428f
PH
33348For example, if your X server is running Unix, you could set up lighter
33349reference lines in the stripcharts by obeying
9b371988
PH
33350.code
33351xrdb -merge <<End
33352Eximon*highlight: gray
33353End
33354.endd
33355.cindex "admin user"
168e428f 33356In order to see the contents of messages on the queue, and to operate on them,
9b371988 33357&'eximon'& must either be run as root or by an admin user.
168e428f
PH
33358
33359The monitor's window is divided into three parts. The first contains one or
9b371988 33360more stripcharts and two action buttons, the second contains a &"tail"& of the
168e428f
PH
33361main log file, and the third is a display of the queue of messages awaiting
33362delivery, with two more action buttons. The following sections describe these
33363different parts of the display.
33364
33365
33366
33367
f89d2485 33368.section "The stripcharts" "SECID265"
9b371988 33369.cindex "stripchart"
168e428f
PH
33370The first stripchart is always a count of messages on the queue. Its name can
33371be configured by setting QUEUE_STRIPCHART_NAME in the
9b371988 33372&_Local/eximon.conf_& file. The remaining stripcharts are defined in the
168e428f
PH
33373configuration script by regular expression matches on log file entries, making
33374it possible to display, for example, counts of messages delivered to certain
33375hosts or using certain transports. The supplied defaults display counts of
33376received and delivered messages, and of local and SMTP deliveries. The default
33377period between stripchart updates is one minute; this can be adjusted by a
9b371988 33378parameter in the &_Local/eximon.conf_& file.
168e428f
PH
33379
33380The stripchart displays rescale themselves automatically as the value they are
33381displaying changes. There are always 10 horizontal lines in each chart; the
33382title string indicates the value of each division when it is greater than one.
9b371988 33383For example, &"x2"& means that each division represents a value of 2.
168e428f
PH
33384
33385It is also possible to have a stripchart which shows the percentage fullness of
33386a particular disk partition, which is useful when local deliveries are confined
33387to a single partition.
33388
9b371988
PH
33389.cindex "&%statvfs%& function"
33390This relies on the availability of the &[statvfs()]& function or equivalent in
168e428f
PH
33391the operating system. Most, but not all versions of Unix that support Exim have
33392this. For this particular stripchart, the top of the chart always represents
9b371988 33393100%, and the scale is given as &"x10%"&. This chart is configured by setting
168e428f 33394SIZE_STRIPCHART and (optionally) SIZE_STRIPCHART_NAME in the
9b371988 33395&_Local/eximon.conf_& file.
168e428f
PH
33396
33397
33398
33399
f89d2485 33400.section "Main action buttons" "SECID266"
9b371988
PH
33401.cindex "size" "of monitor window"
33402.cindex "Exim monitor" "window size"
33403.cindex "window size"
168e428f 33404Below the stripcharts there is an action button for quitting the monitor. Next
9b371988
PH
33405to this is another button marked &"Size"&. They are placed here so that
33406shrinking the window to its default minimum size leaves just the queue count
33407stripchart and these two buttons visible. Pressing the &"Size"& button causes
33408the window to expand to its maximum size, unless it is already at the maximum,
33409in which case it is reduced to its minimum.
168e428f
PH
33410
33411When expanding to the maximum, if the window cannot be fully seen where it
33412currently is, it is moved back to where it was the last time it was at full
33413size. When it is expanding from its minimum size, the old position is
33414remembered, and next time it is reduced to the minimum it is moved back there.
33415
33416The idea is that you can keep a reduced window just showing one or two
33417stripcharts at a convenient place on your screen, easily expand it to show
33418the full window when required, and just as easily put it back to what it was.
9b371988
PH
33419The idea is copied from what the &'twm'& window manager does for its
33420&'f.fullzoom'& action. The minimum size of the window can be changed by setting
33421the MIN_HEIGHT and MIN_WIDTH values in &_Local/eximon.conf_&.
168e428f
PH
33422
33423Normally, the monitor starts up with the window at its full size, but it can be
33424built so that it starts up with the window at its smallest size, by setting
9b371988 33425START_SMALL=yes in &_Local/eximon.conf_&.
168e428f
PH
33426
33427
33428
f89d2485 33429.section "The log display" "SECID267"
9b371988 33430.cindex "log" "tail of; in monitor"
168e428f
PH
33431The second section of the window is an area in which a display of the tail of
33432the main log is maintained.
33433To save space on the screen, the timestamp on each log line is shortened by
9b371988 33434removing the date and, if &%log_timezone%& is set, the timezone.
168e428f
PH
33435The log tail is not available when the only destination for logging data is
33436syslog, unless the syslog lines are routed to a local file whose name is passed
9b371988 33437to &'eximon'& via the EXIMON_LOG_FILE_PATH environment variable.
168e428f
PH
33438
33439The log sub-window has a scroll bar at its lefthand side which can be used to
33440move back to look at earlier text, and the up and down arrow keys also have a
33441scrolling effect. The amount of log that is kept depends on the setting of
9b371988
PH
33442LOG_BUFFER in &_Local/eximon.conf_&, which specifies the amount of memory
33443to use. When this is full, the earlier 50% of data is discarded &-- this is
33444much more efficient than throwing it away line by line. The sub-window also has
33445a horizontal scroll bar for accessing the ends of long log lines. This is the
168e428f
PH
33446only means of horizontal scrolling; the right and left arrow keys are not
33447available. Text can be cut from this part of the window using the mouse in the
33448normal way. The size of this subwindow is controlled by parameters in the
9b371988 33449configuration file &_Local/eximon.conf_&.
168e428f
PH
33450
33451Searches of the text in the log window can be carried out by means of the ^R
33452and ^S keystrokes, which default to a reverse and a forward search,
33453respectively. The search covers only the text that is displayed in the window.
33454It cannot go further back up the log.
33455
33456The point from which the search starts is indicated by a caret marker. This is
33457normally at the end of the text in the window, but can be positioned explicitly
33458by pointing and clicking with the left mouse button, and is moved automatically
33459by a successful search. If new text arrives in the window when it is scrolled
33460back, the caret remains where it is, but if the window is not scrolled back,
33461the caret is moved to the end of the new text.
33462
33463Pressing ^R or ^S pops up a window into which the search text can be typed.
33464There are buttons for selecting forward or reverse searching, for carrying out
9b371988 33465the search, and for cancelling. If the &"Search"& button is pressed, the search
168e428f 33466happens and the window remains so that further searches can be done. If the
9b371988 33467&"Return"& key is pressed, a single search is done and the window is closed. If
168e428f
PH
33468^C is typed the search is cancelled.
33469
33470The searching facility is implemented using the facilities of the Athena text
9b371988
PH
33471widget. By default this pops up a window containing both &"search"& and
33472&"replace"& options. In order to suppress the unwanted &"replace"& portion for
33473eximon, a modified version of the &%TextPop%& widget is distributed with Exim.
33474However, the linkers in BSDI and HP-UX seem unable to handle an externally
33475provided version of &%TextPop%& when the remaining parts of the text widget
33476come from the standard libraries. The compile-time option EXIMON_TEXTPOP can be
33477unset to cut out the modified &%TextPop%&, making it possible to build Eximon
33478on these systems, at the expense of having unwanted items in the search popup
33479window.
168e428f
PH
33480
33481
33482
f89d2485 33483.section "The queue display" "SECID268"
9b371988 33484.cindex "queue" "display in monitor"
168e428f
PH
33485The bottom section of the monitor window contains a list of all messages that
33486are on the queue, which includes those currently being received or delivered,
33487as well as those awaiting delivery. The size of this subwindow is controlled by
9b371988
PH
33488parameters in the configuration file &_Local/eximon.conf_&, and the frequency
33489at which it is updated is controlled by another parameter in the same file &--
168e428f 33490the default is 5 minutes, since queue scans can be quite expensive. However,
9b371988
PH
33491there is an &"Update"& action button just above the display which can be used
33492to force an update of the queue display at any time.
168e428f
PH
33493
33494When a host is down for some time, a lot of pending mail can build up for it,
33495and this can make it hard to deal with other messages on the queue. To help
9b371988
PH
33496with this situation there is a button next to &"Update"& called &"Hide"&. If
33497pressed, a dialogue box called &"Hide addresses ending with"& is put up. If you
33498type anything in here and press &"Return"&, the text is added to a chain of
33499such texts, and if every undelivered address in a message matches at least one
168e428f
PH
33500of the texts, the message is not displayed.
33501
33502If there is an address that does not match any of the texts, all the addresses
33503are displayed as normal. The matching happens on the ends of addresses so, for
9b371988
PH
33504example, &'cam.ac.uk'& specifies all addresses in Cambridge, while
33505&'xxx@foo.com.example'& specifies just one specific address. When any hiding
33506has been set up, a button called &"Unhide"& is displayed. If pressed, it
33507cancels all hiding. Also, to ensure that hidden messages do not get forgotten,
33508a hide request is automatically cancelled after one hour.
168e428f
PH
33509
33510While the dialogue box is displayed, you can't press any buttons or do anything
33511else to the monitor window. For this reason, if you want to cut text from the
33512queue display to use in the dialogue box, you have to do the cutting before
9b371988 33513pressing the &"Hide"& button.
168e428f
PH
33514
33515The queue display contains, for each unhidden queued message, the length of
33516time it has been on the queue, the size of the message, the message id, the
33517message sender, and the first undelivered recipient, all on one line. If it is
9b371988 33518a bounce message, the sender is shown as &"<>"&. If there is more than one
168e428f
PH
33519recipient to which the message has not yet been delivered, subsequent ones are
33520listed on additional lines, up to a maximum configured number, following which
33521an ellipsis is displayed. Recipients that have already received the message are
33522not shown.
33523
9b371988 33524.cindex "frozen messages" "display"
168e428f
PH
33525If a message is frozen, an asterisk is displayed at the left-hand side.
33526
33527The queue display has a vertical scroll bar, and can also be scrolled by means
33528of the arrow keys. Text can be cut from it using the mouse in the normal way.
33529The text searching facilities, as described above for the log window, are also
33530available, but the caret is always moved to the end of the text when the queue
33531display is updated.
33532
33533
33534
f89d2485 33535.section "The queue menu" "SECID269"
9b371988
PH
33536.cindex "queue" "menu in monitor"
33537If the &%shift%& key is held down and the left button is clicked when the mouse
168e428f
PH
33538pointer is over the text for any message, an action menu pops up, and the first
33539line of the queue display for the message is highlighted. This does not affect
33540any selected text.
33541
33542If you want to use some other event for popping up the menu, you can set the
9b371988 33543MENU_EVENT parameter in &_Local/eximon.conf_& to change the default, or
168e428f
PH
33544set EXIMON_MENU_EVENT in the environment before starting the monitor. The
33545value set in this parameter is a standard X event description. For example, to
9b371988
PH
33546run eximon using &%ctrl%& rather than &%shift%& you could use
33547.code
33548EXIMON_MENU_EVENT='Ctrl<Btn1Down>' eximon
33549.endd
168e428f
PH
33550The title of the menu is the message id, and it contains entries which act as
33551follows:
33552
9b371988
PH
33553.ilist
33554&'message log'&: The contents of the message log for the message are displayed
33555in a new text window.
33556.next
33557&'headers'&: Information from the spool file that contains the envelope
168e428f 33558information and headers is displayed in a new text window. See chapter
9b371988
PH
33559&<<CHAPspool>>& for a description of the format of spool files.
33560.next
33561&'body'&: The contents of the spool file containing the body of the message are
168e428f
PH
33562displayed in a new text window. There is a default limit of 20,000 bytes to the
33563amount of data displayed. This can be changed by setting the BODY_MAX
33564option at compile time, or the EXIMON_BODY_MAX option at run time.
9b371988
PH
33565.next
33566&'deliver message'&: A call to Exim is made using the &%-M%& option to request
168e428f 33567delivery of the message. This causes an automatic thaw if the message is
9b371988 33568frozen. The &%-v%& option is also set, and the output from Exim is displayed in
168e428f
PH
33569a new text window. The delivery is run in a separate process, to avoid holding
33570up the monitor while the delivery proceeds.
9b371988
PH
33571.next
33572&'freeze message'&: A call to Exim is made using the &%-Mf%& option to request
168e428f 33573that the message be frozen.
9b371988
PH
33574.next
33575.cindex "thawing messages"
33576.cindex "unfreezing messages"
33577.cindex "frozen messages" "thawing"
33578&'thaw message'&: A call to Exim is made using the &%-Mt%& option to request
33579that the message be thawed.
33580.next
33581.cindex "delivery" "forcing failure"
33582&'give up on msg'&: A call to Exim is made using the &%-Mg%& option to request
168e428f
PH
33583that Exim gives up trying to deliver the message. A bounce message is generated
33584for any remaining undelivered addresses.
9b371988
PH
33585.next
33586&'remove message'&: A call to Exim is made using the &%-Mrm%& option to request
168e428f
PH
33587that the message be deleted from the system without generating a bounce
33588message.
9b371988
PH
33589.next
33590&'add recipient'&: A dialog box is displayed into which a recipient address can
168e428f 33591be typed. If the address is not qualified and the QUALIFY_DOMAIN parameter
9b371988 33592is set in &_Local/eximon.conf_&, the address is qualified with that domain.
168e428f 33593Otherwise it must be entered as a fully qualified address. Pressing RETURN
9b371988 33594causes a call to Exim to be made using the &%-Mar%& option to request that an
168e428f
PH
33595additional recipient be added to the message, unless the entry box is empty, in
33596which case no action is taken.
9b371988
PH
33597.next
33598&'mark delivered'&: A dialog box is displayed into which a recipient address
33599can be typed. If the address is not qualified and the QUALIFY_DOMAIN parameter
33600is set in &_Local/eximon.conf_&, the address is qualified with that domain.
168e428f 33601Otherwise it must be entered as a fully qualified address. Pressing RETURN
9b371988 33602causes a call to Exim to be made using the &%-Mmd%& option to mark the given
168e428f
PH
33603recipient address as already delivered, unless the entry box is empty, in which
33604case no action is taken.
9b371988
PH
33605.next
33606&'mark all delivered'&: A call to Exim is made using the &%-Mmad%& option to
33607mark all recipient addresses as already delivered.
33608.next
33609&'edit sender'&: A dialog box is displayed initialized with the current
33610sender's address. Pressing RETURN causes a call to Exim to be made using the
33611&%-Mes%& option to replace the sender address, unless the entry box is empty,
33612in which case no action is taken. If you want to set an empty sender (as in
33613bounce messages), you must specify it as &"<>"&. Otherwise, if the address is
33614not qualified and the QUALIFY_DOMAIN parameter is set in &_Local/eximon.conf_&,
33615the address is qualified with that domain.
33616.endlist
33617
33618When a delivery is forced, a window showing the &%-v%& output is displayed. In
168e428f
PH
33619other cases when a call to Exim is made, if there is any output from Exim (in
33620particular, if the command fails) a window containing the command and the
33621output is displayed. Otherwise, the results of the action are normally apparent
33622from the log and queue displays. However, if you set ACTION_OUTPUT=yes in
9b371988 33623&_Local/eximon.conf_&, a window showing the Exim command is always opened, even
168e428f
PH
33624if no output is generated.
33625
33626The queue display is automatically updated for actions such as freezing and
33627thawing, unless ACTION_QUEUE_UPDATE=no has been set in
9b371988
PH
33628&_Local/eximon.conf_&. In this case the &"Update"& button has to be used to
33629force an update of the display after one of these actions.
168e428f
PH
33630
33631In any text window that is displayed as result of a menu action, the normal
33632cut-and-paste facility is available, and searching can be carried out using ^R
33633and ^S, as described above for the log tail window.
4f578862 33634.ecindex IIDeximon
168e428f
PH
33635
33636
33637
33638
33639
9b371988
PH
33640. ////////////////////////////////////////////////////////////////////////////
33641. ////////////////////////////////////////////////////////////////////////////
168e428f 33642
9b371988 33643.chapter "Security considerations" "CHAPsecurity"
4f578862 33644.scindex IIDsecurcon "security" "discussion of"
168e428f
PH
33645This chapter discusses a number of issues concerned with security, some of
33646which are also covered in other parts of this manual.
33647
33648For reasons that this author does not understand, some people have promoted
9b371988
PH
33649Exim as a &"particularly secure"& mailer. Perhaps it is because of the
33650existence of this chapter in the documentation. However, the intent of the
33651chapter is simply to describe the way Exim works in relation to certain
33652security concerns, not to make any specific claims about the effectiveness of
33653its security as compared with other MTAs.
168e428f
PH
33654
33655What follows is a description of the way Exim is supposed to be. Best efforts
33656have been made to try to ensure that the code agrees with the theory, but an
33657absence of bugs can never be guaranteed. Any that are reported will get fixed
33658as soon as possible.
33659
33660
f89d2485 33661.section "Building a more &""hardened""& Exim" "SECID286"
9b371988
PH
33662.cindex "security" "build-time features"
33663There are a number of build-time options that can be set in &_Local/Makefile_&
33664to create Exim binaries that are &"harder"& to attack, in particular by a rogue
168e428f
PH
33665Exim administrator who does not have the root password, or by someone who has
33666penetrated the Exim (but not the root) account. These options are as follows:
33667
9b371988
PH
33668.ilist
33669ALT_CONFIG_PREFIX can be set to a string that is required to match the
33670start of any file names used with the &%-C%& option. When it is set, these file
33671names are also not allowed to contain the sequence &"/../"&. (However, if the
33672value of the &%-C%& option is identical to the value of CONFIGURE_FILE in
33673&_Local/Makefile_&, Exim ignores &%-C%& and proceeds as usual.) There is no
33674default setting for &%ALT_CONFIG_PREFIX%&.
33675
168e428f
PH
33676If the permitted configuration files are confined to a directory to
33677which only root has access, this guards against someone who has broken
33678into the Exim account from running a privileged Exim with an arbitrary
33679configuration file, and using it to break into other accounts.
9b371988
PH
33680.next
33681If ALT_CONFIG_ROOT_ONLY is defined, root privilege is retained for &%-C%&
33682and &%-D%& only if the caller of Exim is root. Without it, the Exim user may
33683also use &%-C%& and &%-D%& and retain privilege. Setting this option locks out
33684the possibility of testing a configuration using &%-C%& right through message
168e428f
PH
33685reception and delivery, even if the caller is root. The reception works, but by
33686that time, Exim is running as the Exim user, so when it re-execs to regain
9b371988 33687privilege for the delivery, the use of &%-C%& causes privilege to be lost.
168e428f
PH
33688However, root can test reception and delivery using two separate commands.
33689ALT_CONFIG_ROOT_ONLY is not set by default.
9b371988
PH
33690.next
33691If DISABLE_D_OPTION is defined, the use of the &%-D%& command line option
168e428f 33692is disabled.
9b371988
PH
33693.next
33694FIXED_NEVER_USERS can be set to a colon-separated list of users that are
33695never to be used for any deliveries. This is like the &%never_users%& runtime
168e428f 33696option, but it cannot be overridden; the runtime option adds additional users
9b371988 33697to the list. The default setting is &"root"&; this prevents a non-root user who
168e428f 33698is permitted to modify the runtime file from using Exim as a way to get root.
9b371988 33699.endlist
168e428f
PH
33700
33701
33702
33703
f89d2485 33704.section "Root privilege" "SECID270"
9b371988
PH
33705.cindex "setuid"
33706.cindex "root privilege"
168e428f
PH
33707The Exim binary is normally setuid to root, which means that it gains root
33708privilege (runs as root) when it starts execution. In some special cases (for
33709example, when the daemon is not in use and there are no local deliveries), it
33710may be possible to run Exim setuid to some user other than root. This is
33711discussed in the next section. However, in most installations, root privilege
33712is required for two things:
33713
9b371988
PH
33714.ilist
33715To set up a socket connected to the standard SMTP port (25) when initialising
33716the listening daemon. If Exim is run from &'inetd'&, this privileged action is
168e428f 33717not required.
9b371988
PH
33718.next
33719To be able to change uid and gid in order to read users' &_.forward_& files and
168e428f
PH
33720perform local deliveries as the receiving user or as specified in the
33721configuration.
9b371988 33722.endlist
168e428f
PH
33723
33724It is not necessary to be root to do any of the other things Exim does, such as
33725receiving messages and delivering them externally over SMTP, and it is
33726obviously more secure if Exim does not run as root except when necessary.
33727For this reason, a user and group for Exim to use must be defined in
9b371988
PH
33728&_Local/Makefile_&. These are known as &"the Exim user"& and &"the Exim
33729group"&. Their values can be changed by the run time configuration, though this
33730is not recommended. Often a user called &'exim'& is used, but some sites use
33731&'mail'& or another user name altogether.
168e428f 33732
9b371988 33733Exim uses &[setuid()]& whenever it gives up root privilege. This is a permanent
168e428f 33734abdication; the process cannot regain root afterwards. Prior to release 4.00,
9b371988 33735&[seteuid()]& was used in some circumstances, but this is no longer the case.
168e428f
PH
33736
33737After a new Exim process has interpreted its command line options, it changes
33738uid and gid in the following cases:
33739
9b371988 33740.ilist
f89d2485
PH
33741.oindex "&%-C%&"
33742.oindex "&%-D%&"
9b371988
PH
33743If the &%-C%& option is used to specify an alternate configuration file, or if
33744the &%-D%& option is used to define macro values for the configuration, and the
168e428f
PH
33745calling process is not running as root or the Exim user, the uid and gid are
33746changed to those of the calling process.
9b371988
PH
33747However, if ALT_CONFIG_ROOT_ONLY is defined in &_Local/Makefile_&, only
33748root callers may use &%-C%& and &%-D%& without losing privilege, and if
33749DISABLE_D_OPTION is set, the &%-D%& option may not be used at all.
33750.next
f89d2485
PH
33751.oindex "&%-be%&"
33752.oindex "&%-bf%&"
33753.oindex "&%-bF%&"
9b371988
PH
33754If the expansion test option (&%-be%&) or one of the filter testing options
33755(&%-bf%& or &%-bF%&) are used, the uid and gid are changed to those of the
168e428f 33756calling process.
9b371988
PH
33757.next
33758If the process is not a daemon process or a queue runner process or a delivery
33759process or a process for testing address routing (started with &%-bt%&), the
33760uid and gid are changed to the Exim user and group. This means that Exim always
168e428f
PH
33761runs under its own uid and gid when receiving messages. This also applies when
33762testing address verification
f89d2485
PH
33763.oindex "&%-bv%&"
33764.oindex "&%-bh%&"
9b371988 33765(the &%-bv%& option) and testing incoming message policy controls (the &%-bh%&
168e428f 33766option).
9b371988
PH
33767.next
33768For a daemon, queue runner, delivery, or address testing process, the uid
168e428f 33769remains as root at this stage, but the gid is changed to the Exim group.
9b371988 33770.endlist
168e428f
PH
33771
33772The processes that initially retain root privilege behave as follows:
33773
9b371988
PH
33774.ilist
33775A daemon process changes the gid to the Exim group and the uid to the Exim
33776user after setting up one or more listening sockets. The &[initgroups()]&
168e428f
PH
33777function is called, so that if the Exim user is in any additional groups, they
33778will be used during message reception.
9b371988
PH
33779.next
33780A queue runner process retains root privilege throughout its execution. Its
168e428f 33781job is to fork a controlled sequence of delivery processes.
9b371988
PH
33782.next
33783A delivery process retains root privilege throughout most of its execution,
168e428f
PH
33784but any actual deliveries (that is, the transports themselves) are run in
33785subprocesses which always change to a non-root uid and gid. For local
33786deliveries this is typically the uid and gid of the owner of the mailbox; for
33787remote deliveries, the Exim uid and gid are used. Once all the delivery
33788subprocesses have been run, a delivery process changes to the Exim uid and gid
33789while doing post-delivery tidying up such as updating the retry database and
33790generating bounce and warning messages.
9b371988 33791
168e428f
PH
33792While the recipient addresses in a message are being routed, the delivery
33793process runs as root. However, if a user's filter file has to be processed,
33794this is done in a subprocess that runs under the individual user's uid and
9b371988
PH
33795gid. A system filter is run as root unless &%system_filter_user%& is set.
33796.next
33797A process that is testing addresses (the &%-bt%& option) runs as root so that
168e428f 33798the routing is done in the same environment as a message delivery.
9b371988 33799.endlist
168e428f
PH
33800
33801
33802
33803
9b371988 33804.section "Running Exim without privilege" "SECTrunexiwitpri"
f89d2485 33805.cindex "privilege, running without"
9b371988
PH
33806.cindex "unprivileged running"
33807.cindex "root privilege" "running without"
168e428f
PH
33808Some installations like to run Exim in an unprivileged state for more of its
33809operation, for added security. Support for this mode of operation is provided
9b371988 33810by the global option &%deliver_drop_privilege%&. When this is set, the uid and
168e428f
PH
33811gid are changed to the Exim user and group at the start of a delivery process
33812(and also queue runner and address testing processes). This means that address
33813routing is no longer run as root, and the deliveries themselves cannot change
33814to any other uid.
33815
3cb1b51e
PH
33816.cindex SIGHUP
33817.cindex "daemon" "restarting"
9b371988 33818Leaving the binary setuid to root, but setting &%deliver_drop_privilege%& means
168e428f
PH
33819that the daemon can still be started in the usual way, and it can respond
33820correctly to SIGHUP because the re-invocation regains root privilege.
33821
33822An alternative approach is to make Exim setuid to the Exim user and also setgid
3cb1b51e
PH
33823to the Exim group. If you do this, the daemon must be started from a root
33824process. (Calling Exim from a root process makes it behave in the way it does
33825when it is setuid root.) However, the daemon cannot restart itself after a
33826SIGHUP signal because it cannot regain privilege.
168e428f 33827
9b371988 33828It is still useful to set &%deliver_drop_privilege%& in this case, because it
168e428f
PH
33829stops Exim from trying to re-invoke itself to do a delivery after a message has
33830been received. Such a re-invocation is a waste of resources because it has no
33831effect.
33832
9b371988
PH
33833If restarting the daemon is not an issue (for example, if &%mua_wrapper%& is
33834set, or &'inetd'& is being used instead of a daemon), having the binary setuid
33835to the Exim user seems a clean approach, but there is one complication:
168e428f
PH
33836
33837In this style of operation, Exim is running with the real uid and gid set to
33838those of the calling process, and the effective uid/gid set to Exim's values.
33839Ideally, any association with the calling process' uid/gid should be dropped,
33840that is, the real uid/gid should be reset to the effective values so as to
33841discard any privileges that the caller may have. While some operating systems
33842have a function that permits this action for a non-root effective uid, quite a
33843number of them do not. Because of this lack of standardization, Exim does not
33844address this problem at this time.
33845
9b371988
PH
33846For this reason, the recommended approach for &"mostly unprivileged"& running
33847is to keep the Exim binary setuid to root, and to set
33848&%deliver_drop_privilege%&. This also has the advantage of allowing a daemon to
33849be used in the most straightforward way.
168e428f
PH
33850
33851If you configure Exim not to run delivery processes as root, there are a
33852number of restrictions on what you can do:
33853
9b371988
PH
33854.ilist
33855You can deliver only as the Exim user/group. You should explicitly use the
33856&%user%& and &%group%& options to override routers or local transports that
168e428f
PH
33857normally deliver as the recipient. This makes sure that configurations that
33858work in this mode function the same way in normal mode. Any implicit or
33859explicit specification of another user causes an error.
9b371988
PH
33860.next
33861Use of &_.forward_& files is severely restricted, such that it is usually
168e428f 33862not worthwhile to include them in the configuration.
9b371988
PH
33863.next
33864Users who wish to use &_.forward_& would have to make their home directory and
168e428f
PH
33865the file itself accessible to the Exim user. Pipe and append-to-file entries,
33866and their equivalents in Exim filters, cannot be used. While they could be
33867enabled in the Exim user's name, that would be insecure and not very useful.
9b371988
PH
33868.next
33869Unless the local user mailboxes are all owned by the Exim user (possible in
168e428f
PH
33870some POP3 or IMAP-only environments):
33871
9b371988 33872.olist
f89d2485 33873They must be owned by the Exim group and be writeable by that group. This
9b371988 33874implies you must set &%mode%& in the appendfile configuration, as well as the
168e428f 33875mode of the mailbox files themselves.
9b371988
PH
33876.next
33877You must set &%no_check_owner%&, since most or all of the files will not be
168e428f 33878owned by the Exim user.
9b371988
PH
33879.next
33880You must set &%file_must_exist%&, because Exim cannot set the owner correctly
168e428f
PH
33881on a newly created mailbox when unprivileged. This also implies that new
33882mailboxes need to be created manually.
9b371988
PH
33883.endlist olist
33884.endlist ilist
33885
168e428f
PH
33886
33887These restrictions severely restrict what can be done in local deliveries.
33888However, there are no restrictions on remote deliveries. If you are running a
9b371988 33889gateway host that does no local deliveries, setting &%deliver_drop_privilege%&
168e428f
PH
33890gives more security at essentially no cost.
33891
9b371988
PH
33892If you are using the &%mua_wrapper%& facility (see chapter
33893&<<CHAPnonqueueing>>&), &%deliver_drop_privilege%& is forced to be true.
168e428f
PH
33894
33895
33896
33897
f89d2485 33898.section "Delivering to local files" "SECID271"
9b371988
PH
33899Full details of the checks applied by &(appendfile)& before it writes to a file
33900are given in chapter &<<CHAPappendfile>>&.
168e428f
PH
33901
33902
33903
f89d2485 33904.section "IPv4 source routing" "SECID272"
9b371988
PH
33905.cindex "source routing" "in IP packets"
33906.cindex "IP source routing"
168e428f
PH
33907Many operating systems suppress IP source-routed packets in the kernel, but
33908some cannot be made to do this, so Exim does its own check. It logs incoming
33909IPv4 source-routed TCP calls, and then drops them. Things are all different in
33910IPv6. No special checking is currently done.
33911
33912
33913
f89d2485 33914.section "The VRFY, EXPN, and ETRN commands in SMTP" "SECID273"
168e428f
PH
33915Support for these SMTP commands is disabled by default. If required, they can
33916be enabled by defining suitable ACLs.
33917
33918
33919
33920
f89d2485
PH
33921.section "Privileged users" "SECID274"
33922.cindex "trusted users"
9b371988
PH
33923.cindex "admin user"
33924.cindex "privileged user"
33925.cindex "user" "trusted"
33926.cindex "user" "admin"
f89d2485 33927Exim recognizes two sets of users with special privileges. Trusted users are
168e428f
PH
33928able to submit new messages to Exim locally, but supply their own sender
33929addresses and information about a sending host. For other users submitting
33930local messages, Exim sets up the sender address from the uid, and doesn't
33931permit a remote host to be specified.
33932
f89d2485 33933.oindex "&%-f%&"
9b371988
PH
33934However, an untrusted user is permitted to use the &%-f%& command line option
33935in the special form &%-f <>%& to indicate that a delivery failure for the
33936message should not cause an error report. This affects the message's envelope,
33937but it does not affect the &'Sender:'& header. Untrusted users may also be
33938permitted to use specific forms of address with the &%-f%& option by setting
33939the &%untrusted_set_sender%& option.
168e428f
PH
33940
33941Trusted users are used to run processes that receive mail messages from some
33942other mail domain and pass them on to Exim for delivery either locally, or over
33943the Internet. Exim trusts a caller that is running as root, as the Exim user,
9b371988
PH
33944as any user listed in the &%trusted_users%& configuration option, or under any
33945group listed in the &%trusted_groups%& option.
168e428f
PH
33946
33947Admin users are permitted to do things to the messages on Exim's queue. They
33948can freeze or thaw messages, cause them to be returned to their senders, remove
33949them entirely, or modify them in various ways. In addition, admin users can run
33950the Exim monitor and see all the information it is capable of providing, which
33951includes the contents of files on the spool.
33952
f89d2485
PH
33953.oindex "&%-M%&"
33954.oindex "&%-q%&"
9b371988 33955By default, the use of the &%-M%& and &%-q%& options to cause Exim to attempt
168e428f 33956delivery of messages on its queue is restricted to admin users. This
9b371988
PH
33957restriction can be relaxed by setting the &%no_prod_requires_admin%& option.
33958Similarly, the use of &%-bp%& (and its variants) to list the contents of the
168e428f 33959queue is also restricted to admin users. This restriction can be relaxed by
9b371988 33960setting &%no_queue_list_requires_admin%&.
168e428f 33961
f89d2485 33962Exim recognizes an admin user if the calling process is running as root or as
168e428f
PH
33963the Exim user or if any of the groups associated with the calling process is
33964the Exim group. It is not necessary actually to be running under the Exim
33965group. However, if admin users who are not root or the Exim user are to access
33966the contents of files on the spool via the Exim monitor (which runs
33967unprivileged), Exim must be built to allow group read access to its spool
33968files.
33969
33970
33971
f89d2485 33972.section "Spool files" "SECID275"
9b371988 33973.cindex "spool directory" "files"
168e428f
PH
33974Exim's spool directory and everything it contains is owned by the Exim user and
33975set to the Exim group. The mode for spool files is defined in the
9b371988 33976&_Local/Makefile_& configuration file, and defaults to 0640. This means that
168e428f
PH
33977any user who is a member of the Exim group can access these files.
33978
33979
33980
f89d2485 33981.section "Use of argv[0]" "SECID276"
9b371988 33982Exim examines the last component of &%argv[0]%&, and if it matches one of a set
168e428f 33983of specific strings, Exim assumes certain options. For example, calling Exim
9b371988
PH
33984with the last component of &%argv[0]%& set to &"rsmtp"& is exactly equivalent
33985to calling it with the option &%-bS%&. There are no security implications in
33986this.
168e428f
PH
33987
33988
33989
f89d2485 33990.section "Use of %f formatting" "SECID277"
9b371988 33991The only use made of &"%f"& by Exim is in formatting load average values. These
168e428f
PH
33992are actually stored in integer variables as 1000 times the load average.
33993Consequently, their range is limited and so therefore is the length of the
33994converted output.
33995
33996
33997
f89d2485 33998.section "Embedded Exim path" "SECID278"
168e428f
PH
33999Exim uses its own path name, which is embedded in the code, only when it needs
34000to re-exec in order to regain root privilege. Therefore, it is not root when it
34001does so. If some bug allowed the path to get overwritten, it would lead to an
34002arbitrary program's being run as exim, not as root.
34003
34004
34005
f89d2485 34006.section "Use of sprintf()" "SECID279"
9b371988
PH
34007.cindex "&[sprintf()]&"
34008A large number of occurrences of &"sprintf"& in the code are actually calls to
34009&'string_sprintf()'&, a function that returns the result in malloc'd store.
168e428f
PH
34010The intermediate formatting is done into a large fixed buffer by a function
34011that runs through the format string itself, and checks the length of each
34012conversion before performing it, thus preventing buffer overruns.
34013
9b371988 34014The remaining uses of &[sprintf()]& happen in controlled circumstances where
168e428f
PH
34015the output buffer is known to be sufficiently long to contain the converted
34016string.
34017
34018
34019
f89d2485 34020.section "Use of debug_printf() and log_write()" "SECID280"
168e428f 34021Arbitrary strings are passed to both these functions, but they do their
9b371988 34022formatting by calling the function &'string_vformat()'&, which runs through
168e428f
PH
34023the format string itself, and checks the length of each conversion.
34024
34025
34026
f89d2485 34027.section "Use of strcat() and strcpy()" "SECID281"
168e428f
PH
34028These are used only in cases where the output buffer is known to be large
34029enough to hold the result.
4f578862 34030.ecindex IIDsecurcon
168e428f
PH
34031
34032
34033
34034
9b371988
PH
34035. ////////////////////////////////////////////////////////////////////////////
34036. ////////////////////////////////////////////////////////////////////////////
168e428f 34037
9b371988 34038.chapter "Format of spool files" "CHAPspool"
4f578862
PH
34039.scindex IIDforspo1 "format" "spool files"
34040.scindex IIDforspo2 "spool directory" "format of files"
34041.scindex IIDforspo3 "spool files" "format of"
9b371988 34042.cindex "spool files" "editing"
168e428f
PH
34043A message on Exim's queue consists of two files, whose names are the message id
34044followed by -D and -H, respectively. The data portion of the message is kept in
34045the -D file on its own. The message's envelope, status, and headers are all
34046kept in the -H file, whose format is described in this chapter. Each of these
34047two files contains the final component of its own name as its first line. This
34048is insurance against disk crashes where the directory is lost but the files
34049themselves are recoverable.
34050
34051Some people are tempted into editing -D files in order to modify messages. You
34052need to be extremely careful if you do this; it is not recommended and you are
34053on your own if you do it. Here are some of the pitfalls:
34054
9b371988 34055.ilist
9b371988 34056You must ensure that Exim does not try to deliver the message while you are
068aaea8 34057fiddling with it. The safest way is to take out a write lock on the -D file,
9b371988 34058which is what Exim itself does, using &[fcntl()]&. If you update the file in
068aaea8
PH
34059place, the lock will be retained. If you write a new file and rename it, the
34060lock will be lost at the instant of rename.
9b371988 34061.next
f89d2485 34062.vindex "&$body_linecount$&"
068aaea8 34063If you change the number of lines in the file, the value of
9b371988 34064&$body_linecount$&, which is stored in the -H file, will be incorrect. At
068aaea8
PH
34065present, this value is not used by Exim, but there is no guarantee that this
34066will always be the case.
9b371988
PH
34067.next
34068If the message is in MIME format, you must take care not to break it.
34069.next
34070If the message is cryptographically signed, any change will invalidate the
168e428f 34071signature.
9b371988 34072.endlist
f89d2485 34073All in all, modifying -D files is fraught with danger.
168e428f 34074
9b371988
PH
34075Files whose names end with -J may also be seen in the &_input_& directory (or
34076its subdirectories when &%split_spool_directory%& is set). These are journal
168e428f 34077files, used to record addresses to which the message has been delivered during
f89d2485
PH
34078the course of a delivery attempt. If there are still undelivered recipients at
34079the end, the -H file is updated, and the -J file is deleted. If, however, there
34080is some kind of crash (for example, a power outage) before this happens, the -J
34081file remains in existence. When Exim next processes the message, it notices the
34082-J file and uses it to update the -H file before starting the next delivery
34083attempt.
168e428f 34084
f89d2485 34085.section "Format of the -H file" "SECID282"
9b371988
PH
34086.cindex "uid (user id)" "in spool file"
34087.cindex "gid (group id)" "in spool file"
168e428f
PH
34088The second line of the -H file contains the login name for the uid of the
34089process that called Exim to read the message, followed by the numerical uid and
34090gid. For a locally generated message, this is normally the user who sent the
595028e4 34091message. For a message received over TCP/IP via the daemon, it is
f89d2485 34092normally the Exim user.
168e428f
PH
34093
34094The third line of the file contains the address of the message's sender as
34095transmitted in the envelope, contained in angle brackets. The sender address is
34096empty for bounce messages. For incoming SMTP mail, the sender address is given
34097in the MAIL command. For locally generated mail, the sender address is
34098created by Exim from the login name of the current user and the configured
9b371988
PH
34099&%qualify_domain%&. However, this can be overridden by the &%-f%& option or a
34100leading &"From&~"& line if the caller is trusted, or if the supplied address is
34101&"<>"& or an address that matches &%untrusted_set_senders%&.
168e428f
PH
34102
34103The fourth line contains two numbers. The first is the time that the message
9b371988 34104was received, in the conventional Unix form &-- the number of seconds since the
168e428f
PH
34105start of the epoch. The second number is a count of the number of messages
34106warning of delayed delivery that have been sent to the sender.
34107
34108There follow a number of lines starting with a hyphen. These can appear in any
34109order, and are omitted when not relevant:
34110
9b371988 34111.vlist
3cb1b51e 34112.vitem "&%-acl%&&~<&'number'&>&~<&'length'&>"
4f578862
PH
34113This item is obsolete, and is not generated from Exim release 4.61 onwards;
34114&%-aclc%& and &%-aclm%& are used instead. However, &%-acl%& is still
34115recognized, to provide backward compatibility. In the old format, a line of
34116this form is present for every ACL variable that is not empty. The number
34117identifies the variable; the &%acl_c%&&*x*& variables are numbered 0&--9 and
34118the &%acl_m%&&*x*& variables are numbered 10&--19. The length is the length of
34119the data string for the variable. The string itself starts at the beginning of
34120the next line, and is followed by a newline character. It may contain internal
34121newlines.
34122
3cb1b51e
PH
34123.vitem "&%-aclc%&&~<&'rest-of-name'&>&~<&'length'&>"
34124A line of this form is present for every ACL connection variable that is
34125defined. Note that there is a space between &%-aclc%& and the rest of the name.
34126The length is the length of the data string for the variable. The string itself
34127starts at the beginning of the next line, and is followed by a newline
34128character. It may contain internal newlines.
34129
34130.vitem "&%-aclm%&&~<&'rest-of-name'&>&~<&'length'&>"
34131A line of this form is present for every ACL message variable that is defined.
34132Note that there is a space between &%-aclm%& and the rest of the name. The
34133length is the length of the data string for the variable. The string itself
34134starts at the beginning of the next line, and is followed by a newline
34135character. It may contain internal newlines.
168e428f 34136
3cb1b51e 34137.vitem "&%-active_hostname%&&~<&'hostname'&>"
168e428f 34138This is present if, when the message was received over SMTP, the value of
9b371988 34139&$smtp_active_hostname$& was different to the value of &$primary_hostname$&.
168e428f 34140
9b371988 34141.vitem &%-allow_unqualified_recipient%&
168e428f
PH
34142This is present if unqualified recipient addresses are permitted in header
34143lines (to stop such addresses from being qualified if rewriting occurs at
9b371988
PH
34144transport time). Local messages that were input using &%-bnq%& and remote
34145messages from hosts that match &%recipient_unqualified_hosts%& set this flag.
168e428f 34146
9b371988 34147.vitem &%-allow_unqualified_sender%&
168e428f
PH
34148This is present if unqualified sender addresses are permitted in header lines
34149(to stop such addresses from being qualified if rewriting occurs at transport
9b371988
PH
34150time). Local messages that were input using &%-bnq%& and remote messages from
34151hosts that match &%sender_unqualified_hosts%& set this flag.
168e428f 34152
3cb1b51e 34153.vitem "&%-auth_id%&&~<&'text'&>"
168e428f 34154The id information for a message received on an authenticated SMTP connection
9b371988 34155&-- the value of the &$authenticated_id$& variable.
168e428f 34156
3cb1b51e 34157.vitem "&%-auth_sender%&&~<&'address'&>"
9b371988
PH
34158The address of an authenticated sender &-- the value of the
34159&$authenticated_sender$& variable.
168e428f 34160
3cb1b51e 34161.vitem "&%-body_linecount%&&~<&'number'&>"
168e428f
PH
34162This records the number of lines in the body of the message, and is always
34163present.
34164
3cb1b51e 34165.vitem "&%-body_zerocount%&&~<&'number'&>"
168e428f
PH
34166This records the number of binary zero bytes in the body of the message, and is
34167present if the number is greater than zero.
34168
9b371988 34169.vitem &%-deliver_firsttime%&
168e428f
PH
34170This is written when a new message is first added to the spool. When the spool
34171file is updated after a deferral, it is omitted.
34172
3cb1b51e 34173.vitem "&%-frozen%&&~<&'time'&>"
9b371988
PH
34174.cindex "frozen messages" "spool data"
34175The message is frozen, and the freezing happened at <&'time'&>.
168e428f 34176
3cb1b51e 34177.vitem "&%-helo_name%&&~<&'text'&>"
168e428f
PH
34178This records the host name as specified by a remote host in a HELO or EHLO
34179command.
34180
3cb1b51e 34181.vitem "&%-host_address%&&~<&'address'&>.<&'port'&>"
168e428f
PH
34182This records the IP address of the host from which the message was received and
34183the remote port number that was used. It is omitted for locally generated
34184messages.
34185
3cb1b51e 34186.vitem "&%-host_auth%&&~<&'text'&>"
168e428f 34187If the message was received on an authenticated SMTP connection, this records
9b371988
PH
34188the name of the authenticator &-- the value of the
34189&$sender_host_authenticated$& variable.
168e428f 34190
9b371988 34191.vitem &%-host_lookup_failed%&
168e428f 34192This is present if an attempt to look up the sending host's name from its IP
9b371988 34193address failed. It corresponds to the &$host_lookup_failed$& variable.
168e428f 34194
3cb1b51e 34195.vitem "&%-host_name%&&~<&'text'&>"
9b371988
PH
34196.cindex "reverse DNS lookup"
34197.cindex "DNS" "reverse lookup"
168e428f
PH
34198This records the name of the remote host from which the message was received,
34199if the host name was looked up from the IP address when the message was being
34200received. It is not present if no reverse lookup was done.
34201
3cb1b51e 34202.vitem "&%-ident%&&~<&'text'&>"
168e428f 34203For locally submitted messages, this records the login of the originating user,
9b371988
PH
34204unless it was a trusted user and the &%-oMt%& option was used to specify an
34205ident value. For messages received over TCP/IP, this records the ident string
168e428f
PH
34206supplied by the remote host, if any.
34207
3cb1b51e 34208.vitem "&%-interface_address%&&~<&'address'&>.<&'port'&>"
168e428f
PH
34209This records the IP address of the local interface and the port number through
34210which a message was received from a remote host. It is omitted for locally
34211generated messages.
34212
9b371988 34213.vitem &%-local%&
168e428f
PH
34214The message is from a local sender.
34215
9b371988 34216.vitem &%-localerror%&
168e428f
PH
34217The message is a locally-generated bounce message.
34218
3cb1b51e 34219.vitem "&%-local_scan%&&~<&'string'&>"
9b371988
PH
34220This records the data string that was returned by the &[local_scan()]& function
34221when the message was received &-- the value of the &$local_scan_data$&
34222variable. It is omitted if no data was returned.
168e428f 34223
9b371988 34224.vitem &%-manual_thaw%&
168e428f
PH
34225The message was frozen but has been thawed manually, that is, by an explicit
34226Exim command rather than via the auto-thaw process.
34227
9b371988
PH
34228.vitem &%-N%&
34229A testing delivery process was started using the &%-N%& option to suppress any
168e428f 34230actual deliveries, but delivery was deferred. At any further delivery attempts,
9b371988 34231&%-N%& is assumed.
168e428f 34232
9b371988
PH
34233.vitem &%-received_protocol%&
34234This records the value of the &$received_protocol$& variable, which contains
34235the name of the protocol by which the message was received.
168e428f 34236
9b371988 34237.vitem &%-sender_set_untrusted%&
168e428f
PH
34238The envelope sender of this message was set by an untrusted local caller (used
34239to ensure that the caller is displayed in queue listings).
34240
3cb1b51e 34241.vitem "&%-spam_score_int%&&~<&'number'&>"
168e428f 34242If a message was scanned by SpamAssassin, this is present. It records the value
9b371988 34243of &$spam_score_int$&.
168e428f 34244
9b371988 34245.vitem &%-tls_certificate_verified%&
168e428f
PH
34246A TLS certificate was received from the client that sent this message, and the
34247certificate was verified by the server.
34248
3cb1b51e 34249.vitem "&%-tls_cipher%&&~<&'cipher name'&>"
168e428f
PH
34250When the message was received over an encrypted connection, this records the
34251name of the cipher suite that was used.
34252
3cb1b51e 34253.vitem "&%-tls_peerdn%&&~<&'peer DN'&>"
168e428f
PH
34254When the message was received over an encrypted connection, and a certificate
34255was received from the client, this records the Distinguished Name from that
34256certificate.
9b371988 34257.endlist
168e428f
PH
34258
34259Following the options there is a list of those addresses to which the message
34260is not to be delivered. This set of addresses is initialized from the command
9b371988 34261line when the &%-t%& option is used and &%extract_addresses_remove_arguments%&
168e428f
PH
34262is set; otherwise it starts out empty. Whenever a successful delivery is made,
34263the address is added to this set. The addresses are kept internally as a
34264balanced binary tree, and it is a representation of that tree which is written
34265to the spool file. If an address is expanded via an alias or forward file, the
34266original address is added to the tree when deliveries to all its child
34267addresses are complete.
34268
34269If the tree is empty, there is a single line in the spool file containing just
9b371988 34270the text &"XX"&. Otherwise, each line consists of two letters, which are either
168e428f
PH
34271Y or N, followed by an address. The address is the value for the node of the
34272tree, and the letters indicate whether the node has a left branch and/or a
34273right branch attached to it, respectively. If branches exist, they immediately
34274follow. Here is an example of a three-node tree:
9b371988
PH
34275.code
34276YY darcy@austen.fict.example
34277NN alice@wonderland.fict.example
34278NN editor@thesaurus.ref.example
34279.endd
168e428f
PH
34280After the non-recipients tree, there is a list of the message's recipients.
34281This is a simple list, preceded by a count. It includes all the original
34282recipients of the message, including those to whom the message has already been
34283delivered. In the simplest case, the list contains one address per line. For
34284example:
9b371988
PH
34285.code
342864
34287editor@thesaurus.ref.example
34288darcy@austen.fict.example
34289rdo@foundation
34290alice@wonderland.fict.example
34291.endd
168e428f 34292However, when a child address has been added to the top-level addresses as a
9b371988
PH
34293result of the use of the &%one_time%& option on a &(redirect)& router, each
34294line is of the following form:
34295.display
34296<&'top-level address'&> <&'errors_to address'&> &&&
34297 <&'length'&>,<&'parent number'&>#<&'flag bits'&>
34298.endd
168e428f
PH
34299The 01 flag bit indicates the presence of the three other fields that follow
34300the top-level address. Other bits may be used in future to support additional
9b371988
PH
34301fields. The <&'parent number'&> is the offset in the recipients list of the
34302original parent of the &"one time"& address. The first two fields are the
168e428f
PH
34303envelope sender that is associated with this address and its length. If the
34304length is zero, there is no special envelope sender (there are then two space
9b371988
PH
34305characters in the line). A non-empty field can arise from a &(redirect)& router
34306that has an &%errors_to%& setting.
168e428f
PH
34307
34308
34309A blank line separates the envelope and status information from the headers
34310which follow. A header may occupy several lines of the file, and to save effort
34311when reading it in, each header is preceded by a number and an identifying
34312character. The number is the number of characters in the header, including any
34313embedded newlines and the terminating newline. The character is one of the
34314following:
34315
9b371988
PH
34316.table2 50pt
34317.row <&'blank'&> "header in which Exim has no special interest"
34318.row &`B`& "&'Bcc:'& header"
34319.row &`C`& "&'Cc:'& header"
34320.row &`F`& "&'From:'& header"
34321.row &`I`& "&'Message-id:'& header"
34322.row &`P`& "&'Received:'& header &-- P for &""postmark""&"
34323.row &`R`& "&'Reply-To:'& header"
34324.row &`S`& "&'Sender:'& header"
34325.row &`T`& "&'To:'& header"
34326.row &`*`& "replaced or deleted header"
34327.endtable
168e428f
PH
34328
34329Deleted or replaced (rewritten) headers remain in the spool file for debugging
34330purposes. They are not transmitted when the message is delivered. Here is a
34331typical set of headers:
9b371988
PH
34332.code
34333111P Received: by hobbit.fict.example with local (Exim 4.00)
34334id 14y9EI-00026G-00; Fri, 11 May 2001 10:28:59 +0100
34335049 Message-Id: <E14y9EI-00026G-00@hobbit.fict.example>
34336038* X-rewrote-sender: bb@hobbit.fict.example
34337042* From: Bilbo Baggins <bb@hobbit.fict.example>
34338049F From: Bilbo Baggins <B.Baggins@hobbit.fict.example>
34339099* To: alice@wonderland.fict.example, rdo@foundation,
34340darcy@austen.fict.example, editor@thesaurus.ref.example
34341104T To: alice@wonderland.fict.example, rdo@foundation.example,
34342darcy@austen.fict.example, editor@thesaurus.ref.example
34343038 Date: Fri, 11 May 2001 10:28:59 +0100
34344.endd
34345The asterisked headers indicate that the envelope sender, &'From:'& header, and
34346&'To:'& header have been rewritten, the last one because routing expanded the
34347unqualified domain &'foundation'&.
4f578862
PH
34348.ecindex IIDforspo1
34349.ecindex IIDforspo2
34350.ecindex IIDforspo3
9b371988 34351
0b23848a
TK
34352. ////////////////////////////////////////////////////////////////////////////
34353. ////////////////////////////////////////////////////////////////////////////
34354
71e1673f 34355.new
0b23848a
TK
34356.chapter "Support for DKIM (DomainKeys Identified Mail) - RFC4871" "CHID12" &&&
34357 "DKIM Support"
34358.cindex "DKIM"
34359
34360Since version 4.70, DKIM support is compiled into Exim by default. It can be
34361disabled by setting DISABLE_DKIM=yes in Local/Makefile.
34362
34363Exim's DKIM implementation allows to
34364.olist
34365Sign outgoing messages: This function is implemented in the SMTP transport.
34366It can co-exist with all other Exim features, including transport filters.
34367.next
34368Verify signatures in incoming messages: This is implemented by an additional
34369ACL (acl_smtp_dkim), which can be called several times per message, with
34370different signature context.
34371.endlist
34372
214bab57
TK
34373In typical Exim style, the verification implementation does not include any
34374default "policy". Instead it enables you to build your own policy using
34375Exim's standard controls.
34376
34377Please note that verification of DKIM signatures in incoming mail is turned
34378on by default for logging purposes. For each signature in incoming email,
34379exim will log a line displaying the most important signature details, and the
34380signature status. Here is an example:
34381.code
343822009-09-09 10:22:28 1MlIRf-0003LU-U3 DKIM: d=facebookmail.com s=q1-2009b c=relaxed/relaxed a=rsa-sha1 i=@facebookmail.com t=1252484542 [verification succeeded]
34383.endd
34384You might want to turn off DKIM verification processing entirely for internal
34385or relay mail sources. To do that, set the &%dkim_disable_verify%& ACL
34386control modifier. This should typically be done in the RCPT ACL, at points
34387where you accept mail from relay sources (internal hosts or authenticated
34388senders).
34389
34390
0b23848a
TK
34391.section "Signing outgoing messages" "SECID513"
34392.cindex "DKIM" "signing"
34393
34394Signing is implemented by setting private options on the SMTP transport.
34395These options take (expandable) strings as arguments.
34396
7eadfc98
TK
34397.option dkim_domain smtp string&!! unset
34398MANDATORY
0b23848a 34399The domain you want to sign with. The result of this expanded
214bab57 34400option is put into the &%$dkim_domain%& expansion variable.
0b23848a 34401
7eadfc98
TK
34402.option dkim_selector smtp string&!! unset
34403MANDATORY
214bab57 34404This sets the key selector string. You can use the &%$dkim_domain%& expansion
0b23848a 34405variable to look up a matching selector. The result is put in the expansion
214bab57
TK
34406variable &%$dkim_selector%& which should be used in the &%dkim_private_key%&
34407option along with &%$dkim_domain%&.
0b23848a 34408
7eadfc98
TK
34409.option dkim_private_key smtp string&!! unset
34410MANDATORY
214bab57
TK
34411This sets the private key to use. You can use the &%$dkim_domain%& and
34412&%$dkim_selector%& expansion variables to determine the private key to use.
0b23848a 34413The result can either
c72d2505 34414.ilist
0b23848a
TK
34415be a valid RSA private key in ASCII armor, including line breaks.
34416.next
34417start with a slash, in which case it is treated as a file that contains
34418the private key.
34419.next
34420be "0", "false" or the empty string, in which case the message will not
214bab57
TK
34421be signed. This case will not result in an error, even if &%dkim_strict%&
34422is set.
0b23848a
TK
34423.endlist
34424
7eadfc98
TK
34425.option dkim_canon smtp string&!! unset
34426OPTIONAL
0b23848a
TK
34427This option sets the canonicalization method used when signing a message.
34428The DKIM RFC currently supports two methods: "simple" and "relaxed".
34429The option defaults to "relaxed" when unset. Note: the current implementation
214bab57 34430only supports using the same canonicalization method for both headers and body.
0b23848a 34431
7eadfc98
TK
34432.option dkim_strict smtp string&!! unset
34433OPTIONAL
0b23848a
TK
34434This option defines how Exim behaves when signing a message that
34435should be signed fails for some reason. When the expansion evaluates to
34436either "1" or "true", Exim will defer. Otherwise Exim will send the message
214bab57 34437unsigned. You can use the &%$dkim_domain%& and &%$dkim_selector%& expansion
0b23848a
TK
34438variables here.
34439
7eadfc98
TK
34440.option dkim_sign_headers smtp string&!! unset
34441OPTIONAL
0b23848a 34442When set, this option must expand to (or be specified as) a colon-separated
214bab57
TK
34443list of header names. Headers with these names will be included in the message
34444signature. When unspecified, the header names recommended in RFC4871 will be
34445used.
34446
34447
34448.section "Verifying DKIM signatures in incoming mail" "SECID514"
34449.cindex "DKIM" "verification"
34450
34451Verification of DKIM signatures in incoming email is implemented via the
34452&%acl_smtp_dkim%& ACL. By default, this ACL is called once for each
34453syntactically(!) correct signature in the incoming message.
34454
34455To evaluate the signature in the ACL a large number of expansion variables
34456containing the signature status and its details are set up during the
34457runtime of the ACL.
34458
34459Calling the ACL only for existing signatures is not sufficient to build
34460more advanced policies. For that reason, the global option
34461&%dkim_verify_signers%&, and a global expansion variable
6afc8383 34462&%$dkim_signers%& exist.
9b371988 34463
214bab57
TK
34464The global option &%dkim_verify_signers%& can be set to a colon-separated
34465list of DKIM domains or identities for which the ACL &%acl_smtp_dkim%& is
34466called. It is expanded when the message has been received. At this point,
6afc8383
TK
34467the expansion variable &%$dkim_signers%& already contains a colon-
34468separated list of signer domains and identities for the message. When
34469&%dkim_verify_signers%& is not specified in the main configuration,
34470it defaults as:
214bab57 34471.code
6afc8383 34472dkim_verify_signers = $dkim_signers
214bab57
TK
34473.endd
34474This leads to the default behaviour of calling &%acl_smtp_dkim%& for each
34475DKIM signature in the message. Current DKIM verifiers may want to explicitly
34476call the ACL for known domains or identities. This would be achieved as follows:
34477.code
6afc8383 34478dkim_verify_signers = paypal.com:ebay.com:$dkim_signers
214bab57
TK
34479.endd
34480This would result in &%acl_smtp_dkim%& always being called for "paypal.com"
6afc8383
TK
34481and "ebay.com", plus all domains and identities that have signatures in the message.
34482You can also be more creative in constructing your policy. Example:
214bab57 34483.code
6afc8383 34484dkim_verify_signers = $sender_address_domain:$dkim_signers
214bab57
TK
34485.endd
34486
6afc8383
TK
34487If a domain or identity is listed several times in the (expanded) value of
34488&%dkim_verify_signers%&, the ACL is only called once for that domain or identity.
34489
34490
214bab57
TK
34491Inside the &%acl_smtp_dkim%&, the following expansion variables are
34492available (from most to least important):
34493
34494.vlist
6afc8383
TK
34495.vitem &%$dkim_cur_signer%&
34496The signer that is being evaluated in this ACL run. This can be domain or
34497an identity. This is one of the list items from the expanded main option
34498&%dkim_verify_signers%& (see above).
214bab57
TK
34499.vitem &%$dkim_verify_status%&
34500A string describing the general status of the signature. One of
34501.ilist
34502&%none%&: There is no signature in the message for the current domain or
6afc8383 34503identity (as reflected by &%$dkim_cur_signer%&).
214bab57
TK
34504.next
34505&%invalid%&: The signature could not be verified due to a processing error.
34506More detail is available in &%$dkim_verify_reason%&.
34507.next
34508&%fail%&: Verification of the signature failed. More detail is
34509available in &%$dkim_verify_reason%&.
34510.next
34511&%pass%&: The signature passed verification. It is valid.
34512.endlist
34513.vitem &%$dkim_verify_reason%&
34514A string giving a litte bit more detail when &%$dkim_verify_status%& is either
34515"fail" or "invalid". One of
34516.ilist
34517&%pubkey_unavailable%& (when &%$dkim_verify_status%&="invalid"): The public
34518key for the domain could not be retrieved. This may be a temporary problem.
34519.next
34520&%pubkey_syntax%& (when &%$dkim_verify_status%&="invalid"): The public key
34521record for the domain is syntactically invalid.
34522.next
34523&%bodyhash_mismatch%& (when &%$dkim_verify_status%&="fail"): The calculated
34524body hash does not match the one specified in the signature header. This
34525means that the message body was modified in transit.
34526.next
34527&%signature_incorrect%& (when &%$dkim_verify_status%&="fail"): The signature
34528could not be verified. This may mean that headers were modified,
34529re-written or otherwise changed in a way which is incompatible with
34530DKIM verification. It may of course also mean that the signature is forged.
34531.endlist
34532.vitem &%$dkim_domain%&
34533The signing domain. IMPORTANT: This variable is only populated if there is
6afc8383
TK
34534an actual signature in the message for the current domain or identity (as
34535reflected by &%$dkim_cur_signer%&).
214bab57 34536.vitem &%$dkim_identity%&
6afc8383
TK
34537The signing identity, if present. IMPORTANT: This variable is only populated
34538if there is an actual signature in the message for the current domain or
34539identity (as reflected by &%$dkim_cur_signer%&).
214bab57
TK
34540.vitem &%$dkim_selector%&
34541The key record selector string
34542.vitem &%$dkim_algo%&
34543The algorithm used. One of 'rsa-sha1' or 'rsa-sha256'.
34544.vitem &%$dkim_canon_body%&
34545The body canonicalization method. One of 'relaxed' or 'simple'.
34546.vitem &%dkim_canon_headers%&
34547The header canonicalization method. One of 'relaxed' or 'simple'.
34548.vitem &%$dkim_copiedheaders%&
34549A transcript of headers and their values which are included in the signature
34550(copied from the 'z=' tag of the signature).
34551.vitem &%$dkim_bodylength%&
34552The number of signed body bytes. If zero ("0"), the body is unsigned. If no
34553limit was set by the signer, "9999999999999" is returned. This makes sure
34554that this variable always expands to an integer value.
34555.vitem &%$dkim_created%&
34556UNIX timestamp reflecting the date and time when the signature was created.
34557When this was not specified by the signer, "0" is returned.
34558.vitem &%$dkim_expires%&
34559UNIX timestamp reflecting the date and time when the signer wants the
34560signature to be treated as "expired". When this was not specified by the
34561signer, "9999999999999" is returned. This makes it possible to do useful
34562integer size comparisons against this value.
34563.vitem &%$dkim_headernames%&
34564A colon-separated list of names of headers included in the signature.
34565.vitem &%$dkim_key_testing%&
34566"1" if the key record has the "testing" flag set, "0" if not.
34567.vitem &%$dkim_key_nosubdomaining%&
34568"1" if the key record forbids subdomaining, "0" otherwise.
34569.vitem &%$dkim_key_srvtype%&
34570Service type (tag s=) from the key record. Defaults to "*" if not specified
34571in the key record.
34572.vitem &%$dkim_key_granularity%&
34573Key granularity (tag g=) from the key record. Defaults to "*" if not specified
34574in the key record.
34575.vitem &%$dkim_key_notes%&
34576Notes from the key record (tag n=)
34577.endlist
34578
34579In addition, two ACL conditions are provided:
34580
34581.vlist
34582.vitem &%dkim_signers%&
34583ACL condition that checks a colon-separated list of domains or identities
6afc8383
TK
34584for a match against the domain or identity that the ACL is currently verifying
34585(reflected by &%$dkim_cur_signer%&). This is typically used to restrict an ACL
34586verb to a group of domains or identities, like:
214bab57
TK
34587
34588.code
34589# Warn when message apparently from GMail has no signature at all
34590warn log_message = GMail sender without DKIM signature
34591 sender_domains = gmail.com
34592 dkim_signers = gmail.com
34593 dkim_status = none
34594.endd
34595
34596.vitem &%dkim_status%&
34597ACL condition that checks a colon-separated list of possible DKIM verification
34598results agains the actual result of verification. This is typically used
34599to restrict an ACL verb to a list of verification outcomes, like:
34600
34601.code
34602deny message = Message from Paypal with invalid or missing signature
34603 sender_domains = paypal.com:paypal.de
34604 dkim_signers = paypal.com:paypal.de
34605 dkim_status = none:invalid:fail
34606.endd
34607
34608The possible status keywords are: 'none','invalid','fail' and 'pass'. Please
34609see the documentation of the &%$dkim_verify_status%& expansion variable above
34610for more information of what they mean.
34611.endlist
71e1673f 34612.wen
9b371988
PH
34613
34614. ////////////////////////////////////////////////////////////////////////////
34615. ////////////////////////////////////////////////////////////////////////////
34616
0b23848a 34617.chapter "Adding new drivers or lookup types" "CHID13" &&&
9b371988
PH
34618 "Adding drivers or lookups"
34619.cindex "adding drivers"
f89d2485 34620.cindex "new drivers, adding"
9b371988 34621.cindex "drivers" "adding new"
168e428f
PH
34622The following actions have to be taken in order to add a new router, transport,
34623authenticator, or lookup type to Exim:
34624
9b371988
PH
34625.olist
34626Choose a name for the driver or lookup type that does not conflict with any
34627existing name; I will use &"newdriver"& in what follows.
34628.next
34629Add to &_src/EDITME_& the line:
34630.display
34631<&'type'&>&`_NEWDRIVER=yes`&
34632.endd
34633where <&'type'&> is ROUTER, TRANSPORT, AUTH, or LOOKUP. If the
168e428f
PH
34634code is not to be included in the binary by default, comment this line out. You
34635should also add any relevant comments about the driver or lookup type.
9b371988
PH
34636.next
34637Add to &_src/config.h.defaults_& the line:
34638.code
34639#define <type>_NEWDRIVER
34640.endd
34641.next
34642Edit &_src/drtables.c_&, adding conditional code to pull in the private header
168e428f 34643and create a table entry as is done for all the other drivers and lookup types.
9b371988
PH
34644.next
34645Edit &_Makefile_& in the appropriate sub-directory (&_src/routers_&,
34646&_src/transports_&, &_src/auths_&, or &_src/lookups_&); add a line for the new
168e428f 34647driver or lookup type and add it to the definition of OBJ.
9b371988
PH
34648.next
34649Create &_newdriver.h_& and &_newdriver.c_& in the appropriate sub-directory of
34650&_src_&.
34651.next
34652Edit &_scripts/MakeLinks_& and add commands to link the &_.h_& and &_.c_& files
168e428f 34653as for other drivers and lookups.
9b371988 34654.endlist
168e428f
PH
34655
34656Then all you need to do is write the code! A good way to start is to make a
34657proforma by copying an existing module of the same type, globally changing all
34658occurrences of the name, and cutting out most of the code. Note that any
34659options you create must be listed in alphabetical order, because the tables are
34660searched using a binary chop procedure.
34661
9b371988 34662There is a &_README_& file in each of the sub-directories of &_src_& describing
168e428f
PH
34663the interface that is expected.
34664
34665
34666
34667
9b371988
PH
34668. ////////////////////////////////////////////////////////////////////////////
34669. ////////////////////////////////////////////////////////////////////////////
34670
f89d2485
PH
34671. /////////////////////////////////////////////////////////////////////////////
34672. These lines are processing instructions for the Simple DocBook Processor that
34673. Philip Hazel has developed as a less cumbersome way of making PostScript and
34674. PDFs than using xmlto and fop. They will be ignored by all other XML
34675. processors.
34676. /////////////////////////////////////////////////////////////////////////////
34677
34678.literal xml
34679<?sdop
34680 format="newpage"
34681 foot_right_recto="&chaptertitle;"
34682 foot_right_verso="&chaptertitle;"
34683?>
34684.literal off
168e428f 34685
f89d2485
PH
34686.makeindex "Options index" "option"
34687.makeindex "Variables index" "variable"
34688.makeindex "Concept index" "concept"
168e428f 34689
168e428f 34690
9b371988
PH
34691. /////////////////////////////////////////////////////////////////////////////
34692. /////////////////////////////////////////////////////////////////////////////