Both bool{} and bool_lax{} should ignore trailing whitespace.
[exim.git] / doc / doc-docbook / spec.xfpt
index dd8db236733e8bcec2c471ad6290df5452516504..837813cecbf40a849b86316e62bd5bd6d5cd9b53 100644 (file)
@@ -1,4 +1,4 @@
-. $Cambridge: exim/doc/doc-docbook/spec.xfpt,v 1.83 2010/06/07 07:09:10 pdp Exp $
+. $Cambridge: exim/doc/doc-docbook/spec.xfpt,v 1.85 2010/06/07 08:42:15 pdp Exp $
 .
 . /////////////////////////////////////////////////////////////////////////////
 . This is the primary source of the Exim Manual. It is an xfpt document that is
@@ -9802,7 +9802,7 @@ 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 whitespace is ignored.
+false if zero.  Leading and trailing whitespace is ignored.
 All other string values will result in expansion failure.
 
 When combined with ACL variables, this expansion condition will let you
@@ -9812,6 +9812,17 @@ For example:
 ${if bool{$acl_m_privileged_sender} ...
 .endd
 
+.vitem &*bool_lax&~{*&<&'string'&>&*}*&
+.cindex "expansion" "boolean parsing"
+.cindex "&%bool_lax%& expansion condition"
+Like &%bool%&, this condition turns a string into a boolean state.  But
+where &%bool%& accepts a strict set of strings, &%bool_lax%& uses the same
+loose definition that the Router &%condition%& option uses.  The empty string
+and the values &"false"&, &"no"& and &"0"& map to false, all others map to
+true.  Leading and trailing whitespace is ignored.
+
+Note that where &"bool{00}"& is false, &"bool_lax{00}"& is true.
+
 .vitem &*crypteq&~{*&<&'string1'&>&*}{*&<&'string2'&>&*}*&
 .cindex "expansion" "encrypted comparison"
 .cindex "encrypted strings, comparing"
@@ -15670,10 +15681,7 @@ If the result is any other value, the router is run (as this is the last
 precondition to be evaluated, all the other preconditions must be true).
 
 This option is unique in that multiple &%condition%& options may be present.
-In this case, the previous statement does not quite apply: the result of each
-&%condition%& option must be a string recognised by the &%bool%& expansion
-operator, or failure will be forced.  The effect is to "and" the conditions
-together, as each must pass.
+All &%condition%& options must succeed.
 
 The &%condition%& option provides a means of applying custom conditions to the
 running of routers. Note that in the case of a simple conditional expansion,
@@ -15685,10 +15693,11 @@ Because of the default behaviour of the string expansion, this is equivalent to
 .code
 condition = ${if >{$message_age}{600}{true}{}}
 .endd
-A multiple condition example:
+A multiple condition example, which succeeds:
 .code
 condition = ${if >{$message_age}{600}}
 condition = ${if !eq{${lc:$local_part}}{postmaster}}
+condition = foobar
 .endd
 If the expansion fails (other than forced failure) delivery is deferred. Some
 of the other precondition options are common special cases that could in fact