Copyright updates:
[exim.git] / doc / doc-docbook / spec.xfpt
index ffb34e882a15551735ff1a5635fe11383af3e7dc..7db80b2aee1d4e59e742f77872ae65fabeda7a6c 100644 (file)
@@ -55,7 +55,7 @@
 .set drivernamemax "64"
 
 .macro copyyear
-2022
+2023
 .endmacro
 
 . /////////////////////////////////////////////////////////////////////////////
@@ -972,7 +972,7 @@ User filters are run as part of the routing process, described below.
 .cindex "Darwin"
 .cindex "Cygwin"
 .cindex "exim_msgdate"
-Every message handled by Exim is given a &'message id'& which is sixteen
+Every message handled by Exim is given a &'message id'& which is 23
 characters long. It is divided into three parts, separated by hyphens, for
 example &`16VDhn-000000001bo-D342`&. Each part is a sequence of letters and digits,
 normally encoding numbers in base 62. However, in the Darwin operating
@@ -4020,7 +4020,7 @@ user.
 This option requests Exim to give up trying to deliver the listed messages,
 including any that are frozen. However, if any of the messages are active,
 their status is not altered. For non-bounce messages, a delivery error message
-is sent to the sender, containing the text &"cancelled by administrator"&.
+is sent to the sender.
 Bounce messages are just discarded. This option can be used only by an admin
 user.
 
@@ -7349,6 +7349,11 @@ dot-separated components; a key such as &`*fict.example`&
 in a database file is useless, because the asterisk in a partial matching
 subject key is always followed by a dot.
 
+When the lookup is done from a string-expansion,
+the variables &$1$& and &$2$& contain the wild and non-wild parts of the key
+during the expansion of the replacement text.
+They return to their previous values at the end of the lookup item.
+
 
 
 
@@ -8229,7 +8234,7 @@ daemon as in the other SQL databases.
 .oindex &%sqlite_dbfile%&
 There are two ways of
 specifying the file.
-The first is is by using the &%sqlite_dbfile%& main option.
+The first 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,
@@ -10628,7 +10633,7 @@ expansion items.
 This item inserts &"raw"& header lines. It is described with the &%header%&
 expansion item in section &<<SECTexpansionitems>>& above.
 
-.vitem "&*${run<&'options'&> {*&<&'command&~arg&~list'&>&*}{*&<&'string1'&>&*}&&&
+.vitem "&*${run<&'options'&> {*&<&'command&~string'&>&*}{*&<&'string1'&>&*}&&&
         {*&<&'string2'&>&*}}*&"
 .cindex "expansion" "running a command"
 .cindex "&%run%& expansion item"
@@ -10637,8 +10642,8 @@ One option is supported after the word &'run'&, comma-separated
 and without whitespace.
 
 If the option &'preexpand'& is not used,
-the command string is split into individual arguments by spaces
-and then each argument is expanded.
+the command string before expansion is split into individual arguments by spaces
+and then each argument is separately expanded.
 Then the command is run
 in a separate process, but under the same uid and gid.  As in other command
 executions from Exim, a shell is not used by default. If the command requires
@@ -10650,9 +10655,9 @@ potential attacker;
 a careful assessment for security vulnerabilities should be done.
 
 If the option &'preexpand'& is used,
-the command and its arguments are first expanded as one string. The result is
-split apart into individual arguments by spaces, and then the command is run
-as above.
+the command string is first expanded as a whole.
+The expansion result is split apart into individual arguments by spaces,
+and then the command is run as above.
 Since the arguments are split by spaces, when there is a variable expansion
 which has an empty result, it will cause the situation that the argument will
 simply be omitted when the program is actually executed by Exim. If the
@@ -12083,6 +12088,10 @@ Exim was built with the EXPAND_LISTMATCH_RHS option.
 
 Consult section &<<SECThoslispatip>>& for further details of these patterns.
 
+The variable &$value$& will be set for a successful match and can be
+used in the success clause of an &%if%& expansion item using the condition.
+Any previous &$value$& is restored after the if.
+
 .vitem &*match_local_part&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
 .cindex "domain list" "in expansion condition"
 .cindex "address list" "in expansion condition"
@@ -19176,12 +19185,25 @@ This applies to all of the SRV, MX, AAAA, A lookup sequence.
 .cindex "router" "restricting to specific domains"
 .vindex "&$domain_data$&"
 If this option is set, the router is skipped unless the current domain matches
-the list. If the match is achieved by means of a file lookup, the data that the
-lookup returned for the domain is placed in &$domain_data$& for use in string
+the list.
+The data returned by the list check
+is placed in &$domain_data$& for use in string
 expansions of the driver's private options and in the transport.
 See section &<<SECTrouprecon>>& for
 a list of the order in which preconditions are evaluated.
 
+A complex example, using a file like:
+.code
+alice@dom1
+bill@dom1
+maggie@dom1
+.endd
+and checking both domain and local_part
+.code
+domains =         ${domain:${lookup {$local_part@$domain} lseach,ret=key {/path/to/accountsfile}}}
+local_parts = ${local_part:${lookup {$local_part@$domain} lseach,ret=key {/path/to/accountsfile}}}
+.endd
+
 
 
 .option driver routers string unset
@@ -19545,7 +19567,7 @@ example:
 local_parts = dbm;/usr/local/specials/$domain_data
 .endd
 .vindex "&$local_part_data$&"
-If the match is achieved by a lookup, the data that the lookup returned
+the data returned by the list check
 for the local part is placed in the variable &$local_part_data$& for use in
 expansions of the router's private options or in the transport.
 You might use this option, for
@@ -29224,8 +29246,8 @@ When using OpenSSL, this option is ignored.
 (If an API is found to let OpenSSL be configured in this way,
 let the Exim Maintainers know and we'll likely use it).
 .next
-With GnuTLS, if an explicit list is used for the &%tls_privatekey%& main option
-main option, it must be ordered to match the &%tls_certificate%& list.
+With GnuTLS, if an explicit list is used for the &%tls_privatekey%& main option,
+it must be ordered to match the &%tls_certificate%& list.
 .next
 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
@@ -29675,10 +29697,10 @@ 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.
+is acceptable in configurations for the Exim executable.
 
 Caching of the system Certificate Authorities bundle can
-save siginificant time and processing on every TLS connection
+save significant time and processing on every TLS connection
 accepted by Exim.
 
 
@@ -29848,10 +29870,10 @@ 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.
+is acceptable in configurations for the Exim executable.
 
 Caching of the system Certificate Authorities bundle can
-save siginificant time and processing on every TLS connection
+save significant time and processing on every TLS connection
 initiated by Exim.
 
 
@@ -30319,7 +30341,7 @@ DNSSEC.
 .next
 Add TLSA DNS records.  These say what the server certificate for a TLS connection should be.
 .next
-Offer a server certificate, or certificate chain, in TLS connections which is is anchored by one of the TLSA records.
+Offer a server certificate, or certificate chain, in TLS connections which is anchored by one of the TLSA records.
 .endlist
 
 There are no changes to Exim specific to server-side operation of DANE.
@@ -42005,7 +42027,7 @@ option.
 
 .endlist
 
-In addition, two ACL conditions are provided:
+In addition, two ACL conditions are provided, usable only in a DKIM ACL:
 
 .vlist
 .vitem &%dkim_signers%&
@@ -42273,18 +42295,30 @@ encoding operation.
 If this value is empty the the expansion result will be empty.
 The third argument should be the recipient domain of the message when
 it arrived at this system.
+All arguments are expanded before use.
+
+The result of the expansion is the replacement envelope-from (return path)
+to be used.
 .endlist
 
 .cindex SRS decoding
 To decode an address use this expansion condition:
 .vlist
 .vitem &*inbound_srs&~{*&<&'local&~part'&>&*}{*&<&'secret'&>&*}*&
-The first argument should be the recipient local prt as is was received.
+The first argument should be the recipient local part as it was received.
 The second argument is the site secret.
+Both arguments are expanded before use.
 
 If the messages is not for an SRS-encoded recipient the condition will
-return false.  If it is, the condition will return true and the variable
+return false.
+If it is, the condition will return true and the variable
 &$srs_recipient$& will be set to the decoded (original) value.
+
+.new
+If the second argument is empty then the condition returns true if
+the first argument is in valid SRS formet, else false.
+The variable &$srs_recipient$& is not set for this case.
+.wen
 .endlist
 
 Example usage:
@@ -42983,8 +43017,8 @@ All other message types ignore the result string, and
 no other use is made of it.
 
 For a tcp:connect event, if the connection is being made to a proxy
-then the address and port variables will be that of the proxy and not
-the target system.
+then the &$host_address$& and &$host_port$& variables
+will be that of the proxy and not the target system.
 
 For tls:cert events, if GnuTLS is in use this will trigger only per
 chain element received on the connection.