Mercurial > dovecot > core-2.2
changeset 20795:cdc4eabdb514
lib-ssl-iostream: Use more standard _init() & _deinit() to initialize SSL plugin
This is mainly to make it easier for test programs to link to the plugin
directly.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Fri, 16 Sep 2016 08:35:55 +0300 |
parents | 4f23573700c9 |
children | cf915db82d15 |
files | src/lib-ssl-iostream/iostream-openssl.c src/lib-ssl-iostream/iostream-openssl.h src/lib-ssl-iostream/iostream-ssl-private.h src/lib-ssl-iostream/iostream-ssl.c |
diffstat | 4 files changed, 30 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-ssl-iostream/iostream-openssl.c Sat Sep 10 11:15:00 2016 +0300 +++ b/src/lib-ssl-iostream/iostream-openssl.c Fri Sep 16 08:35:55 2016 +0300 @@ -719,9 +719,7 @@ return ssl_io->last_error; } -const struct iostream_ssl_vfuncs ssl_vfuncs = { - openssl_iostream_global_deinit, - +static const struct iostream_ssl_vfuncs ssl_vfuncs = { openssl_iostream_context_init_client, openssl_iostream_context_init_server, openssl_iostream_context_deinit, @@ -747,3 +745,13 @@ openssl_iostream_get_security_string, openssl_iostream_get_last_error }; + +void iostream_openssl_init(void) +{ + iostream_ssl_module_init(&ssl_vfuncs); +} + +void iostream_openssl_deinit(void) +{ + openssl_iostream_global_deinit(); +}
--- a/src/lib-ssl-iostream/iostream-openssl.h Sat Sep 10 11:15:00 2016 +0300 +++ b/src/lib-ssl-iostream/iostream-openssl.h Fri Sep 16 08:35:55 2016 +0300 @@ -101,4 +101,7 @@ const buffer_t *input); void openssl_iostream_context_free_params(struct ssl_iostream_context *ctx); +void iostream_openssl_init(void); +void iostream_openssl_deinit(void); + #endif
--- a/src/lib-ssl-iostream/iostream-ssl-private.h Sat Sep 10 11:15:00 2016 +0300 +++ b/src/lib-ssl-iostream/iostream-ssl-private.h Fri Sep 16 08:35:55 2016 +0300 @@ -4,7 +4,6 @@ #include "iostream-ssl.h" struct iostream_ssl_vfuncs { - void (*global_deinit)(void); int (*context_init_client)(const struct ssl_iostream_settings *set, struct ssl_iostream_context **ctx_r, const char **error_r); @@ -42,4 +41,6 @@ const char *(*get_last_error)(struct ssl_iostream *ssl_io); }; +void iostream_ssl_module_init(const struct iostream_ssl_vfuncs *vfuncs); + #endif
--- a/src/lib-ssl-iostream/iostream-ssl.c Sat Sep 10 11:15:00 2016 +0300 +++ b/src/lib-ssl-iostream/iostream-ssl.c Fri Sep 16 08:35:55 2016 +0300 @@ -14,12 +14,16 @@ #ifdef HAVE_SSL static void ssl_module_unload(void) { - module_dir_deinit(ssl_module); - ssl_vfuncs->global_deinit(); module_dir_unload(&ssl_module); } #endif +void iostream_ssl_module_init(const struct iostream_ssl_vfuncs *vfuncs) +{ + ssl_vfuncs = vfuncs; + ssl_module_loaded = TRUE; +} + static int ssl_module_load(const char **error_r) { #ifdef HAVE_SSL @@ -29,12 +33,15 @@ memset(&mod_set, 0, sizeof(mod_set)); mod_set.abi_version = DOVECOT_ABI_VERSION; mod_set.setting_name = "<built-in lib-ssl-iostream lookup>"; + mod_set.require_init_funcs = TRUE; ssl_module = module_dir_load(MODULE_DIR, plugin_name, &mod_set); - - ssl_vfuncs = module_get_symbol(ssl_module, "ssl_vfuncs"); - if (ssl_vfuncs == NULL) { - *error_r = t_strdup_printf("%s: Broken plugin: " - "ssl_vfuncs symbol not found", plugin_name); + if (module_dir_try_load_missing(&ssl_module, MODULE_DIR, plugin_name, + &mod_set, error_r) < 0) + return -1; + if (!ssl_module_loaded) { + *error_r = t_strdup_printf( + "%s didn't call iostream_ssl_module_init() - SSL not initialized", + plugin_name); module_dir_unload(&ssl_module); return -1; } @@ -43,7 +50,6 @@ backends may still want to access SSL module in their own atexit-callbacks. */ lib_atexit_priority(ssl_module_unload, LIB_ATEXIT_PRIORITY_LOW); - ssl_module_loaded = TRUE; return 0; #else *error_r = "SSL support not compiled in";