hosts_require_helo
[exim.git] / doc / doc-docbook / spec.xfpt
index 21697a7353fb5fd7cf9b2229481cd3daa1d87345..0915da3e67329db3b5b237cf5d71c02e91835304 100644 (file)
@@ -51,6 +51,8 @@
 .set ACL "access control lists (ACLs)"
 .set I   "    "
 
 .set ACL "access control lists (ACLs)"
 .set I   "    "
 
+.set drivernamemax "64"
+
 .macro copyyear
 2020
 .endmacro
 .macro copyyear
 2020
 .endmacro
@@ -3848,9 +3850,11 @@ headers.)
 .cindex "Solaris" "&'mail'& command"
 .cindex "dot" "in incoming non-SMTP message"
 This option, which has the same effect as &%-oi%&, specifies that a dot on a
 .cindex "Solaris" "&'mail'& command"
 .cindex "dot" "in incoming non-SMTP message"
 This option, which has the same effect as &%-oi%&, specifies that a dot on a
-line by itself should not terminate an incoming, non-SMTP message. I can find
-no documentation for this option in Solaris 2.4 Sendmail, but the &'mailx'&
-command in Solaris 2.4 uses it. See also &%-ti%&.
+line by itself should not terminate an incoming, non-SMTP message.
+Solaris 2.4 (SunOS 5.4) Sendmail has a similar &%-i%& processing option
+&url(https://docs.oracle.com/cd/E19457-01/801-6680-1M/801-6680-1M.pdf),
+p. 1M-529), and therefore a &%-oi%& command line option, which both are used
+by its &'mailx'& command.
 
 .vitem &%-L%&&~<&'tag'&>
 .oindex "&%-L%&"
 
 .vitem &%-L%&&~<&'tag'&>
 .oindex "&%-L%&"
@@ -4170,8 +4174,9 @@ the standard output. This option can be used only by an admin user.
 
 .vitem &%-m%&
 .oindex "&%-m%&"
 
 .vitem &%-m%&
 .oindex "&%-m%&"
-This is apparently a synonym for &%-om%& that is accepted by Sendmail, so Exim
-treats it that way too.
+This is a synonym for &%-om%& that is accepted by Sendmail
+(&url(https://docs.oracle.com/cd/E19457-01/801-6680-1M/801-6680-1M.pdf)
+p. 1M-258), so Exim treats it that way too.
 
 .vitem &%-N%&
 .oindex "&%-N%&"
 
 .vitem &%-N%&
 .oindex "&%-N%&"
@@ -8502,7 +8507,7 @@ will store a result in the &$local_part_data$& variable.
 .vitem domains
 .new
 A &%domains%& router option or &%domains%& ACL condition
 .vitem domains
 .new
 A &%domains%& router option or &%domains%& ACL condition
-will store a result in the &$domain_data$& variable
+will store a result in the &$domain_data$& variable.
 .wen
 .vitem senders
 A &%senders%& router option or &%senders%& ACL condition
 .wen
 .vitem senders
 A &%senders%& router option or &%senders%& ACL condition
@@ -8855,7 +8860,7 @@ If the pattern starts with the name of a lookup type
 of either kind (single-key or query-style) it may be
 followed by a comma and options,
 The options are lookup-type specific and consist of a comma-separated list.
 of either kind (single-key or query-style) it may be
 followed by a comma and options,
 The options are lookup-type specific and consist of a comma-separated list.
-Each item starts with a tag and and equals "=".
+Each item starts with a tag and and equals "=" sign.
 
 .next
 .cindex "domain list" "matching literal domain name"
 
 .next
 .cindex "domain list" "matching literal domain name"
@@ -8974,9 +8979,13 @@ accept hosts = @[]
 .endd
 .next
 .cindex "CIDR notation"
 .endd
 .next
 .cindex "CIDR notation"
-If the pattern is an IP address followed by a slash and a mask length (for
-example 10.11.42.0/24), it is matched against the IP address of the subject
-host under the given mask. This allows, an entire network of hosts to be
+If the pattern is an IP address followed by a slash and a mask length, for
+example
+.code
+10.11.42.0/24
+.endd
+, it is matched against the IP address of the subject
+host under the given mask. This allows an entire network of hosts to be
 included (or excluded) by a single item. The mask uses CIDR notation; it
 specifies the number of address bits that must match, starting from the most
 significant end of the address.
 included (or excluded) by a single item. The mask uses CIDR notation; it
 specifies the number of address bits that must match, starting from the most
 significant end of the address.
@@ -10165,7 +10174,7 @@ They are visible in DKIM, PRDR and DATA ACLs.
 Header lines that are added in a RCPT ACL (for example)
 are saved until the message's incoming header lines are available, at which
 point they are added.
 Header lines that are added in a RCPT ACL (for example)
 are saved until the message's incoming header lines are available, at which
 point they are added.
-When any of the above ACLs ar
+When any of the above ACLs are
 running, however, header lines added by earlier ACLs are visible.
 
 Upper case and lower case letters are synonymous in header names. If the
 running, however, header lines added by earlier ACLs are visible.
 
 Upper case and lower case letters are synonymous in header names. If the
@@ -10441,10 +10450,11 @@ additional arguments need be given; the maximum number permitted, including the
 name of the subroutine, is nine.
 
 The return value of the subroutine is inserted into the expanded string, unless
 name of the subroutine, is nine.
 
 The return value of the subroutine is inserted into the expanded string, unless
-the return value is &%undef%&. In that case, the expansion fails in the same
-way as an explicit &"fail"& on a lookup item. The return value is a scalar.
-Whatever you return is evaluated in a scalar context. For example, if you
-return the name of a Perl vector, the return value is the size of the vector,
+the return value is &%undef%&. In that case, the entire expansion is
+forced to fail, in the same way as an explicit &"fail"& on a lookup item
+does (see section &<<SECTforexpfai>>&).  Whatever you return is evaluated
+in a scalar context, thus the return value is a scalar.  For example, if you
+return a Perl vector, the return value is the size of the vector,
 not its contents.
 
 If the subroutine exits by calling Perl's &%die%& function, the expansion fails
 not its contents.
 
 If the subroutine exits by calling Perl's &%die%& function, the expansion fails
@@ -10494,7 +10504,7 @@ For more discussion and an example, see section &<<SECTverifyPRVS>>&.
 .cindex "expansion" "inserting an entire file"
 .cindex "file" "inserting into expansion"
 .cindex "&%readfile%& expansion item"
 .cindex "expansion" "inserting an entire file"
 .cindex "file" "inserting into expansion"
 .cindex "&%readfile%& expansion item"
-The filename and end-of-line string are first expanded separately. The file is
+The filename and end-of-line (eol) string are first expanded separately. The file is
 then read, and its contents replace the entire item. All newline characters in
 the file are replaced by the end-of-line string if it is present. Otherwise,
 newlines are left in the string.
 then read, and its contents replace the entire item. All newline characters in
 the file are replaced by the end-of-line string if it is present. Otherwise,
 newlines are left in the string.
@@ -10531,7 +10541,7 @@ ${readsocket{inet:[::1]:1234}{request string}}
 Only a single host name may be given, but if looking it up yields more than
 one IP address, they are each tried in turn until a connection is made. For
 both kinds of socket, Exim makes a connection, writes the request string
 Only a single host name may be given, but if looking it up yields more than
 one IP address, they are each tried in turn until a connection is made. For
 both kinds of socket, Exim makes a connection, writes the request string
-unless it is an empty string; and no terminating NUL is ever sent)
+(unless it is an empty string; no terminating NUL is ever sent)
 and reads from the socket until an end-of-file
 is read. A timeout of 5 seconds is applied. Additional, optional arguments
 extend what can be done. Firstly, you can vary the timeout. For example:
 and reads from the socket until an end-of-file
 is read. A timeout of 5 seconds is applied. Additional, optional arguments
 extend what can be done. Firstly, you can vary the timeout. For example:
@@ -10997,7 +11007,7 @@ is controlled by the &%print_topbitchars%& option.
 .vitem &*${escape8bit:*&<&'string'&>&*}*&
 .cindex "expansion" "escaping 8-bit characters"
 .cindex "&%escape8bit%& expansion item"
 .vitem &*${escape8bit:*&<&'string'&>&*}*&
 .cindex "expansion" "escaping 8-bit characters"
 .cindex "&%escape8bit%& expansion item"
-If the string contains and characters with the most significant bit set,
+If the string contains any characters with the most significant bit set,
 they are converted to escape sequences starting with a backslash.
 Backslashes and DEL characters are also converted.
 
 they are converted to escape sequences starting with a backslash.
 Backslashes and DEL characters are also converted.
 
@@ -11464,7 +11474,7 @@ Now deprecated, a synonym for the &%base64%& expansion operator.
 .cindex "expansion" "string length"
 .cindex "string" "length in expansion"
 .cindex "&%strlen%& expansion item"
 .cindex "expansion" "string length"
 .cindex "string" "length in expansion"
 .cindex "&%strlen%& expansion item"
-The item is replace by the length of the expanded string, expressed as a
+The item is replaced by the length of the expanded string, expressed as a
 decimal number. &*Note*&: Do not confuse &%strlen%& with &%length%&.
 All measurement is done in bytes and is not UTF-8 aware.
 
 decimal number. &*Note*&: Do not confuse &%strlen%& with &%length%&.
 All measurement is done in bytes and is not UTF-8 aware.
 
@@ -14704,6 +14714,7 @@ listed in more than one group.
 .row &%notifier_socket%&             "override compiled-in value"
 .row &%pid_file_path%&               "override compiled-in value"
 .row &%queue_run_max%&               "maximum simultaneous queue runners"
 .row &%notifier_socket%&             "override compiled-in value"
 .row &%pid_file_path%&               "override compiled-in value"
 .row &%queue_run_max%&               "maximum simultaneous queue runners"
+.row &%smtp_backlog_monitor%&        "level to log listen baclog"
 .endtable
 
 
 .endtable
 
 
@@ -17384,7 +17395,7 @@ or if the message was submitted locally (not using TCP/IP), and the &%-bnq%&
 option was not set.
 
 
 option was not set.
 
 
-.option recipients_max main integer 0
+.option recipients_max main integer 50000
 .cindex "limit" "number of recipients"
 .cindex "recipient" "maximum number"
 If this option is set greater than zero, it specifies the maximum number of
 .cindex "limit" "number of recipients"
 .cindex "recipient" "maximum number"
 If this option is set greater than zero, it specifies the maximum number of
@@ -17722,6 +17733,14 @@ messages, it is also used as the default for HELO commands in callout
 verification if there is no remote transport from which to obtain a
 &%helo_data%& value.
 
 verification if there is no remote transport from which to obtain a
 &%helo_data%& value.
 
+.option smtp_backlog_monitor main integer 0
+.cindex "connection backlog" monitoring
+If this option is set to greater than zero, and the backlog of available
+TCP connections on a socket listening for SMTP is larger than it, a line
+is logged giving the value and the socket address and port.
+The value is retrived jsut before an accept call.
+This facility is only available on Linux.
+
 .option smtp_banner main string&!! "see below"
 .cindex "SMTP" "welcome banner"
 .cindex "banner for SMTP"
 .option smtp_banner main string&!! "see below"
 .cindex "SMTP" "welcome banner"
 .cindex "banner for SMTP"
@@ -17752,7 +17771,7 @@ is zero). If there isn't enough space, a temporary error code is returned.
 
 
 .option smtp_connect_backlog main integer 20
 
 
 .option smtp_connect_backlog main integer 20
-.cindex "connection backlog"
+.cindex "connection backlog" "set maximum"
 .cindex "SMTP" "connection backlog"
 .cindex "backlog of connections"
 This option specifies a maximum number of waiting SMTP connections. Exim passes
 .cindex "SMTP" "connection backlog"
 .cindex "backlog of connections"
 This option specifies a maximum number of waiting SMTP connections. Exim passes
@@ -18794,6 +18813,11 @@ which the preconditions are tested. The order of expansion of the options that
 provide data for a transport is: &%errors_to%&, &%headers_add%&,
 &%headers_remove%&, &%transport%&.
 
 provide data for a transport is: &%errors_to%&, &%headers_add%&,
 &%headers_remove%&, &%transport%&.
 
+.new
+The name of a router is limited to be &drivernamemax; ASCII characters long;
+prior to Exim 4.95 names would be silently truncated at this length, but now
+it is enforced.
+.wen
 
 
 .option address_data routers string&!! unset
 
 
 .option address_data routers string&!! unset
@@ -21500,7 +21524,7 @@ The text is not included in the response to an EXPN command. In non-SMTP cases
 the text is included in the error message that Exim generates.
 
 .cindex "SMTP" "error codes"
 the text is included in the error message that Exim generates.
 
 .cindex "SMTP" "error codes"
-By default, Exim sends a 451 SMTP code for a &':defer:'&, and 550 for
+By default for verify, Exim sends a 451 SMTP code for a &':defer:'&, and 550 for
 &':fail:'&. However, if the message starts with three digits followed by a
 space, optionally followed by an extended code of the form &'n.n.n'&, also
 followed by a space, and the very first digit is the same as the default error
 &':fail:'&. However, if the message starts with three digits followed by a
 space, optionally followed by an extended code of the form &'n.n.n'&, also
 followed by a space, and the very first digit is the same as the default error
@@ -22337,6 +22361,12 @@ and &$original_domain$& is never set.
 .scindex IIDgenoptra1 "generic options" "transport"
 .scindex IIDgenoptra2 "options" "generic; for transports"
 .scindex IIDgenoptra3 "transport" "generic options for"
 .scindex IIDgenoptra1 "generic options" "transport"
 .scindex IIDgenoptra2 "options" "generic; for transports"
 .scindex IIDgenoptra3 "transport" "generic options for"
+.new
+The name of a transport is limited to be &drivernamemax; ASCII characters long;
+prior to Exim 4.95 names would be silently truncated at this length, but now
+it is enforced.
+.wen
+
 The following generic options apply to all transports:
 
 
 The following generic options apply to all transports:
 
 
@@ -25611,6 +25641,11 @@ There will be no fallback to in-clear communication.
 See the &%dnssec_request_domains%& router and transport options.
 See section &<<SECDANE>>&.
 
 See the &%dnssec_request_domains%& router and transport options.
 See section &<<SECDANE>>&.
 
+.option hosts_require_helo smtp "host list&!!" *
+.cindex "HELO/EHLO" requiring
+Exim will require an accepted HELO or EHLO command from a host matching
+this list, before accepting a MAIL command.
+
 .option hosts_require_ocsp smtp "host list&!!" unset
 .cindex "TLS" "requiring for certain servers"
 Exim will request, and check for a valid Certificate Status being given, on a
 .option hosts_require_ocsp smtp "host list&!!" unset
 .cindex "TLS" "requiring for certain servers"
 Exim will request, and check for a valid Certificate Status being given, on a
@@ -27173,6 +27208,12 @@ permitted to use it as a relay. SMTP authentication is not of relevance to the
 transfer of mail between servers that have no managerial connection with each
 other.
 
 transfer of mail between servers that have no managerial connection with each
 other.
 
+.new
+The name of an authenticator is limited to be &drivernamemax; ASCII characters long;
+prior to Exim 4.95 names would be silently truncated at this length, but now
+it is enforced.
+.wen
+
 .cindex "AUTH" "description of"
 .cindex "ESMTP extensions" AUTH
 Very briefly, the way SMTP authentication works is as follows:
 .cindex "AUTH" "description of"
 .cindex "ESMTP extensions" AUTH
 Very briefly, the way SMTP authentication works is as follows:
@@ -38993,10 +39034,12 @@ it is too big.
 .cindex "log" "frozen messages; skipped"
 .cindex "frozen messages" "logging skipping"
 &%skip_delivery%&: A log line is written whenever a message is skipped during a
 .cindex "log" "frozen messages; skipped"
 .cindex "frozen messages" "logging skipping"
 &%skip_delivery%&: A log line is written whenever a message is skipped during a
-queue run because it is frozen or because another process is already delivering
-it.
+queue run because it another process is already delivering it or because
+it is frozen.
 .cindex "&""spool file is locked""&"
 .cindex "&""spool file is locked""&"
-The message that is written is &"spool file is locked"&.
+.cindex "&""message is frozen""&"
+The message that is written is either &"spool file is locked"& or
+&"message is frozen"&.
 .next
 .cindex "log" "smtp confirmation"
 .cindex "SMTP" "logging confirmation"
 .next
 .cindex "log" "smtp confirmation"
 .cindex "SMTP" "logging confirmation"