Timo, How do you feel about parent pointers in child structures? I'm curious as the proxy structure is passed the input channel, but it doesn't know much else about the input client. Rather than pass additional information in the structure, I think it'd be better to just place a pointer back to the input client so we can access all it's details. I ask, as that might solve the problem of lack of information in logging from some of the various functions in the proxy code. I know I was limited in the quick patch I did below for my own use. I'm afraid to change it too much. You have already started xclient work in v2.2 which would necessitate a lot of changes to the lmtp/proxy code. I've actually debated backporting it to 2.1 for my own use. :) Jack On 10/15/2012 3:10 PM, Jack Bates wrote:
On 10/15/2012 2:07 PM, Jack Bates wrote:
On 10/12/2012 2:40 AM, Timo Sirainen wrote:
would probably complicate the code. I don't think this would be difficult to implement. Probably just a few lines of code. Yeah, could be useful.
If there's no argument over the last email, confirm and check this patch. It's not the overall logging I would like, but the lmtp code isn't as mature as pop3/imap and the proxy is a quick and dirty on the lmtp code. Both need a good revamp, preferably with x-session support and perhaps logging rip/lip similar to how we do pop3/imap logins.
I think we should also work on adjusting all logging for services using x-session to also log the proxy ip. rip,lip,pip. As I get time I'll look at it.
This patch is just to keep us from having no useful logging in lmtp proxy. Based on lmtp pid, one can at least follow the connect, the proxy replies, and the disconnect of a session.
--- dovecot-2.1.10/src/lmtp/lmtp-proxy.c 2012-10-12 19:46:49.688952484 +0000 +++ dovecot-2.1.10/src/lmtp/lmtp-proxy.c-new 2012-10-12 19:48:51.751932325 +0000 @@ -160,6 +160,8 @@ static bool lmtp_proxy_send_data_replies break; o_stream_send_str(proxy->client_output, t_strconcat(rcpt[i]->reply, "\r\n", NULL)); + i_info("proxy(%s): proxy host=%s: status=%s",rcpt[i]->address, + rcpt[i]->conn->set.host,rcpt[i]->reply); } o_stream_uncork(proxy->client_output); proxy->next_data_reply_idx = i;