TLS: when tls_certificates unset, generate a selfsigned cert
[users/heiko/exim.git] / doc / doc-docbook / spec.xfpt
index 0d5577f06126d49f37ee023647d73f6fbb4b7cc5..ba32403d6f85864b1de191f45376bd1db6f603c0 100644 (file)
@@ -45,7 +45,7 @@
 . Update the Copyright year (only) when changing content.
 . /////////////////////////////////////////////////////////////////////////////
 
-.set previousversion "4.86"
+.set previousversion "4.87"
 .include ./local_params
 
 .set ACL "access control lists (ACLs)"
@@ -3049,7 +3049,8 @@ trusted user for the sender of a message to be set in this way.
 .oindex "&%-bmalware%&"
 .cindex "testing", "malware"
 .cindex "malware scan test"
-This debugging option causes Exim to scan the given file,
+This debugging option causes Exim to scan the given file or directory
+(depending on the used scanner interface),
 using the malware scanning framework.  The option of &%av_scanner%& influences
 this option, so if &%av_scanner%&'s value is dependent upon an expansion then
 the expansion should have defaults which apply to this invocation.  ACLs are
@@ -3557,9 +3558,7 @@ example:
 exim '-D ABC = something' ...
 .endd
 &%-D%& may be repeated up to 10 times on a command line.
-.new
 Only macro names up to 22 letters long can be set.
-.wen
 
 
 .vitem &%-d%&<&'debug&~options'&>
@@ -6149,7 +6148,8 @@ errors:
 This causes any temporarily failing address to be retried every 15 minutes for
 2 hours, then at intervals starting at one hour and increasing by a factor of
 1.5 until 16 hours have passed, then every 6 hours up to 4 days. If an address
-is not delivered after 4 days of temporary failure, it is bounced.
+is not delivered after 4 days of temporary failure, it is bounced. The time is
+measured from first failure, not from the time the message was received.
 
 If the retry section is removed from the configuration, or is empty (that is,
 if no retry rules are defined), Exim will not retry deliveries. This turns
@@ -6611,7 +6611,7 @@ lookup types support only literal keys.
 .endlist ilist
 
 
-.section "Query-style lookup types" "SECID62"
+.section "Query-style lookup types" "SECTquerystylelookups"
 .cindex "lookup" "query-style types"
 .cindex "query-style lookup" "list of types"
 The supported query-style lookup types are listed below. Further details about
@@ -6669,12 +6669,10 @@ password value. For example:
 PostgreSQL database. See section &<<SECTsql>>&.
 
 .next
-.new
 .cindex "Redis lookup type"
 .cindex lookup Redis
 &(redis)&: The format of the query is an SQL statement that is passed to a
 Redis database. See section &<<SECTsql>>&.
-.wen
 
 .next
 .cindex "sqlite lookup type"
@@ -7052,14 +7050,12 @@ Retries for the dnsdb lookup can be controlled by a retry modifier.
 The form if &"retry_VAL"& where VAL is an integer.
 The default count is set by the main configuration option &%dns_retry%&.
 
-.new
 .cindex cacheing "of dns lookup"
 .cindex TTL "of dns lookup"
 .cindex DNS TTL
 Dnsdb lookup results are cached within a single process (and its children).
 The cache entry lifetime is limited to the smallest time-to-live (TTL)
 value of the set of returned DNS records.
-.wen
 
 
 .section "Pseudo dnsdb record types" "SECID66"
@@ -7612,7 +7608,6 @@ a query is successfully processed. The result of a query may be that no data is
 found, but that is still a successful query. In other words, the list of
 servers provides a backup facility, not a list of different places to look.
 
-.new
 For Redis the global option need not be specified if all queries contain their
 own server information &-- see section &<<SECTspeserque>>&.
 If specified, the option must be set to a colon-separated list of server
@@ -7628,9 +7623,7 @@ The database number is optional; if present that number is selected in the backe
 .next
 The password is optional; if present it is used to authenticate to the backend
 .endlist
-.wen
 
-.new
 The &%quote_mysql%&, &%quote_pgsql%&, and &%quote_oracle%& expansion operators
 convert newline, tab, carriage return, and backspace to \n, \t, \r, and \b
 respectively, and the characters single-quote, double-quote, and backslash
@@ -7638,7 +7631,6 @@ itself are escaped with backslashes.
 
 The &%quote_redis%& expansion operator
 escapes whitespace and backslash characters with a backslash.
-.wen
 
 .section "Specifying the server in the query" "SECTspeserque"
 For MySQL, PostgreSQL and Redis lookups (but not currently for Oracle and InterBase),
@@ -7685,10 +7677,8 @@ ${lookup pgsql{servers=master/db/name/pw; UPDATE ...} }
 For MySQL, an empty host name or the use of &"localhost"& in &%mysql_servers%&
 causes a connection to the server on the local host by means of a Unix domain
 socket. An alternate socket can be specified in parentheses.
-.new
 An option group name for MySQL option files can be specified in square brackets;
 the default value is &"exim"&.
-.wen
 The full syntax of each item in &%mysql_servers%& is:
 .display
 <&'hostname'&>::<&'port'&>(<&'socket name'&>)[<&'option group'&>]/&&&
@@ -7785,7 +7775,14 @@ domain, host, address and local part lists.
 
 .section "Expansion of lists" "SECTlistexpand"
 .cindex "expansion" "of lists"
-Each list is expanded as a single string before it is used. The result of
+Each list is expanded as a single string before it is used.
+
+.new
+&'Exception: the router headers_remove option, where list-item
+splitting is done before string-expansion.'&
+.wen
+
+The result of
 expansion must be a list, possibly containing empty items, which is split up
 into separate items for matching. By default, colon is the separator character,
 but this can be varied if necessary. See sections &<<SECTlistconstruct>>& and
@@ -9459,14 +9456,12 @@ condition = ${if >{$acl_m4}{3}}
 
 
 
-.new
 .vitem &*${imapfolder{*&<&'foldername'&>&*}}*&
 .cindex expansion "imap folder"
 .cindex "&%imapfolder%& expansion item"
 This item converts a (possibly multilevel, or with non-ASCII characters)
 folder specification to a Maildir name for filesystem use.
 For information on internationalisation support see &<<SECTi18nMDA>>&.
-.wen
 
 
 
@@ -10081,7 +10076,6 @@ environments where Exim uses base 36 instead of base 62 for its message
 identifiers, base-36 digits. The number is converted to decimal and output as a
 string.
 
-.new
 .vitem &*${base64:*&<&'string'&>&*}*&
 .cindex "expansion" "base64 encoding"
 .cindex "base64 encoding" "in string expansion"
@@ -10098,7 +10092,6 @@ returns the base64 encoding of the DER form of the certificate.
 .cindex "base64 decoding" "in string expansion"
 .cindex "&%base64d%& expansion item"
 This operator converts a base64-encoded string into the un-coded form.
-.wen
 
 
 .vitem &*${domain:*&<&'string'&>&*}*&
@@ -10245,7 +10238,6 @@ as is, and other byte values are converted to &`\xNN`&, for example a
 byte value 127 is converted to &`\x7f`&.
 
 
-.new
 .vitem &*${ipv6denorm:*&<&'string'&>&*}*&
 .cindex "&%ipv6denorm%& expansion item"
 .cindex "IP address" normalisation
@@ -10263,7 +10255,6 @@ Leading zeroes of groups are omitted, and the longest
 set of zero-valued groups is replaced with a double colon.
 A trailing ipv4-style dotted-decimal set is converted to hex.
 Pure IPv4 addresses are converted to IPv4-mapped IPv6.
-.wen
 
 
 .vitem &*${lc:*&<&'string'&>&*}*&
@@ -10531,9 +10522,7 @@ systems for files larger than 2GB.
 
 .vitem &*${str2b64:*&<&'string'&>&*}*&
 .cindex "&%str2b64%& expansion item"
-.new
 Now deprecated, a synonym for the &%base64%& expansion operator.
-.wen
 
 
 
@@ -10588,7 +10577,6 @@ This forces the letters in the string into upper-case.
 .cindex "&%utf8clean%& expansion item"
 This replaces any invalid utf-8 sequence in the string by the character &`?`&.
 
-.new
 .vitem "&*${utf8_domain_to_alabel:*&<&'string'&>&*}*&" &&&
        "&*${utf8_domain_from_alabel:*&<&'string'&>&*}*&" &&&
        "&*${utf8_localpart_to_alabel:*&<&'string'&>&*}*&" &&&
@@ -10603,7 +10591,6 @@ This replaces any invalid utf-8 sequence in the string by the character &`?`&.
 .cindex "&%utf8_localpart_from_alabel%& expansion item"
 These convert EAI mail name components between UTF-8 and a-label forms.
 For information on internationalisation support see &<<SECTi18nMTA>>&.
-.wen
 .endlist
 
 
@@ -11531,18 +11518,6 @@ contain the trailing slash. If &$config_file$& does not contain a slash,
 .vindex "&$config_file$&"
 The name of the main configuration file Exim is using.
 
-.vitem &$demime_errorlevel$&
-.vindex "&$demime_errorlevel$&"
-This variable is available when Exim is compiled with
-the content-scanning extension and the obsolete &%demime%& condition. For
-details, see section &<<SECTdemimecond>>&.
-
-.vitem &$demime_reason$&
-.vindex "&$demime_reason$&"
-This variable is available when Exim is compiled with the
-content-scanning extension and the obsolete &%demime%& condition. For details,
-see section &<<SECTdemimecond>>&.
-
 .vitem &$dkim_cur_signer$& &&&
        &$dkim_verify_status$& &&&
        &$dkim_verify_reason$& &&&
@@ -11674,12 +11649,6 @@ The first character is a major version number, currently 4.
 Then after a dot, the next group of digits is a minor version number.
 There may be other characters following the minor version.
 
-.vitem &$found_extension$&
-.vindex "&$found_extension$&"
-This variable is available when Exim is compiled with the
-content-scanning extension and the obsolete &%demime%& condition. For details,
-see section &<<SECTdemimecond>>&.
-
 .vitem &$header_$&<&'name'&>
 This is not strictly an expansion variable. It is expansion syntax for
 inserting the message header line with the given name. Note that the name must
@@ -12180,22 +12149,20 @@ qualified host name. See also &$smtp_active_hostname$&.
 
 
 .new
-.vitem &$proxy_host_address$& &&&
-       &$proxy_host_port$& &&&
-       &$proxy_target_address$& &&&
-       &$proxy_target_port$& &&&
+.vitem &$proxy_external_address$& &&&
+       &$proxy_external_port$& &&&
+       &$proxy_local_address$& &&&
+       &$proxy_local_port$& &&&
        &$proxy_session$&
 These variables are only available when built with Proxy Protocol
 or Socks5 support
 For details see chapter &<<SECTproxyInbound>>&.
 .wen
 
-.new
 .vitem &$prdr_requested$&
 .cindex "PRDR" "variable for"
 This variable is set to &"yes"& if PRDR was requested by the client for the
 current message, otherwise &"no"&.
-.wen
 
 .vitem &$prvscheck_address$&
 This variable is used in conjunction with the &%prvscheck%& expansion item,
@@ -13021,6 +12988,17 @@ overriding the setting of &%perl_at_start%&.
 There is also a command line option &%-pd%& (for delay) which suppresses the
 initial startup, even if &%perl_at_start%& is set.
 
+.new
+.ilist
+.oindex "&%perl_taintmode%&"
+.cindex "Perl" "taintmode"
+To provide more security executing Perl code via the embedded Perl
+interpeter, the &%perl_taintmode%& option can be set. This enables the
+taint mode of the Perl interpreter. You are encouraged to set this
+option to a true value. To avoid breaking existing installations, it
+defaults to false.
+.wen
+
 
 .section "Calling Perl subroutines" "SECID86"
 When the configuration file includes a &%perl_startup%& option you can make use
@@ -13549,6 +13527,7 @@ listed in more than one group.
 .table2
 .row &%perl_at_start%&               "always start the interpreter"
 .row &%perl_startup%&                "code to obey when starting Perl"
+.row &%perl_taintmode%&                     "enable taint mode in Perl"
 .endtable
 
 
@@ -14001,13 +13980,11 @@ received. See chapter &<<CHAPACL>>& for further details.
 This option defines the ACL that is run when an SMTP VRFY command is
 received. See chapter &<<CHAPACL>>& for further details.
 
-.new
 .option add_environment main "string list" empty
 .cindex "environment" "set values"
 This option allows to set individual environment variables that the
 currently linked libraries and programs in child processes use.
 See &<<SECTpipeenv>>& for the environment of &(pipe)& transports.
-.wen
 
 .option admin_groups main "string list&!!" unset
 .cindex "admin user"
@@ -14669,12 +14646,10 @@ own &'Reply-To:'& header line, the value of the &%errors_reply_to%& option is
 not used.
 
 
-.new
 .option event_action main string&!! unset
 .cindex events
 This option declares a string to be expanded for Exim's events mechanism.
 For details see &<<CHAPevents>>&.
-.wen
 
 
 .option exim_group main string "compile-time configured"
@@ -15022,12 +14997,10 @@ If the &%smtp_connection%& log selector is not set, this option has no effect.
 
 
 
-.new
 .option hosts_proxy main "host list&!!" unset
 .cindex proxy "proxy protocol"
 This option enables use of Proxy Protocol proxies for incoming
 connections.  For details see &<<SECTproxyInbound>>&.
-.wen
 
 
 .option hosts_treat_as_local main "domain list&!!" unset
@@ -15096,7 +15069,6 @@ process rather than a remote host, and is using &%-bs%& to inject the messages,
 .option ignore_fromline_local main boolean false
 See &%ignore_fromline_hosts%& above.
 
-.new
 .option keep_environment main "string list" unset
 .cindex "environment" "values from"
 This option contains a string list of environment variables to keep.
@@ -15124,7 +15096,6 @@ See the &%add_environment%& main config option for a way to set
 environment variables to a fixed value.  The environment for &(pipe)&
 transports is handled separately, see section &<<SECTpipeenv>>& for
 details.
-.wen
 
 
 .option keep_malformed main time 4d
@@ -15674,14 +15645,20 @@ local parts. Exim's default configuration does this.
 
 
 .option perl_at_start main boolean false
+.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.
 
+.option perl_startup main boolean false
+.cindex "Perl"
+This Option enables the taint mode of the embedded Perl interpreter.
+
 
 .option pgsql_servers main "string list" unset
 .cindex "PostgreSQL lookup type" "server list"
@@ -16605,14 +16582,12 @@ example, instead of &"Administrative prohibition"&, it might give:
 .endd
 
 
-.new
 .option smtputf8_advertise_hosts main "host list&!!" *
 .cindex "SMTPUTF8" "advertising"
 When Exim is built with support for internationalised mail names,
 the availability therof is advertised in
 response to EHLO only to those client hosts that match this option. See
 chapter &<<CHAPi18n>>& for details of Exim's support for internationalisation.
-.wen
 
 
 .option spamd_address main string "see below"
@@ -16859,9 +16834,7 @@ runs. This is appropriate behaviour for obtaining wall-clock time on some, but
 unfortunately not all, operating systems.
 
 
-.new
 .option tls_advertise_hosts main "host list&!!" *
-.wen
 .cindex "TLS" "advertising"
 .cindex "encryption" "on SMTP connection"
 .cindex "SMTP" "encrypted connection"
@@ -16869,11 +16842,9 @@ When Exim is built with support for TLS encrypted connections, the availability
 of the STARTTLS command to set up an encrypted session is advertised in
 response to EHLO only to those client hosts that match this option. See
 chapter &<<CHAPTLS>>& for details of Exim's support for TLS.
-.new
 Note that the default value requires that a certificate be supplied
-using the &%tls_certificate%& option.  If no certificate is available then
-the &%tls_advertise_hosts%& option should be set empty.
-.wen
+using the &%tls_certificate%& option.  If TLS support for incoming connections
+is not required the &%tls_advertise_hosts%& option should be set empty.
 
 
 .option tls_certificate main string&!! unset
@@ -16894,6 +16865,11 @@ if the OpenSSL build supports TLS extensions and the TLS client sends the
 Server Name Indication extension, then this option and others documented in
 &<<SECTtlssni>>& will be re-expanded.
 
+.new
+If this option is unset or empty a fresh self-signed certificate will be
+generated for every connection.
+.wen
+
 .option tls_crl main string&!! unset
 .cindex "TLS" "server certificate revocation list"
 .cindex "certificate" "revocation list for server"
@@ -17000,9 +16976,7 @@ must if set expand to the absolute path to a file which contains a current
 status proof for the server's certificate, as obtained from the
 Certificate Authority.
 
-.new
 Usable for GnuTLS 3.4.4 or 3.3.17 or OpenSSL 1.1.0 (or later).
-.wen
 
 
 .option tls_on_connect_ports main "string list" unset
@@ -20756,7 +20730,6 @@ resent to other recipients.
 .cindex events
 This option declares a string to be expanded for Exim's events mechanism.
 For details see &<<CHAPevents>>&.
-.wen
 
 
 .option group transports string&!! "Exim group"
@@ -20860,7 +20833,6 @@ transport, the &[initgroups()]& function is called when running the transport
 to ensure that any additional groups associated with the uid are set up.
 
 
-.new
 .option max_parallel transports integer&!! unset
 .cindex limit "transport parallelism"
 .cindex transport "parallel processes"
@@ -20883,7 +20855,6 @@ relevant hints database whenever your system reboots. The names of the files
 start with &_misc_& and they are kept in the &_spool/db_& directory. There
 may be one or two files, depending on the type of DBM in use. The same files
 are used for ETRN and smtp transport serialization.
-.wen
 
 
 .option message_size_limit transports string&!! 0
@@ -21032,9 +21003,7 @@ headers that some sites insist on.
 This option sets up a filtering (in the Unix shell sense) process for messages
 at transport time. It should not be confused with mail filtering as set up by
 individual users or via a system filter.
-.new
 If unset, or expanding to an empty string, no filtering is done.
-.wen
 
 When the message is about to be written out, the command specified by
 &%transport_filter%& is started up in a separate, parallel process, and
@@ -22786,10 +22755,8 @@ If two messages arrive at almost the same time, and both are routed to a pipe
 delivery, the two pipe transports may be run concurrently. You must ensure that
 any pipe commands you set up are robust against this happening. If the commands
 write to a file, the &%exim_lock%& utility might be of use.
-.new
 Alternatively the &%max_parallel%& option could be used with a value
 of "1" to enforce serialization.
-.wen
 
 
 
@@ -23982,9 +23949,7 @@ start with &_misc_& and they are kept in the &_spool/db_& directory. There
 may be one or two files, depending on the type of DBM in use. The same files
 are used for ETRN serialization.
 
-.new
 See also the &%max_parallel%& generic transport option.
-.wen
 
 
 .option size_addition smtp integer 1024
@@ -24004,12 +23969,10 @@ Alternatively, if the value of &%size_addition%& is set negative, it disables
 the use of the SIZE option altogether.
 
 
-.new
 .option socks_proxy smtp string&!! unset
 .cindex proxy SOCKS
 This option enables use of SOCKS proxies for connections made by the
 transport.  For details see &<<SECTproxySOCKS>>&.
-.wen
 
 
 .option tls_certificate smtp string&!! unset
@@ -26954,7 +26917,8 @@ Documentation of the strings accepted may be found in the GnuTLS manual, under
 &url(http://www.gnutls.org/manual/html_node/Priority-Strings.html),
 but beware that this relates to GnuTLS 3, which may be newer than the version
 installed on your system.  If you are using GnuTLS 3,
-&url(http://www.gnutls.org/manual/gnutls.html#Listing-the-ciphersuites-in-a-priority-string, then the example code)
+then the example code
+&url(http://www.gnutls.org/manual/gnutls.html#Listing-the-ciphersuites-in-a-priority-string)
 on that site can be used to test a given string.
 
 For example:
@@ -26999,10 +26963,17 @@ with the error
 If a STARTTLS command is issued within an existing TLS session, it is
 rejected with a 554 error code.
 
-To enable TLS operations on a server, you must set &%tls_advertise_hosts%& to
-match some hosts. You can, of course, set it to * to match all hosts.
-However, this is not all you need to do. TLS sessions to a server won't work
-without some further configuration at the server end.
+To enable TLS operations on a server, the &%tls_advertise_hosts%& option
+must be set to match some hosts. The default is * which matches all hosts.
+
+.new
+If this is all you do, TLS encryption will be enabled but not authentication -
+meaning that the peer has no assurance it is actually you he is talking to.
+You gain protection from a passive sniffer listening on the wire but not
+from someone able to intercept the communication.
+.wen
+
+Further protection requires some further configuration at the server end.
 
 It is rumoured that all existing clients that support TLS/SSL use RSA
 encryption. To make this work you need to set, in the server,
@@ -27170,9 +27141,7 @@ starts retrying to fetch an OCSP proof some time before its current
 proof expires.  The downside is that it requires server support.
 
 Unless Exim is built with the support disabled,
-.new
 or with GnuTLS earlier than version 3.3.16 / 3.4.8
-.wen
 support for OCSP stapling is included.
 
 There is a global option called &%tls_ocsp_file%&.
@@ -27674,11 +27643,9 @@ Note that a client may issue more than one EHLO or HELO command in an SMTP
 session, and indeed is required to issue a new EHLO or HELO after successfully
 setting up encryption following a STARTTLS command.
 
-.new
 Note also that a deny neither forces the client to go away nor means that
 mail will be refused on the connection.  Consider checking for
 &$sender_helo_name$& being defined in a MAIL or RCPT ACL to do that.
-.wen
 
 If the command is accepted by an &%accept%& verb that has a &%message%&
 modifier, the message may not contain more than one line (it will be truncated
@@ -27757,11 +27724,9 @@ for some or all recipients.
 PRDR may be used to support per-user content filtering.  Without it
 one must defer any recipient after the first that has a different
 content-filter configuration.  With PRDR, the RCPT-time check
-.new
 .cindex "PRDR" "variable for"
 for this can be disabled when the variable &$prdr_requested$&
 is &"yes"&.
-.wen
 Any required difference in behaviour of the main DATA-time
 ACL should however depend on the PRDR-time ACL having run, as Exim
 will avoid doing so in some situations (e.g.  single-recipient mails).
@@ -28704,9 +28669,7 @@ and data is copied from one to the other.
 An attempt to set this option for any recipient but the first
 for a mail will be quietly ignored.
 If a recipient-verify callout
-.new
 (with use_sender)
-.wen
 connection is subsequently
 requested in the same ACL it is held open and used for
 any subsequent recipients and the data,
@@ -28718,13 +28681,11 @@ Note also that headers cannot be
 modified by any of the post-data ACLs (DATA, MIME and DKIM).
 Headers may be modified by routers (subject to the above) and transports.
 
-.new
 All the usual ACLs are called; if one results in the message being
 rejected, all effort spent in delivery (including the costs on
 the ultimate destination) will be wasted.
 Note that in the case of data-time ACLs this includes the entire
 message body.
-.wen
 
 Cutthrough delivery is not supported via transport-filters or when DKIM signing
 of outgoing messages is done, because it sends data to the ultimate destination
@@ -28954,12 +28915,10 @@ data is read.
 &*Note:*& This control applies only to the current message, not to any others
 that are being submitted at the same time using &%-bs%& or &%-bS%&.
 
-.new
 .vitem &*control&~=&~utf8_downconvert*&
 This control enables conversion of UTF-8 in message addresses
 to a-label form.
 For details see &<<SECTi18nMTA>>&.
-.wen
 .endlist vlist
 
 
@@ -29238,12 +29197,6 @@ If all goes well, the condition is true. It is false only if there are
 problems such as a syntax error or a memory shortage. For more details, see
 chapter &<<CHAPexiscan>>&.
 
-.vitem &*demime&~=&~*&<&'extension&~list'&>
-.cindex "&%demime%& ACL condition"
-This condition is available only when Exim is compiled with the
-content-scanning extension. Its use is described in section
-&<<SECTdemimecond>>&.
-
 .vitem &*dnslists&~=&~*&<&'list&~of&~domain&~names&~and&~other&~data'&>
 .cindex "&%dnslists%& ACL condition"
 .cindex "DNS list" "in ACL"
@@ -29640,9 +29593,7 @@ warn  message  = X-Warn: sending host is on dialups list
 .cindex cacheing "of dns lookup"
 .cindex DNS TTL
 DNS list lookups are cached by Exim for the duration of the SMTP session
-.new
 (but limited by the DNS return TTL value),
-.wen
 so a lookup based on the IP address is done at most once for any incoming
 connection (assuming long-enough TTL).
 Exim does not share information between multiple incoming
@@ -31056,10 +31007,6 @@ conditions.
 Two new main configuration options: &%av_scanner%& and &%spamd_address%&.
 .endlist
 
-There is another content-scanning configuration option for &_Local/Makefile_&,
-called WITH_OLD_DEMIME. If this is set, the old, deprecated &%demime%& ACL
-condition is compiled, in addition to all the other content-scanning features.
-
 Content-scanning is continually evolving, and new features are still being
 added. While such features are still unstable and liable to incompatible
 changes, they are made available in Exim by setting options whose names begin
@@ -31309,7 +31256,7 @@ This is a daemon type scanner that is aimed mainly at Polish users, though some
 parts of documentation are now available in English. You can get it at
 &url(http://linux.mks.com.pl/). The only option for this scanner type is
 the maximum number of processes used simultaneously to scan the attachments,
-provided that the demime facility is employed and also provided that mksd has
+provided that mksd has
 been run with at least the same number of child processes. For example:
 .code
 av_scanner = mksd:2
@@ -31400,23 +31347,17 @@ When a virus is found, the condition sets up an expansion variable called
 &%message%& modifier that specifies the error returned to the sender, and/or in
 logging data.
 
-If your virus scanner cannot unpack MIME and TNEF containers itself, you should
-use the &%demime%& condition (see section &<<SECTdemimecond>>&) before the
-&%malware%& condition.
-
 Beware the interaction of Exim's &%message_size_limit%& with any size limits
 imposed by your anti-virus scanner.
 
 Here is a very simple scanning example:
 .code
 deny message = This message contains malware ($malware_name)
-     demime = *
      malware = *
 .endd
 The next example accepts messages when there is a problem with the scanner:
 .code
 deny message = This message contains malware ($malware_name)
-     demime = *
      malware = */defer_ok
 .endd
 The next example shows how to use an ACL variable to scan with both sophie and
@@ -31912,90 +31853,6 @@ are set to any substrings captured by the regular expression.
 &*Warning*&: With large messages, these conditions can be fairly
 CPU-intensive.
 
-
-
-
-.section "The demime condition" "SECTdemimecond"
-.cindex "content scanning" "MIME checking"
-.cindex "MIME content scanning"
-The &%demime%& ACL condition provides MIME unpacking, sanity checking and file
-extension blocking. It is usable only in the DATA and non-SMTP ACLs. The
-&%demime%& condition uses a simpler interface to MIME decoding than the MIME
-ACL functionality, but provides no additional facilities. Please note that this
-condition is deprecated and kept only for backward compatibility. You must set
-the WITH_OLD_DEMIME option in &_Local/Makefile_& at build time to be able to
-use the &%demime%& condition.
-
-The &%demime%& condition unpacks MIME containers in the message. It detects
-errors in MIME containers and can match file extensions found in the message
-against a list. Using this facility produces files containing the unpacked MIME
-parts of the message in the temporary scan directory. If you do antivirus
-scanning, it is recommended that you use the &%demime%& condition before the
-antivirus (&%malware%&) condition.
-
-On the right-hand side of the &%demime%& condition you can pass a
-colon-separated list of file extensions that it should match against. For
-example:
-.code
-deny message = Found blacklisted file attachment
-     demime  = vbs:com:bat:pif:prf:lnk
-.endd
-If one of the file extensions is found, the condition is true, otherwise it is
-false. If there is a temporary error while demimeing (for example, &"disk
-full"&), the condition defers, and the message is temporarily rejected (unless
-the condition is on a &%warn%& verb).
-
-The right-hand side is expanded before being treated as a list, so you can have
-conditions and lookups there. If it expands to an empty string, &"false"&, or
-zero (&"0"&), no demimeing is done and the condition is false.
-
-The &%demime%& condition set the following variables:
-
-.vlist
-.vitem &$demime_errorlevel$&
-.vindex "&$demime_errorlevel$&"
-When an error is detected in a MIME container, this variable contains the
-severity of the error, as an integer number. The higher the value, the more
-severe the error (the current maximum value is 3). If this variable is unset or
-zero, no error occurred.
-
-.vitem &$demime_reason$&
-.vindex "&$demime_reason$&"
-When &$demime_errorlevel$& is greater than zero, this variable contains a
-human-readable text string describing the MIME error that occurred.
-.endlist
-
-.vlist
-.vitem &$found_extension$&
-.vindex "&$found_extension$&"
-When the &%demime%& condition is true, this variable contains the file
-extension it found.
-.endlist
-
-Both &$demime_errorlevel$& and &$demime_reason$& are set by the first call of
-the &%demime%& condition, and are not changed on subsequent calls.
-
-If you do not want to check for file extensions, but rather use the &%demime%&
-condition for unpacking or error checking purposes, pass &"*"& as the
-right-hand side value. Here is a more elaborate example of how to use this
-facility:
-.code
-# Reject messages with serious MIME container errors
-deny  message = Found MIME error ($demime_reason).
-      demime = *
-      condition = ${if >{$demime_errorlevel}{2}{1}{0}}
-
-# Reject known virus spreading file extensions.
-# Accepting these is pretty much braindead.
-deny  message = contains $found_extension file (blacklisted).
-      demime  = com:vbs:bat:pif:scr
-
-# Freeze .exe and .doc files. Postmaster can
-# examine them and eventually thaw them.
-deny  log_message = Another $found_extension file.
-      demime = exe:doc
-      control = freeze
-.endd
 .ecindex IIDcosca
 
 
@@ -34177,13 +34034,11 @@ When Exim receives a VRFY or EXPN command on a TCP/IP connection, it
 runs the ACL specified by &%acl_smtp_vrfy%& or &%acl_smtp_expn%& (as
 appropriate) in order to decide whether the command should be accepted or not.
 
-.new
 .cindex "VRFY" "processing"
 When no ACL is defined for VRFY, or if it rejects without
 setting an explicit response code, the command is accepted
 (with a 252 SMTP response code)
 in order to support awkward clients that do a VRFY before every RCPT.
-.wen
 When VRFY is accepted, it runs exactly the same code as when Exim is
 called with the &%-bv%& option, and returns 250/451/550
 SMTP response codes.
@@ -35769,17 +35624,13 @@ selection marked by asterisks:
 &` incoming_interface         `&  local interface on <= and => lines
 &` incoming_port              `&  remote port on <= lines
 &`*lost_incoming_connection   `&  as it says (includes timeouts)
-.new
 &` outgoing_interface         `&  local interface on => lines
-.wen
 &` outgoing_port              `&  add remote port to => lines
 &`*queue_run                  `&  start and end queue runs
 &` queue_time                 `&  time on queue for one recipient
 &` queue_time_overall         `&  time on queue for whole message
 &` pid                        `&  Exim process id
-.new
 &` proxy                      `&  proxy address on <= and => lines
-.wen
 &` received_recipients        `&  recipients on <= lines
 &` received_sender            `&  sender on <= lines
 &`*rejected_header            `&  header contents on reject log
@@ -35902,11 +35753,8 @@ to the &"<="& line as an IP address in square brackets, tagged by I= and
 followed by a colon and the port number. The local interface and port are also
 added to other SMTP log lines, for example &"SMTP connection from"&, to
 rejection lines, and (despite the name) to outgoing &"=>"& and &"->"& lines.
-.new
 The latter can be disabled by turning off the &%outgoing_interface%& option.
-.wen
 .next
-.new
 .cindex log "incoming proxy address"
 .cindex proxy "logging proxy address"
 .cindex "TCP/IP" "logging proxy address"
@@ -35915,7 +35763,6 @@ of the proxy, tagged by PRX=, on the &"<="& line for a message accepted
 on a proxied connection
 or the &"=>"& line for a message delivered on a proxied connection..
 See &<<SECTproxyInbound>>& for more information.
-.wen
 .next
 .cindex "log" "incoming remote port"
 .cindex "port" "logging remote"
@@ -35938,22 +35785,18 @@ connection is unexpectedly dropped.
 .cindex "log" "local address and port"
 .cindex "TCP/IP" "logging local address and port"
 .cindex "interface" "logging"
-.new
 &%outgoing_interface%&: If &%incoming_interface%& is turned on, then the
 interface on which a message was sent is added to delivery lines as an I= tag
 followed by IP address in square brackets. You can disable this by turning
 off the &%outgoing_interface%& option.
-.wen
 .next
 .cindex "log" "outgoing remote port"
 .cindex "port" "logging outgoint remote"
 .cindex "TCP/IP" "logging ougtoing remote port"
 &%outgoing_port%&: The remote port number is added to delivery log lines (those
 containing => tags) following the IP address.
-.new
 The local port is also added if &%incoming_interface%& and
 &%outgoing_interface%& are both enabled.
-.wen
 This option is not included in the default setting, because for most ordinary
 configurations, the remote port number is always 25 (the SMTP port), and the
 local port is a random ephemeral port.
@@ -38078,9 +37921,7 @@ linked to a domain which that entity controls.  It permits reputation to
 be tracked on a per-domain basis, rather than merely upon source IP address.
 DKIM is documented in RFC 4871.
 
-.new
 DKIM support is compiled into Exim by default if TLS support is present.
-.wen
 It can be disabled by setting DISABLE_DKIM=yes in &_Local/Makefile_&.
 
 Exim's DKIM implementation allows to
@@ -38353,7 +38194,6 @@ for more information of what they mean.
 .cindex "proxy support"
 .cindex "proxy" "access via"
 
-.new
 A proxy is an intermediate system through which communication is passed.
 Proxies may provide a security, availability or load-distribution function.
 
@@ -38387,18 +38227,20 @@ Use of a proxy is enabled by setting the &%hosts_proxy%&
 main configuration option to a hostlist; connections from these
 hosts will use Proxy Protocol.
 
+.new
 The following expansion variables are usable
 (&"internal"& and &"external"& here refer to the interfaces
 of the proxy):
 .display
-&'proxy_host_address   '& internal IP address of the proxy
-&'proxy_host_port      '& internal TCP port of the proxy
-&'proxy_target_address '& external IP address of the proxy
-&'proxy_target_port    '& external TCP port of the proxy
+&'proxy_external_address   '& IP of host being proxied or IP of remote interface of proxy
+&'proxy_external_port      '& Port of host being proxied or Port on remote interface of proxy
+&'proxy_local_address '& IP of proxy server inbound or IP of local interface of proxy
+&'proxy_local_port    '& Port of proxy server inbound or Port on local interface of proxy
 &'proxy_session        '& boolean: SMTP connection via proxy
 .endd
-If &$proxy_session$& is set but &$proxy_host_address$& is empty
+If &$proxy_session$& is set but &$proxy_external_address$& is empty
 there was a protocol error.
+.wen
 
 Since the real connections are all coming from the proxy, and the
 per host connection tracking is done before Proxy Protocol is
@@ -38491,7 +38333,6 @@ overall connection applies to the set of proxied attempts.
 To log the (local) IP of a proxy in the incoming or delivery logline,
 add &"+proxy"& to the &%log_selector%& option.
 This will add a component tagged with &"PRX="& to the line.
-.wen
 
 . ////////////////////////////////////////////////////////////////////////////
 . ////////////////////////////////////////////////////////////////////////////
@@ -38503,7 +38344,6 @@ This will add a component tagged with &"PRX="& to the line.
 .cindex i18n
 .cindex UTF-8 "mail name handling"
 
-.new
 Exim has support for Internationalised mail names.
 To include this it must be built with SUPPORT_I18N and the libidn library.
 Standards supported are RFCs 2060, 5890, 6530 and 6533.
@@ -38612,7 +38452,6 @@ Examples:
 Note that the source charset setting is vital, and also that characters
 must be representable in UTF-16.
 
-.wen
 
 . ////////////////////////////////////////////////////////////////////////////
 . ////////////////////////////////////////////////////////////////////////////
@@ -38621,7 +38460,6 @@ must be representable in UTF-16.
          "Events"
 .cindex events
 
-.new
 The events mechanism in Exim can be used to intercept processing at a number
 of points.  It was originally invented to giave a way to do customised logging
 actions (for example, to a database) but can also be used to modify some
@@ -38727,7 +38565,6 @@ For tls:cert events, if GnuTLS is in use this will trigger only per
 chain element received on the connection.
 For OpenSSL it will trigger for every chain element including those
 loaded locally.
-.wen
 
 . ////////////////////////////////////////////////////////////////////////////
 . ////////////////////////////////////////////////////////////////////////////