diff --git a/src/drv_imap.c b/src/drv_imap.c index 4bc2fcc..5d77f08 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -1992,6 +1992,8 @@ imap_open_store_authenticate2( imap_store_t *ctx ) rc = sasl_client_new( "imap", srvc->sconf.host, NULL, NULL, NULL, 0, &ctx->sasl ); if (rc != SASL_OK) { + if (rc == SASL_NOMECH) + goto notsasl; if (!ctx->sasl) goto saslbail; error( "Error: %s\n", sasl_errdetail( ctx->sasl ) ); @@ -1999,6 +2001,8 @@ imap_open_store_authenticate2( imap_store_t *ctx ) } rc = sasl_client_start( ctx->sasl, saslmechs + 1, &interact, CAP(SASLIR) ? &out : NULL, &out_len, &gotmech ); + if (rc == SASL_NOMECH) + goto notsasl; if (gotmech) info( "Authenticating with SASL mechanism %s...\n", gotmech ); /* Technically, we are supposed to loop over sasl_client_start(), @@ -2017,6 +2021,8 @@ imap_open_store_authenticate2( imap_store_t *ctx ) imap_exec( ctx, cmd, done_sasl_auth, enc ? "AUTHENTICATE %s %s" : "AUTHENTICATE %s", gotmech, enc ); free( enc ); return; + notsasl: + sasl_dispose( &ctx->sasl ); } #endif if (auth_login) {