Re: [exim] Different password for remote SMTP relay

Top Page
Delete this message
Reply to this message
Author: Mike Brudenell
Date:  
To: Jacob Hansen
CC: exim-users
Subject: Re: [exim] Different password for remote SMTP relay
Hi, Jacob -

*Disclaimer:* I've not used this myself, so this is hypothesis but worth a
try…

On 26 November 2015 at 20:04, Jacob Hansen <jacob@???> wrote:

> I then tried following setup in the remote_login section:
>
>     remote_login:
>       driver = plaintext
>       public_name = LOGIN
>       hide client_send =
> ${lookup{$authenticated_id}lsearch{/etc/differentlogin}{:
> different_username : different_passsword}{: remote_username :
> remote_password}

>
> However this gives me the following EXIM error when attempting to send
> e-mails:
>
>       == to@??? R=remote_route T=remote_transport defer (-48):
> expansion of "${lookup{$authenticated_id}lsearch{/etc/differentlogin}{"
> failed in mandrill_login authenticator: missing } at end of string

>


You need to add the closing "}" to match the opening "${" of the lookup,
otherwise the line is syntactically incorrect. Always check your braces
balance.



> Adding another } as suggest, i.e
> |
> ||    hide client_send =
> ${lookup{$authenticated_id}lsearch{/etc/differentlogin}}{:
> different_username : different_passsword}{: remote_username :
> remote_password}

>
> gives me failed login (the login details are correct, but maybe an
> additional } is added to the login instructions or something):
>
>     SMTP<< 435 4.7.8 Error: authentication failed:|

>


By adding the closing "}" you've got the line syntactically correct but
it's not working as you expect.

I think you're trying to do something that the Exim Specification says you
can't… you're trying using a single lookup to generate a single
colon-separated string and then expecting Exim to split this into its
component parts.

But if you read the *Using plaintext in a client* section of the
Specification you'll see

Note: You cannot use expansion to create multiple strings, because
splitting takes priority and happens first.


The value of client-send is a number of strings in a colon-separated list,
and parsing the line/splitting it at the colons happens *before* the string
expansion. So I suspect you'll need to use a separate lookup to generate
each string in turn. For example…

hide client_send = ${lookup{$authenticated_id}lsearch{/etc/differentlogin}{:
different_username : different_passsword}{: remote_username :
remote_password}

hide client_send = : ${lookup{$authenticated_id}lse
arch{/etc/differentlogin}{different_username}} :
${lookup{$authenticated_id}lsearch{/etc/differentlogin}{different_password}}


If you might want to use different username/password pairs based on the
username matched in /etc/differentlogin you could probably do something
funky by putting the username/password pair in the file as the value of the
entry with a separator character. (Properly securing the file of course!)

In each of the two lookups above you could then split the value at the
separator character and use the first element as the username and the
second for the password.

You'd have to weigh the merits/security/safety of storing passwords in a
file though, and also be careful to choose a separator character for the
username/password pair that can never appear in either!

Cheers,
Mike B-)

--
Systems Administrator & Change Manager
IT Services, University of York, Heslington, York YO10 5DD, UK
Tel: +44-(0)1904-323811

Web: www.york.ac.uk/it-services
Disclaimer: www.york.ac.uk/docs/disclaimer/email.htm