Re: [exim] problem with condition an lookup

Top Page
Delete this message
Reply to this message
Author: Phil Pennock
Date:  
To: Pascal Bourdais
CC: exim-users
Subject: Re: [exim] problem with condition an lookup
On 2009-09-01 at 12:29 +0200, Pascal Bourdais wrote:
> exim -bem /tmp/test.eml '${if
>    and {
>       { ${lookup ldap {ldap:///ou=cer5372,dc=infagri,dc=laval?mail?sub?(mail=pbourdais@???)}{true}{false} } }
>       { ! def:h_X-From71:}
>    }
> {true}{false}
> }'
> Return-path taken from "Return-path:" header line
> Failed: condition name expected, but found "${lookup ldap {l" inside "and{...}" condition


Okay, this at least has the right number of braces.

${lookup ...} returns a string. A string is not a condition value.
Confusingly, the "condition = XYZ" rule interprets a string to make a
boolean condition value, but ${if XYZ} does not. XYZ here, or inside
the branches of and{{cond1}{cond2}} must be something that "is" a true
false value.

If you wrap something which returns strings "true"/"false" in an eq{}{}
test for comparing to the string "true", you'll get a boolean value.

This is one of the most confusing points of Exim and keeps tripping
people up. I missed it in the first skim over your mail because I
focused on the obvious syntax error of too many braces.

${if and{\
{eq{${lookup ldap {LDAP_QUERY}{true}{false}}}{true}}\
{!def:h_X-From71:}\
}}

where LDAP_QUERY is:
ldap:///ou=cer5372,dc=infagri,dc=laval?mail?sub?(mail=pbourdais@???)

-Phil