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 );