diff options
-rw-r--r-- | src/libwaitress/waitress.c | 16 | ||||
-rw-r--r-- | src/libwaitress/waitress.h | 1 |
2 files changed, 11 insertions, 6 deletions
diff --git a/src/libwaitress/waitress.c b/src/libwaitress/waitress.c index 8b6daa8..1a6d4cd 100644 --- a/src/libwaitress/waitress.c +++ b/src/libwaitress/waitress.c @@ -61,12 +61,12 @@ void WaitressInit (WaitressHandle_t *waith, const char *caPath) { memset (waith, 0, sizeof (*waith)); waith->timeout = 30000; #ifdef ENABLE_TLS - gnutls_certificate_allocate_credentials (&waith->tlsCred); - if (caPath == NULL) { - caPath = "/etc/ssl/certs/ca-certificates.crt"; + if (caPath != NULL) { + gnutls_certificate_allocate_credentials (&waith->tlsCred); + gnutls_certificate_set_x509_trust_file (waith->tlsCred, caPath, + GNUTLS_X509_FMT_PEM); + waith->tlsInitialized = true; } - gnutls_certificate_set_x509_trust_file (waith->tlsCred, caPath, - GNUTLS_X509_FMT_PEM); #endif } @@ -76,7 +76,9 @@ void WaitressFree (WaitressHandle_t *waith) { free (waith->url.url); free (waith->proxy.url); #ifdef ENABLE_TLS - gnutls_certificate_free_credentials (waith->tlsCred); + if (waith->tlsInitialized) { + gnutls_certificate_free_credentials (waith->tlsCred); + } #endif memset (waith, 0, sizeof (*waith)); } @@ -1029,6 +1031,8 @@ WaitressReturn_t WaitressFetchCall (WaitressHandle_t *waith) { #ifdef ENABLE_TLS if (waith->url.tls) { + assert (waith->tlsInitialized); + waith->request.read = WaitressGnutlsRead; waith->request.write = WaitressGnutlsWrite; gnutls_init (&waith->request.tlsSession, GNUTLS_CLIENT); diff --git a/src/libwaitress/waitress.h b/src/libwaitress/waitress.h index eb79393..bc697e7 100644 --- a/src/libwaitress/waitress.h +++ b/src/libwaitress/waitress.h @@ -95,6 +95,7 @@ typedef struct { int timeout; #ifdef ENABLE_TLS gnutls_certificate_credentials_t tlsCred; + bool tlsInitialized; #endif /* per-request data */ |