X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Ftls-gnu.c;h=10bfaca32ecf888f9c1e65ecf1ff13fe66c872b7;hb=7495ef81389e682f08d57d40df1b7e852d4cdcc8;hp=7ddd7a7248c6b4b447ebe7412853a3456c32323e;hpb=f5d25c2b47ab0070114d211f0ed5e085aa87dc64;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/tls-gnu.c b/src/src/tls-gnu.c index 7ddd7a724..10bfaca32 100644 --- a/src/src/tls-gnu.c +++ b/src/src/tls-gnu.c @@ -1827,13 +1827,18 @@ if (rc != GNUTLS_E_SUCCESS) until the server times out. */ if (sigalrm_seen) + { tls_error(US"gnutls_handshake", "timed out", NULL); + gnutls_db_remove_session(state->session); + } else { tls_error(US"gnutls_handshake", gnutls_strerror(rc), NULL); (void) gnutls_alert_send_appropriate(state->session, rc); + gnutls_deinit(state->session); + gnutls_certificate_free_credentials(state->x509_cred); millisleep(500); - shutdown(state->fd_in, SHUT_WR); + shutdown(state->fd_out, SHUT_WR); for (rc = 1024; fgetc(smtp_in) != EOF && rc > 0; ) rc--; /* drain skt */ (void)fclose(smtp_out); (void)fclose(smtp_in); @@ -2121,11 +2126,13 @@ if (!state->tlsp || state->tlsp->active < 0) return; /* TLS was not active */ if (shutdown) { - DEBUG(D_tls) debug_printf("tls_close() from '%s': shutting down TLS\n"); + DEBUG(D_tls) debug_printf("tls_close(): shutting down TLS\n"); gnutls_bye(state->session, GNUTLS_SHUT_WR); } gnutls_deinit(state->session); +gnutls_certificate_free_credentials(state->x509_cred); + state->tlsp->active = -1; memcpy(state, &exim_gnutls_state_init, sizeof(exim_gnutls_state_init)); @@ -2195,6 +2202,8 @@ if (state->xfer_buffer_lwm >= state->xfer_buffer_hwm) receive_smtp_buffered = smtp_buffered; gnutls_deinit(state->session); + gnutls_certificate_free_credentials(state->x509_cred); + state->session = NULL; state->tlsp->active = -1; state->tlsp->bits = 0;