}
#if defined(RSPAMD_LEGACY_SSL_PROVIDER) && OPENSSL_VERSION_NUMBER >= 0x30000000L
#include <openssl/provider.h>
+static OSSL_PROVIDER *rspamd_legacy_provider = NULL;
+static OSSL_PROVIDER *rspamd_default_provider = NULL;
#endif
void rspamd_openssl_maybe_init(void)
OPENSSL_init_ssl(0, NULL);
#endif
#if defined(RSPAMD_LEGACY_SSL_PROVIDER) && OPENSSL_VERSION_NUMBER >= 0x30000000L
- if (OSSL_PROVIDER_load(NULL, "legacy") == NULL) {
+ rspamd_legacy_provider = OSSL_PROVIDER_load(NULL, "legacy");
+ if (rspamd_legacy_provider == NULL) {
msg_err("cannot load legacy OpenSSL provider: %s", ERR_lib_error_string(ERR_get_error()));
ERR_clear_error();
}
- if (OSSL_PROVIDER_load(NULL, "default") == NULL) {
+ rspamd_default_provider = OSSL_PROVIDER_load(NULL, "default");
+ if (rspamd_default_provider == NULL) {
msg_err("cannot load default OpenSSL provider: %s", ERR_lib_error_string(ERR_get_error()));
ERR_clear_error();
}
}
}
+void rspamd_openssl_cleanup(void)
+{
+#if defined(RSPAMD_LEGACY_SSL_PROVIDER) && OPENSSL_VERSION_NUMBER >= 0x30000000L
+ if (rspamd_legacy_provider) {
+ OSSL_PROVIDER_unload(rspamd_legacy_provider);
+ rspamd_legacy_provider = NULL;
+ }
+ if (rspamd_default_provider) {
+ OSSL_PROVIDER_unload(rspamd_default_provider);
+ rspamd_default_provider = NULL;
+ }
+#endif
+}
+
void rspamd_ssl_ctx_config(struct rspamd_config *cfg, gpointer ssl_ctx)
{
struct rspamd_ssl_ctx *ctx = (struct rspamd_ssl_ctx *) ssl_ctx;
#include "cryptobox.h"
#include "utlist.h"
#include "unix-std.h"
+#include "libserver/ssl_util.h"
/* pwd and grp */
#ifdef HAVE_PWD_H
#include <pwd.h>
#endif
REF_RELEASE(rspamd_main->cfg);
rspamd_log_close(rspamd_main->logger);
+ rspamd_openssl_cleanup();
g_hash_table_unref(rspamd_main->spairs);
g_hash_table_unref(rspamd_main->workers);
rspamd_mempool_delete(rspamd_main->server_pool);