From abbc186bd2798afc4ad405af15d7e2668d66ef3e Mon Sep 17 00:00:00 2001
From: "Dr. Stephen Henson" <steve@openssl.org>
Date: Mon, 13 Dec 2004 18:02:23 +0000
Subject: [PATCH] Fix s_client so it works without a certificate again.

---
 apps/s_cb.c     |  2 ++
 apps/s_client.c | 31 +++++++++++++++++++++----------
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/apps/s_cb.c b/apps/s_cb.c
index 21aab25d7e..92d9ae8893 100644
--- a/apps/s_cb.c
+++ b/apps/s_cb.c
@@ -231,6 +231,8 @@ int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file)
 
 int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key)
 	{
+	if (cert ==  NULL)
+		return 1;
 	if (SSL_CTX_use_certificate(ctx,cert) <= 0)
 		{
 		BIO_printf(bio_err,"error setting certificate\n");
diff --git a/apps/s_client.c b/apps/s_client.c
index 0204b517b1..c1fcd9d97f 100644
--- a/apps/s_client.c
+++ b/apps/s_client.c
@@ -482,21 +482,32 @@ bad:
 	if (key_file == NULL)
 		key_file = cert_file;
 
-	key = load_key(bio_err, key_file, key_format, 0, pass, e,
-		       "client certificate private key file");
-	if (!key)
+
+	if (key_file)
+
 		{
-		ERR_print_errors(bio_err);
-		goto end;
+
+		key = load_key(bio_err, key_file, key_format, 0, pass, e,
+			       "client certificate private key file");
+		if (!key)
+			{
+			ERR_print_errors(bio_err);
+			goto end;
+			}
+
 		}
 
-	cert = load_cert(bio_err,cert_file,cert_format,
-			NULL, e, "client certificate file");
+	if (cert_file)
 
-	if (!cert)
 		{
-		ERR_print_errors(bio_err);
-		goto end;
+		cert = load_cert(bio_err,cert_file,cert_format,
+				NULL, e, "client certificate file");
+
+		if (!cert)
+			{
+			ERR_print_errors(bio_err);
+			goto end;
+			}
 		}
 
 	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
-- 
2.25.1