Fix conditional "bool{<string>}" for negative number values, to match.
.cindex "&%bool%& expansion condition"
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,
+(case-insensitively); also integer numbers map to true if non-zero,
false if zero.
An empty string is treated as false.
Leading and trailing whitespace is ignored;
JH/09 Bugzilla 1431: Support (with limitations) headers_add/headers_remove in
routers/transports under cutthrough routing.
+JH/10 Bugzilla 1005: ACL "condition =" should accept values which are negative
+ numbers. Touch up "bool" conditional to keep the same definition.
+
Exim version 4.82
-----------------
/* The true/false parsing here should be kept in sync with that used in
expand.c when dealing with ECOND_BOOL so that we don't have too many
different definitions of what can be a boolean. */
- if (Ustrspn(arg, "0123456789") == Ustrlen(arg)) /* Digits, or empty */
+ if (*arg == '-'
+ ? Ustrspn(arg+1, "0123456789") == Ustrlen(arg+1) /* Negative number */
+ : Ustrspn(arg, "0123456789") == Ustrlen(arg)) /* Digits, or empty */
rc = (Uatoi(arg) == 0)? FAIL : OK;
else
rc = (strcmpic(arg, US"no") == 0 ||
be no maintenance burden from replicating it. */
if (len == 0)
boolvalue = FALSE;
- else if (Ustrspn(t, "0123456789") == len)
+ else if (*t == '-'
+ ? Ustrspn(t+1, "0123456789") == len-1
+ : Ustrspn(t, "0123456789") == len)
{
boolvalue = (Uatoi(t) == 0) ? FALSE : TRUE;
/* expand_check_condition only does a literal string "0" check */
1999-03-02 09:44:33 10HmbK-0005vi-00 => cond-yes <cond-yes@test.ex> R=r1 T=t1
1999-03-02 09:44:33 10HmbK-0005vi-00 Completed
1999-03-02 09:44:33 H=[56.56.57.57] U=CALLER F=<userx@test.ex> temporarily rejected RCPT <cond-rhubarb@test.ex>: invalid "condition" value "rhubarb"
-1999-03-02 09:44:33 10HmbL-0005vi-00 <= userx@test.ex H=[56.56.56.56] U=CALLER P=smtp S=sss
-1999-03-02 09:44:33 10HmbL-0005vi-00 => cond-rhubarb <cond-rhubarb@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 10HmbL-0005vi-00 <= userx@test.ex H=[56.56.57.57] U=CALLER P=smtp S=sss
+1999-03-02 09:44:33 10HmbL-0005vi-00 => cond--1 <cond--1@test.ex> R=r1 T=t1
1999-03-02 09:44:33 10HmbL-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbM-0005vi-00 <= userx@test.ex H=[56.56.56.56] U=CALLER P=smtp S=sss
+1999-03-02 09:44:33 10HmbM-0005vi-00 => cond-rhubarb <cond-rhubarb@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 10HmbM-0005vi-00 Completed
1999-03-02 09:44:33 H=[56.56.58.58] U=CALLER F=<rcpttest@test.ex> rejected RCPT <bad1@test.ex>
1999-03-02 09:44:33 H=[56.56.58.58] U=CALLER F=<rcpttest@test.ex> rejected RCPT <bad2@test.ex>
1999-03-02 09:44:33 H=[56.56.58.58] U=CALLER F=<rcpttest@test.ex> rejected RCPT <bad3@test.ex>
-1999-03-02 09:44:33 10HmbM-0005vi-00 <= rcpttest@test.ex H=[56.56.58.58] U=CALLER P=smtp S=sss
-1999-03-02 09:44:33 10HmbM-0005vi-00 => ok1 <ok1@test.ex> R=r0 T=t2
-1999-03-02 09:44:33 10HmbM-0005vi-00 -> ok2 <ok2@test.ex> R=r0 T=t2
-1999-03-02 09:44:33 10HmbM-0005vi-00 -> ok3 <ok3@test.ex> R=r0 T=t2
-1999-03-02 09:44:33 10HmbM-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbN-0005vi-00 <= rcpttest@test.ex H=[56.56.58.58] U=CALLER P=smtp S=sss
+1999-03-02 09:44:33 10HmbN-0005vi-00 => ok1 <ok1@test.ex> R=r0 T=t2
+1999-03-02 09:44:33 10HmbN-0005vi-00 -> ok2 <ok2@test.ex> R=r0 T=t2
+1999-03-02 09:44:33 10HmbN-0005vi-00 -> ok3 <ok3@test.ex> R=r0 T=t2
+1999-03-02 09:44:33 10HmbN-0005vi-00 Completed
1999-03-02 09:44:33 H=[56.56.59.59] U=CALLER F=<rcpttest@test.ex> rejected RCPT <fail@test.ex>: here is a fail message
1999-03-02 09:44:33 H=[V4NET.11.12.13] U=CALLER F=<x@y> rejected RCPT <x@y>: DNSLIST (rbl.test.ex: This is a test blacklisting message)
1999-03-02 09:44:33 H=[V4NET.11.12.13] U=CALLER F=<x@y> rejected RCPT <x1@y>: DNSLIST (rbl.test.ex: This is a test blacklisting message)
--- /dev/null
+From userx@test.ex Tue Mar 02 09:44:33 1999
+Received: from [56.56.57.57] (ident=CALLER)
+ by myhost.test.ex with smtp (Exim x.yz)
+ (envelope-from <userx@test.ex>)
+ id 10HmbL-0005vi-00
+ for cond--1@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+X-message-body-size: 0
+
+
Received: from [56.56.56.56] (ident=CALLER)
by myhost.test.ex with smtp (Exim x.yz)
(envelope-from <userx@test.ex>)
- id 10HmbL-0005vi-00
+ id 10HmbM-0005vi-00
for cond-rhubarb@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
X-message-body-size: 0
Received: from [56.56.58.58] (ident=CALLER)
by myhost.test.ex with smtp (Exim x.yz)
(envelope-from <rcpttest@test.ex>)
- id 10HmbM-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
+ id 10HmbN-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
xx: rcpt_count = 1
rcpt_defer_count = 0
rcpt_fail_count = 0
" yes" ${if bool{ yes}{true}{false}} EXPECT: true
" no" ${if bool{ no}{true}{false}} EXPECT: false
"yes " ${if bool{yes }{true}{false}} EXPECT: true
-"-1" ${if bool{-1}{true}{false}} EXPECT: error
+"-1" ${if bool{-1}{true}{false}} EXPECT: true
"0" ${if bool{0}{true}{false}} EXPECT: false
"1" ${if bool{1}{true}{false}} EXPECT: true
" 0 " ${if bool{ 0 }{true}{false}} EXPECT: false
" " ${if bool{ }{true}{false}} EXPECT: false
"text" ${if bool{text}{true}{false}} EXPECT: error
" text" ${if bool{ text}{true}{false}} EXPECT: error
+"-text" ${if bool{-text}{true}{false}} EXPECT: error
"text " ${if bool{text }{true}{false}} EXPECT: error
" text " ${if bool{ text }{true}{false}} EXPECT: error
"00" ${if bool{00}{true}{false}} EXPECT: false
.
mail from:<userx@test.ex>
rcpt to:<cond-rhubarb@test.ex>
+rset
+mail from:<userx@test.ex>
+rcpt to:<cond--1@test.ex>
+data
+.
quit
****
exim -DLOG_SELECTOR=log_selector=-acl_warn_skipped -odi -bs -oMa 56.56.56.56
> " yes" true EXPECT: true
> " no" false EXPECT: false
> "yes " true EXPECT: true
-> Failed: unrecognised boolean value "-1"
+> "-1" true EXPECT: true
> "0" false EXPECT: false
> "1" true EXPECT: true
> " 0 " false EXPECT: false
> " " false EXPECT: false
> Failed: unrecognised boolean value "text"
> Failed: unrecognised boolean value "text"
+> Failed: unrecognised boolean value "-text"
> Failed: unrecognised boolean value "text"
> Failed: unrecognised boolean value "text"
> "00" false EXPECT: false
250 OK id=10HmbK-0005vi-00\r
250 OK\r
451 Temporary local problem - please try later\r
+250 Reset OK\r
+250 OK\r
+250 accepted by condition\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmbL-0005vi-00\r
221 myhost.test.ex closing connection\r
220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
250 OK\r
250 Accepted\r
354 Enter message, ending with "." on a line by itself\r
-250 OK id=10HmbL-0005vi-00\r
+250 OK id=10HmbM-0005vi-00\r
221 myhost.test.ex closing connection\r
220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
250 OK\r
550 Administrative prohibition\r
550 Administrative prohibition\r
354 Enter message, ending with "." on a line by itself\r
-250 OK id=10HmbM-0005vi-00\r
+250 OK id=10HmbN-0005vi-00\r
221 myhost.test.ex closing connection\r
220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
250 OK\r