From 69dc97bc69bf964ed26f66a6d08a2efb7fece3f0 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Wed, 11 Feb 2015 14:25:06 +0100 Subject: [PATCH] fixed GnuTLS related crash when daemonizing additional fix for DH-parameters not being set --- src/main.c | 4 ++++ src/ssli_gnutls.c | 17 +++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index 5e2b3e1..a18363d 100644 --- a/src/main.c +++ b/src/main.c @@ -199,6 +199,10 @@ void daemonize() for (i = getdtablesize(); i >= 0; --i) close(i); /* close all descriptors */ +#ifdef USE_GNUTLS + gnutls_global_init(); +#endif + i = open("/dev/null",O_RDWR); (void)dup(i); (void)dup(i); diff --git a/src/ssli_gnutls.c b/src/ssli_gnutls.c index 3cbb17b..ac5eb90 100644 --- a/src/ssli_gnutls.c +++ b/src/ssli_gnutls.c @@ -68,16 +68,21 @@ void SSLi_init() { unsigned const bitCount = gnutls_sec_param_to_pk_bits(GNUTLS_PK_DH, GNUTLS_SEC_PARAM_MEDIUM); + gnutls_priority_init(&cipherCache, ciphers, NULL); + initializeCertificate(); + gnutls_dh_params_init(&dhParameters); - gnutls_dh_params_generate2(dhParameters, bitCount); -#if GNUTLS_VERSION_NUMBER < 0x030300 - gnutls_global_init(); -#endif + Log_info("Generating Diffie-Hellman parameters (%i bits)", bitCount); + int error = gnutls_dh_params_generate2(dhParameters, bitCount); - gnutls_priority_init(&cipherCache, ciphers, NULL); + if(!error) { + Log_info("Successfully generated Diffie-Hellman parameters"); + } else { + Log_warn("Failed to generate Diffie-Hellman parameters: %s", gnutls_strerror(error)); + } - initializeCertificate(); + gnutls_certificate_set_dh_params(certificate, dhParameters); Log_info("Sucessfully initialized GNUTLS version %s", gnutls_check_version(NULL)); -- 2.30.2