Testsuite: add missing mask / ipv6 expansion
[exim.git] / doc / doc-docbook / spec.xfpt
index d839c518a5e6b765e966832e1759446678bb6860..f13e58b7915f8130b410664cbbab753913b7a300 100644 (file)
@@ -12332,8 +12332,8 @@ this variable has the number of arguments.
 .vitem &$acl_verify_message$&
 .vindex "&$acl_verify_message$&"
 After an address verification has failed, this variable contains the failure
-message. It retains its value for use in subsequent modifiers. The message can
-be preserved by coding like this:
+message. It retains its value for use in subsequent modifiers of the verb.
+The message can be preserved by coding like this:
 .code
 warn !verify = sender
      set acl_m0 = $acl_verify_message
@@ -12341,6 +12341,9 @@ warn !verify = sender
 You can use &$acl_verify_message$& during the expansion of the &%message%& or
 &%log_message%& modifiers, to include information about the verification
 failure.
+.new
+&*Note*&: The variable is cleared at the end of processing the ACL verb.
+.wen
 
 .vitem &$address_data$&
 .vindex "&$address_data$&"
@@ -13112,7 +13115,22 @@ While running a per message ACL (mail/rcpt/predata), &$message_size$&
 contains the size supplied on the MAIL command, or -1 if no size was given. The
 value may not, of course, be truthful.
 
-.vitem &$mime_$&&'xxx'&
+.vitem &$mime_anomaly_level$& &&&
+       &$mime_anomaly_text$& &&&
+       &$mime_boundary$& &&&
+       &$mime_charset$& &&&
+       &$mime_content_description$& &&&
+       &$mime_content_disposition$& &&&
+       &$mime_content_id$& &&&
+       &$mime_content_size$& &&&
+       &$mime_content_transfer_encoding$& &&&
+       &$mime_content_type$& &&&
+       &$mime_decoded_filename$& &&&
+       &$mime_filename$& &&&
+       &$mime_is_coverletter$& &&&
+       &$mime_is_multipart$& &&&
+       &$mime_is_rfc822$& &&&
+       &$mime_part_count$&
 A number of variables whose names start with &$mime$& are
 available when Exim is compiled with the content-scanning extension. For
 details, see section &<<SECTscanmimepart>>&.
@@ -13225,18 +13243,10 @@ For details see chapter &<<SECTproxyInbound>>&.
 This variable is set to &"yes"& if PRDR was requested by the client for the
 current message, otherwise &"no"&.
 
-.vitem &$prvscheck_address$&
-This variable is used in conjunction with the &%prvscheck%& expansion item,
-which is described in sections &<<SECTexpansionitems>>& and
-&<<SECTverifyPRVS>>&.
-
-.vitem &$prvscheck_keynum$&
-This variable is used in conjunction with the &%prvscheck%& expansion item,
-which is described in sections &<<SECTexpansionitems>>& and
-&<<SECTverifyPRVS>>&.
-
-.vitem &$prvscheck_result$&
-This variable is used in conjunction with the &%prvscheck%& expansion item,
+.vitem &$prvscheck_address$& &&&
+       &$prvscheck_keynum$& &&&
+       &$prvscheck_result$&
+These variables are used in conjunction with the &%prvscheck%& expansion item,
 which is described in sections &<<SECTexpansionitems>>& and
 &<<SECTverifyPRVS>>&.
 
@@ -14826,8 +14836,10 @@ listed in more than one group.
 .table2
 .row &%gnutls_compat_mode%&          "use GnuTLS compatibility mode"
 .row &%gnutls_allow_auto_pkcs11%&    "allow GnuTLS to autoload PKCS11 modules"
+.row &%hosts_require_alpn%&          "mandatory ALPN"
 .row &%openssl_options%&             "adjust OpenSSL compatibility options"
 .row &%tls_advertise_hosts%&         "advertise TLS to these hosts"
+.row &%tls_alpn%&                   "acceptable protocol names"
 .row &%tls_certificate%&             "location of server certificate"
 .row &%tls_crl%&                     "certificate revocation list"
 .row &%tls_dh_max_bits%&             "clamp D-H bit count suggestion"
@@ -16328,6 +16340,20 @@ hosts_connection_nolog = :
 If the &%smtp_connection%& log selector is not set, this option has no effect.
 
 
+.new
+.option hosts_require_alpn main "host list&!!" unset
+.cindex ALPN "require negotiation in server"
+.cindex TLS ALPN
+.cindex TLS "Application Layer Protocol Names"
+If the TLS library supports ALPN
+then a successful negotiation of ALPN will be required for any client
+matching the list, for TLS to be used.
+See also the &%tls_alpn%& option.
+
+&*Note*&: prevention of fallback to in-clear connection is not
+managed by this option, and should be done separately.
+.wen
+
 
 .option hosts_proxy main "host list&!!" unset
 .cindex proxy "proxy protocol"
@@ -18354,6 +18380,19 @@ using the &%tls_certificate%& option.  If TLS support for incoming connections
 is not required the &%tls_advertise_hosts%& option should be set empty.
 
 
+.new
+.option tls_alpn main "string list&!!" "smtp : esmtp"
+.cindex TLS "Application Layer Protocol Names"
+.cindex TLS ALPN
+.cindex ALPN "set acceptable names for server"
+If this option is set,
+the TLS library supports ALPN,
+and the client offers either more than
+ALPN name or a name which does not match the list,
+the TLS connection is declined.
+.wen
+
+
 .option tls_certificate main "string list&!!" unset
 .cindex "TLS" "server certificate; location of"
 .cindex "certificate" "server, location of"
@@ -22459,6 +22498,14 @@ header, Exim has a configuration option (&%envelope_to_remove%&) which requests
 its removal from incoming messages, so that delivered messages can safely be
 resent to other recipients.
 
+.new
+&*Note:*& If used on a transport handling multiple recipients
+(the smtp transport unless &%rcpt_max%& is 1, the appendfile, pipe or lmtp
+transport if &%batch_max%& is greater than 1)
+then information about Bcc recipients will be leaked.
+Doing so is generally not advised.
+.wen
+
 
 .option event_action transports string&!! unset
 .cindex events
@@ -25654,6 +25701,20 @@ Exim will request a Certificate Status on a
 TLS session for any host that matches this list.
 &%tls_verify_certificates%& should also be set for the transport.
 
+.new
+.option hosts_require_alpn smtp "host list&!!" unset
+.cindex ALPN "require negotiation in client"
+.cindex TLS ALPN
+.cindex TLS "Application Layer Protocol Names"
+If the TLS library supports ALPN
+then a successful negotiation of ALPN will be required for any host
+matching the list, for TLS to be used.
+See also the &%tls_alpn%& option.
+
+&*Note*&: prevention of fallback to in-clear connection is not
+managed by this option; see &%hosts_require_tls%&.
+.wen
+
 .option hosts_require_dane smtp "host list&!!" unset
 .cindex DANE "transport options"
 .cindex DANE "requiring for certain servers"
@@ -25937,6 +25998,21 @@ This option enables use of SOCKS proxies for connections made by the
 transport.  For details see section &<<SECTproxySOCKS>>&.
 
 
+.new
+.option tls_alpn smtp string&!! unset
+.cindex TLS "Application Layer Protocol Names"
+.cindex TLS ALPN
+.cindex ALPN "set name in client"
+If this option is set
+and the TLS library supports ALPN,
+the value given is used.
+
+As of writing no value has been standardised for email use.
+The authors suggest using &"smtp"&.
+.wen
+
+
+
 .option tls_certificate smtp string&!! unset
 .cindex "TLS" "client certificate, location of"
 .cindex "certificate" "client, location of"
@@ -29867,6 +29943,35 @@ When Exim is built against GnuTLS, SNI support is available as of GnuTLS
 0.5.10.  (Its presence predates the current API which Exim uses, so if Exim
 built, then you have SNI support).
 
+.new
+.cindex TLS ALPN
+.cindex ALPN "general information"
+.cindex TLS "Application Layer Protocol Names"
+There is a TLS feature related to SNI
+called Application Layer Protocol Name (ALPN).
+This is intended to declare, or select, what protocol layer will be using a TLS
+connection.
+The client for the connection proposes a set of protocol names, and
+the server responds with a selected one.
+It is not, as of 2021, commonly used for SMTP connections.
+However, to guard against misirected or malicious use of web clients
+(which often do use ALPN) against MTA ports, Exim by default check that
+there is no incompatible ALPN specified by a client for a TLS connection.
+If there is, the connection is rejected.
+
+As a client Exim does not supply ALPN by default.
+The behaviour of both client and server can be configured using the options
+&%tls_alpn%& and &%hosts_require_alpn%&.
+There are no variables providing observability.
+Some feature-specific logging may appear on denied connections, but this
+depends on the behavious of the peer
+(not all peers can send a feature-specific TLS Alert).
+
+This feature is available when Exim is built with
+OpenSSL 1.1.0 or later or GnuTLS 3.2.0 or later;
+the macro _HAVE_TLS_ALPN will be defined when this is so.
+.wen
+
 
 
 .section "Multiple messages on the same encrypted TCP/IP connection" &&&
@@ -31383,8 +31488,11 @@ anyway. If the message contains newlines, this gives rise to a multi-line SMTP
 response.
 
 .vindex "&$acl_verify_message$&"
-For ACLs that are called by an &%acl =%& ACL condition, the message is
-stored in &$acl_verify_message$&, from which the calling ACL may use it.
+.new
+While the text is being expanded, the &$acl_verify_message$& variable
+contains any message previously set.
+Afterwards, &$acl_verify_message$& is cleared.
+.wen
 
 If &%message%& is used on a statement that verifies an address, the message
 specified overrides any message that is generated by the verification process.
@@ -33269,6 +33377,7 @@ warn  !verify = sender
 If you are writing your own custom rejection message or log message when
 denying access, you can use this variable to include information about the
 verification failure.
+This variable is cleared at the end of processing the ACL verb.
 
 In addition, &$sender_verify_failure$& or &$recipient_verify_failure$& (as
 appropriate) contains one of the following words:
@@ -41775,10 +41884,14 @@ variables:
 
 .vitem &$spf_received$&
 .vindex &$spf_received$&
-  This contains a complete Received-SPF: header that can be
-  added to the message. Please note that according to the SPF
-  draft, this header must be added at the top of the header
-  list. Please see section 10 on how you can do this.
+  This contains a complete Received-SPF: header (name and
+  content) that can be added to the message. Please note that
+  according to the SPF draft, this header must be added at the
+  top of the header list, i.e. with
+.code
+add_header = :at_start:$spf_received
+.endd
+  See section &<<SECTaddheadacl>>& for further details.
 
   Note: in case of "Best-guess" (see below), the convention is
   to put this string in a header called X-SPF-Guess: instead.