-This file contains descriptions of new features that have been added to Exim,
-but have not yet made it into the main manual (which is most conveniently
-updated when there is a relatively large batch of changes). The doc/ChangeLog
-file contains a listing of all changes, including bug fixes.
-
-Exim version 4.53
------------------
-
-TK/01 Added the "success_on_redirect" address verification option. When an
- address generates new addresses during routing, Exim will abort
- verification with "success" when more than one address has been
- generated, but continue to verify a single new address. The latter
- does not happen when the new "success_on_redirect" option is set, like
-
- require verify = recipient/success_on_redirect/callout=10s
-
- In that case, verification will succeed when a router generates a new
- address.
-
-PH/01 Support for SQLite database lookups has been added. This is another
- query-style lookup, but it is slightly different from the others because
- a file name is required in addition to the SQL query. This is because an
- SQLite database is a single file and there is no daemon as in other SQL
- databases. The interface to Exim requires the name of the file, as an
- absolute path, to be given at the start of the query. It is separated
- from the query by white space. This means that the path name cannot
- contain white space. Here is a lookup expansion example:
-
- ${lookup sqlite {/some/thing/sqlitedb \
- select name from aliases where id='ph10';}}
-
- In a list, the syntax is similar. For example:
-
- domainlist relay_domains = sqlite;/some/thing/sqlitedb \
- select * from relays where ip='$sender_host_address';
-
- The only character affected by the ${quote_sqlite: operator is a single
- quote, which it doubles.
-
- Note that you must set LOOKUP_SQLITE=yes in Local/Makefile in order to
- obtain SQLite support, and you will also need to add -lsqlite3 to the
- EXTRALIBS setting. And of course, you have to install SQLite on your
- host first.
-
-PH/02 The variable $message_id is now deprecated, to be replaced by
- $message_exim_id, which makes it clearer which ID is being referenced.
-
-PH/03 The use of forbid_filter_existstest now also locks out the use of the
- ${stat: expansion item.
-
-PH/04 The IGNOREQUOTA extension to the LMTP protocol is now available in both
- the lmtp transport and the smtp transport running in LMTP mode. In the
- lmtp transport there is a new Boolean option called ignore_quota, and in
- the smtp transport there is a new Boolean option called
- lmtp_ignore_quota. If either of these options is set TRUE, the string
- "IGNOREQUOTA" is added to RCPT commands when using the LMTP protocol,
- provided that the server has advertised support for IGNOREQUOTA in its
- response to the LHLO command.
-
-PH/05 Previously, if "verify = helo" was set in an ACL, the condition was true
- only if the host matched helo_try_verify_hosts, which caused the
- verification to occur when the EHLO/HELO command was issued. The ACL just
- tested the remembered result. Now, if a previous verification attempt has
- not happened, "verify = helo" does it there and then.
-
-
-Exim version 4.52
------------------
-
-TF/01 Support for checking Client SMTP Authorization has been added. CSA is a
- system which allows a site to advertise which machines are and are not
- permitted to send email. This is done by placing special SRV records in
- the DNS, which are looked up using the client's HELO domain. At this
- time CSA is still an Internet-Draft.
-
- Client SMTP Authorization checks are performed by the ACL condition
- verify=csa. This will fail if the client is not authorized. If there is
- a DNS problem, or if no valid CSA SRV record is found, or if the client
- is authorized, the condition succeeds. These three cases can be
- distinguished using the expansion variable $csa_status, which can take
- one of the values "fail", "defer", "unknown", or "ok". The condition
- does not itself defer because that would be likely to cause problems
- for legitimate email.
-
- The error messages produced by the CSA code include slightly more
- detail. If $csa_status is "defer" this may be because of problems
- looking up the CSA SRV record, or problems looking up the CSA target
- address record. There are four reasons for $csa_status being "fail":
- the client's host name is explicitly not authorized; the client's IP
- address does not match any of the CSA target IP addresses; the client's
- host name is authorized but it has no valid target IP addresses (e.g.
- the target's addresses are IPv6 and the client is using IPv4); or the
- client's host name has no CSA SRV record but a parent domain has
- asserted that all subdomains must be explicitly authorized.
-
- The verify=csa condition can take an argument which is the domain to
- use for the DNS query. The default is verify=csa/$sender_helo_name.
-
- This implementation includes an extension to CSA. If the query domain
- is an address literal such as [192.0.2.95], or if it is a bare IP
- address, Exim will search for CSA SRV records in the reverse DNS as if
- the HELO domain was e.g. 95.2.0.192.in-addr.arpa. Therefore it is
- meaningful to say, for example, verify=csa/$sender_host_address - in
- fact, this is the check that Exim performs if the client does not say
- HELO. This extension can be turned off by setting the main
- configuration option dns_csa_use_reverse = false.
-
- If a CSA SRV record is not found for the domain itself, then a search
- is performed through its parent domains for a record which might be
- making assertions about subdomains. The maximum depth of this search is
- limited using the main configuration option dns_csa_search_limit, which
- takes the value 5 by default. Exim does not look for CSA SRV records in
- a top level domain, so the default settings handle HELO domains as long
- as seven (hostname.five.four.three.two.one.com) which encompasses the
- vast majority of legitimate HELO domains.
-
- The dnsdb lookup also has support for CSA. Although dnsdb already
- supports SRV lookups, this is not sufficient because of the extra
- parent domain search behaviour of CSA, and (as with PTR lookups)
- dnsdb also turns IP addresses into lookups in the reverse DNS space.
- The result of ${lookup dnsdb {csa=$sender_helo_name} } has two
- space-separated fields: an authorization code and a target host name.
- The authorization code can be "Y" for yes, "N" for no, "X" for explicit
- authorization required but absent, or "?" for unknown.
-
-PH/01 The amount of output produced by the "make" process has been reduced,
- because the compile lines are often rather long, making it all pretty
- unreadable. The new style is along the lines of the 2.6 Linux kernel:
- just a short line for each module that is being compiled or linked.
- However, it is still possible to get the full output, by calling "make"
- like this:
-
- FULLECHO='' make -e
-
- The value of FULLECHO defaults to "@", the flag character that suppresses
- command reflection in "make". When you ask for the full output, it is
- given in addition to the the short output.
-
-TF/02 There have been two changes concerned with submission mode:
-
- Until now submission mode always left the return path alone, whereas
- locally-submitted messages from untrusted users have the return path
- fixed to the user's email address. Submission mode now fixes the return
- path to the same address as is used to create the Sender: header. If
- /sender_retain is specified then both the Sender: header and the return
- path are left alone.
-
- Note that the changes caused by submission mode take effect after the
- predata ACL. This means that any sender checks performed before the
- fix-ups will use the untrusted sender address specified by the user, not
- the trusted sender address specified by submission mode. Although this
- might be slightly unexpected, it does mean that you can configure ACL
- checks to spot that a user is trying to spoof another's address, for
- example.
-
- There is also a new /name= option for submission mode which allows you
- to specify the user's full name to be included in the Sender: header.
- For example:
-
- accept authenticated = *
- control = submission/name=${lookup {$authenticated_id} \
- lsearch {/etc/exim/namelist} }
-
- The namelist file contains entries like
-
- fanf: Tony Finch
-
- And the resulting Sender: header looks like
-
- Sender: Tony Finch <fanf@exim.org>
-
-TF/03 The control = fakereject ACL modifier now has a fakedefer counterpart,
- which works in exactly the same way except it causes a fake SMTP 450
- response after the message data instead of a fake SMTP 550 response.
- You must take care when using fakedefer because it will cause messages
- to be duplicated when the sender retries. Therefore you should not use
- fakedefer if the message will be delivered normally.
-
-TF/04 There is a new ratelimit ACL condition which can be used to measure
- and control the rate at which clients can send email. This is more
- powerful than the existing smtp_ratelimit_* options, because those
- options only control the rate of commands in a single SMTP session,
- whereas the new ratelimit condition works across all connections
- (concurrent and sequential) to the same host.
-
- The syntax of the ratelimit condition is:
-
- ratelimit = <m> / <p> / <options> / <key>
-
- If the average client sending rate is less than m messages per time
- period p then the condition is false, otherwise it is true.
-
- The parameter p is the smoothing time constant, in the form of an Exim
- time interval e.g. 8h for eight hours. A larger time constant means it
- takes Exim longer to forget a client's past behaviour. The parameter m is
- the maximum number of messages that a client can send in a fast burst. By
- increasing both m and p but keeping m/p constant, you can allow a client
- to send more messages in a burst without changing its overall sending
- rate limit. Conversely, if m and p are both small then messages must be
- sent at an even rate.
-
- The key is used to look up the data used to calcluate the client's
- average sending rate. This data is stored in a database maintained by
- Exim in its spool directory alongside the retry database etc. For
- example, you can limit the sending rate of each authenticated user,
- independent of the computer they are sending from, by setting the key
- to $authenticated_id. The default key is $sender_host_address.
- Internally, Exim includes the smoothing constant p and the options in
- the lookup key because they alter the meaning of the stored data.
- This is not true for the limit m, so you can alter the configured
- maximum rate and Exim will still remember clients' past behaviour,
- but if you alter the other ratelimit parameters Exim will effectively
- forget their past behaviour.
-
- Each ratelimit condition can have up to two options. The first option
- specifies what Exim measures the rate of, and the second specifies how
- Exim handles excessively fast clients.
-
- The per_mail option means that it measures the client's rate of sending
- messages. This is the default if none of the per_* options is specified.
-
- The per_conn option means that it measures the client's connection rate.
-
- The per_byte option limits the sender's email bandwidth. Note that it
- is best to use this option in the DATA ACL; if it is used in an earlier
- ACL it relies on the SIZE parameter on the MAIL command, which may be
- inaccurate or completely missing. You can follow the limit m in the
- configuration with K, M, or G to specify limits in kilobytes,
- megabytes, or gigabytes respectively.
-
- The per_cmd option means that Exim recomputes the rate every time the
- condition is processed, which can be used to limit the SMTP command rate.
- The alias per_rcpt is provided for use in the RCPT ACL instead of per_cmd
- to make it clear that the effect is to limit the rate at which recipients
- are accepted. Note that in this case the rate limiting engine will see a
- message with many recipients as a large high-speed burst.
-
- If a client's average rate is greater than the maximum, the rate
- limiting engine can react in two possible ways, depending on the
- presence of the strict or leaky options. This is independent of the
- other counter-measures (e.g. rejecting the message) that may be
- specified by the rest of the ACL. The default mode is leaky, which
- avoids a sender's over-aggressive retry rate preventing it from getting
- any email through.
-
- The strict option means that the client's recorded rate is always
- updated. The effect of this is that Exim measures the client's average
- rate of attempts to send email, which can be much higher than the
- maximum. If the client is over the limit it will be subjected to
- counter-measures until it slows down below the maximum rate.
-
- The leaky option means that the client's recorded rate is not updated
- if it is above the limit. The effect of this is that Exim measures the
- client's average rate of successfully sent email, which cannot be
- greater than the maximum. If the client is over the limit it will
- suffer some counter-measures, but it will still be able to send email
- at the configured maximum rate, whatever the rate of its attempts.
-
- As a side-effect, the ratelimit condition will set the expansion
- variables $sender_rate containing the client's computed rate,
- $sender_rate_limit containing the configured value of m, and
- $sender_rate_period containing the configured value of p.
-
- Exim's other ACL facilities are used to define what counter-measures
- are taken when the rate limit is exceeded. This might be anything from
- logging a warning (e.g. while measuring existing sending rates in order
- to define our policy), through time delays to slow down fast senders,
- up to rejecting the message. For example,
-
- # Log all senders' rates
- warn
- ratelimit = 0 / 1h / strict
- log_message = \
- Sender rate $sender_rate > $sender_rate_limit / $sender_rate_period
-
- # Slow down fast senders
- warn
- ratelimit = 100 / 1h / per_rcpt / strict
- delay = ${eval: 10 * ($sender_rate - $sender_rate_limit) }
-
- # Keep authenticated users under control
- deny
- ratelimit = 100 / 1d / strict / $authenticated_id
-
- # System-wide rate limit
- defer
- message = Sorry, too busy. Try again later.
- ratelimit = 10 / 1s / $primary_hostname
-
- # Restrict incoming rate from each host, with a default rate limit
- # set using a macro and special cases looked up in a table.
- defer
- message = Sender rate $sender_rate exceeds \
- $sender_rate_limit messages per $sender_rate_period
- ratelimit = ${lookup {$sender_host_address} \
- cdb {DB/ratelimits.cdb} \
- {$value} {RATELIMIT} }
-
- Warning: if you have a busy server with a lot of ratelimit tests,
- especially with the per_rcpt option, you may suffer from a performance
- bottleneck caused by locking on the ratelimit hints database. Apart from
- making your ACLs less complicated, you can reduce the problem by using a
- RAM disk for Exim's hints directory, /var/spool/exim/db/. However this
- means that Exim will lose its hints data after a reboot (including retry
- hints, the callout cache, and ratelimit data).
-
-TK/01 Added an 'spf' lookup type that will return an SPF result for a given
- email address (the key) and an IP address (the database):
-
- ${lookup {tom@duncanthrax.net} spf{217.115.139.137}}
-
- The lookup will return the same result strings as they can appear in
- $spf_result (pass,fail,softfail,neutral,none,err_perm,err_temp). The
- lookup is armored in EXPERIMENTAL_SPF. Currently, only IPv4 addresses
- are supported.
-
- Patch submitted by Chris Webb <chris@arachsys.com>.
-
-PH/02 There's a new verify callout option, "fullpostmaster", which first acts
- as "postmaster" and checks the recipient <postmaster@domain>. If that
- fails, it tries just <postmaster>, without a domain, in accordance with
- the specification in RFC 2821.
-
-PH/03 The action of the auto_thaw option has been changed. It no longer applies
- to frozen bounce messages.
-
-TK/02 There are two new expansion items to help with the implementation of
- the BATV "prvs" scheme in an Exim configuration:
-
-
- ${prvs {<ADDRESS>}{<KEY>}{[KEYNUM]}}
-
- The "prvs" expansion item takes three arguments: A qualified RFC2821
- email address, a key and an (optional) key number. All arguments are
- expanded before being used, so it is easily possible to lookup a key
- and key number using the address as the lookup key. The key number is
- optional and defaults to "0". The item will expand to a "prvs"-signed
- email address, to be typically used with the "return_path" option on
- a smtp transport. The decision if BATV should be used with a given
- sender/recipient pair should be done on router level, to avoid having
- to set "max_rcpt = 1" on the transport.
-
-
- ${prvscheck {<ADDRESS>}{<SECRET>}{<RETURN_STRING>}}
-
- The "prvscheck" expansion item takes three arguments. Argument 1 is
- expanded first. When the expansion does not yield a SYNTACTICALLY
- valid "prvs"-scheme address, the whole "prvscheck" item expands to
- the empty string. If <ADDRESS> is a "prvs"-encoded address after
- expansion, two expansion variables are set up:
+This file contains descriptions of new features that have been added to Exim.
+Before a formal release, there may be quite a lot of detail so that people can
+test from the snapshots or the Git before the documentation is updated. Once
+the documentation is updated, this file is reduced to a short list.
+
+Version 4.94
+------------
+
+ 1. EXPERIMENTAL_SRS_NATIVE optional build feature. See the experimental.spec
+ file.
+
+ 2. Channel-binding for authenticators is now supported under OpenSSL.
+ Previously it was GnuTLS-only.
+
+ 3. A msg:defer event.
+
+ 4. Client-side support in the gsasl authenticator. Tested against the
+ plaintext driver for PLAIN; only against itself for SCRAM-SHA-1 and
+ SCRAM-SHA-1-PLUS methods.
+
+ 5. Server-side support in the gsasl authenticator for encrypted passwords, as
+ an alternate for the existing plaintext.
+
+ 6. Variable $local_part_data now also set by router check_local_user option,
+ with an de-tainted version of $local_part.
+
+ 7. Named-list definitions can now be prefixed "hide" so that "-bP" commands do
+ not output the content. Previously this could only be done on options.
+
+ 8. As an exerimental feature, the dovecot authenticatino driver supports inet
+ sockets. Previously it was unix-domain sockets only.
+
+ 9. The ACL control "queue_only" can also be spelled "queue", and now takes an
+ option "first_pass_route" to do the same as a "-odqs" on the command line.
+
+10. Items specified for the router and transport headers_remove option can use
+ a trailing asterisk to specify globbing.
+
+11. New $queue_size variable.
+
+12. New variables $local_part_{pre,suf}fix_v.
+
+13. New main option "sqlite_dbfile", for use in preference to prefixing the
+ lookup string. The older method fails when tainted variables are used
+ in the lookup, as the filename becomes tainted. The new method keeps the
+ filename separate.
+
+14. Options on the dsearch lookup, to return the full path and to filter
+ filetypes for matching.
+
+15. Options on pgsql and mysql lookups, to specify server separate from the
+ lookup string.
+
+16. An option on all single-key lookups, to return (on a hit) a de-tainted
+ version of the lookup key rather than the looked-up data.
+
+17. $domain_data and $localpart_data are now set by all list-match successes.
+ Previously only list items that performed lookups did so.
+ Also, matching list items that are tail-match or RE-match now set the
+ numeric variables $0 (etc) in the same way os other RE matches.
+
+18. Expansion item ${listquote {<char} {<item>}}.
+
+19. An option for the ${readsocket {}{}{}} expansion to make the result data
+ cacheable.
+
+20. dkim_verify_min_keysizes, a list of minimum acceptable public-key sizes.
+
+21. bounce_message_file and warn_message_file are now expanded before use.
+
+22. New main config option spf_smtp_comment_template to customise the
+ $spf_smtp_comment variable
+
+
+
+Version 4.93
+------------
+
+ 1. An "external" authenticator, per RFC 4422 Appendix A.
+
+ 2. A JSON lookup type, and JSON variants of the forall/any expansion conditions.
+
+ 3. Variables $tls_in_cipher_std, $tls_out_cipher_std giving the RFC names
+ for ciphersuites.
+
+ 4. Log_selectors "msg_id" (on by default) and "msg_id_created".
+
+ 5. A case_insensitive option for verify=not_blind.
+
+ 6. EXPERIMENTAL_TLS_RESUME optional build feature. See the experimental.spec
+ file.
+
+ 7. A main option exim_version to override the version Exim
+ reports in verious places ($exim_version, $version_number).
+
+ 8. Expansion operator ${sha2_N:} for N=256, 384, 512.
+
+ 9. Router variables, $r_... settable from router options and usable in routers
+ and transports.
+
+10. The spf lookup now supports IPv6.
+
+11. Main options for DKIM verify to filter hash and key types.
+
+12. With TLS1.3, support for full-chain OCSP stapling.
+
+13. Dual-certificate stacks on servers now support OCSP stapling, under OpenSSL.
+
+14: An smtp:ehlo transport event, for observability of the remote offered features.
+
+15: Support under OpenSSL for writing NSS-style key files for packet-capture
+ decode. The environment variable SSLKEYLOGFILE is used; if an absolute path
+ it must indicate a file under the spool directory; if relative the the spool
+ directory is prepended. Works on the server side only. Support under
+ GnuTLS was already there, being done purely by the library (server side
+ only, and exim must be run as root).
+
+16: Command-line option to move messages from one named queue to another.
+
+17. Variables $tls_in_ver, $tls_out_ver.
+
+
+Version 4.92
+--------------
+
+ 1. ${l_header:<name>} and ${l_h:<name>} expansion items, giving a colon-sep
+ list when there are multiple headers having a given name. This matters
+ when individual headers are wrapped onto multiple lines; with previous
+ facilities hard to parse.
+
+ 2. The ${readsocket } expansion item now takes a "tls" option, doing the
+ obvious thing.
+
+ 3. EXPERIMENTAL_REQUIRETLS and EXPERIMENTAL_PIPE_CONNECT optional build
+ features. See the experimental.spec file.
+
+ 4. If built with SUPPORT_I18N a "utf8_downconvert" option on the smtp transport.
+
+ 5. A "pipelining" log_selector.
+
+ 6. Builtin macros for supported log_selector and openssl_options values.
+
+ 7. JSON variants of the ${extract } expansion item.
+
+ 8. A "noutf8" debug option, for disabling the UTF-8 characters in debug output.
+
+ 9. TCP Fast Open support on MacOS.
+
+Version 4.91
+--------------
+
+ 1. Dual-certificate stacks on servers now support OCSP stapling, under GnuTLS
+ version 3.5.6 or later.
+
+ 2. DANE is now supported under GnuTLS version 3.0.0 or later. Both GnuTLS and
+ OpenSSL versions are moved to mainline support from Experimental.
+ New SMTP transport option "dane_require_tls_ciphers".
+
+ 3. Feature macros for the compiled-in set of malware scanner interfaces.
+
+ 4. SPF support is promoted from Experimental to mainline status. The template
+ src/EDITME makefile does not enable its inclusion.
+
+ 5. Logging control for DKIM verification. The existing DKIM log line is
+ controlled by a "dkim_verbose" selector which is _not_ enabled by default.
+ A new tag "DKIM=<domain>" is added to <= lines by default, controlled by
+ a "dkim" log_selector.
+
+ 6. Receive duration on <= lines, under a new log_selector "receive_time".
+
+ 7. Options "ipv4_only" and "ipv4_prefer" on the dnslookup router and on
+ routing rules in the manualroute router.
+
+ 8. Expansion item ${sha3:<string>} / ${sha3_<N>:<string>} now also supported
+ under OpenSSL version 1.1.1 or later.
+
+ 9. DKIM operations can now use the Ed25519 algorithm in addition to RSA, under
+ GnuTLS 3.6.0 or OpenSSL 1.1.1 or later.
+
+10. Builtin feature-macros _CRYPTO_HASH_SHA3 and _CRYPTO_SIGN_ED25519, library
+ version dependent.
+
+11. "exim -bP macro <name>" returns caller-usable status.
+
+12. Expansion item ${authresults {<machine>}} for creating an
+ Authentication-Results: header.
+
+13. EXPERIMENTAL_ARC. See the experimental.spec file.
+ See also new util/renew-opendmarc-tlds.sh script for use with DMARC/ARC.
+
+14: A dane:fail event, intended to facilitate reporting.
+
+15. "Lightweight" support for Redis Cluster. Requires redis_servers list to
+ contain all the servers in the cluster, all of which must be reachable from
+ the running exim instance. If the cluster has master/slave replication, the
+ list must contain all the master and slave servers.
+
+16. Add an option to the Avast scanner interface: "pass_unscanned". This
+ allows to treat unscanned files as clean. Files may be unscanned for
+ several reasons: decompression bombs, broken archives.
+
+
+Version 4.90
+------------
+
+ 1. PKG_CONFIG_PATH can now be set in Local/Makefile;
+ wildcards will be expanded, values are collapsed.
+
+ 2. The ${readsocket } expansion now takes an option to not shutdown the
+ connection after sending the query string. The default remains to do so.
+
+ 3. An smtp transport option "hosts_noproxy_tls" to control whether multiple
+ deliveries on a single TCP connection can maintain a TLS connection
+ open. By default disabled for all hosts, doing so saves the cost of
+ making new TLS sessions, at the cost of having to proxy the data via
+ another process. Logging is also affected.
+
+ 4. A malware connection type for the FPSCAND protocol.
+
+ 5. An option for recipient verify callouts to hold the connection open for
+ further recipients and for delivery.
+
+ 6. The reproducible build $SOURCE_DATE_EPOCH environment variable is now
+ supported.
+
+ 7. Optionally, an alternate format for spool data-files which matches the
+ wire format - meaning more efficient reception and transmission (at the
+ cost of difficulty with standard Unix tools). Only used for messages
+ received using the ESMTP CHUNKING option, and when a new main-section
+ option "spool_wireformat" (false by default) is set.
+
+ 8. New main configuration option "commandline_checks_require_admin" to
+ restrict who can use various introspection options.
+
+ 9. New option modifier "no_check" for quota and quota_filecount
+ appendfile transport.
+
+10. Variable $smtp_command_history returning a comma-sep list of recent
+ SMTP commands.
+
+11. Millisecond timetamps in logs, on log_selector "millisec". Also affects
+ log elements QT, DT and D, and timstamps in debug output.
+
+12. TCP Fast Open logging. As a server, logs when the SMTP banner was sent
+ while still in SYN_RECV state; as a client logs when the connection
+ is opened with a TFO cookie.
+
+13. DKIM support for multiple signing, by domain and/or key-selector.
+ DKIM support for multiple hashes, and for alternate-identity tags.
+ Builtin macro with default list of signed headers.
+ Better syntax for specifying oversigning.
+ The DKIM ACL can override verification status, and status is visible in
+ the data ACL.
+
+14. Exipick understands -C|--config for an alternative Exim
+ configuration file.
+
+15. TCP Fast Open used, with data-on-SYN, for client SMTP via SOCKS5 proxy,
+ for ${readsocket } expansions, and for ClamAV.
+
+16. The "-be" expansion test mode now supports macros. Macros are expanded
+ in test lines, and new macros can be defined.
+
+17. Support for server-side dual-certificate-stacks (eg. RSA + ECDSA).
+
+
+Version 4.89
+------------
+
+ 1. Allow relative config file names for ".include"
+
+ 2. A main-section config option "debug_store" to control the checks on
+ variable locations during store-reset. Normally false but can be enabled
+ when a memory corruption issue is suspected on a production system.
+
+
+Version 4.88
+------------
+
+ 1. The new perl_taintmode option allows to run the embedded perl
+ interpreter in taint mode.
+
+ 2. New log_selector: dnssec, adds a "DS" tag to acceptance and delivery lines.
+
+ 3. Speculative debugging, via a "kill" option to the "control=debug" ACL
+ modifier.
+
+ 4. New expansion item ${sha3:<string>} / ${sha3_<N>:<string>}.
+ N can be 224, 256 (default), 384, 512.
+ With GnuTLS 3.5.0 or later, only.
+
+ 5. Facility for named queues: A command-line argument can specify
+ the queue name for a queue operation, and an ACL modifier can set
+ the queue to be used for a message. A $queue_name variable gives
+ visibility.
+
+ 6. New expansion operators base32/base32d.
+
+ 7. The CHUNKING ESMTP extension from RFC 3030. May give some slight
+ performance increase and network load decrease. Main config option
+ chunking_advertise_hosts, and smtp transport option hosts_try_chunking
+ for control.
+
+ 8. LMDB lookup support, as Experimental. Patch supplied by Andrew Colin Kissa.
+
+ 9. Expansion operator escape8bit, like escape but not touching newline etc..
+
+10. Feature macros, generated from compile options. All start with "_HAVE_"
+ and go on with some roughly recognisable name. Driver macros, for
+ router, transport and authentication drivers; names starting with "_DRIVER_".
+ Option macros, for each configuration-file option; all start with "_OPT_".
+ Use the "-bP macros" command-line option to see what is present.
+
+11. Integer values for options can take a "G" multiplier.
+
+12. defer=pass option for the ACL control cutthrough_delivery, to reflect 4xx
+ returns from the target back to the initiator, rather than spooling the
+ message.
+
+13. New built-in constants available for tls_dhparam and default changed.
+
+14. If built with EXPERIMENTAL_QUEUEFILE, a queuefile transport, for writing
+ out copies of the message spool files for use by 3rd-party scanners.
+
+15. A new option on the smtp transport, hosts_try_fastopen. If the system
+ supports it (on Linux it must be enabled in the kernel by the sysadmin)
+ try to use RFC 7413 "TCP Fast Open". No data is sent on the SYN segment
+ but it permits a peer that also supports the facility to send its SMTP
+ banner immediately after the SYN,ACK segment rather then waiting for
+ another ACK - so saving up to one roundtrip time. Because it requires
+ previous communication with the peer (we save a cookie from it) this
+ will only become active on frequently-contacted destinations.
+
+16. A new syslog_pid option to suppress PID duplication in syslog lines.
+
+
+Version 4.87
+------------
+
+ 1. The ACL conditions regex and mime_regex now capture substrings
+ into numeric variables $regex1 to 9, like the "match" expansion condition.
+
+ 2. New $callout_address variable records the address used for a spam=,
+ malware= or verify= callout.
+
+ 3. Transports now take a "max_parallel" option, to limit concurrency.
+
+ 4. Expansion operators ${ipv6norm:<string>} and ${ipv6denorm:<string>}.
+ The latter expands to a 8-element colon-sep set of hex digits including
+ leading zeroes. A trailing ipv4-style dotted-decimal set is converted
+ to hex. Pure ipv4 addresses are converted to IPv4-mapped IPv6.
+ The former operator strips leading zeroes and collapses the longest
+ set of 0-groups to a double-colon.
+
+ 5. New "-bP config" support, to dump the effective configuration.
+
+ 6. New $dkim_key_length variable.
+
+ 7. New base64d and base64 expansion items (the existing str2b64 being a
+ synonym of the latter). Add support in base64 for certificates.
+
+ 8. New main configuration option "bounce_return_linesize_limit" to
+ avoid oversize bodies in bounces. The default value matches RFC
+ limits.
+
+ 9. New $initial_cwd expansion variable.
+
+
+Version 4.86
+------------
+
+ 1. Support for using the system standard CA bundle.
+
+ 2. New expansion items $config_file, $config_dir, containing the file
+ and directory name of the main configuration file. Also $exim_version.
+
+ 3. New "malware=" support for Avast.
+
+ 4. New "spam=" variant option for Rspamd.
+
+ 5. Assorted options on malware= and spam= scanners.
+
+ 6. A command-line option to write a comment into the logfile.
+
+ 7. If built with EXPERIMENTAL_SOCKS feature enabled, the smtp transport can
+ be configured to make connections via socks5 proxies.
+
+ 8. If built with EXPERIMENTAL_INTERNATIONAL, support is included for
+ the transmission of UTF-8 envelope addresses.
+
+ 9. If built with EXPERIMENTAL_INTERNATIONAL, an expansion item for a commonly
+ used encoding of Maildir folder names.
+
+10. A logging option for slow DNS lookups.
+
+11. New ${env {<variable>}} expansion.
+
+12. A non-SMTP authenticator using information from TLS client certificates.
+
+13. Main option "tls_eccurve" for selecting an Elliptic Curve for TLS.
+ Patch originally by Wolfgang Breyha.
+
+14. Main option "dns_trust_aa" for trusting your local nameserver at the
+ same level as DNSSEC.
+
+Version 4.85
+------------
+
+ 1. If built with EXPERIMENTAL_DANE feature enabled, Exim will follow the
+ DANE SMTP draft to assess a secure chain of trust of the certificate
+ used to establish the TLS connection based on a TLSA record in the
+ domain of the sender.
+
+ 2. The EXPERIMENTAL_TPDA feature has been renamed to EXPERIMENTAL_EVENT
+ and several new events have been created. The reason is because it has
+ been expanded beyond just firing events during the transport phase. Any
+ existing TPDA transport options will have to be rewritten to use a new
+ $event_name expansion variable in a condition. Refer to the
+ experimental-spec.txt for details and examples.
+
+ 3. The EXPERIMENTAL_CERTNAMES features is an enhancement to verify that
+ server certs used for TLS match the result of the MX lookup. It does
+ not use the same mechanism as DANE.
+
+
+Version 4.84
+------------
+
+
+Version 4.83
+------------
+
+ 1. If built with the EXPERIMENTAL_PROXY feature enabled, Exim can be
+ configured to expect an initial header from a proxy that will make the
+ actual external source IP:host be used in exim instead of the IP of the
+ proxy that is connecting to it.
+
+ 2. New verify option header_names_ascii, which will check to make sure
+ there are no non-ASCII characters in header names. Exim itself handles
+ those non-ASCII characters, but downstream apps may not, so Exim can
+ detect and reject if those characters are present.
+
+ 3. New expansion operator ${utf8clean:string} to replace malformed UTF8
+ codepoints with valid ones.
+
+ 4. New malware type "sock". Talks over a Unix or TCP socket, sending one
+ command line and matching a regex against the return data for trigger
+ and a second regex to extract malware_name. The mail spoolfile name can
+ be included in the command line.
+
+ 5. The smtp transport now supports options "tls_verify_hosts" and
+ "tls_try_verify_hosts". If either is set the certificate verification
+ is split from the encryption operation. The default remains that a failed
+ verification cancels the encryption.