changeset 4299:dacf4dc615ec HEAD

Reversed last change. Instead handle DH_generate_parameters() call's failure.
author Timo Sirainen <tss@iki.fi>
date Wed, 31 May 2006 16:59:03 +0300
parents 2e4639fd3c7c
children 3eeceb1156ad
files src/master/ssl-init-openssl.c
diffstat 1 files changed, 22 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/master/ssl-init-openssl.c	Wed May 31 16:54:21 2006 +0300
+++ b/src/master/ssl-init-openssl.c	Wed May 31 16:59:03 2006 +0300
@@ -17,21 +17,36 @@
 #define DH_PARAM_BITSIZE_COUNT \
         (sizeof(dh_param_bitsizes)/sizeof(dh_param_bitsizes[0]))
 
+static const char *ssl_last_error(void)
+{
+	unsigned long err;
+	char *buf;
+	size_t err_size = 256;
+
+	err = ERR_get_error();
+	if (err == 0)
+		return strerror(errno);
+
+	buf = t_malloc(err_size);
+	buf[err_size-1] = '\0';
+	ERR_error_string_n(err, buf, err_size-1);
+	return buf;
+}
+
 static void generate_dh_parameters(int bitsize, int fd, const char *fname)
 {
         DH *dh = DH_generate_parameters(bitsize, DH_GENERATOR, NULL, NULL);
 	unsigned char *buf, *p;
 	int len;
 
+	if (dh == NULL) {
+		i_fatal("DH_generate_parameters(bits=%d, gen=%d) failed: %s",
+			bitsize, DH_GENERATOR, ssl_last_error());
+	}
+
 	len = i2d_DHparams(dh, NULL);
 	if (len < 0)
-		i_fatal("i2d_DHparams() failed: %lu", ERR_get_error());
-
-	if (len == 0) {
-		i_fatal("i2d_DHparams() returned 0 for data from "
-			"DH_generate_parameters(bits=%d, generator=%d)",
-			bitsize, DH_GENERATOR);
-	}
+		i_fatal("i2d_DHparams() failed: %s", ssl_last_error());
 
 	buf = p = i_malloc(len);
 	len = i2d_DHparams(dh, &p);