Docs: try to be even more clear on the ${run...} expansion
[exim.git] / doc / doc-docbook / spec.xfpt
index 1a4e3f8daeaea493ce31bf5d843f703eda3b69f1..220b76be620d1cff9bb4400d37aee81d958a2273 100644 (file)
 . --- table with four columns. For cases when the option name is given with
 . --- a space, so that it can be split, a fifth argument is used for the
 . --- index entry.
+. --- Also one for multiple option def headings be grouped in a single
+. --- table (but without the split capability).
+
+.macro otable
+.itable all 0 0 4 8* left 6* center 6* center 6* right
+.endmacro
+
+.macro orow
+.row "&%$1%&" "Use: &'$2'&" "Type: &'$3'&" "Default: &'$4'&"
+.endmacro
 
 .macro option
 .arg 5
 .arg -5
 .oindex "&%$1%&"
 .endarg
-.itable all 0 0 4 8* left 6* center 6* center 6* right
-.row "&%$1%&" "Use: &'$2'&" "Type: &'$3'&" "Default: &'$4'&"
+.otable
+.orow "$1" "$2" "$3" "$4"
+.endtable
+.endmacro
+
+.macro options
+.eacharg
+.oindex "&%$+1%&"
+.endeach 4
+.otable
+.eacharg
+.orow "$+1" "$+2" "$+3" "$+4"
+.endeach 4
 .endtable
 .endmacro
 
@@ -951,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
@@ -3999,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.
 
@@ -7328,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.
+
 
 
 
@@ -8208,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,
@@ -10607,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"
@@ -10616,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
@@ -10629,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
@@ -10673,6 +10699,7 @@ shell must be invoked directly, such as with:
 .code
 ${run{/bin/bash -c "/usr/bin/id >/tmp/id"}{yes}{yes}}
 .endd
+Note that &$value$& will not persist beyond the reception of a single message.
 
 .vindex "&$runrc$&"
 The return code from the command is put in the variable &$runrc$&, and this
@@ -12061,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"
@@ -15455,11 +15486,8 @@ $primary_hostname-$tod_epoch-testing
 See section &<<CALLaddparcall>>& for details of how this value is used.
 
 
-.option check_log_inodes main integer 100
-See &%check_spool_space%& below.
-
-
-.option check_log_space main integer 10M
+.options check_log_inodes main integer 100 &&&
+        check_log_space main integer 10M
 See &%check_spool_space%& below.
 
 .oindex "&%check_rfc2047_length%&"
@@ -15474,11 +15502,8 @@ of the RFC, generates overlong encoded words. If &%check_rfc2047_length%& is
 set false, Exim recognizes encoded words of any length.
 
 
-.option check_spool_inodes main integer 100
-See &%check_spool_space%& below.
-
-
-.option check_spool_space main integer 10M
+.options check_spool_inodes main integer 100 &&&
+        check_spool_space main integer 10M
 .cindex "checking disk space"
 .cindex "disk space, checking"
 .cindex "spool directory" "checking space"
@@ -15557,17 +15582,15 @@ This option specifies one or more default SMTP ports on which the Exim daemon
 listens. See chapter &<<CHAPinterfaces>>& for details of how it is used. For
 backward compatibility, &%daemon_smtp_port%& (singular) is a synonym.
 
-.option daemon_startup_retries main integer 9
+.options daemon_startup_retries main integer 9 &&&
+        daemon_startup_sleep main time 30s
 .cindex "daemon startup, retrying"
-This option, along with &%daemon_startup_sleep%&, controls the retrying done by
+These options control the retrying done by
 the daemon at startup when it cannot immediately bind a listening socket
 (typically because the socket is already in use): &%daemon_startup_retries%&
 defines the number of retries after the first failure, and
 &%daemon_startup_sleep%& defines the length of time to wait between retries.
 
-.option daemon_startup_sleep main time 30s
-See &%daemon_startup_retries%&.
-
 .option delay_warning main "time list" 24h
 .cindex "warning of delay"
 .cindex "delay warning, specifying"
@@ -16091,7 +16114,8 @@ log. If you configure freezing in a filter or ACL, you must arrange for any
 logging that you require.
 
 
-.option gecos_name main string&!! unset
+.options gecos_name main string&!! unset &&&
+        gecos_pattern main string unset
 .cindex "HP-UX"
 .cindex "&""gecos""& field, parsing"
 Some operating systems, notably HP-UX, use the &"gecos"& field in the system
@@ -16116,9 +16140,6 @@ gecos_pattern = ([^,]*)
 gecos_name = $1
 .endd
 
-.option gecos_pattern main string unset
-See &%gecos_name%& above.
-
 
 .option gnutls_compat_mode main boolean unset
 This option controls whether GnuTLS is used in compatibility mode in an Exim
@@ -16422,7 +16443,8 @@ dealing with other kinds of frozen message, see &%auto_thaw%& and
 &%timeout_frozen_after%&.
 
 
-.option ignore_fromline_hosts main "host list&!!" unset
+.options ignore_fromline_hosts main "host list&!!" unset &&&
+        ignore_fromline_local main boolean false
 .cindex "&""From""& line"
 .cindex "UUCP" "&""From""& line"
 Some broken SMTP clients insist on sending a UUCP-like &"From&~"& line before
@@ -16434,8 +16456,6 @@ process rather than a remote host, and is using &%-bs%& to inject the messages,
 &%ignore_fromline_local%& must be set to achieve this effect.
 
 
-.option ignore_fromline_local main boolean false
-See &%ignore_fromline_hosts%& above.
 
 .option keep_environment main "string list" unset
 .cindex "environment" "values from"
@@ -16590,7 +16610,8 @@ has more details about &'Sender:'& processing.
 
 
 
-.option local_from_prefix main string unset
+.options local_from_prefix main string unset &&&
+        local_from_suffix main string unset
 When Exim checks the &'From:'& header line of locally submitted messages for
 matching the login id (see &%local_from_check%& above), it can be configured to
 ignore certain prefixes and suffixes in the local part of the address. This is
@@ -16610,10 +16631,6 @@ matches the actual sender address that is constructed from the login name and
 qualify domain.
 
 
-.option local_from_suffix main string unset
-See &%local_from_prefix%& above.
-
-
 .option local_interfaces main "string list" "see below"
 This option controls which network interfaces are used by the daemon for
 listening; they are also used to identify the local host when routing. Chapter
@@ -17053,16 +17070,11 @@ a good idea to reject recipient addresses with percent characters in their
 local parts. Exim's default configuration does this.
 
 
-.option perl_at_start main boolean false
+.options perl_at_start main boolean false &&&
+        perl_startup main string unset
 .cindex "Perl"
-This option is available only when Exim is built with an embedded Perl
-interpreter. See chapter &<<CHAPperl>>& for details of its use.
-
-
-.option perl_startup main string unset
-.cindex "Perl"
-This option is available only when Exim is built with an embedded Perl
-interpreter. See chapter &<<CHAPperl>>& for details of its use.
+These options are available only when Exim is built with an embedded Perl
+interpreter. See chapter &<<CHAPperl>>& for details of their use.
 
 .option perl_taintmode main boolean false
 .cindex "Perl"
@@ -17274,7 +17286,7 @@ and &%-odi%& command line options override &%queue_only%& unless
 &%queue_only_load%&, and &%smtp_accept_queue%&.
 
 
-.option queue_only_file main string unset
+.option queue_only_file main "string list" unset
 .cindex "queueing incoming messages"
 .cindex "message" "queueing by file existence"
 This option can be set to a colon-separated list of absolute path names, each
@@ -17957,7 +17969,9 @@ non-SMTP command lines are sent first.
 
 
 
-.option smtp_ratelimit_hosts main "host list&!!" unset
+.options smtp_ratelimit_hosts main "host list&!!" unset &&&
+        smtp_ratelimit_mail main string unset &&&
+        smtp_ratelimit_rcpt main string unset
 .cindex "SMTP" "rate limiting"
 .cindex "limit" "rate of message arrival"
 .cindex "RCPT" "rate limiting"
@@ -18000,13 +18014,6 @@ seconds, increasing by a factor of 1.05 each time. The second setting applies
 delays to RCPT commands when more than four occur in a single message.
 
 
-.option smtp_ratelimit_mail main string unset
-See &%smtp_ratelimit_hosts%& above.
-
-
-.option smtp_ratelimit_rcpt main string unset
-See &%smtp_ratelimit_hosts%& above.
-
 
 .option smtp_receive_timeout main time&!! 5m
 .cindex "timeout" "for SMTP input"
@@ -18407,7 +18414,7 @@ is not required the &%tls_advertise_hosts%& option should be set empty.
 .cindex ALPN "set acceptable names for server"
 If this option is set,
 the TLS library supports ALPN,
-and the client offers either more than
+and the client offers either more than one
 ALPN name or a name which does not match the list,
 the TLS connection is declined.
 
@@ -19178,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
@@ -19547,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
@@ -29226,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
@@ -29677,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.
 
 
@@ -29850,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.
 
 
@@ -30321,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.
@@ -42007,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%&
@@ -42275,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:
@@ -42985,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.