Testsuite: missing log file
[users/heiko/exim.git] / doc / doc-docbook / spec.xfpt
index ccfa4424af467d75b478db3fc4a67a06218c45d5..d0c3e7846041e458b09c08dc7e77d578105299d6 100644 (file)
@@ -3922,6 +3922,18 @@ This option is not intended for use by external callers. It is used internally
 by Exim in conjunction with the &%-MC%& option, and passes on the fact that the
 host to which Exim is connected supports TLS encryption.
 
+.new
+.vitem &%-MCr%&&~<&'SNI'&> &&&
+       &%-MCs%&&~<&'SNI'&>
+.oindex "&%-MCs%&"
+.oindex "&%-MCr%&"
+These options are not intended for use by external callers. It is used internally
+by Exim in conjunction with the &%-MCt%& option, and passes on the fact that
+a TLS Server Name Indication was sent as part of the channel establishment.
+The argument gives the SNI string.
+The "r" variant indicates a DANE-verified connection.
+.wen
+
 .vitem &%-MCt%&&~<&'IP&~address'&>&~<&'port'&>&~<&'cipher'&>
 .oindex "&%-MCt%&"
 This option is not intended for use by external callers. It is used internally
@@ -4441,6 +4453,27 @@ of the syntax, and how it interacts with configuration file options, are given
 in chapter &<<CHAPinterfaces>>&. When &%-oX%& is used to start a daemon, no pid
 file is written unless &%-oP%& is also present to specify a pid filename.
 
+.new
+.vitem &%-oY%&
+.oindex &%-oY%&
+.cindex "daemon notifier socket"
+This option controls the creation of an inter-process communications endpoint
+by the Exim daemon.
+It is only relevant when the &%-bd%& (start listening daemon) option is also
+given.
+Normally the daemon creates this socket, unless a &%-oX%& and &*no*& &%-oP%&
+option is also present.
+If this option is given then the socket will not be created.  This could be
+required if the system is running multiple daemons.
+
+The socket is currently used for
+.ilist
+fast ramp-up of queue runner processes
+.next
+obtaining a current queue size
+.endlist
+.wen
+
 .vitem &%-pd%&
 .oindex "&%-pd%&"
 .cindex "Perl" "starting the interpreter"
@@ -6606,14 +6639,15 @@ cause parts of the string to be replaced by data that is obtained from the
 lookup. Lookups of this type are conditional expansion items. Different results
 can be defined for the cases of lookup success and failure. See chapter
 &<<CHAPexpand>>&, where string expansions are described in detail.
-The key for the lookup is specified as part of the string expansion.
+The key for the lookup is &*specified*& as part of the string expansion.
 .next
 Lists of domains, hosts, and email addresses can contain lookup requests as a
 way of avoiding excessively long linear lists. In this case, the data that is
 returned by the lookup is often (but not always) discarded; whether the lookup
 succeeds or fails is what really counts. These kinds of list are described in
 chapter &<<CHAPdomhosaddlists>>&.
-The key for the lookup is given by the context in which the list is expanded.
+The key for the lookup is &*implicit*&,
+given by the context in which the list is expanded.
 .endlist
 
 String expansions, lists, and lookups interact with each other in such a way
@@ -6648,7 +6682,8 @@ The result of the expansion is not tainted.
 
 In the second example, the lookup is a single item in a domain list. It causes
 Exim to use a lookup to see if the domain that is being processed can be found
-in the file. The file could contains lines like this:
+in the file.
+The file could contains lines like this:
 .code
 domain1:
 domain2:
@@ -6669,11 +6704,11 @@ causes a second lookup to occur.
 The lookup type may optionally be followed by a comma
 and a comma-separated list of options.
 Each option is a &"name=value"& pair.
-Whether an option is meaningful depands on the lookup type.
+Whether an option is meaningful depends on the lookup type.
 
 All lookups support the option &"cache=no_rd"&.
 If this is given then the cache that Exim manages for lookup results
-is not checked before diong the lookup.
+is not checked before doing the lookup.
 The result of the lookup is still written to the cache.
 .wen
 
@@ -6857,6 +6892,13 @@ the implicit key is the host's IP address rather than its name (see section
 &*Warning 3*&: Do not use an IPv4-mapped IPv6 address for a key; use the
 IPv4, in dotted-quad form. (Exim converts IPv4-mapped IPv6 addresses to this
 notation before executing the lookup.)
+
+.new
+One option is supported, "ret=full", to request the return of the entire line
+rather than omitting the key porttion.
+Note however that the key portion will have been de-quoted.
+.wen
+
 .next
 .cindex lookup json
 .cindex json "lookup type"
@@ -7093,10 +7135,7 @@ passed to a Redis database. See section &<<SECTsql>>&.
 .cindex "sqlite lookup type"
 .cindex "lookup" "sqlite"
 &(sqlite)&: The format of the query is
-new
-an optional filename
-followed by an SQL statement
-that is passed to an SQLite database. See section &<<SECTsqlite>>&.
+an SQL statement that is passed to an SQLite database. See section &<<SECTsqlite>>&.
 
 .next
 &(testdb)&: This is a lookup type that is used for testing Exim. It is
@@ -8155,18 +8194,28 @@ SQLite is different to the other SQL lookups because a filename is required in
 addition to the SQL query. An SQLite database is a single file, and there is no
 daemon as in the other SQL databases.
 
+.new
 .oindex &%sqlite_dbfile%&
-The preferred way of specifying the file is by using the
-&%sqlite_dbfile%& option, set to
-an absolute path.
+There are two ways of
+specifying the file.
+The first is is by using the &%sqlite_dbfile%& main option.
+The second, which allows separate files for each query,
+is to use an option appended, comma-separated, to the &"sqlite"&
+lookup type word.  The option is the word &"file"&, then an equals,
+then the filename.
+The filename in this case cannot contain whitespace or open-brace charachters.
+.wen
+
 A deprecated method is available, prefixing the query with the filename
 separated by white space.
-This means that the path name cannot contain white space.
+This means that
 .cindex "tainted data" "sqlite file"
-It also means that the query cannot use any tainted values, as that taints
+the query cannot use any tainted values, as that taints
 the entire query including the filename - resulting in a refusal to open
 the file.
 
+In all the above cases the filename must be an absolute path.
+
 Here is a lookup expansion example:
 .code
 sqlite_dbfile = /some/thing/sqlitedb
@@ -8735,8 +8784,13 @@ The value for a match will be the list element string.
 .cindex "tainted data" "de-tainting"
 Note that this is commonly untainted
 (depending on the way the list was created).
+Specifically, explicit text in the configuration file in not tainted.
 This is a useful way of obtaining an untainted equivalent to
 the domain, for later operations.
+
+However if the list (including one-element lists)
+is created by expanding a variable containing tainted data,
+it is tainted and so will the match value be.
 .endlist
 
 
@@ -9409,6 +9463,9 @@ become case-sensitive after &"+caseful"& has been seen.
 .section "Local part lists" "SECTlocparlis"
 .cindex "list" "local part list"
 .cindex "local part" "list"
+These behave in the same way as domain and host lists, with the following
+changes:
+
 Case-sensitivity in local part lists is handled in the same way as for address
 lists, as just described. The &"+caseful"& item can be used if required. In a
 setting of the &%local_parts%& option in a router with &%caseful_local_part%&
@@ -9463,7 +9520,7 @@ Common ways of obtaining untainted equivalents of variables with
 tainted values
 .cindex "tainted data" "de-tainting"
 come down to using the tainted value as a lookup key in a trusted database.
-This database could be the filestem structure,
+This database could be the filesystem structure,
 or the password file,
 or accessed via a DBMS.
 Specific methods are indexed under &"de-tainting"&.
@@ -10192,12 +10249,9 @@ in a list using the given separator.
 .wen
 
 
-.vitem "&*${lookup{*&<&'key'&>&*}&~*&<&'search&~type'&>&*&~&&&
-        {*&<&'file'&>&*}&~{*&<&'string1'&>&*}&~{*&<&'string2'&>&*}}*&"
-This is the first of one of two different types of lookup item, which are both
-described in the next item.
-
-.vitem "&*${lookup&~*&<&'search&~type'&>&*&~{*&<&'query'&>&*}&~&&&
+.vitem "&*${lookup&~{*&<&'key'&>&*}&~*&<&'search&~type'&>&*&~&&&
+        {*&<&'file'&>&*}&~{*&<&'string1'&>&*}&~{*&<&'string2'&>&*}}*&" &&&
+       "&*${lookup&~*&<&'search&~type'&>&*&~{*&<&'query'&>&*}&~&&&
         {*&<&'string1'&>&*}&~{*&<&'string2'&>&*}}*&"
 .cindex "expansion" "lookup in"
 .cindex "file" "lookups"
@@ -11617,6 +11671,11 @@ condition is true if the named file (or directory) exists. The existence test
 is done by calling the &[stat()]& function. The use of the &%exists%& test in
 users' filter files may be locked out by the system administrator.
 
+.new
+&*Note:*& Testing a path using this condition is not a sufficient way of
+de-tainting it.
+.wen
+
 .vitem &*first_delivery*&
 .cindex "delivery" "first"
 .cindex "first delivery"
@@ -12466,25 +12525,32 @@ the complete argument of the ETRN command (see section &<<SECTETRN>>&).
 
 .cindex "tainted data"
 If the origin of the data is an incoming message,
-the result of expanding this variable is tainted.
-When un untainted version is needed, one should be obtained from
+the result of expanding this variable is tainted and may not
+be further expanded or used as a filename.
+When an untainted version is needed, one should be obtained from
 looking up the value in a local (therefore trusted) database.
 Often &$domain_data$& is usable in this role.
 
 
 .vitem &$domain_data$&
 .vindex "&$domain_data$&"
-When the &%domains%& option on a router matches a domain by
-means of a lookup, the data read by the lookup is available during the running
-of the router as &$domain_data$&. In addition, if the driver routes the
+When the &%domains%& condition on a router
+.new
+or an ACL
+matches a domain
+against a list, the match value is copied to &$domain_data$&.
+This is an enhancement over previous versions of Exim, when it only
+applied to the data read by a lookup.
+For details on match values see section &<<SECTlistresults>>& et. al.
+.wen
+
+If the router routes the
 address to a transport, the value is available in that transport. If the
 transport is handling multiple addresses, the value from the first address is
 used.
 
-&$domain_data$& is also set when the &%domains%& condition in an ACL matches a
-domain by means of a lookup. The data read by the lookup is available during
-the rest of the ACL statement. In all other situations, this variable expands
-to nothing.
+&$domain_data$& set in an ACL is available during
+the rest of the ACL statement.
 
 .vitem &$exim_gid$&
 .vindex "&$exim_gid$&"
@@ -12666,7 +12732,8 @@ once.
 
 .cindex "tainted data"
 If the origin of the data is an incoming message,
-the result of expanding this variable is tainted.
+the result of expanding this variable is tainted and
+may not be further expanded or used as a filename.
 
 &*Warning*&: the content of this variable is usually provided by a potential
 attacker.
@@ -12716,19 +12783,17 @@ to process local parts in a case-dependent manner in a router, you can set the
 
 .vitem &$local_part_data$&
 .vindex "&$local_part_data$&"
-When the &%local_parts%& option on a router matches a local part by means of a
-lookup, the data read by the lookup is available during the running of the
-router as &$local_part_data$&. In addition, if the driver routes the address
-to a transport, the value is available in that transport. If the transport is
-handling multiple addresses, the value from the first address is used.
+When the &%local_parts%& condition on a router or ACL
+matches a local part list
+.new
+the match value is copied to &$local_part_data$&.
+This is an enhancement over previous versions of Exim, when it only
+applied to the data read by a lookup.
+For details on match values see section &<<SECTlistresults>>& et. al.
+.wen
 
 The &%check_local_user%& router option also sets this variable.
 
-&$local_part_data$& is also set when the &%local_parts%& condition in an ACL
-matches a local part by means of a lookup. The data read by the lookup is
-available during the rest of the ACL statement. In all other situations, this
-variable expands to nothing.
-
 .vindex &$local_part_prefix$& &&&
        &$local_part_prefix_v$& &&&
        &$local_part_suffix$& &&&
@@ -13087,6 +13152,8 @@ The name of the spool queue in use; empty for the default queue.
 .cindex "spool" "number of messages"
 This variable contains the number of messages queued.
 It is evaluated on demand, but no more often than once every minute.
+If there is no daemon notifier socket open, the value will be
+an empty string.
 
 .vitem &$r_...$&
 .vindex &$r_...$&
@@ -13802,6 +13869,8 @@ Observability for TLS session resumption.  See &<<SECTresumption>>& for details.
 .vindex "&$tls_in_sni$&"
 .vindex "&$tls_sni$&"
 .cindex "TLS" "Server Name Indication"
+.cindex "TLS" SNI
+.cindex SNI "observability on server"
 When a TLS session is being established, if the client sends the Server
 Name Indication extension, the value will be placed in this variable.
 If the variable appears in &%tls_certificate%& then this option and
@@ -13817,6 +13886,8 @@ the outbound.
 .vitem &$tls_out_sni$&
 .vindex "&$tls_out_sni$&"
 .cindex "TLS" "Server Name Indication"
+.cindex "TLS" SNI
+.cindex SNI "observability in client"
 During outbound
 SMTP deliveries, this variable reflects the value of the &%tls_sni%& option on
 the transport.
@@ -16659,10 +16730,16 @@ should need to modify the default.
 The option is expanded before use.
 If the platform supports Linux-style abstract socket names, the result
 is used with a nul byte prefixed.
-Otherwise, it should be a full path name and use a directory accessible
+Otherwise,
+.new "if nonempty,"
+it should be a full path name and use a directory accessible
 to Exim.
 
-If the Exim command line uses a &%-oX%& option and does not use &%-oP%&
+.new
+If this option is set as empty,
+or the command line &%-oY%& option is used, or
+.wen
+the command line uses a &%-oX%& option and does not use &%-oP%&,
 then a notifier socket is not created.
 
 
@@ -17242,6 +17319,9 @@ manager, there is no way of controlling the total number of simultaneous
 deliveries if the configuration allows a delivery attempt as soon as a message
 is received.
 
+See also the &%max_parallel%& generic transport option,
+and the &%serialize_hosts%& smtp transport option.
+
 .cindex "number of deliveries"
 .cindex "delivery" "maximum number of"
 If you want to control the total number of deliveries on the system, you
@@ -17984,6 +18064,7 @@ syslog. The value must be no longer than 32 characters. See chapter
 
 .option syslog_timestamp main boolean true
 .cindex "syslog" "timestamps"
+.cindex timestamps syslog
 If &%syslog_timestamp%& is set false, the timestamps on Exim's log lines are
 omitted when these lines are sent to syslog. See chapter &<<CHAPlog>>& for
 details of Exim's logging.
@@ -18139,6 +18220,7 @@ when a list of more than one
 file is used, the &$tls_in_ourcert$& variable is unreliable.
 The macro "_TLS_BAD_MULTICERT_IN_OURCERT" will be defined for those versions.
 
+.cindex SNI "selecting server certificate based on"
 If the option contains &$tls_out_sni$& and Exim is built against OpenSSL, then
 if the OpenSSL build supports TLS extensions and the TLS client sends the
 Server Name Indication extension, then this option and others documented in
@@ -25512,6 +25594,12 @@ It is expanded per-address and can depend on any of
 &$address_data$&, &$domain_data$&, &$local_part_data$&,
 &$host$&, &$host_address$& and &$host_port$&.
 
+.new
+If the connection is DANE-enabled then this option is ignored;
+only messages having the domain used for the DANE TLSA lookup are
+sent on the connection.
+.wen
+
 .option port smtp string&!! "see below"
 .cindex "port" "sending TCP/IP"
 .cindex "TCP/IP" "setting outgoing port"
@@ -25691,8 +25779,14 @@ See &<<SECTresumption>>& for details.
 
 .option tls_sni smtp string&!! unset
 .cindex "TLS" "Server Name Indication"
+.cindex "TLS" SNI
+.cindex SNI "setting in client"
 .vindex "&$tls_sni$&"
-If this option is set then it sets the $tls_out_sni variable and causes any
+If this option is set
+.new
+and the connection is not DANE-validated
+.wen
+then it sets the $tls_out_sni variable and causes any
 TLS session to pass this value as the Server Name Indication extension to
 the remote side, which can be used by the remote side to select an appropriate
 certificate and private key for the session.
@@ -28698,6 +28792,12 @@ Some other recently added features may only be available in one or the other.
 This should be documented with the feature.  If the documentation does not
 explicitly state that the feature is infeasible in the other TLS
 implementation, then patches are welcome.
+.new
+.next
+The output from "exim -bV" will show which (if any) support was included
+in the build.
+Also, the macro "_HAVE_OPENSSL" or "_HAVE_GNUTLS" will be defined.
+.wen
 .endlist
 
 
@@ -29171,6 +29271,61 @@ There is no current way to staple a proof for a client certificate.
 .endd
 
 
+.new
+.section "Caching of static server configuration items" "SECTserverTLScache"
+.cindex certificate caching
+.cindex privatekey caching
+.cindex crl caching
+.cindex ocsp caching
+.cindex ciphers caching
+.cindex "CA bundle" caching
+.cindex "certificate authorities" caching
+.cindex tls_certificate caching
+.cindex tls_privatekey caching
+.cindex tls_crl caching
+.cindex tls_ocsp_file caching
+.cindex tls_require_ciphers caching
+.cindex tls_verify_certificate caching
+.cindex caching certificate
+.cindex caching privatekey
+.cindex caching crl
+.cindex caching ocsp
+.cindex caching ciphers
+.cindex caching "certificate authorities
+If any of the main configuration options &%tls_certificate%&, &%tls_privatekey%&,
+&%tls_crl%& and &%tls_ocsp_file%& have values with no
+expandable elements,
+then the associated information is loaded at daemon startup.
+It is made available
+to child processes forked for handling received SMTP connections.
+
+This caching is currently only supported under Linux.
+
+If caching is not possible, for example if an item has to be dependent
+on the peer host so contains a &$sender_host_name$& expansion, the load
+of the associated information is done at the startup of the TLS connection.
+
+The cache is invalidated and reloaded after any changes to the directories
+containing files specified by these options.
+
+The information specified by the main option &%tls_verify_certificates%&
+is similarly cached so long as it specifies files explicitly
+or (under GnuTLS) is the string &"system,cache"&.
+The latter case is not automatically invaludated;
+it is the operator's responsibility to arrange for a daemon restart
+any time the system certificate authority bundle is updated.
+A HUP signal is sufficient for this.
+The value &"system"& results in no caching under GnuTLS.
+
+The macro _HAVE_TLS_CA_CACHE will be defined if the suffix for "system"
+is acceptable in configurations for the Exim executavble.
+
+Caching of the system Certificate Authorities bundle can
+save siginificant time and processing on every TLS connection
+accepted by Exim.
+.wen
+
+
 
 
 .section "Configuring an Exim client to use TLS" "SECTclientTLS"
@@ -29211,7 +29366,10 @@ unencrypted.
 
 The &%tls_certificate%& and &%tls_privatekey%& options of the &(smtp)&
 transport provide the client with a certificate, which is passed to the server
-if it requests it. If the server is Exim, it will request a certificate only if
+if it requests it.
+This is an optional thing for TLS connections, although either end
+may insist on it.
+If the server is Exim, it will request a certificate only if
 &%tls_verify_hosts%& or &%tls_try_verify_hosts%& matches the client.
 
 &*Note*&: Do not use a certificate which has the OCSP-must-staple extension,
@@ -29236,8 +29394,14 @@ certificate verification to the listed servers.  Verification either must
 or need not succeed respectively.
 
 The &%tls_verify_cert_hostnames%& option lists hosts for which additional
-checks are made: that the host name (the one in the DNS A record)
-is valid for the certificate.
+name checks are made on the server certificate.
+.new
+The match against this list is, as per other Exim usage, the
+IP for the host.  That is most closely associated with the
+name on the DNS A (or AAAA) record for the host.
+However, the name that needs to be in the certificate
+is the one at the head of any CNAME chain leading to the A record.
+.wen
 The option defaults to always checking.
 
 The &(smtp)& transport has two OCSP-related options:
@@ -29285,8 +29449,66 @@ outgoing connection.
 
 
 
+.new
+.section "Caching of static client configuration items" "SECTclientTLScache"
+.cindex certificate caching
+.cindex privatekey caching
+.cindex crl caching
+.cindex ciphers caching
+.cindex "CA bundle" caching
+.cindex "certificate authorities" caching
+.cindex tls_certificate caching
+.cindex tls_privatekey caching
+.cindex tls_crl caching
+.cindex tls_require_ciphers caching
+.cindex tls_verify_certificate caching
+.cindex caching certificate
+.cindex caching privatekey
+.cindex caching crl
+.cindex caching ciphers
+.cindex caching "certificate authorities
+If any of the transport configuration options &%tls_certificate%&, &%tls_privatekey%&
+and &%tls_crl%& have values with no
+expandable elements,
+then the associated information is loaded per smtp transport
+at daemon startup, at the start of a queue run, or on a
+command-line specified message delivery.
+It is made available
+to child processes forked for handling making SMTP connections.
+
+This caching is currently only supported under Linux.
+
+If caching is not possible, the load
+of the associated information is done at the startup of the TLS connection.
+
+The cache is invalidated in the daemon
+and reloaded after any changes to the directories
+containing files specified by these options.
+
+The information specified by the main option &%tls_verify_certificates%&
+is similarly cached so long as it specifies files explicitly
+or (under GnuTLS) is the string &"system,cache"&.
+The latter case is not automatically invaludated;
+it is the operator's responsibility to arrange for a daemon restart
+any time the system certificate authority bundle is updated.
+A HUP signal is sufficient for this.
+The value &"system"& results in no caching under GnuTLS.
+
+The macro _HAVE_TLS_CA_CACHE will be defined if the suffix for "system"
+is acceptable in configurations for the Exim executavble.
+
+Caching of the system Certificate Authorities bundle can
+save siginificant time and processing on every TLS connection
+initiated by Exim.
+.wen
+
+
+
+
 .section "Use of TLS Server Name Indication" "SECTtlssni"
 .cindex "TLS" "Server Name Indication"
+.cindex "TLS" SNI
+.cindex SNI
 .vindex "&$tls_in_sni$&"
 .oindex "&%tls_in_sni%&"
 With TLS1.0 or above, there is an extension mechanism by which extra
@@ -29318,6 +29540,11 @@ nothing more to it.  Choosing a sensible value not derived insecurely is the
 only point of caution.  The &$tls_out_sni$& variable will be set to this string
 for the lifetime of the client connection (including during authentication).
 
+.new
+If DANE validated the connection attempt then the value of the &%tls_sni%& option
+is forced to the domain part of the recipient address.
+.wen
+
 Except during SMTP client sessions, if &$tls_in_sni$& is set then it is a string
 received from a client.
 It can be logged with the &%log_selector%& item &`+tls_sni`&.
@@ -29615,7 +29842,7 @@ by (a) is thought to be smaller than that of the set of root CAs.
 It also allows the server to declare (implicitly) that connections to it should use TLS.  An MITM could simply
 fail to pass on a server's STARTTLS.
 
-DANE scales better than having to maintain (and side-channel communicate) copies of server certificates
+DANE scales better than having to maintain (and communicate via side-channel) copies of server certificates
 for every possible target server.  It also scales (slightly) better than having to maintain on an SMTP
 client a copy of the standard CAs bundle.  It also means not having to pay a CA for certificates.
 
@@ -29760,6 +29987,7 @@ If DANE is requested and useable (see above) the following transport options are
   tls_verify_certificates
   tls_crl
   tls_verify_cert_hostnames
+  tls_sni
 .endd
 
 If DANE is not usable, whether requested or not, and CA-anchored
@@ -31764,8 +31992,9 @@ send email. Details of how this works are given in section
 .cindex "header lines" "verifying header names only ASCII"
 .cindex "verifying" "header names only ASCII"
 This condition is relevant only in an ACL that is run after a message has been
-received, that is, in an ACL specified by &%acl_smtp_data%& or
-&%acl_not_smtp%&.  It checks all header names (not the content) to make sure
+received.
+This usually means an ACL specified by &%acl_smtp_data%& or &%acl_not_smtp%&.
+It checks all header names (not the content) to make sure
 there are no non-ASCII characters, also excluding control characters.  The
 allowable characters are decimal ASCII values 33 through 126.
 
@@ -31920,7 +32149,7 @@ Note that '/' is legal in local-parts; if the address may have such
 (eg. is generated from the received message)
 they must be protected from the options parsing by doubling:
 .code
-verify = sender=${sg{${address:$h_sender:}}{/}{//}}
+verify = sender=${listquote{/}{${address:$h_sender:}}}
 .endd
 .endlist
 
@@ -32502,7 +32731,7 @@ in kilobytes, megabytes, or gigabytes, respectively.
 
 The &%per_rcpt%& option causes Exim to limit the rate at which recipients are
 accepted. It can be used in the &%acl_smtp_rcpt%&, &%acl_smtp_predata%&,
-&%acl_smtp_mime%&, &%acl_smtp_data%&, or &%acl_smtp_rcpt%& ACLs. In
+&%acl_smtp_mime%&, or &%acl_smtp_data%& ACLs. In
 &%acl_smtp_rcpt%& the rate is updated one recipient at a time; in the other
 ACLs the rate is updated with the total (accepted) recipient count in one go. Note that
 in either case the rate limiting engine will see a message with many
@@ -35451,14 +35680,14 @@ address if its delivery failed.
 
 
 .section "Per-address filtering" "SECTperaddfil"
-.vindex "&$domain$&"
-.vindex "&$local_part$&"
+.vindex "&$domain_data$&"
+.vindex "&$local_part_data$&"
 In contrast to the system filter, which is run just once per message for each
 delivery attempt, it is also possible to set up a system-wide filtering
 operation that runs once for each recipient address. In this case, variables
-such as &$local_part$& and &$domain$& can be used, and indeed, the choice of
-filter file could be made dependent on them. This is an example of a router
-which implements such a filter:
+such as &$local_part_data$& and &$domain_data$& can be used,
+and indeed, the choice of filter file could be made dependent on them.
+This is an example of a router which implements such a filter:
 .code
 central_filter:
   check_local_user
@@ -37279,7 +37508,7 @@ follows:
 .code
 my_mailboxes:
   driver = appendfile
-  file = /var/mail/$domain/$local_part_data
+  file = /var/mail/$domain_data/$local_part_data
   user = mail
 .endd
 This uses a directory of mailboxes for each domain. The &%user%& setting is
@@ -37319,7 +37548,7 @@ It runs a user's &_.forward_& file for all local parts of the form
 cases by testing the variable &$local_part_suffix$&. For example:
 .code
 if $local_part_suffix contains -special then
-save /home/$local_part/Mail/special
+save /home/$local_part_data/Mail/special
 endif
 .endd
 If the filter file does not exist, or does not deal with such addresses, they
@@ -37984,7 +38213,8 @@ fields record the router and transport that were used to process the address.
 If SMTP AUTH was used for the delivery there is an additional item A=
 followed by the name of the authenticator that was used.
 If an authenticated identification was set up by the authenticator's &%client_set_id%&
-option, this is logged too, separated by a colon from the authenticator name.
+option, this is logged too, as a second colon-separated list item.
+Optionally (see the &%smtp_mailauth%& &%log_selector%&) there may be a third list item.
 
 If a shadow transport was run after a successful local delivery, the log line
 for the successful delivery has an item added on the end, of the form
@@ -38665,6 +38895,7 @@ an asterisk is appended to the X= cipher field in the log line.
 .next
 .cindex "log" "TLS SNI"
 .cindex "TLS" "logging SNI"
+.cindex SNI logging
 &%tls_sni%&: When a message is received over an encrypted connection, and
 the remote host provided the Server Name Indication extension, the SNI is
 added to the log line, preceded by SNI=.
@@ -38721,9 +38952,9 @@ the next chapter. The utilities described here are:
   "check address acceptance from given IP"
 .irow &<<SECTdbmbuild>>&      &'exim_dbmbuild'& "build a DBM file"
 .irow &<<SECTfinindret>>&     &'exinext'&       "extract retry information"
-.irow &<<SECThindatmai>>&     &'exim_dumpdb'&   "dump a hints database"
-.irow &<<SECThindatmai>>&     &'exim_tidydb'&   "clean up a hints database"
-.irow &<<SECThindatmai>>&     &'exim_fixdb'&    "patch a hints database"
+.irow &<<SECTdumpdb>>&        &'exim_dumpdb'&   "dump a hints database"
+.irow &<<SECTtidydb>>&        &'exim_tidydb'&   "clean up a hints database"
+.irow &<<SECTfixdb>>&         &'exim_fixdb'&    "patch a hints database"
 .irow &<<SECTmailboxmaint>>&  &'exim_lock'&     "lock a mailbox file"
 .endtable
 
@@ -39229,7 +39460,7 @@ in a transport)
 
 
 
-.section "exim_dumpdb" "SECID261"
+.section "exim_dumpdb" "SECTdumpdb"
 .cindex "&'exim_dumpdb'&"
 The entire contents of a database are written to the standard output by the
 &'exim_dumpdb'& program, which has no options or arguments other than the
@@ -39266,7 +39497,7 @@ cross-references.
 
 
 
-.section "exim_tidydb" "SECID262"
+.section "exim_tidydb" "SECTtidydb"
 .cindex "&'exim_tidydb'&"
 The &'exim_tidydb'& utility program is used to tidy up the contents of a hints
 database. If run with no options, it removes all records that are more than 30
@@ -39315,7 +39546,7 @@ databases is likely to keep on increasing.
 
 
 
-.section "exim_fixdb" "SECID263"
+.section "exim_fixdb" "SECTfixdb"
 .cindex "&'exim_fixdb'&"
 The &'exim_fixdb'& program is a utility for interactively modifying databases.
 Its main use is for testing Exim, but it might also be occasionally useful for
@@ -40701,7 +40932,7 @@ but for EC keys it is the base64 of the pure key; no ASN.1 wrapping.
 Signing is enabled by setting private options on the SMTP transport.
 These options take (expandable) strings as arguments.
 
-.option dkim_domain smtp string list&!! unset
+.option dkim_domain smtp "string list&!!" unset
 The domain(s) you want to sign with.
 After expansion, this can be a list.
 Each element in turn,
@@ -40711,7 +40942,7 @@ while expanding the remaining signing options.
 If it is empty after expansion, DKIM signing is not done,
 and no error will result even if &%dkim_strict%& is set.
 
-.option dkim_selector smtp string list&!! unset
+.option dkim_selector smtp "string list&!!" unset
 This sets the key selector string.
 After expansion, which can use &$dkim_domain$&, this can be a list.
 Each element in turn is put in the expansion
@@ -41375,7 +41606,7 @@ Example usage:
 .code
   #macro
   SRS_SECRET = <pick something unique for your site for this. Use on all MXs.>
-  
+
   #routers
 
   outbound:
@@ -41385,7 +41616,7 @@ Example usage:
     transport = ${if eq {$local_part@$domain} \
                         {$original_local_part@$original_domain} \
                      {remote_smtp} {remote_forwarded_smtp}}
-  
+
   inbound_srs:
     driver =    redirect
     senders =   :
@@ -41393,7 +41624,7 @@ Example usage:
     # detect inbound bounces which are SRS'd, and decode them
     condition = ${if inbound_srs {$local_part} {SRS_SECRET}}
     data =      $srs_recipient
-  
+
   inbound_srs_failure:
     driver =    redirect
     senders =   :
@@ -41405,7 +41636,7 @@ Example usage:
 
   #... further routers here
 
-  
+
   # transport; should look like the non-forward outbound
   # one, plus the max_rcpt and return_path options
   remote_forwarded_smtp:
@@ -41534,7 +41765,7 @@ mean, refer to the DMARC website above.  Valid strings are:
 &'reject      '& The DMARC check failed and the library recommends rejecting the email.
 &'quarantine  '& The DMARC check failed and the library recommends keeping it for further inspection.
 &'none        '& The DMARC check passed and the library recommends no specific action, neutral.
-&'norecord    '& No policy section in the DMARC record for this sender domain.
+&'norecord    '& No policy section in the DMARC record for this RFC5322.From field
 &'nofrom      '& Unable to determine the domain of the sender.
 &'temperror   '& Library error or dns error.
 &'off         '& The DMARC check was disabled for this email.