Re: [exim] server_condition not honoured in authenticators?

Top Page
Delete this message
Reply to this message
Author: Phil Pennock
Date:  
To: persson
CC: exim-users
Subject: Re: [exim] server_condition not honoured in authenticators?
On 2009-10-11 at 17:03 +0100, persson wrote:
> This is probably due to my newbieness, but anyway.


No, it's a subtle mistake and the debugging could be doing more to
highlight it.

You don't note the version of Exim -- please do note it, since this
logic has changed in 4.64 and a major Linux OS still ships 4.63 and
various downstreams of that project are still on 4.63. In this case, I
don't think it matters.

>   734 lookup yielded: blah
>   734 expanding: ${lookup{${local_part:$auth1}}lsearch{/etc/special/${domain:
> $auth1}}}
>   734    result: blah
>   734 condition: eq{$auth2}{${lookup{${local_part:
> $auth1}}lsearch{/etc/special/${domain:$auth1}}}}
>   734    result: true
>   734 expanding: 1
>   734    result: 1


>   734 skipping: result is not used
>   734 expanding: ${if match_domain{${domain:$auth1}}{+special_domains} {${if 
> eq{$auth2}{${lookup{${local_part:$auth1}}lsearch{/etc/special/${domain:
> $auth1}}}}{1}{0}} } {${if eq{$auth2}{a}{1}{0}}} }
>   734    result: 1 
>   734 expanded string: 1 
>   734 expanding: $auth1
>   734    result: user2@???
>   734 SMTP>> 435 Unable to authenticate at present: 1 


I think that this is the string "1 " instead of "1".

When reading the configuration file, Exim strips off leading and
trailing whitespace. But if you explicitly include whitespace in an
expansion, it's preserved -- you've defined it as part of the data. And
"1 " != "1".

It's unfortunate that this is not made clear in the debugging output.

Looking again at your two server_condition rules, we see:

----------------------------8< cut here >8------------------------------
server_condition = ${if match_domain{${domain:$auth1}}{+special_domains} \
        {${if eq{$auth2}{${lookup{${local_part:$auth1}}lsearch{/etc/special/${domain:$auth1}}}}{1}{0}} } \
        {${if eq{$auth2}{a}{1}{0}}} \
        }


server_condition = ${if match_domain{${domain:$auth1}}{+special_domains} \
        {${lookup{${local_part:$auth1}}lsearch{/etc/special/${domain:$auth1}} \
            {${if eq {$auth2}{$value}{1}{0}}}{0}} } \
        { ${if  eq{$auth2}{a}{1}{0}} } \
        }
----------------------------8< cut here >8------------------------------


Note that the form is:
${if CONDITION {TRUTH_TEXT}{FALSEHOOD_TEXT}}

So you have a {TRUTH_TEXT} for the first case of:
{${if eq{$auth2}{${lookup{${local_part:$auth1}}lsearch{/etc/special/${domain:$auth1}}}}{1}{0}} }
and similarly for the second case.

So you have:
{${if .....} }
and so you've explicitly added a space into the text after the ${if ...}
expansion.

Remove the space, all should be well.

Regards,
-Phil