提交 e1a00d7d 编写于 作者: R Richard Levitte

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.
上级 acf60ef7
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册