Docs: tidying
[exim.git] / doc / doc-docbook / spec.xfpt
index ae30cb88653a9c77f03df2c1b2036084e0f92df6..1b0dd8832900bf53272ea40691b1a3087b7ddfd0 100644 (file)
@@ -2837,6 +2837,12 @@ displayed.
 These options are used by Sendmail for selecting configuration files and are
 ignored by Exim.
 
 These options are used by Sendmail for selecting configuration files and are
 ignored by Exim.
 
+.new
+.cmdopt -atrn <&'host'&> <&'domainlist'&>
+This option requests an ODMR customer connection.
+See &<<SECTODMRCUST>>& for details.
+.wen
+
 .cmdopt -B <&'type'&>
 .oindex "&%-B%&"
 .cindex "8-bit characters"
 .cmdopt -B <&'type'&>
 .oindex "&%-B%&"
 .cindex "8-bit characters"
@@ -5210,7 +5216,7 @@ This can then be used in a &(redirect)& router setting like this:
 data = ${lookup mysql{ALIAS_QUERY}}
 .endd
 In earlier versions of Exim macros were sometimes used for domain, host, or
 data = ${lookup mysql{ALIAS_QUERY}}
 .endd
 In earlier versions of Exim macros were sometimes used for domain, host, or
-address lists. In Exim 4 these are handled better by named lists &-- see
+address lists. In Exim version 4 these are handled better by named lists &-- see
 section &<<SECTnamedlists>>&.
 
 
 section &<<SECTnamedlists>>&.
 
 
@@ -8635,6 +8641,11 @@ domainlist  dom2 = !a.b : *.b
 where &'x.y'& does not match. It's best to avoid negation altogether in
 referenced lists if you can.
 
 where &'x.y'& does not match. It's best to avoid negation altogether in
 referenced lists if you can.
 
+.new
+The list item which references a named list (&"+<listname>"&)
+may not be tainted.
+.wen
+
 .cindex "hiding named list values"
 .cindex "named lists" "hiding value of"
 Some named list definitions may contain sensitive data, for example, passwords for
 .cindex "hiding named list values"
 .cindex "named lists" "hiding value of"
 Some named list definitions may contain sensitive data, for example, passwords for
@@ -8739,6 +8750,9 @@ possible to use the same configuration file on several different hosts that
 differ only in their names.
 
 The value for a match will be the primary host name.
 differ only in their names.
 
 The value for a match will be the primary host name.
+.new
+The pattern may not be tainted.
+.wen
 
 
 .next
 
 
 .next
@@ -8754,6 +8768,9 @@ In today's Internet, the use of domain literals is controversial;
 see the &%allow_domain_literals%& main option.
 
 The value for a match will be the string &`@[]`&.
 see the &%allow_domain_literals%& main option.
 
 The value for a match will be the string &`@[]`&.
+.new
+The pattern may not be tainted.
+.wen
 
 
 .next
 
 
 .next
@@ -8770,6 +8787,10 @@ local host, and the second only when no primary MX target is the local host,
 but a secondary MX target is. &"Primary"& means an MX record with the lowest
 preference value &-- there may of course be more than one of them.
 
 but a secondary MX target is. &"Primary"& means an MX record with the lowest
 preference value &-- there may of course be more than one of them.
 
+.new
+The pattern may not be tainted.
+.wen
+
 The MX lookup that takes place when matching a pattern of this type is
 performed with the resolver options for widening names turned off. Thus, for
 example, a single-component domain will &'not'& be expanded by adding the
 The MX lookup that takes place when matching a pattern of this type is
 performed with the resolver options for widening names turned off. Thus, for
 example, a single-component domain will &'not'& be expanded by adding the
@@ -9238,6 +9259,8 @@ does not match the list. This may not always be what you want to happen.
 To change Exim's behaviour, the special items &`+include_unknown`& or
 &`+ignore_unknown`& may appear in the list (at top level &-- they are
 not recognized in an indirected file).
 To change Exim's behaviour, the special items &`+include_unknown`& or
 &`+ignore_unknown`& may appear in the list (at top level &-- they are
 not recognized in an indirected file).
+The effects of these special items do not propagate into referenced
+named lists.
 
 .ilist
 If any item that follows &`+include_unknown`& requires information that
 
 .ilist
 If any item that follows &`+include_unknown`& requires information that
@@ -9604,6 +9627,13 @@ longer case-independent. This does not affect the domain, which remains in
 lower case. However, although independent matches on the domain alone are still
 performed caselessly, regular expressions that match against an entire address
 become case-sensitive after &"+caseful"& has been seen.
 lower case. However, although independent matches on the domain alone are still
 performed caselessly, regular expressions that match against an entire address
 become case-sensitive after &"+caseful"& has been seen.
+The effects of &"+caseful"& propagate into any referenced named lists.
+
+.new
+This string may not be tainted.
+To do caseful matching on list elements whic are tainted,
+place them in a named list.
+.wen
 
 
 
 
 
 
@@ -9622,6 +9652,12 @@ matching in the local part list, but not elsewhere in the router. If
 &%caseful_local_part%& is set true in a router, matching in the &%local_parts%&
 option is case-sensitive from the start.
 
 &%caseful_local_part%& is set true in a router, matching in the &%local_parts%&
 option is case-sensitive from the start.
 
+.new
+This string may not be tainted.
+To do caseful matching on list elements whic are tainted,
+place them in a named list.
+.wen
+
 If a local part list is indirected to a file (see section &<<SECTfilnamlis>>&),
 comments are handled in the same way as address lists &-- they are recognized
 only if the # is preceded by white space or the start of the line.
 If a local part list is indirected to a file (see section &<<SECTfilnamlis>>&),
 comments are handled in the same way as address lists &-- they are recognized
 only if the # is preceded by white space or the start of the line.
@@ -12610,6 +12646,13 @@ this variable holds the pipe command when the transport is running.
 .vindex ATRN "data for routing"
 When an ATRN command is accepted, this variable is filled in with the client
 IP and port, for use in a manualroute router.
 .vindex ATRN "data for routing"
 When an ATRN command is accepted, this variable is filled in with the client
 IP and port, for use in a manualroute router.
+
+.vitem &$atrn_mode$&
+.vindex ATRN mode
+.vindex ODMR mode
+When in provider mode this variable will contain &"P"&.
+When in customer mode it will contain &"C"&.
+Otherwise, it will be empty.
 .wen
 
 .vitem "&$auth1$& &-- &$auth4$&"
 .wen
 
 .vitem "&$auth1$& &-- &$auth4$&"
@@ -15316,12 +15359,13 @@ non-SMTP message. See section &<<SECnonSMTP>>& for further details.
 .cindex ATRN "ACL for"
 .cindex ATRN advertisement
 .cindex "ESMTP extensions" ATRN
 .cindex ATRN "ACL for"
 .cindex ATRN advertisement
 .cindex "ESMTP extensions" ATRN
+.cindex ODMR provider
 This option defines the ACL that is run when an SMTP ATRN command is
 received.
 If no value is set, or the result after expansion is an empty string,
 then the ATRN facility is not advertised.
 See chapter &<<CHAPACL>>& for general information on ACLs,
 This option defines the ACL that is run when an SMTP ATRN command is
 received.
 If no value is set, or the result after expansion is an empty string,
 then the ATRN facility is not advertised.
 See chapter &<<CHAPACL>>& for general information on ACLs,
-and section &<<SECTATRN>>& for description of ATRN.
+and section &<<SECTODMRPRDVR>>& for description of ATRN.
 .wen
 
 .option acl_smtp_auth main string&!! unset
 .wen
 
 .option acl_smtp_auth main string&!! unset
@@ -38032,22 +38076,29 @@ for it to change them before running the command.
 
 
 .new
 
 
 .new
-.subsection "The ATRN command" SECTATRN
+.subsection "The ATRN command, and ODMR" SECTODMR
 .cindex ATRN processing
 .cindex "ESMTP extensions" ATRN
 .cindex ATRN processing
 .cindex "ESMTP extensions" ATRN
-A second method for intermittently-connecting destinations
-is specified by
+.cindex ODMR provider
+A second method for handling
+On-Demand Message Reception (ODMR)
+for intermittently-connecting destinations is specified by
 &url(https://www.rfc-editor.org/rfc/rfc2645.html,RFC 2645).
 
 This describes an ESMTP command called ATRN which requests
 &url(https://www.rfc-editor.org/rfc/rfc2645.html,RFC 2645).
 
 This describes an ESMTP command called ATRN which requests
-a swap in server/client roles of the communicating endpoints, and delivery
-of queued messages.
+a swap in server/client roles of the communicating SMTP endpoints,
+and delivery of queued messages.
 Note that this supports customers having IP addresses that
 change frequently.
 
 Note that this supports customers having IP addresses that
 change frequently.
 
-Exim supports the &"provider"& side of ATRN, using the terms
-of that specification:
-initially as an SMTP server, then transferring to an SMTP client
+Exim supports both the &"provider"& and &"customer"& sides of ODMR,
+to use the terms of that specification.
+
+. need a sub-subsection here
+.subsection "ODMR provider connection" SECTODMRPRDVR
+
+In the &"provider"& use case Exim is
+initially an SMTP server, then transferring to an SMTP client
 role if an ATRN command is accepted.
 
 .oindex "&%acl_smtp_atrn%&"
 role if an ATRN command is accepted.
 
 .oindex "&%acl_smtp_atrn%&"
@@ -38114,13 +38165,13 @@ other situations so can be safely placed in a general router chain.
 For example:
 .code
 begin routers
 For example:
 .code
 begin routers
-odmr_client:
+to_odmr_customer:
   driver =      manualroute
   route_data =  <;$atrn_host
   driver =      manualroute
   route_data =  <;$atrn_host
-  transport =   client_smtp
+  transport =   call_customer
 
 begin transports
 
 begin transports
-client_smtp:
+call_customer:
   driver =      smtp
 .endd
 
   driver =      smtp
 .endd
 
@@ -38136,6 +38187,46 @@ method be supported.
 Exim does not enforce this, but leaves it up to the configuration;
 see chapter &<<CHID9>>&.
 
 Exim does not enforce this, but leaves it up to the configuration;
 see chapter &<<CHID9>>&.
 
+
+.subsection "ODMR customer connection" SECTODMRCUST
+.cindex ODMR customer
+Exim supports the &"customer"& side of ODMR,
+with a command-line option &"-atrn"&& that requests a connection
+to a given host, issuance of an ATRN command then operation
+in SMTP server mode.
+The option must be followed by two arguments.
+
+The first is the name or IP of the provider to be contacted.
+
+The second, which may be empty, should be a comma-separated list
+of domains for which mail is to be requested.
+Interpretation of the list is up to the provider;
+an empty list is expected to result in some default being returned.
+
+The provider host is placed in &$domain$" for routing;
+router and transport must be configured suitably to make the connection.
+For example:
+.code
+begin routers
+to_odmr_provider:
+  driver =     manualroute
+  condition =  ${if eq {$atrn_mode}{C}}
+  route_data = <;$domain
+  transport =  call_provider
+
+begin transports
+call_provider:
+  driver =              smtp
+  port =                odmr
+  hosts_try_auth =     *
+  command_timeout =     10m
+.endd
+
+Note that the specification requires a long timeout for the ATRN
+command, to allow for scanning of queued messages.
+
+Configuration should also include client-side authentication
+and processing for receiving messages.
 .wen
 
 
 .wen