From 9fcd066217e8b6f52b601bdd8a0cb6455f98b88c Mon Sep 17 00:00:00 2001
From: Petr Mensik <pemensik@redhat.com>
Date: Thu, 7 Mar 2019 14:33:28 +0100
Subject: [PATCH] Do not replace random generator on single thread

DHCP builds fails to initialize dst library entropy generator. It does
not require it for anything. Instead of initializing it, skip replacing
custom random generator in single thread builds. Should use OpenSSL
default random generator in case of SSL.

Related: rhbz#1685940
---
 lib/dns/openssl_link.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/lib/dns/openssl_link.c b/lib/dns/openssl_link.c
index ec6dc7f..ca3ffbc 100644
--- a/lib/dns/openssl_link.c
+++ b/lib/dns/openssl_link.c
@@ -31,6 +31,7 @@
 #include <isc/mem.h>
 #include <isc/mutex.h>
 #include <isc/mutexblock.h>
+#include <isc/platform.h>
 #include <isc/string.h>
 #include <isc/thread.h>
 #include <isc/util.h>
@@ -220,6 +221,7 @@ dst__openssl_init(const char *engine) {
 	ERR_load_crypto_strings();
 #endif
 
+#ifdef ISC_PLATFORM_USETHREADS
 	rm = mem_alloc(sizeof(RAND_METHOD) FILELINE);
 	if (rm == NULL) {
 		result = ISC_R_NOMEMORY;
@@ -231,6 +233,7 @@ dst__openssl_init(const char *engine) {
 	rm->add = entropy_add;
 	rm->pseudorand = entropy_getpseudo;
 	rm->status = entropy_status;
+#endif
 
 #if !defined(OPENSSL_NO_ENGINE)
 #if !defined(CONF_MFLAGS_DEFAULT_SECTION)
@@ -264,6 +267,7 @@ dst__openssl_init(const char *engine) {
 		}
 	}
 
+#ifdef ISC_PLATFORM_USETHREADS
 	re = ENGINE_get_default_RAND();
 	if (re == NULL) {
 		re = ENGINE_new();
@@ -276,6 +280,7 @@ dst__openssl_init(const char *engine) {
 		ENGINE_free(re);
 	} else
 		ENGINE_finish(re);
+#endif
 #else
 	RAND_set_rand_method(rm);
 #endif /* !defined(OPENSSL_NO_ENGINE) */
@@ -286,7 +291,8 @@ dst__openssl_init(const char *engine) {
 	if (e != NULL)
 		ENGINE_free(e);
 	e = NULL;
-	mem_free(rm FILELINE);
+	if (rm != NULL)
+		mem_free(rm FILELINE);
 	rm = NULL;
 #endif
  cleanup_mutexinit:
-- 
2.20.1

