Document match_*/inlist changes (before coding starts)
[exim.git] / doc / doc-docbook / spec.xfpt
index 7a3cc8dd614278a08eb8498313a02eef5058021e..128329ef2d792b35c36034f6e891e134070381a9 100644 (file)
@@ -468,10 +468,10 @@ first to check that you are not duplicating a previous entry.
 The following Exim mailing lists exist:
 
 .table2 140pt
 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-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
 .endtable
 
 You can subscribe to these lists, change your existing subscriptions, and view
@@ -10079,6 +10079,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.
 
 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'&>&*}*&
 .vitem &*isip&~{*&<&'string'&>&*}*&  &&&
        &*isip4&~{*&<&'string'&>&*}*& &&&
        &*isip6&~{*&<&'string'&>&*}*&
@@ -10265,6 +10284,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.
 
 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
 &*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
@@ -14169,6 +14193,10 @@ probably safest to just set it to a little larger than this value.  Eg, with a
 default Exim message size of 50M and a default ClamAV StreamMaxLength of 10M,
 some problems may result.
 
 default Exim message size of 50M and a default ClamAV StreamMaxLength of 10M,
 some problems may result.
 
+A value of 0 will disable size limit checking; Exim will still advertise the
+SIZE extension in an EHLO response, but without a limit, so as to permit
+SMTP clients to still indicate the message size along with the MAIL verb.
+
 
 .option move_frozen_messages main boolean false
 .cindex "frozen messages" "moving"
 
 .option move_frozen_messages main boolean false
 .cindex "frozen messages" "moving"
@@ -27345,7 +27373,7 @@ checks.
 
 The &%per_*%& options described above do not make sense in some ACLs. If you
 use a &%per_*%& option in an ACL where it is not normally permitted then the
 
 The &%per_*%& options described above do not make sense in some ACLs. If you
 use a &%per_*%& option in an ACL where it is not normally permitted then the
-update mode defaults to &%readonly%& and you cannot specify the &%strict&% or
+update mode defaults to &%readonly%& and you cannot specify the &%strict%& or
 &%leaky%& modes. In other ACLs the default update mode is &%leaky%& (see the
 next section) so you must specify the &%readonly%& option explicitly.
 
 &%leaky%& modes. In other ACLs the default update mode is &%leaky%& (see the
 next section) so you must specify the &%readonly%& option explicitly.
 
@@ -27399,7 +27427,7 @@ go over the limit is not added to the set, in the same way that the client's
 recorded rate is not updated in the same situation.
 
 When you combine the &%unique=%& and &%readonly%& options, the specific
 recorded rate is not updated in the same situation.
 
 When you combine the &%unique=%& and &%readonly%& options, the specific
-%&unique=%& value is ignored, and Exim just retrieves the client's stored
+&%unique=%& value is ignored, and Exim just retrieves the client's stored
 rate.
 
 The &%unique=%& mechanism needs more space in the ratelimit database than the
 rate.
 
 The &%unique=%& mechanism needs more space in the ratelimit database than the