Documentation for $tls_bits and SASL changes
[exim.git] / doc / doc-docbook / spec.xfpt
index 1c3e43492b4be550c05f53953089ac1d3c5ae8ad..5ae4f76498b4c8cd0d37812cff7cc054c2fa990c 100644 (file)
@@ -46,7 +46,7 @@
 . /////////////////////////////////////////////////////////////////////////////
 
 .set previousversion "4.75"
-.set version "4.76"
+.set version "4.77"
 
 .set ACL "access control lists (ACLs)"
 .set I   "    "
 <author><firstname>Exim</firstname><surname>Maintainers</surname></author>
 <authorinitials>EM</authorinitials>
 <revhistory><revision>
-  <revnumber>4.76</revnumber>
-  <date>06 May 2011</date>
+  <revnumber>4.77</revnumber>
+  <date>10 Oct 2011</date>
   <authorinitials>EM</authorinitials>
 </revision></revhistory>
 <copyright><year>2011</year><holder>University of Cambridge</holder></copyright>
@@ -468,10 +468,10 @@ first to check that you are not duplicating a previous entry.
 The following Exim mailing lists exist:
 
 .table2 140pt
+.row &'exim-announce@exim.org'&   "Moderated, low volume announcements list"
 .row &'exim-users@exim.org'&      "General discussion list"
 .row &'exim-dev@exim.org'&        "Discussion of bugs, enhancements, etc."
-.row &'exim-announce@exim.org'&   "Moderated, low volume announcements list"
-.row &'exim-future@exim.org'&     "Discussion of long-term development"
+.row &'exim-cvs@exim.org'&        "Automated commit messages from the VCS"
 .endtable
 
 You can subscribe to these lists, change your existing subscriptions, and view
@@ -7779,7 +7779,7 @@ pattern must be an appropriate query for the lookup type, as described in
 chapter &<<CHAPfdlookup>>&. For example:
 .code
 hold_domains = mysql;select domain from holdlist \
-  where domain = '$domain';
+  where domain = '${quote_mysql:$domain}';
 .endd
 In most cases, the data that is looked up is not used (so for an SQL query, for
 example, it doesn't matter what field you select). Exim is interested only in
@@ -9871,7 +9871,10 @@ zero.
 This condition turns a string holding a true or false representation into
 a boolean state.  It parses &"true"&, &"false"&, &"yes"& and &"no"&
 (case-insensitively); also positive integer numbers map to true if non-zero,
-false if zero.  Leading and trailing whitespace is ignored.
+false if zero.
+An empty string is treated as false.
+Leading and trailing whitespace is ignored;
+thus a string consisting only of whitespace is false.
 All other string values will result in expansion failure.
 
 When combined with ACL variables, this expansion condition will let you
@@ -10079,6 +10082,25 @@ string is lexically greater than the second string. For &%gt%& the comparison
 includes the case of letters, whereas for &%gti%& the comparison is
 case-independent.
 
+.new
+.vitem &*inlist&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*& &&&
+       &*inlisti&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
+.cindex "string" "comparison"
+.cindex "list" "iterative conditions"
+Both strings are expanded; the second string is treated as a list of simple
+strings; if the first string is a member of the second, then the condition
+is true.
+
+These are simpler to use versions of the more powerful &*forany*& condition.
+Examples, and the &*forany*& equivalents:
+.code
+${if inlist{needle}{foo:needle:bar}}
+  ${if forany{foo:needle:bar}{eq{$item}{needle}}}
+${if inlisti{Needle}{fOo:NeeDLE:bAr}}
+  ${if forany{fOo:NeeDLE:bAr}{eqi{$item}{Needle}}}
+.endd
+.wen
+
 .vitem &*isip&~{*&<&'string'&>&*}*&  &&&
        &*isip4&~{*&<&'string'&>&*}*& &&&
        &*isip6&~{*&<&'string'&>&*}*&
@@ -10189,10 +10211,12 @@ See &*match_local_part*&.
 
 .vitem &*match_ip&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
 .cindex "&%match_ip%& expansion condition"
+.new
 This condition matches an IP address to a list of IP address patterns. It must
 be followed by two argument strings. The first (after expansion) must be an IP
-address or an empty string. The second (after expansion) is a restricted host
+address or an empty string. The second (not expanded) is a restricted host
 list that can match only an IP address, not a host name. For example:
+.wen
 .code
 ${if match_ip{$sender_host_address}{1.2.3.4:5.6.7.8}{...}{...}}
 .endd
@@ -10238,6 +10262,11 @@ just as easy to use the fact that a lookup is itself a condition, and write:
 .endd
 .endlist ilist
 
+.new
+Note that <&'string2'&> is not itself subject to string expansion, unless
+Exim was built with the EXPAND_LISTMATCH_RHS option.
+.wen
+
 Consult section &<<SECThoslispatip>>& for further details of these patterns.
 
 .vitem &*match_local_part&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
@@ -10265,6 +10294,11 @@ item can be used, as in all address lists, to cause subsequent items to
 have their local parts matched casefully. Domains are always matched
 caselessly.
 
+.new
+Note that <&'string2'&> is not itself subject to string expansion, unless
+Exim was built with the EXPAND_LISTMATCH_RHS option.
+.wen
+
 &*Note*&: Host lists are &'not'& supported in this way. This is because
 hosts have two identities: a name and an IP address, and it is not clear
 how to specify cleanly how such a test would work. However, IP addresses can be
@@ -10632,7 +10666,7 @@ number of lines in the message's body. See also &$message_linecount$&.
 .cindex "binary zero" "in message body"
 .vindex "&$body_zerocount$&"
 When a message is being received or delivered, this variable contains the
-number of binary zero bytes in the message's body.
+number of binary zero bytes (ASCII NULs) in the message's body.
 
 .vitem &$bounce_recipient$&
 .vindex "&$bounce_recipient$&"
@@ -11750,6 +11784,16 @@ command in a filter file. Its use is explained in the description of that
 command, which can be found in the separate document entitled &'Exim's
 interfaces to mail filtering'&.
 
+.new
+.vitem &$tls_bits$&
+.vindex "&$tls_bits$&"
+Contains an approximation of the TLS cipher's bit-strength; the meaning of
+this depends upon the TLS implementation used.
+If TLS has not been negotiated, the value will be 0.
+The value of this is automatically fed into the Cyrus SASL authenticator
+when acting as a server, to specify the "external SSF" (a SASL term).
+.wen
+
 .vitem &$tls_certificate_verified$&
 .vindex "&$tls_certificate_verified$&"
 This variable is set to &"1"& if a TLS certificate was verified when the
@@ -13042,7 +13086,7 @@ section &<<SECTcallvercache>>& for details of the caching.
 This option defines the &"random"& local part that can be used as part of
 callout verification. The default value is
 .code
-$primary_host_name-$tod_epoch-testing
+$primary_hostname-$tod_epoch-testing
 .endd
 See section &<<CALLaddparcall>>& for details of how this value is used.
 
@@ -24595,8 +24639,14 @@ DHE_DSS). The default list contains RSA, DHE_DSS, DHE_RSA.
 For &%gnutls_require_mac%&, the recognized names are SHA (synonym SHA1), and
 MD5. The default list contains SHA, MD5.
 
-For &%gnutls_require_protocols%&, the recognized names are TLS1 and SSL3.
-The default list contains TLS1, SSL3.
+.new
+For &%gnutls_require_protocols%&, the recognized names are TLS1.2, TLS1.1,
+TLS1.0, (TLS1) and SSL3.
+The default list contains TLS1.2, TLS1.1, TLS1.0, SSL3.
+TLS1 is an alias for TLS1.0, for backwards compatibility.
+For sufficiently old versions of the GnuTLS library, TLS1.2 or TLS1.1 might
+not be supported and will not be recognised by Exim.
+.wen
 
 In a server, the order of items in these lists is unimportant. The server
 advertises the availability of all the relevant cipher suites. However, in a
@@ -27739,7 +27789,7 @@ check for a &"random"& local part at the same domain. The local part is not
 really random &-- it is defined by the expansion of the option
 &%callout_random_local_part%&, which defaults to
 .code
-$primary_host_name-$tod_epoch-testing
+$primary_hostname-$tod_epoch-testing
 .endd
 The idea here is to try to determine whether the remote host accepts all local
 parts without checking. If it does, there is no point in doing callouts for
@@ -34999,7 +35049,7 @@ integer size comparisons against this value.
 A colon-separated list of names of headers included in the signature.
 .vitem &%$dkim_key_testing%&
 "1" if the key record has the "testing" flag set, "0" if not.
-.vitem &%$dkim_key_nosubdomaining%&
+.vitem &%$nosubdomains%&
 "1" if the key record forbids subdomaining, "0" otherwise.
 .vitem &%$dkim_key_srvtype%&
 Service type (tag s=) from the key record. Defaults to "*" if not specified