commit 1650e67a502cd658d2a5af9da3cc3b3ff4b51480 Author: Oswald Buddenhagen <o...@kde.org> Date: Sun Oct 3 11:53:18 2010 +0200
don't hang after failed start_tls() we'd send a LOGOUT command in plain text while the server was already expecting an encrypted command, which would typically lead to waiting for more data and thus an indefinite hang. so close the socket immediately instead of letting the normal shutdown path take care of it. inspired by a patch by Steven Flintham. src/drv_imap.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/drv_imap.c b/src/drv_imap.c index 64abbfd..757ba48 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -1388,7 +1388,7 @@ imap_open_store( store_conf_t *conf, #if HAVE_LIBSSL if (srvc->use_imaps) { if (start_tls( ctx )) - goto bail; + goto ssl_bail; use_ssl = 1; } #endif @@ -1420,7 +1420,7 @@ imap_open_store( store_conf_t *conf, if (imap_exec( ctx, 0, "STARTTLS" ) != RESP_OK) goto bail; if (start_tls( ctx )) - goto bail; + goto ssl_bail; use_ssl = 1; if (imap_exec( ctx, 0, "CAPABILITY" ) != RESP_OK) @@ -1510,6 +1510,12 @@ imap_open_store( store_conf_t *conf, cb( &ctx->gen, aux ); return; +#if HAVE_LIBSSL + ssl_bail: + /* This avoids that we try to send LOGOUT to an unusable socket. */ + close( ctx->buf.sock.fd ); + ctx->buf.sock.fd = -1; +#endif bail: imap_cancel_store( &ctx->gen ); cb( 0, aux ); ------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev _______________________________________________ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel