-/* $OpenBSD: conf_mod.c,v 1.27 2017/01/29 17:49:22 beck Exp $ */
+/* $OpenBSD: conf_mod.c,v 1.28 2023/07/20 15:05:30 tb Exp $ */
/* Written by Stephen Henson (steve@openssl.org) for the OpenSSL
* project 2001.
*/
#include <openssl/conf.h>
#include <openssl/crypto.h>
-#include <openssl/dso.h>
#include <openssl/err.h>
#include <openssl/x509.h>
-#define DSO_mod_init_name "OPENSSL_init"
-#define DSO_mod_finish_name "OPENSSL_finish"
-
-/* This structure contains a data about supported modules.
- * entries in this table correspond to either dynamic or
- * static modules.
- */
-
+/* This structure contains data about supported modules. */
struct conf_module_st {
- /* DSO of this module or NULL if static */
- DSO *dso;
/* Name of the module */
char *name;
/* Init function */
static void module_finish(CONF_IMODULE *imod);
static int module_run(const CONF *cnf, char *name, char *value,
unsigned long flags);
-static CONF_MODULE *module_add(DSO *dso, const char *name,
- conf_init_func *ifunc, conf_finish_func *ffunc);
+static CONF_MODULE *module_add(const char *name, conf_init_func *ifunc,
+ conf_finish_func *ffunc);
static CONF_MODULE *module_find(char *name);
static int module_init(CONF_MODULE *pmod, char *name, char *value,
const CONF *cnf);
-static CONF_MODULE *module_load_dso(const CONF *cnf, char *name, char *value,
- unsigned long flags);
/* Main function: load modules from a CONF structure */
CONF_MODULE *md;
int ret;
- md = module_find(name);
-
- /* Module not found: try to load DSO */
- if (!md && !(flags & CONF_MFLAGS_NO_DSO))
- md = module_load_dso(cnf, name, value, flags);
-
- if (!md) {
+ if ((md = module_find(name)) == NULL) {
if (!(flags & CONF_MFLAGS_SILENT)) {
CONFerror(CONF_R_UNKNOWN_MODULE_NAME);
ERR_asprintf_error_data("module=%s", name);
return ret;
}
-/* Load a module from a DSO */
-static CONF_MODULE *
-module_load_dso(const CONF *cnf, char *name, char *value, unsigned long flags)
-{
- DSO *dso = NULL;
- conf_init_func *ifunc;
- conf_finish_func *ffunc;
- char *path = NULL;
- int errcode = 0;
- CONF_MODULE *md;
-
- /* Look for alternative path in module section */
- path = NCONF_get_string(cnf, value, "path");
- if (!path) {
- ERR_clear_error();
- path = name;
- }
- dso = DSO_load(NULL, path, NULL, 0);
- if (!dso) {
- errcode = CONF_R_ERROR_LOADING_DSO;
- goto err;
- }
- ifunc = (conf_init_func *)DSO_bind_func(dso, DSO_mod_init_name);
- if (!ifunc) {
- errcode = CONF_R_MISSING_INIT_FUNCTION;
- goto err;
- }
- ffunc = (conf_finish_func *)DSO_bind_func(dso, DSO_mod_finish_name);
- /* All OK, add module */
- md = module_add(dso, name, ifunc, ffunc);
-
- if (!md)
- goto err;
-
- return md;
-
-err:
- if (dso)
- DSO_free(dso);
- CONFerror(errcode);
- ERR_asprintf_error_data("module=%s, path=%s", name, path);
- return NULL;
-}
-
/* add module to list */
static CONF_MODULE *
-module_add(DSO *dso, const char *name, conf_init_func *ifunc,
- conf_finish_func *ffunc)
+module_add(const char *name, conf_init_func *ifunc, conf_finish_func *ffunc)
{
CONF_MODULE *tmod = NULL;
if (tmod == NULL)
return NULL;
- tmod->dso = dso;
tmod->name = strdup(name);
tmod->init = ifunc;
tmod->finish = ffunc;
/* unload modules in reverse order */
for (i = sk_CONF_MODULE_num(supported_modules) - 1; i >= 0; i--) {
md = sk_CONF_MODULE_value(supported_modules, i);
- /* If static or in use and 'all' not set ignore it */
- if (((md->links > 0) || !md->dso) && !all)
+ if (!all)
continue;
/* Since we're working in reverse this is OK */
(void)sk_CONF_MODULE_delete(supported_modules, i);
static void
module_free(CONF_MODULE *md)
{
- if (md->dso)
- DSO_free(md->dso);
free(md->name);
free(md);
}
/* Add a static module to OpenSSL */
int
-CONF_module_add(const char *name, conf_init_func *ifunc,
- conf_finish_func *ffunc)
+CONF_module_add(const char *name, conf_init_func *ifunc, conf_finish_func *ffunc)
{
- if (module_add(NULL, name, ifunc, ffunc))
- return 1;
- else
- return 0;
+ return module_add(name, ifunc, ffunc) != NULL;
}
void