(Everything herein refers to dovecot-1.0.1.)
I'm sorry to say that I've been having troubles with dovecot. While attempting to troubleshoot them, I've found the existing logs to be lacking.
In particular, I've had a lot of difficulty with the client<->server connection disconnecting, but the only message I get in the logs is "Disconnected". After dissecting the code a bit, I've found quite a number of places where the code will close the connection logging nothing more than the word "Disconnected", or worse, it will not specify a reason in which case the code in client_destroy() will log the default "Disconnected". Because of this, isolating the offending code has been a bit difficult. (I realize the problem may lie with the client, but I cannot even begin to program a work around until I isolate the exact place and cause of failure.)
In an attempt to change the logging to be more descriptive myself, I already changed src/imap/cmd-fetch.c:85 on my own copy of dovecot from: client_disconnect(cmd->client, "Disconnected"); to: client_disconnect(cmd->client, "Disconnected in FETCH"); This makes the logging both more descriptive and more in line with other parts of code, like src/imap/cmd-append.c:50 which already say: client_destroy(client, "Disconnected in APPEND");
As luck would have it, my problem was not in the FETCH command.
I'm now looking at the client_read() function in src/imap-login/client.c:318-334. If I'm reading the code right, then "i_stream_read(client->input)" returning "-1" means that the socket/stream is already disconnected, right? In other words, some function attempted to read off of a socket/stream that was already closed, right? If so, shouldn't the client_read() function not have been called in the first place?
Please let me know if I'm wrong. I've been banging my head against the wall trying to make sense of all the different code. Any assistance you can offer would be appreciated.
Joseph D. Wagner