From 0763237d5fa8abaa7fcad9b4ce76f5455690c410 Mon Sep 17 00:00:00 2001 From: Aaron Jones Date: Wed, 25 May 2016 21:46:34 +0000 Subject: [PATCH] openssl: change how we load DH parameters The code already assumes the presence of fopen(3) and errno, and, by extension, fclose(3) and strerror(3), so just use those instead of the BIO wrappers. Additionally, don't fail to initialise if the DH file does exist but parsing it fails, as per the pre-existing comment about them being optional. --- librb/src/openssl.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/librb/src/openssl.c b/librb/src/openssl.c index aef76747..890adc7f 100644 --- a/librb/src/openssl.c +++ b/librb/src/openssl.c @@ -452,26 +452,25 @@ rb_setup_ssl_server(const char *certfile, const char *keyfile, const char *dhfil if(dhfile != NULL) { /* DH parameters aren't necessary, but they are nice..if they didn't pass one..that is their problem */ - BIO *bio = BIO_new_file(dhfile, "r"); - if(bio != NULL) + FILE *fp = fopen(dhfile, "r"); + DH *dh = NULL; + + if(fp == NULL) { - DH *dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL); - if(dh == NULL) - { - rb_lib_log - ("rb_setup_ssl_server: Error loading DH params file [%s]: %s", - dhfile, get_ssl_error(ERR_get_error())); - BIO_free(bio); - return 0; - } - BIO_free(bio); - SSL_CTX_set_tmp_dh(ssl_server_ctx, dh); - DH_free(dh); + rb_lib_log("rb_setup_ssl_server: Error loading DH params file [%s]: %s", + dhfile, strerror(errno)); + } + else if(PEM_read_DHparams(fp, &dh, NULL, NULL) == NULL) + { + rb_lib_log("rb_setup_ssl_server: Error loading DH params file [%s]: %s", + dhfile, get_ssl_error(ERR_get_error())); + fclose(fp); } else { - rb_lib_log("rb_setup_ssl_server: Error loading DH params file [%s]: %s", - dhfile, get_ssl_error(ERR_get_error())); + SSL_CTX_set_tmp_dh(ssl_server_ctx, dh); + DH_free(dh); + fclose(fp); } }