Testsuite: locate fakens relative to the config_main_directory
[users/heiko/exim.git] / doc / doc-txt / NewStuff
1 New Features in Exim
2 --------------------
3
4 This file contains descriptions of new features that have been added to Exim.
5 Before a formal release, there may be quite a lot of detail so that people can
6 test from the snapshots or the CVS before the documentation is updated. Once
7 the documentation is updated, this file is reduced to a short list.
8
9 Version 4.86
10 ------------
11
12  1. Support for using the system standard CA bundle.
13
14  2. New expansion items $config_file, $config_dir, containing the file
15     and directory name of the main configuration file. Also $exim_version.
16
17  3. New "malware=" support for Avast.
18
19  4. New "spam=" variant option for Rspamd.
20
21  5. Assorted options on malware= and spam= scanners.
22
23  6. A commandline option to write a comment into the logfile.
24
25  7. If built with EXPERIMENTAL_SOCKS feature enabled, the smtp transport can
26     be configured to make connections via socks5 proxies.
27
28  8. If built with EXPERIMENTAL_INTERNATIONAL, support is included for
29     the transmission of UTF-8 envelope addresses.
30
31  9. If built with EXPERIMENTAL_INTERNATIONAL, an expansion item for a commonly
32     used encoding of Maildir folder names.
33
34 10. A logging option for slow DNS lookups,
35
36
37 Version 4.85
38 ------------
39
40  1. If built with EXPERIMENTAL_DANE feature enabled, Exim will follow the
41     DANE smtp draft to assess a secure chain of trust of the certificate
42     used to establish the TLS connection based on a TLSA record in the
43     domain of the sender.
44
45  2. The EXPERIMENTAL_TPDA feature has been renamed to EXPERIMENTAL_EVENT
46     and several new events have been created. The reason is because it has
47     been expanded beyond just firing events during the transport phase. Any
48     existing TPDA transport options will have to be rewritten to use a new
49     $event_name expansion variable in a condition. Refer to the
50     experimental-spec.txt for details and examples.
51
52  3. The EXPERIMENTAL_CERTNAMES features is an enhancement to verify that
53     server certs used for TLS match the result of the MX lookup. It does
54     not use the same mechanism as DANE.
55
56
57 Version 4.84
58 ------------
59
60
61 Version 4.83
62 ------------
63
64  1. If built with the EXPERIMENTAL_PROXY feature enabled, Exim can be
65     configured to expect an initial header from a proxy that will make the
66     actual external source IP:host be used in exim instead of the IP of the
67     proxy that is connecting to it.
68
69  2. New verify option header_names_ascii, which will check to make sure
70     there are no non-ASCII characters in header names.  Exim itself handles
71     those non-ASCII characters, but downstream apps may not, so Exim can
72     detect and reject if those characters are present.
73
74  3. New expansion operator ${utf8clean:string} to replace malformed UTF8
75     codepoints with valid ones.
76
77  4. New malware type "sock".  Talks over a Unix or TCP socket, sending one
78     command line and matching a regex against the return data for trigger
79     and a second regex to extract malware_name.  The mail spoolfile name can
80     be included in the command line.
81
82  5. The smtp transport now supports options "tls_verify_hosts" and
83     "tls_try_verify_hosts".  If either is set the certificate verification
84     is split from the encryption operation. The default remains that a failed
85     verification cancels the encryption.
86
87  6. New SERVERS override of default ldap server list.  In the ACLs, an ldap
88     lookup can now set a list of servers to use that is different from the
89     default list.
90
91  7. New command-line option -C for exiqgrep to specify alternate exim.conf
92     file when searching the queue.
93
94  8. OCSP now supports GnuTLS also, if you have version 3.1.3 or later of that.
95
96  9. Support for DNSSEC on outbound connections.
97
98 10. New variables "tls_(in,out)_(our,peer)cert" and expansion item
99     "certextract" to extract fields from them. Hash operators md5 and sha1
100     work over them for generating fingerprints, and a new sha256 operator
101     for them added.
102
103 11. PRDR is now supported dy default.
104
105 12. OCSP stapling is now supported by default.
106
107 13. If built with the EXPERIMENTAL_DSN feature enabled, Exim will output
108     Delivery Status Notification messages in MIME format, and negociate
109     DSN features per RFC 3461.
110
111
112 Version 4.82
113 ------------
114
115  1. New command-line option -bI:sieve will list all supported sieve extensions
116     of this Exim build on standard output, one per line.
117     ManageSieve (RFC 5804) providers managing scripts for use by Exim should
118     query this to establish the correct list to include in the protocol's
119     SIEVE capability line.
120
121  2. If the -n option is combined with the -bP option, then the name of an
122     emitted option is not output, only the value (if visible to you).
123     For instance, "exim -n -bP pid_file_path" should just emit a pathname
124     followed by a newline, and no other text.
125
126  3. When built with SUPPORT_TLS and USE_GNUTLS, the SMTP transport driver now
127     has a "tls_dh_min_bits" option, to set the minimum acceptable number of
128     bits in the Diffie-Hellman prime offered by a server (in DH ciphersuites)
129     acceptable for security.  (Option accepted but ignored if using OpenSSL).
130     Defaults to 1024, the old value.  May be lowered only to 512, or raised as
131     far as you like.  Raising this may hinder TLS interoperability with other
132     sites and is not currently recommended.  Lowering this will permit you to
133     establish a TLS session which is not as secure as you might like.
134
135     Unless you really know what you are doing, leave it alone.
136
137  4. If not built with DISABLE_DNSSEC, Exim now has the main option
138     dns_dnssec_ok; if set to 1 then Exim will initialise the resolver library
139     to send the DO flag to your recursive resolver.  If you have a recursive
140     resolver, which can set the Authenticated Data (AD) flag in results, Exim
141     can now detect this.  Exim does not perform validation itself, instead
142     relying upon a trusted path to the resolver.
143
144     Current status: work-in-progress; $sender_host_dnssec variable added.
145
146  5. DSCP support for outbound connections: on a transport using the smtp driver,
147     set "dscp = ef", for instance, to cause the connections to have the relevant
148     DSCP (IPv4 TOS or IPv6 TCLASS) value in the header.
149
150     Similarly for inbound connections, there is a new control modifier, dscp,
151     so "warn control = dscp/ef" in the connect ACL, or after authentication.
152
153     Supported values depend upon system libraries.  "exim -bI:dscp" to list the
154     ones Exim knows of.  You can also set a raw number 0..0x3F.
155
156  6. The -G command-line flag is no longer ignored; it is now equivalent to an
157     ACL setting "control = suppress_local_fixups".  The -L command-line flag
158     is now accepted and forces use of syslog, with the provided tag as the
159     process name.  A few other flags used by Sendmail are now accepted and
160     ignored.
161
162  7. New cutthrough routing feature.  Requested by a "control = cutthrough_delivery"
163     ACL modifier; works for single-recipient mails which are recieved on and
164     deliverable via SMTP.  Using the connection made for a recipient verify,
165     if requested before the verify, or a new one made for the purpose while
166     the inbound connection is still active.  The bulk of the mail item is copied
167     direct from the inbound socket to the outbound (as well as the spool file).
168     When the source notifies the end of data, the data acceptance by the destination
169     is negociated before the acceptance is sent to the source.  If the destination
170     does not accept the mail item, for example due to content-scanning, the item
171     is not accepted from the source and therefore there is no need to generate
172     a bounce mail.  This is of benefit when providing a secondary-MX service.
173     The downside is that delays are under the control of the ultimate destination
174     system not your own.
175
176     The Recieved-by: header on items delivered by cutthrough is generated
177     early in reception rather than at the end; this will affect any timestamp
178     included.  The log line showing delivery is recorded before that showing
179     reception; it uses a new ">>" tag instead of "=>".
180
181     To support the feature, verify-callout connections can now use ESMTP and TLS.
182     The usual smtp transport options are honoured, plus a (new, default everything)
183     hosts_verify_avoid_tls.
184
185     New variable families named tls_in_cipher, tls_out_cipher etc. are introduced
186     for specific access to the information for each connection.  The old names
187     are present for now but deprecated.
188
189     Not yet supported: IGNOREQUOTA, SIZE, PIPELINING.
190
191  8. New expansion operators ${listnamed:name} to get the content of a named list
192     and ${listcount:string} to count the items in a list.
193
194  9. New global option "gnutls_allow_auto_pkcs11", defaults false.  The GnuTLS
195     rewrite in 4.80 combines with GnuTLS 2.12.0 or later, to autoload PKCS11
196     modules.  For some situations this is desirable, but we expect admin in
197     those situations to know they want the feature.  More commonly, it means
198     that GUI user modules get loaded and are broken by the setuid Exim being
199     unable to access files specified in environment variables and passed
200     through, thus breakage.  So we explicitly inhibit the PKCS11 initialisation
201     unless this new option is set.
202
203     Some older OS's with earlier versions of GnuTLS might not have pkcs11 ability,
204     so have also added a build option which can be used to build Exim with GnuTLS
205     but without trying to use any kind of PKCS11 support.  Uncomment this in the
206     Local/Makefile:
207
208     AVOID_GNUTLS_PKCS11=yes
209
210 10. The "acl = name" condition on an ACL now supports optional arguments.
211     New expansion item "${acl {name}{arg}...}" and expansion condition
212     "acl {{name}{arg}...}" are added.  In all cases up to nine arguments
213     can be used, appearing in $acl_arg1 to $acl_arg9 for the called ACL.
214     Variable $acl_narg contains the number of arguments.  If the ACL sets
215     a "message =" value this becomes the result of the expansion item,
216     or the value of $value for the expansion condition.  If the ACL returns
217     accept the expansion condition is true; if reject, false.  A defer
218     return results in a forced fail.
219
220 11. Routers and transports can now have multiple headers_add and headers_remove
221     option lines.  The concatenated list is used.
222
223 12. New ACL modifier "remove_header" can remove headers before message gets
224     handled by routers/transports.
225
226 13. New dnsdb lookup pseudo-type "a+".  A sequence of "a6" (if configured),
227     "aaaa" and "a" lookups is done and the full set of results returned.
228
229 14. New expansion variable $headers_added with content from ACL add_header
230     modifier (but not yet added to messsage).
231
232 15. New 8bitmime status logging option for received messages.  Log field "M8S".
233
234 16. New authenticated_sender logging option, adding to log field "A".
235
236 17. New expansion variables $router_name and $transport_name.  Useful
237     particularly for debug_print as -bt commandline option does not
238     require privilege whereas -d does.
239
240 18. If built with EXPERIMENTAL_PRDR, per-recipient data responses per a
241     proposed extension to SMTP from Eric Hall.
242
243 19. The pipe transport has gained the force_command option, to allow
244     decorating commands from user .forward pipe aliases with prefix
245     wrappers, for instance.
246
247 20. Callout connections can now AUTH; the same controls as normal delivery
248     connections apply.
249
250 21. Support for DMARC, using opendmarc libs, can be enabled. It adds new
251     options: dmarc_forensic_sender, dmarc_history_file, and dmarc_tld_file.
252     It adds new expansion variables $dmarc_ar_header, $dmarc_status,
253     $dmarc_status_text, and $dmarc_used_domain.  It adds a new acl modifier
254     dmarc_status.  It adds new control flags dmarc_disable_verify and
255     dmarc_enable_forensic.
256
257 22. Add expansion variable $authenticated_fail_id, which is the username
258     provided to the authentication method which failed.  It is available
259     for use in subsequent ACL processing (typically quit or notquit ACLs).
260
261 23. New ACL modifer "udpsend" can construct a UDP packet to send to a given
262     UDP host and port.
263
264 24. New ${hexquote:..string..} expansion operator converts non-printable
265     characters in the string to \xNN form.
266
267 25. Experimental TPDA (Transport Post Delivery Action) function added.
268     Patch provided by Axel Rau.
269
270 26. Experimental Redis lookup added. Patch provided by Warren Baker.
271
272
273 Version 4.80
274 ------------
275
276  1. New authenticator driver, "gsasl".  Server-only (at present).
277     This is a SASL interface, licensed under GPL, which can be found at
278     http://www.gnu.org/software/gsasl/.
279     This system does not provide sources of data for authentication, so
280     careful use needs to be made of the conditions in Exim.
281
282  2. New authenticator driver, "heimdal_gssapi".  Server-only.
283     A replacement for using cyrus_sasl with Heimdal, now that $KRB5_KTNAME
284     is no longer honoured for setuid programs by Heimdal.  Use the
285     "server_keytab" option to point to the keytab.
286
287  3. The "pkg-config" system can now be used when building Exim to reference
288     cflags and library information for lookups and authenticators, rather
289     than having to update "CFLAGS", "AUTH_LIBS", "LOOKUP_INCLUDE" and
290     "LOOKUP_LIBS" directly.  Similarly for handling the TLS library support
291     without adjusting "TLS_INCLUDE" and "TLS_LIBS".
292
293     In addition, setting PCRE_CONFIG=yes will query the pcre-config tool to
294     find the headers and libraries for PCRE.
295
296  4. New expansion variable $tls_bits.
297
298  5. New lookup type, "dbmjz".  Key is an Exim list, the elements of which will
299     be joined together with ASCII NUL characters to construct the key to pass
300     into the DBM library.  Can be used with gsasl to access sasldb2 files as
301     used by Cyrus SASL.
302
303  6. OpenSSL now supports TLS1.1 and TLS1.2 with OpenSSL 1.0.1.
304
305     Avoid release 1.0.1a if you can.  Note that the default value of
306     "openssl_options" is no longer "+dont_insert_empty_fragments", as that
307     increased susceptibility to attack.  This may still have interoperability
308     implications for very old clients (see version 4.31 change 37) but
309     administrators can choose to make the trade-off themselves and restore
310     compatibility at the cost of session security.
311
312  7. Use of the new expansion variable $tls_sni in the main configuration option
313     tls_certificate will cause Exim to re-expand the option, if the client
314     sends the TLS Server Name Indication extension, to permit choosing a
315     different certificate; tls_privatekey will also be re-expanded.  You must
316     still set these options to expand to valid files when $tls_sni is not set.
317
318     The SMTP Transport has gained the option tls_sni, which will set a hostname
319     for outbound TLS sessions, and set $tls_sni too.
320
321     A new log_selector, +tls_sni, has been added, to log received SNI values
322     for Exim as a server.
323
324  8. The existing "accept_8bitmime" option now defaults to true.  This means
325     that Exim is deliberately not strictly RFC compliant.  We're following
326     Dan Bernstein's advice in http://cr.yp.to/smtp/8bitmime.html by default.
327     Those who disagree, or know that they are talking to mail servers that,
328     even today, are not 8-bit clean, need to turn off this option.
329
330  9. Exim can now be started with -bw (with an optional timeout, given as
331     -bw<timespec>).  With this, stdin at startup is a socket that is
332     already listening for connections.  This has a more modern name of
333     "socket activation", but forcing the activated socket to fd 0.  We're
334     interested in adding more support for modern variants.
335
336 10. ${eval } now uses 64-bit values on supporting platforms.  A new "G" suffix
337     for numbers indicates multiplication by 1024^3.
338
339 11. The GnuTLS support has been revamped; the three options gnutls_require_kx,
340     gnutls_require_mac & gnutls_require_protocols are no longer supported.
341     tls_require_ciphers is now parsed by gnutls_priority_init(3) as a priority
342     string, documentation for which is at:
343     http://www.gnutls.org/manual/html_node/Priority-Strings.html
344
345     SNI support has been added to Exim's GnuTLS integration too.
346
347     For sufficiently recent GnuTLS libraries, ${randint:..} will now use
348     gnutls_rnd(), asking for GNUTLS_RND_NONCE level randomness.
349
350 12. With OpenSSL, if built with EXPERIMENTAL_OCSP, a new option tls_ocsp_file
351     is now available.  If the contents of the file are valid, then Exim will
352     send that back in response to a TLS status request; this is OCSP Stapling.
353     Exim will not maintain the contents of the file in any way: administrators
354     are responsible for ensuring that it is up-to-date.
355
356     See "experimental-spec.txt" for more details.
357
358 13. ${lookup dnsdb{ }} supports now SPF record types. They are handled
359     identically to TXT record lookups.
360
361 14. New expansion variable $tod_epoch_l for higher-precision time.
362
363 15. New global option tls_dh_max_bits, defaulting to current value of NSS
364     hard-coded limit of DH ephemeral bits, to fix interop problems caused by
365     GnuTLS 2.12 library recommending a bit count higher than NSS supports.
366
367 16. tls_dhparam now used by both OpenSSL and GnuTLS, can be path or identifier.
368     Option can now be a path or an identifier for a standard prime.
369     If unset, we use the DH prime from section 2.2 of RFC 5114, "ike23".
370     Set to "historic" to get the old GnuTLS behaviour of auto-generated DH
371     primes.
372
373 17. SSLv2 now disabled by default in OpenSSL.  (Never supported by GnuTLS).
374     Use "openssl_options -no_sslv2" to re-enable support, if your OpenSSL
375     install was not built with OPENSSL_NO_SSL2 ("no-ssl2").
376
377
378 Version 4.77
379 ------------
380
381  1. New options for the ratelimit ACL condition: /count= and /unique=.
382     The /noupdate option has been replaced by a /readonly option.
383
384  2. The SMTP transport's protocol option may now be set to "smtps", to
385     use SSL-on-connect outbound.
386
387  3. New variable $av_failed, set true if the AV scanner deferred; ie, when
388     there is a problem talking to the AV scanner, or the AV scanner running.
389
390  4. New expansion conditions, "inlist" and "inlisti", which take simple lists
391     and check if the search item is a member of the list.  This does not
392     support named lists, but does subject the list part to string expansion.
393
394  5. Unless the new EXPAND_LISTMATCH_RHS build option is set when Exim was
395     built, Exim no longer performs string expansion on the second string of
396     the match_* expansion conditions: "match_address", "match_domain",
397     "match_ip" & "match_local_part".  Named lists can still be used.
398
399
400 Version 4.76
401 ------------
402
403  1. The global option "dns_use_edns0" may be set to coerce EDNS0 usage on
404     or off in the resolver library.
405
406
407 Version 4.75
408 ------------
409
410  1. In addition to the existing LDAP and LDAP/SSL ("ldaps") support, there
411     is now LDAP/TLS support, given sufficiently modern OpenLDAP client
412     libraries.  The following global options have been added in support of
413     this: ldap_ca_cert_dir, ldap_ca_cert_file, ldap_cert_file, ldap_cert_key,
414     ldap_cipher_suite, ldap_require_cert, ldap_start_tls.
415
416  2. The pipe transport now takes a boolean option, "freeze_signal", default
417     false.  When true, if the external delivery command exits on a signal then
418     Exim will freeze the message in the queue, instead of generating a bounce.
419
420  3. Log filenames may now use %M as an escape, instead of %D (still available).
421     The %M pattern expands to yyyymm, providing month-level resolution.
422
423  4. The $message_linecount variable is now updated for the maildir_tag option,
424     in the same way as $message_size, to reflect the real number of lines,
425     including any header additions or removals from transport.
426
427  5. When contacting a pool of SpamAssassin servers configured in spamd_address,
428     Exim now selects entries randomly, to better scale in a cluster setup.
429
430
431 Version 4.74
432 ------------
433
434  1. SECURITY FIX: privilege escalation flaw fixed. On Linux (and only Linux)
435     the flaw permitted the Exim run-time user to cause root to append to
436     arbitrary files of the attacker's choosing, with the content based
437     on content supplied by the attacker.
438
439  2. Exim now supports loading some lookup types at run-time, using your
440     platform's dlopen() functionality.  This has limited platform support
441     and the intention is not to support every variant, it's limited to
442     dlopen().  This permits the main Exim binary to not be linked against
443     all the libraries needed for all the lookup types.
444
445
446 Version 4.73
447 ------------
448
449  NOTE: this version is not guaranteed backwards-compatible, please read the
450        items below carefully
451
452  1. A new main configuration option, "openssl_options", is available if Exim
453     is built with SSL support provided by OpenSSL.  The option allows
454     administrators to specify OpenSSL options to be used on connections;
455     typically this is to set bug compatibility features which the OpenSSL
456     developers have not enabled by default.  There may be security
457     consequences for certain options, so these should not be changed
458     frivolously.
459
460  2. A new pipe transport option, "permit_coredumps", may help with problem
461     diagnosis in some scenarios.  Note that Exim is typically installed as
462     a setuid binary, which on most OSes will inhibit coredumps by default,
463     so that safety mechanism would have to be overridden for this option to
464     be able to take effect.
465
466  3. ClamAV 0.95 is now required for ClamAV support in Exim, unless
467     Local/Makefile sets: WITH_OLD_CLAMAV_STREAM=yes
468     Note that this switches Exim to use a new API ("INSTREAM") and a future
469     release of ClamAV will remove support for the old API ("STREAM").
470
471     The av_scanner option, when set to "clamd", now takes an optional third
472     part, "local", which causes Exim to pass a filename to ClamAV instead of
473     the file content.  This is the same behaviour as when clamd is pointed at
474     a Unix-domain socket.  For example:
475
476       av_scanner = clamd:192.0.2.3 1234:local
477
478     ClamAV's ExtendedDetectionInfo response format is now handled.
479
480  4. There is now a -bmalware option, restricted to admin users.  This option
481     takes one parameter, a filename, and scans that file with Exim's
482     malware-scanning framework.  This is intended purely as a debugging aid
483     to ensure that Exim's scanning is working, not to replace other tools.
484     Note that the ACL framework is not invoked, so if av_scanner references
485     ACL variables without a fallback then this will fail.
486
487  5. There is a new expansion operator, "reverse_ip", which will reverse IP
488     addresses; IPv4 into dotted quad, IPv6 into dotted nibble.  Examples:
489
490       ${reverse_ip:192.0.2.4}
491        -> 4.2.0.192
492       ${reverse_ip:2001:0db8:c42:9:1:abcd:192.0.2.3}
493        -> 3.0.2.0.0.0.0.c.d.c.b.a.1.0.0.0.9.0.0.0.2.4.c.0.8.b.d.0.1.0.0.2
494
495  6. There is a new ACL control called "debug", to enable debug logging.
496     This allows selective logging of certain incoming transactions within
497     production environments, with some care.  It takes two options, "tag"
498     and "opts"; "tag" is included in the filename of the log and "opts"
499     is used as per the -d<options> command-line option.  Examples, which
500     don't all make sense in all contexts:
501
502       control = debug
503       control = debug/tag=.$sender_host_address
504       control = debug/opts=+expand+acl
505       control = debug/tag=.$message_exim_id/opts=+expand
506
507  7. It has always been implicit in the design and the documentation that
508     "the Exim user" is not root.  src/EDITME said that using root was
509     "very strongly discouraged".  This is not enough to keep people from
510     shooting themselves in the foot in days when many don't configure Exim
511     themselves but via package build managers.  The security consequences of
512     running various bits of network code are severe if there should be bugs in
513     them.  As such, the Exim user may no longer be root.  If configured
514     statically, Exim will refuse to build.  If configured as ref:user then Exim
515     will exit shortly after start-up.  If you must shoot yourself in the foot,
516     then henceforth you will have to maintain your own local patches to strip
517     the safeties off.
518
519  8. There is a new expansion condition, bool_lax{}.  Where bool{} uses the ACL
520     condition logic to determine truth/failure and will fail to expand many
521     strings, bool_lax{} uses the router condition logic, where most strings
522     do evaluate true.
523     Note: bool{00} is false, bool_lax{00} is true.
524
525  9. Routers now support multiple "condition" tests.
526
527 10. There is now a runtime configuration option "tcp_wrappers_daemon_name".
528     Setting this allows an admin to define which entry in the tcpwrappers
529     config file will be used to control access to the daemon.  This option
530     is only available when Exim is built with USE_TCP_WRAPPERS.  The
531     default value is set at build time using the TCP_WRAPPERS_DAEMON_NAME
532     build option.
533
534 11. [POSSIBLE CONFIG BREAKAGE] The default value for system_filter_user is now
535     the Exim run-time user, instead of root.
536
537 12. [POSSIBLE CONFIG BREAKAGE] ALT_CONFIG_ROOT_ONLY is no longer optional and
538     is forced on.  This is mitigated by the new build option
539     TRUSTED_CONFIG_LIST which defines a list of configuration files which
540     are trusted; one per line. If a config file is owned by root and matches
541     a pathname in the list, then it may be invoked by the Exim build-time
542     user without Exim relinquishing root privileges.
543
544 13. [POSSIBLE CONFIG BREAKAGE] The Exim user is no longer automatically
545     trusted to supply -D<Macro[=Value]> overrides on the command-line.  Going
546     forward, we recommend using TRUSTED_CONFIG_LIST with shim configs that
547     include the main config.  As a transition mechanism, we are temporarily
548     providing a work-around: the new build option WHITELIST_D_MACROS provides
549     a colon-separated list of macro names which may be overridden by the Exim
550     run-time user.  The values of these macros are constrained to the regex
551     ^[A-Za-z0-9_/.-]*$ (which explicitly does allow for empty values).
552
553
554 Version 4.72
555 ------------
556
557  1. TWO SECURITY FIXES: one relating to mail-spools which are globally
558     writable, the other to locking of MBX folders (not mbox).
559
560  2. MySQL stored procedures are now supported.
561
562  3. The dkim_domain transport option is now a list, not a single string, and
563     messages will be signed for each element in the list (discarding
564     duplicates).
565
566  4. The 4.70 release unexpectedly changed the behaviour of dnsdb TXT lookups
567     in the presence of multiple character strings within the RR. Prior to 4.70,
568     only the first string would be returned.  The dnsdb lookup now, by default,
569     preserves the pre-4.70 semantics, but also now takes an extended output
570     separator specification.  The separator can be followed by a semicolon, to
571     concatenate the individual text strings together with no join character,
572     or by a comma and a second separator character, in which case the text
573     strings within a TXT record are joined on that second character.
574     Administrators are reminded that DNS provides no ordering guarantees
575     between multiple records in an RRset.  For example:
576
577       foo.example.  IN TXT "a" "b" "c"
578       foo.example.  IN TXT "d" "e" "f"
579
580       ${lookup dnsdb{>/ txt=foo.example}}   -> "a/d"
581       ${lookup dnsdb{>/; txt=foo.example}}  -> "def/abc"
582       ${lookup dnsdb{>/,+ txt=foo.example}} -> "a+b+c/d+e+f"
583
584
585 Version 4.70 / 4.71
586 -------------------
587
588  1. Native DKIM support without an external library.
589     (Note that if no action to prevent it is taken, a straight upgrade will
590     result in DKIM verification of all signed incoming emails.  See spec
591     for details on conditionally disabling)
592
593  2. Experimental DCC support via dccifd (contributed by Wolfgang Breyha).
594
595  3. There is now a bool{} expansion condition which maps certain strings to
596     true/false condition values (most likely of use in conjunction with the
597     and{} expansion operator).
598
599  4. The $spam_score, $spam_bar and $spam_report variables are now available
600     at delivery time.
601
602  5. exim -bP now supports "macros", "macro_list" or "macro MACRO_NAME" as
603     options, provided that Exim is invoked by an admin_user.
604
605  6. There is a new option gnutls_compat_mode, when linked against GnuTLS,
606     which increases compatibility with older clients at the cost of decreased
607     security.  Don't set this unless you need to support such clients.
608
609  7. There is a new expansion operator, ${randint:...} which will produce a
610     "random" number less than the supplied integer.  This randomness is
611     not guaranteed to be cryptographically strong, but depending upon how
612     Exim was built may be better than the most naive schemes.
613
614  8. Exim now explicitly ensures that SHA256 is available when linked against
615     OpenSSL.
616
617  9. The transport_filter_timeout option now applies to SMTP transports too.
618
619
620 Version 4.69
621 ------------
622
623  1. Preliminary DKIM support in Experimental.
624
625
626 Version 4.68
627 ------------
628
629  1. The body_linecount and body_zerocount C variables are now exported in the
630     local_scan API.
631
632  2. When a dnslists lookup succeeds, the key that was looked up is now placed
633     in $dnslist_matched. When the key is an IP address, it is not reversed in
634     this variable (though it is, of course, in the actual lookup). In simple
635     cases, for example:
636
637       deny dnslists = spamhaus.example
638
639     the key is also available in another variable (in this case,
640     $sender_host_address). In more complicated cases, however, this is not
641     true. For example, using a data lookup might generate a dnslists lookup
642     like this:
643
644       deny dnslists = spamhaus.example/<|192.168.1.2|192.168.6.7|...
645
646     If this condition succeeds, the value in $dnslist_matched might be
647     192.168.6.7 (for example).
648
649  3. Authenticators now have a client_condition option. When Exim is running as
650     a client, it skips an authenticator whose client_condition expansion yields
651     "0", "no", or "false". This can be used, for example, to skip plain text
652     authenticators when the connection is not encrypted by a setting such as:
653
654       client_condition = ${if !eq{$tls_cipher}{}}
655
656     Note that the 4.67 documentation states that $tls_cipher contains the
657     cipher used for incoming messages. In fact, during SMTP delivery, it
658     contains the cipher used for the delivery. The same is true for
659     $tls_peerdn.
660
661  4. There is now a -Mvc <message-id> option, which outputs a copy of the
662     message to the standard output, in RFC 2822 format. The option can be used
663     only by an admin user.
664
665  5. There is now a /noupdate option for the ratelimit ACL condition. It
666     computes the rate and checks the limit as normal, but it does not update
667     the saved data. This means that, in relevant ACLs, it is possible to lookup
668     the existence of a specified (or auto-generated) ratelimit key without
669     incrementing the ratelimit counter for that key.
670
671     In order for this to be useful, another ACL entry must set the rate
672     for the same key somewhere (otherwise it will always be zero).
673
674     Example:
675
676     acl_check_connect:
677       # Read the rate; if it doesn't exist or is below the maximum
678       # we update it below
679       deny ratelimit = 100 / 5m / strict / noupdate
680            log_message = RATE: $sender_rate / $sender_rate_period \
681                          (max $sender_rate_limit)
682
683       [... some other logic and tests...]
684
685       warn ratelimit = 100 / 5m / strict / per_cmd
686            log_message = RATE UPDATE: $sender_rate / $sender_rate_period \
687                          (max $sender_rate_limit)
688            condition = ${if le{$sender_rate}{$sender_rate_limit}}
689
690       accept
691
692  6. The variable $max_received_linelength contains the number of bytes in the
693     longest line that was received as part of the message, not counting the
694     line termination character(s).
695
696  7. Host lists can now include +ignore_defer and +include_defer, analagous to
697     +ignore_unknown and +include_unknown. These options should be used with
698     care, probably only in non-critical host lists such as whitelists.
699
700  8. There's a new option called queue_only_load_latch, which defaults true.
701     If set false when queue_only_load is greater than zero, Exim re-evaluates
702     the load for each incoming message in an SMTP session. Otherwise, once one
703     message is queued, the remainder are also.
704
705  9. There is a new ACL, specified by acl_smtp_notquit, which is run in most
706     cases when an SMTP session ends without sending QUIT. However, when Exim
707     itself is is bad trouble, such as being unable to write to its log files,
708     this ACL is not run, because it might try to do things (such as write to
709     log files) that make the situation even worse.
710
711     Like the QUIT ACL, this new ACL is provided to make it possible to gather
712     statistics. Whatever it returns (accept or deny) is immaterial. The "delay"
713     modifier is forbidden in this ACL.
714
715     When the NOTQUIT ACL is running, the variable $smtp_notquit_reason is set
716     to a string that indicates the reason for the termination of the SMTP
717     connection. The possible values are:
718
719       acl-drop                 Another ACL issued a "drop" command
720       bad-commands             Too many unknown or non-mail commands
721       command-timeout          Timeout while reading SMTP commands
722       connection-lost          The SMTP connection has been lost
723       data-timeout             Timeout while reading message data
724       local-scan-error         The local_scan() function crashed
725       local-scan-timeout       The local_scan() function timed out
726       signal-exit              SIGTERM or SIGINT
727       synchronization-error    SMTP synchronization error
728       tls-failed               TLS failed to start
729
730     In most cases when an SMTP connection is closed without having received
731     QUIT, Exim sends an SMTP response message before actually closing the
732     connection. With the exception of acl-drop, the default message can be
733     overridden by the "message" modifier in the NOTQUIT ACL. In the case of a
734     "drop" verb in another ACL, it is the message from the other ACL that is
735     used.
736
737 10. For MySQL and PostgreSQL lookups, it is now possible to specify a list of
738     servers with individual queries. This is done by starting the query with
739     "servers=x:y:z;", where each item in the list may take one of two forms:
740
741     (1) If it is just a host name, the appropriate global option (mysql_servers
742         or pgsql_servers) is searched for a host of the same name, and the
743         remaining parameters (database, user, password) are taken from there.
744
745     (2) If it contains any slashes, it is taken as a complete parameter set.
746
747     The list of servers is used in exactly the same was as the global list.
748     Once a connection to a server has happened and a query has been
749     successfully executed, processing of the lookup ceases.
750
751     This feature is intended for use in master/slave situations where updates
752     are occurring, and one wants to update a master rather than a slave. If the
753     masters are in the list for reading, you might have:
754
755       mysql_servers = slave1/db/name/pw:slave2/db/name/pw:master/db/name/pw
756
757     In an updating lookup, you could then write
758
759       ${lookup mysql{servers=master; UPDATE ...}
760
761     If, on the other hand, the master is not to be used for reading lookups:
762
763       pgsql_servers = slave1/db/name/pw:slave2/db/name/pw
764
765     you can still update the master by
766
767       ${lookup pgsql{servers=master/db/name/pw; UPDATE ...}
768
769 11. The message_body_newlines option (default FALSE, for backwards
770     compatibility) can be used to control whether newlines are present in
771     $message_body and $message_body_end. If it is FALSE, they are replaced by
772     spaces.
773
774
775 Version 4.67
776 ------------
777
778  1. There is a new log selector called smtp_no_mail, which is not included in
779     the default setting. When it is set, a line is written to the main log
780     whenever an accepted SMTP connection terminates without having issued a
781     MAIL command.
782
783  2. When an item in a dnslists list is followed by = and & and a list of IP
784     addresses, the behaviour was not clear when the lookup returned more than
785     one IP address. This has been solved by the addition of == and =& for "all"
786     rather than the default "any" matching.
787
788  3. Up till now, the only control over which cipher suites GnuTLS uses has been
789     for the cipher algorithms. New options have been added to allow some of the
790     other parameters to be varied.
791
792  4. There is a new compile-time option called ENABLE_DISABLE_FSYNC. When it is
793     set, Exim compiles a runtime option called disable_fsync.
794
795  5. There is a new variable called $smtp_count_at_connection_start.
796
797  6. There's a new control called no_pipelining.
798
799  7. There are two new variables called $sending_ip_address and $sending_port.
800     These are set whenever an SMTP connection to another host has been set up.
801
802  8. The expansion of the helo_data option in the smtp transport now happens
803     after the connection to the server has been made.
804
805  9. There is a new expansion operator ${rfc2047d: that decodes strings that
806     are encoded as per RFC 2047.
807
808 10. There is a new log selector called "pid", which causes the current process
809     id to be added to every log line, in square brackets, immediately after the
810     time and date.
811
812 11. Exim has been modified so that it flushes SMTP output before implementing
813     a delay in an ACL. It also flushes the output before performing a callout,
814     as this can take a substantial time. These behaviours can be disabled by
815     obeying control = no_delay_flush or control = no_callout_flush,
816     respectively, at some earlier stage of the connection.
817
818 12. There are two new expansion conditions that iterate over a list. They are
819     called forany and forall.
820
821 13. There's a new global option called dsn_from that can be used to vary the
822     contents of From: lines in bounces and other automatically generated
823     messages ("delivery status notifications" - hence the name of the option).
824
825 14. The smtp transport has a new option called hosts_avoid_pipelining.
826
827 15. By default, exigrep does case-insensitive matches. There is now a -I option
828     that makes it case-sensitive.
829
830 16. A number of new features ("addresses", "map", "filter", and "reduce") have
831     been added to string expansions to make it easier to process lists of
832     items, typically addresses.
833
834 17. There's a new ACL modifier called "continue". It does nothing of itself,
835     and processing of the ACL always continues with the next condition or
836     modifier. It is provided so that the side effects of expanding its argument
837     can be used.
838
839 18. It is now possible to use newline and other control characters (those with
840     values less than 32, plus DEL) as separators in lists.
841
842 19. The exigrep utility now has a -v option, which inverts the matching
843     condition.
844
845 20. The host_find_failed option in the manualroute router can now be set to
846     "ignore".
847
848
849 Version 4.66
850 ------------
851
852 No new features were added to 4.66.
853
854
855 Version 4.65
856 ------------
857
858 No new features were added to 4.65.
859
860
861 Version 4.64
862 ------------
863
864  1. ACL variables can now be given arbitrary names, as long as they start with
865     "acl_c" or "acl_m" (for connection variables and message variables), are at
866     least six characters long, with the sixth character being either a digit or
867     an underscore.
868
869  2. There is a new ACL modifier called log_reject_target. It makes it possible
870     to specify which logs are used for messages about ACL rejections.
871
872  3. There is a new authenticator called "dovecot". This is an interface to the
873     authentication facility of the Dovecot POP/IMAP server, which can support a
874     number of authentication methods.
875
876  4. The variable $message_headers_raw provides a concatenation of all the
877     messages's headers without any decoding. This is in contrast to
878     $message_headers, which does RFC2047 decoding on the header contents.
879
880  5. In a DNS black list, if two domain names, comma-separated, are given, the
881     second is used first to do an initial check, making use of any IP value
882     restrictions that are set. If there is a match, the first domain is used,
883     without any IP value restrictions, to get the TXT record.
884
885  6. All authenticators now have a server_condition option.
886
887  7. There is a new command-line option called -Mset. It is useful only in
888     conjunction with -be (that is, when testing string expansions). It must be
889     followed by a message id; Exim loads the given message from its spool
890     before doing the expansions.
891
892  8. Another similar new command-line option is called -bem. It operates like
893     -be except that it must be followed by the name of a file that contains a
894     message.
895
896  9. When an address is delayed because of a 4xx response to a RCPT command, it
897     is now the combination of sender and recipient that is delayed in
898     subsequent queue runs until its retry time is reached.
899
900 10. Unary negation and the bitwise logical operators and, or, xor, not, and
901     shift, have been added to the eval: and eval10: expansion items.
902
903 11. The variables $interface_address and $interface_port have been renamed
904     as $received_ip_address and $received_port, to make it clear that they
905     relate to message reception rather than delivery. (The old names remain
906     available for compatibility.)
907
908 12. The "message" modifier can now be used on "accept" and "discard" acl verbs
909     to vary the message that is sent when an SMTP command is accepted.
910
911
912 Version 4.63
913 ------------
914
915 1. There is a new Boolean option called filter_prepend_home for the redirect
916    router.
917
918 2. There is a new acl, set by acl_not_smtp_start, which is run right at the
919    start of receiving a non-SMTP message, before any of the message has been
920    read.
921
922 3. When an SMTP error message is specified in a "message" modifier in an ACL,
923    or in a :fail: or :defer: message in a redirect router, Exim now checks the
924    start of the message for an SMTP error code.
925
926 4. There is a new parameter for LDAP lookups called "referrals", which takes
927    one of the settings "follow" (the default) or "nofollow".
928
929 5. Version 20070721.2 of exipick now included, offering these new options:
930     --reverse
931         After all other sorting options have bee processed, reverse order
932         before displaying messages (-R is synonym).
933     --random
934         Randomize order of matching messages before displaying.
935     --size
936         Instead of displaying the matching messages, display the sum
937         of their sizes.
938     --sort <variable>[,<variable>...]
939         Before displaying matching messages, sort the messages according to
940         each messages value for each variable.
941     --not
942         Negate the value for every test (returns inverse output from the
943         same criteria without --not).
944
945
946 Version 4.62
947 ------------
948
949 1. The ${readsocket expansion item now supports Internet domain sockets as well
950    as Unix domain sockets. If the first argument begins "inet:", it must be of
951    the form "inet:host:port". The port is mandatory; it may be a number or the
952    name of a TCP port in /etc/services. The host may be a name, or it may be an
953    IP address. An ip address may optionally be enclosed in square brackets.
954    This is best for IPv6 addresses. For example:
955
956      ${readsocket{inet:[::1]:1234}{<request data>}...
957
958    Only a single host name may be given, but if looking it up yield more than
959    one IP address, they are each tried in turn until a connection is made. Once
960    a connection has been made, the behaviour is as for ${readsocket with a Unix
961    domain socket.
962
963 2. If a redirect router sets up file or pipe deliveries for more than one
964    incoming address, and the relevant transport has batch_max set greater than
965    one, a batch delivery now occurs.
966
967 3. The appendfile transport has a new option called maildirfolder_create_regex.
968    Its value is a regular expression. For a maildir delivery, this is matched
969    against the maildir directory; if it matches, Exim ensures that a
970    maildirfolder file is created alongside the new, cur, and tmp directories.
971
972
973 Version 4.61
974 ------------
975
976 The documentation is up-to-date for the 4.61 release. Major new features since
977 the 4.60 release are:
978
979 . An option called disable_ipv6, to disable the use of IPv6 completely.
980
981 . An increase in the number of ACL variables to 20 of each type.
982
983 . A change to use $auth1, $auth2, and $auth3 in authenticators instead of $1,
984   $2, $3, (though those are still set) because the numeric variables get used
985   for other things in complicated expansions.
986
987 . The default for rfc1413_query_timeout has been changed from 30s to 5s.
988
989 . It is possible to use setclassresources() on some BSD OS to control the
990   resources used in pipe deliveries.
991
992 . A new ACL modifier called add_header, which can be used with any verb.
993
994 . More errors are detectable in retry rules.
995
996 There are a number of other additions too.
997
998
999 Version 4.60
1000 ------------
1001
1002 The documentation is up-to-date for the 4.60 release. Major new features since
1003 the 4.50 release are:
1004
1005 . Support for SQLite.
1006
1007 . Support for IGNOREQUOTA in LMTP.
1008
1009 . Extensions to the "submission mode" features.
1010
1011 . Support for Client SMTP Authorization (CSA).
1012
1013 . Support for ratelimiting hosts and users.
1014
1015 . New expansion items to help with the BATV "prvs" scheme.
1016
1017 . A "match_ip" condition, that matches an IP address against a list.
1018
1019 There are many more minor changes.
1020
1021 ****