From: Richard Levitte <levitte@openssl.org>
Date: Thu, 15 Nov 2001 18:48:42 +0000 (+0000)
Subject: If an engine isn't built in, try loading it as a shareable library
X-Git-Tag: OpenSSL_0_9_6c~26^2~25
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e1a00d7d1d10ea38c5dc17026653787576809bfc;p=openssl

If an engine isn't built in, try loading it as a shareable library
instead.  This also makes it possible for users to simply give said
shareable library as argument for the -engine option.
---

diff --git a/apps/apps.c b/apps/apps.c
index e1e29f8689..666a7a7000 100644
--- a/apps/apps.c
+++ b/apps/apps.c
@@ -1197,6 +1197,22 @@ X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath)
 	return NULL;
 }
 
+/* Try to load an engine in a shareable library */
+ENGINE *try_load_engine(BIO *err, const char *engine, int debug)
+	{
+	ENGINE *e = ENGINE_by_id("dynamic");
+	if (e)
+		{
+		if (!ENGINE_ctrl_cmd_string(e, "SO_PATH", engine, 0)
+			|| !ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0))
+			{
+			ENGINE_free(e);
+			e = NULL;
+			}
+		}
+	return e;
+	}
+
 ENGINE *setup_engine(BIO *err, const char *engine, int debug)
         {
         ENGINE *e = NULL;
@@ -1209,9 +1225,11 @@ ENGINE *setup_engine(BIO *err, const char *engine, int debug)
 			ENGINE_register_all_complete();
 			return NULL;
 			}
-		if((e = ENGINE_by_id(engine)) == NULL)
+		if((e = ENGINE_by_id(engine)) == NULL
+			&& (e = try_load_engine(err, engine, debug)) == NULL)
 			{
 			BIO_printf(err,"invalid engine \"%s\"\n", engine);
+			ERR_print_errors(err);
 			return NULL;
 			}
 		if (debug)
@@ -1223,10 +1241,11 @@ ENGINE *setup_engine(BIO *err, const char *engine, int debug)
 		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 			{
 			BIO_printf(err,"can't use that engine\n");
+			ERR_print_errors(err);
 			return NULL;
 			}
 
-		BIO_printf(err,"engine \"%s\" set.\n", engine);
+		BIO_printf(err,"engine \"%s\" set.\n", ENGINE_get_id(e));
 
 		/* Free our "structural" reference. */
 		ENGINE_free(e);