Re: Dovecot Proxy LTMP client connect to TCP port 0

2016-04-09 Thread Wido den Hollander
I looked into the further and it seems that there is no default port for LMTP in
Dovecot.

I patched the code and this seems right:
https://github.com/wido/core/commit/a5917908850eb570ca441517e6bc33f6ce63ed7a

This will make the LMTP client connect to TCP port 24 if no port has been
provided.

I will submitted it as a Pull Request on Github:
https://github.com/dovecot/core/pull/6

Wido

> Op 9 april 2016 om 11:25 schreef Wido den Hollander <w...@widodh.nl>:
> 
> 
> Hi,
> 
> I am trying to set up a Dovecot proxy which proxies through POP3, IMAP and
> LTMP
> towards a different Dovecot machine.
> 
> On the proxy machine I use a MySQL database as a userdb and passwdb backend
> and
> it returns the proper information as described here:
> http://wiki2.dovecot.org/PasswordDatabase/ExtraFields/Proxy
> 
> IMAP and POP3 works just fine, but with LMTP I run into a problem.
> 
> On the 'proxy' machine Postfix is also running and it deliver locally to LTMP
> via Socket:
> 
> virtual_transport = lmtp:unix:private/dovecot-lmtp
> 
> Dovecot there is also configured to proxy LTMP:
> 
> lmtp_proxy = yes
> 
> service lmtp {
>   unix_listener /var/spool/postfix/private/dovecot-lmtp {
> group = postfix
> mode = 0600
> user = postfix
>   }
> }
> 
> So far so good. A telnet to localhost 110 or 143 allows me to log in to the
> POP3/IMAP.
> 
> When Postfix delivers the message locally to Dovecot through LTMP it tries to
> proxy it though.
> 
> When doing so it tries to connect to TCP port 0 (zero).
> 
> dovecot: lmtp(22580): Error: lmtp client: connect(mbox01..nl, 0) failed:
> Connection refused
> 
> I know I can return the 'port' field in the userdb query, but the same query
> is
> used for POP3, IMAP and LMTP. So that can't be hardcoded.
> 
> I fixed it for now with a CASE statement in SQL:
> 
> password_query = SELECT b.hostname AS host, NULL AS password, \
>'Y' AS nopassword, u.email AS destuser, 'Y' AS proxy, \
>CASE '%s' WHEN 'lmtp' THEN 2525 WHEN 'pop3' THEN 110 WHEN 'imap' THEN
> 143
> END AS port \
> FROM User u, Backend b, Domain d \
> WHERE u.domainID = d.domainID \
> AND b.backendID = d.backendID \
> AND u.email = '%u'
> 
> %s is a variable containing the service Dovecot is trying to look up.
> 
> This is however rather hacky.
> 
> On my destination machine LMTP is listening on port 2525. Is there any way to
> tell the Dovecot LTMP client to connect to port 2525 by default?
> 
> Thanks,
> 
> Wido


Dovecot Proxy LTMP client connect to TCP port 0

2016-04-09 Thread Wido den Hollander
Hi,

I am trying to set up a Dovecot proxy which proxies through POP3, IMAP and LTMP
towards a different Dovecot machine.

On the proxy machine I use a MySQL database as a userdb and passwdb backend and
it returns the proper information as described here:
http://wiki2.dovecot.org/PasswordDatabase/ExtraFields/Proxy

IMAP and POP3 works just fine, but with LMTP I run into a problem.

On the 'proxy' machine Postfix is also running and it deliver locally to LTMP
via Socket:

virtual_transport = lmtp:unix:private/dovecot-lmtp

Dovecot there is also configured to proxy LTMP:

lmtp_proxy = yes

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
  }
}

So far so good. A telnet to localhost 110 or 143 allows me to log in to the
POP3/IMAP.

When Postfix delivers the message locally to Dovecot through LTMP it tries to
proxy it though.

When doing so it tries to connect to TCP port 0 (zero).

dovecot: lmtp(22580): Error: lmtp client: connect(mbox01..nl, 0) failed:
Connection refused

I know I can return the 'port' field in the userdb query, but the same query is
used for POP3, IMAP and LMTP. So that can't be hardcoded.

I fixed it for now with a CASE statement in SQL:

password_query = SELECT b.hostname AS host, NULL AS password, \
   'Y' AS nopassword, u.email AS destuser, 'Y' AS proxy, \
   CASE '%s' WHEN 'lmtp' THEN 2525 WHEN 'pop3' THEN 110 WHEN 'imap' THEN 143
END AS port \
FROM User u, Backend b, Domain d \
WHERE u.domainID = d.domainID \
AND b.backendID = d.backendID \
AND u.email = '%u'

%s is a variable containing the service Dovecot is trying to look up.

This is however rather hacky.

On my destination machine LMTP is listening on port 2525. Is there any way to
tell the Dovecot LTMP client to connect to port 2525 by default?

Thanks,

Wido