- 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.
-
- The SQLite library handles multiple simultaneous accesses to the database
- internally. Multiple readers are permitted, but only one process can
- update at once. Attempts to access the database while it is being updated
- are rejected after a timeout period, during which the SQLite library
- waits for the lock to be released. In Exim, the default timeout is set
- to 5 seconds, but it can be changed by means of the sqlite_lock_timeout
- option.
-
- 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.
-
-PH/06 It is now possible to specify a port number along with a host name or
- IP address in the list of hosts defined in the manualroute or
- queryprogram routers, fallback_hosts, or the "hosts" option of the smtp
- transport. These all override any port specification on the transport.
- The relatively standard syntax of using a colon separator has been
- adopted, but there are some gotchas that need attention:
-
- * In all these lists of hosts, colon is the default separator, so either
- the colon that specifies a port must be doubled, or the separator must
- be changed. The following two examples have the same effect:
-
- fallback_hosts = host1.tld::1225 : host2.tld::1226
- fallback_hosts = <; host1.tld:1225 ; host2.tld:1226
-
- * When IPv6 addresses are involved, it gets worse, because they contain
- colons of their own. To make this case easier, it is permitted to
- enclose an IP address (either v4 or v6) in square brackets if a port
- number follows. Here's an example from a manualroute router:
-
- route_list = * "</ [10.1.1.1]:1225 / [::1]:1226"
-
- If the "/MX" feature is to be used as well as a port specifier, the port
- must come last. For example:
-
- route_list = * dom1.tld/mx::1225
-
-PH/07 $smtp_command_argument is now set for all SMTP commands, not just the
- non-message ones. This makes it possible to inspect the complete command
- for RCPT commands, for example. But see also PH/45 below.
-
-PH/08 The ${eval expansion now supports % as a "remainder" operator.
-
-PH/09 There is a new ACL condition "verify = not_blind". It checks that there
- are no blind (bcc) recipients in the message. Every envelope recipient
- must appear either in a To: header line or in a Cc: header line for this
- condition to be true. Local parts are checked case-sensitively; domains
- are checked case-insensitively. If Resent-To: or Resent-Cc: header lines
- exist, they are also checked. This condition can be used only in a DATA
- or non-SMTP ACL.
-
- There are, of course, many legitimate messages that make use of blind
- (bcc) recipients. This check should not be used on its own for blocking
- messages.
-
-PH/10 There is a new ACL control called "suppress_local_fixups". This applies
- to locally submitted (non TCP/IP) messages, and is the complement of
- "control = submission". It disables the fixups that are normally applied
- to locally-submitted messages. Specifically:
-
- (a) Any Sender: header line is left alone (in this respect, it's a
- dynamic version of local_sender_retain).
-
- (b) No Message-ID:, From:, or Date: headers are added.
-
- (c) There is no check that From: corresponds to the actual sender.
-
- This feature may be useful when a remotely-originated message is
- accepted, passed to some scanning program, and then re-submitted for
- delivery. It means that all four possibilities can now be specified:
-
- (1) Locally submitted, fixups applies: the default.
- (2) Locally submitted, no fixups applied: use control =
- suppress_local_fixups.
- (3) Remotely submitted, no fixups applied: the default.
- (4) Remotely submitted, fixups applied: use control = submission.
-
-PH/11 There is a new log selector, "unknown_in_list", which provokes a log
- entry when the result of a list match is failure because a DNS lookup
- failed.
-
-PH/12 There is a new variable called $smtp_command which contains the full SMTP
- command (compare $smtp_command_argument - see PH/07 above). This makes it
- possible to distinguish between HELO and EHLO, and also between things
- like "MAIL FROM:<>" and "MAIL FROM: <>".
-
-TF/01 There's a new script in util/ratelimit.pl which extracts sending
- rates from log files, to assist with choosing appropriate settings
- when deploying the ratelimit ACL condition.
-
-PH/13 A new letter, "H", is available in retry parameter sets. It is similar
- to "G" (geometric increasing time intervals), except that the interval
- before the next retry is randomized. Each time, the previous interval is
- multiplied by the factor in order to get a maximum for the next interval.
- The mininum interval is the first argument of the parameter, and an
- actual interval is chosen randomly between them. Such a rule has been
- found to be helpful in cluster configurations when all the members of the
- cluster restart at once, and may synchronize their queue processing
- times.
-
-
-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 calculate 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 options are separated by a
- slash, like the other parameters.
-
- 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:
+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.
+
+ 6. New SERVERS override of default ldap server list. In the ACLs, an ldap
+ lookup can now set a list of servers to use that is different from the
+ default list.
+
+ 7. New command-line option -C for exiqgrep to specify alternate exim.conf
+ file when searching the queue.
+
+ 8. OCSP now supports GnuTLS also, if you have version 3.1.3 or later of that.
+
+ 9. Support for DNSSEC on outbound connections.
+
+10. New variables "tls_(in,out)_(our,peer)cert" and expansion item
+ "certextract" to extract fields from them. Hash operators md5 and sha1
+ work over them for generating fingerprints, and a new sha256 operator
+ for them added.
+
+11. PRDR is now supported dy default.
+
+12. OCSP stapling is now supported by default.
+
+13. If built with the EXPERIMENTAL_DSN feature enabled, Exim will output
+ Delivery Status Notification messages in MIME format, and negotiate
+ DSN features per RFC 3461.
+
+
+Version 4.82
+------------
+
+ 1. New command-line option -bI:sieve will list all supported sieve extensions
+ of this Exim build on standard output, one per line.
+ ManageSieve (RFC 5804) providers managing scripts for use by Exim should
+ query this to establish the correct list to include in the protocol's
+ SIEVE capability line.
+
+ 2. If the -n option is combined with the -bP option, then the name of an
+ emitted option is not output, only the value (if visible to you).
+ For instance, "exim -n -bP pid_file_path" should just emit a pathname
+ followed by a newline, and no other text.
+
+ 3. When built with SUPPORT_TLS and USE_GNUTLS, the SMTP transport driver now
+ has a "tls_dh_min_bits" option, to set the minimum acceptable number of
+ bits in the Diffie-Hellman prime offered by a server (in DH ciphersuites)
+ acceptable for security. (Option accepted but ignored if using OpenSSL).
+ Defaults to 1024, the old value. May be lowered only to 512, or raised as
+ far as you like. Raising this may hinder TLS interoperability with other
+ sites and is not currently recommended. Lowering this will permit you to
+ establish a TLS session which is not as secure as you might like.
+
+ Unless you really know what you are doing, leave it alone.
+
+ 4. If not built with DISABLE_DNSSEC, Exim now has the main option
+ dns_dnssec_ok; if set to 1 then Exim will initialise the resolver library
+ to send the DO flag to your recursive resolver. If you have a recursive
+ resolver, which can set the Authenticated Data (AD) flag in results, Exim
+ can now detect this. Exim does not perform validation itself, instead
+ relying upon a trusted path to the resolver.
+
+ Current status: work-in-progress; $sender_host_dnssec variable added.
+
+ 5. DSCP support for outbound connections: on a transport using the smtp driver,
+ set "dscp = ef", for instance, to cause the connections to have the relevant
+ DSCP (IPv4 TOS or IPv6 TCLASS) value in the header.
+
+ Similarly for inbound connections, there is a new control modifier, dscp,
+ so "warn control = dscp/ef" in the connect ACL, or after authentication.
+
+ Supported values depend upon system libraries. "exim -bI:dscp" to list the
+ ones Exim knows of. You can also set a raw number 0..0x3F.
+
+ 6. The -G command-line flag is no longer ignored; it is now equivalent to an
+ ACL setting "control = suppress_local_fixups". The -L command-line flag
+ is now accepted and forces use of syslog, with the provided tag as the
+ process name. A few other flags used by Sendmail are now accepted and
+ ignored.
+
+ 7. New cutthrough routing feature. Requested by a "control = cutthrough_delivery"
+ ACL modifier; works for single-recipient mails which are received on and
+ deliverable via SMTP. Using the connection made for a recipient verify,
+ if requested before the verify, or a new one made for the purpose while
+ the inbound connection is still active. The bulk of the mail item is copied
+ direct from the inbound socket to the outbound (as well as the spool file).
+ When the source notifies the end of data, the data acceptance by the destination
+ is negotiated before the acceptance is sent to the source. If the destination
+ does not accept the mail item, for example due to content-scanning, the item
+ is not accepted from the source and therefore there is no need to generate
+ a bounce mail. This is of benefit when providing a secondary-MX service.
+ The downside is that delays are under the control of the ultimate destination
+ system not your own.
+
+ The Received-by: header on items delivered by cutthrough is generated
+ early in reception rather than at the end; this will affect any timestamp
+ included. The log line showing delivery is recorded before that showing
+ reception; it uses a new ">>" tag instead of "=>".
+
+ To support the feature, verify-callout connections can now use ESMTP and TLS.
+ The usual smtp transport options are honoured, plus a (new, default everything)
+ hosts_verify_avoid_tls.
+
+ New variable families named tls_in_cipher, tls_out_cipher etc. are introduced
+ for specific access to the information for each connection. The old names
+ are present for now but deprecated.
+
+ Not yet supported: IGNOREQUOTA, SIZE, PIPELINING.
+
+ 8. New expansion operators ${listnamed:name} to get the content of a named list
+ and ${listcount:string} to count the items in a list.
+
+ 9. New global option "gnutls_allow_auto_pkcs11", defaults false. The GnuTLS
+ rewrite in 4.80 combines with GnuTLS 2.12.0 or later, to autoload PKCS11
+ modules. For some situations this is desirable, but we expect admin in
+ those situations to know they want the feature. More commonly, it means
+ that GUI user modules get loaded and are broken by the setuid Exim being
+ unable to access files specified in environment variables and passed
+ through, thus breakage. So we explicitly inhibit the PKCS11 initialisation
+ unless this new option is set.
+
+ Some older OS's with earlier versions of GnuTLS might not have pkcs11 ability,
+ so have also added a build option which can be used to build Exim with GnuTLS
+ but without trying to use any kind of PKCS11 support. Uncomment this in the
+ Local/Makefile:
+
+ AVOID_GNUTLS_PKCS11=yes
+
+10. The "acl = name" condition on an ACL now supports optional arguments.
+ New expansion item "${acl {name}{arg}...}" and expansion condition
+ "acl {{name}{arg}...}" are added. In all cases up to nine arguments
+ can be used, appearing in $acl_arg1 to $acl_arg9 for the called ACL.
+ Variable $acl_narg contains the number of arguments. If the ACL sets
+ a "message =" value this becomes the result of the expansion item,
+ or the value of $value for the expansion condition. If the ACL returns
+ accept the expansion condition is true; if reject, false. A defer
+ return results in a forced fail.
+
+11. Routers and transports can now have multiple headers_add and headers_remove
+ option lines. The concatenated list is used.
+
+12. New ACL modifier "remove_header" can remove headers before message gets
+ handled by routers/transports.
+
+13. New dnsdb lookup pseudo-type "a+". A sequence of "a6" (if configured),
+ "aaaa" and "a" lookups is done and the full set of results returned.
+
+14. New expansion variable $headers_added with content from ACL add_header
+ modifier (but not yet added to message).
+
+15. New 8bitmime status logging option for received messages. Log field "M8S".
+
+16. New authenticated_sender logging option, adding to log field "A".
+
+17. New expansion variables $router_name and $transport_name. Useful
+ particularly for debug_print as -bt command-line option does not
+ require privilege whereas -d does.
+
+18. If built with EXPERIMENTAL_PRDR, per-recipient data responses per a
+ proposed extension to SMTP from Eric Hall.
+
+19. The pipe transport has gained the force_command option, to allow
+ decorating commands from user .forward pipe aliases with prefix
+ wrappers, for instance.
+
+20. Callout connections can now AUTH; the same controls as normal delivery
+ connections apply.
+
+21. Support for DMARC, using opendmarc libs, can be enabled. It adds new
+ options: dmarc_forensic_sender, dmarc_history_file, and dmarc_tld_file.
+ It adds new expansion variables $dmarc_ar_header, $dmarc_status,
+ $dmarc_status_text, and $dmarc_used_domain. It adds a new acl modifier
+ dmarc_status. It adds new control flags dmarc_disable_verify and
+ dmarc_enable_forensic. The default for the dmarc_tld_file option is
+ "/etc/exim/opendmarc.tlds" and can be changed via EDITME.
+
+22. Add expansion variable $authenticated_fail_id, which is the username
+ provided to the authentication method which failed. It is available
+ for use in subsequent ACL processing (typically quit or notquit ACLs).
+
+23. New ACL modifier "udpsend" can construct a UDP packet to send to a given
+ UDP host and port.
+
+24. New ${hexquote:..string..} expansion operator converts non-printable
+ characters in the string to \xNN form.
+
+25. Experimental TPDA (Transport Post Delivery Action) function added.
+ Patch provided by Axel Rau.
+
+26. Experimental Redis lookup added. Patch provided by Warren Baker.
+
+
+Version 4.80
+------------
+
+ 1. New authenticator driver, "gsasl". Server-only (at present).
+ This is a SASL interface, licensed under GPL, which can be found at
+ http://www.gnu.org/software/gsasl/.
+ This system does not provide sources of data for authentication, so
+ careful use needs to be made of the conditions in Exim.
+
+ 2. New authenticator driver, "heimdal_gssapi". Server-only.
+ A replacement for using cyrus_sasl with Heimdal, now that $KRB5_KTNAME
+ is no longer honoured for setuid programs by Heimdal. Use the
+ "server_keytab" option to point to the keytab.
+
+ 3. The "pkg-config" system can now be used when building Exim to reference
+ cflags and library information for lookups and authenticators, rather
+ than having to update "CFLAGS", "AUTH_LIBS", "LOOKUP_INCLUDE" and
+ "LOOKUP_LIBS" directly. Similarly for handling the TLS library support
+ without adjusting "TLS_INCLUDE" and "TLS_LIBS".
+
+ In addition, setting PCRE_CONFIG=yes will query the pcre-config tool to
+ find the headers and libraries for PCRE.
+
+ 4. New expansion variable $tls_bits.
+
+ 5. New lookup type, "dbmjz". Key is an Exim list, the elements of which will
+ be joined together with ASCII NUL characters to construct the key to pass
+ into the DBM library. Can be used with gsasl to access sasldb2 files as
+ used by Cyrus SASL.
+
+ 6. OpenSSL now supports TLS1.1 and TLS1.2 with OpenSSL 1.0.1.
+
+ Avoid release 1.0.1a if you can. Note that the default value of
+ "openssl_options" is no longer "+dont_insert_empty_fragments", as that
+ increased susceptibility to attack. This may still have interoperability
+ implications for very old clients (see version 4.31 change 37) but
+ administrators can choose to make the trade-off themselves and restore
+ compatibility at the cost of session security.
+
+ 7. Use of the new expansion variable $tls_sni in the main configuration option
+ tls_certificate will cause Exim to re-expand the option, if the client
+ sends the TLS Server Name Indication extension, to permit choosing a
+ different certificate; tls_privatekey will also be re-expanded. You must
+ still set these options to expand to valid files when $tls_sni is not set.
+
+ The SMTP Transport has gained the option tls_sni, which will set a hostname
+ for outbound TLS sessions, and set $tls_sni too.
+
+ A new log_selector, +tls_sni, has been added, to log received SNI values
+ for Exim as a server.
+
+ 8. The existing "accept_8bitmime" option now defaults to true. This means
+ that Exim is deliberately not strictly RFC compliant. We're following
+ Dan Bernstein's advice in http://cr.yp.to/smtp/8bitmime.html by default.
+ Those who disagree, or know that they are talking to mail servers that,
+ even today, are not 8-bit clean, need to turn off this option.
+
+ 9. Exim can now be started with -bw (with an optional timeout, given as
+ -bw<timespec>). With this, stdin at startup is a socket that is
+ already listening for connections. This has a more modern name of
+ "socket activation", but forcing the activated socket to fd 0. We're
+ interested in adding more support for modern variants.
+
+10. ${eval } now uses 64-bit values on supporting platforms. A new "G" suffix
+ for numbers indicates multiplication by 1024^3.
+
+11. The GnuTLS support has been revamped; the three options gnutls_require_kx,
+ gnutls_require_mac & gnutls_require_protocols are no longer supported.
+ tls_require_ciphers is now parsed by gnutls_priority_init(3) as a priority
+ string, documentation for which is at:
+ http://www.gnutls.org/manual/html_node/Priority-Strings.html
+
+ SNI support has been added to Exim's GnuTLS integration too.
+
+ For sufficiently recent GnuTLS libraries, ${randint:..} will now use
+ gnutls_rnd(), asking for GNUTLS_RND_NONCE level randomness.
+
+12. With OpenSSL, if built with EXPERIMENTAL_OCSP, a new option tls_ocsp_file
+ is now available. If the contents of the file are valid, then Exim will
+ send that back in response to a TLS status request; this is OCSP Stapling.
+ Exim will not maintain the contents of the file in any way: administrators
+ are responsible for ensuring that it is up-to-date.
+
+ See "experimental-spec.txt" for more details.
+
+13. ${lookup dnsdb{ }} supports now SPF record types. They are handled
+ identically to TXT record lookups.
+
+14. New expansion variable $tod_epoch_l for higher-precision time.
+
+15. New global option tls_dh_max_bits, defaulting to current value of NSS
+ hard-coded limit of DH ephemeral bits, to fix interop problems caused by
+ GnuTLS 2.12 library recommending a bit count higher than NSS supports.
+
+16. tls_dhparam now used by both OpenSSL and GnuTLS, can be path or identifier.
+ Option can now be a path or an identifier for a standard prime.
+ If unset, we use the DH prime from section 2.2 of RFC 5114, "ike23".
+ Set to "historic" to get the old GnuTLS behaviour of auto-generated DH
+ primes.
+
+17. SSLv2 now disabled by default in OpenSSL. (Never supported by GnuTLS).
+ Use "openssl_options -no_sslv2" to re-enable support, if your OpenSSL
+ install was not built with OPENSSL_NO_SSL2 ("no-ssl2").
+
+
+Version 4.77
+------------
+
+ 1. New options for the ratelimit ACL condition: /count= and /unique=.
+ The /noupdate option has been replaced by a /readonly option.
+
+ 2. The SMTP transport's protocol option may now be set to "smtps", to
+ use SSL-on-connect outbound.
+
+ 3. New variable $av_failed, set true if the AV scanner deferred; ie, when
+ there is a problem talking to the AV scanner, or the AV scanner running.
+
+ 4. New expansion conditions, "inlist" and "inlisti", which take simple lists
+ and check if the search item is a member of the list. This does not
+ support named lists, but does subject the list part to string expansion.
+
+ 5. Unless the new EXPAND_LISTMATCH_RHS build option is set when Exim was
+ built, Exim no longer performs string expansion on the second string of
+ the match_* expansion conditions: "match_address", "match_domain",
+ "match_ip" & "match_local_part". Named lists can still be used.