Ilja Booij wrote:

I wonder how this happens. I haven't been able to reproduce this. Paul
(J Stevens), you've done some stuff in IMAP wrt a similar problem, do
you have any clue? The client in this case is Postfix/lmtp

Ilja,

Basically, dbmail kept writing to ci->tx even though the client had started closing the socket. This in turn triggered a RSET in the client which was pretty much ignored by dbmail. Perhaps something has triggered the postfix end to close, but the dbmail-lmtpd doesn't detect the state of the socket properly.

A quick glance at the lmtp.c code shows that the ci_write wrapper isn't used there, and the state of ci->tx isn't checked at all before a write. Naughty.

I guess ci_write can safely be moved from imaputils.c to clientinfo.h which is probably the logical place anyway. After that all write actions on the socket should use this wrapper and return on error.

That fixed all socket problems in the imap code anyway.

I'm not familiar with lmtp (yet), and haven't got the time to dive in now. Hope 
this helps though.



--
  ________________________________________________________________
  Paul Stevens                                  mailto:[EMAIL PROTECTED]
  NET FACILITIES GROUP                     PGP: finger [EMAIL PROTECTED]
  The Netherlands________________________________http://www.nfg.nl

Reply via email to