#include <openssl/core_names.h>
#include "internal/provider.h"
-OSSL_PROVIDER *OSSL_PROVIDER_load(OPENSSL_CTX *libctx, const char *name)
+OSSL_PROVIDER *OSSL_PROVIDER_try_load(OPENSSL_CTX *libctx, const char *name)
{
OSSL_PROVIDER *prov = NULL;
return prov;
}
+OSSL_PROVIDER *OSSL_PROVIDER_load(OPENSSL_CTX *libctx, const char *name)
+{
+ /* Any attempt to load a provider disables auto-loading of defaults */
+ if (ossl_provider_disable_fallback_loading(libctx))
+ return OSSL_PROVIDER_try_load(libctx, name);
+ return NULL;
+}
+
int OSSL_PROVIDER_unload(OSSL_PROVIDER *prov)
{
ossl_provider_free(prov);
=head1 NAME
OSSL_PROVIDER_set_default_search_path,
-OSSL_PROVIDER, OSSL_PROVIDER_load, OSSL_PROVIDER_unload,
+OSSL_PROVIDER, OSSL_PROVIDER_load, OSSL_PROVIDER_try_load, OSSL_PROVIDER_unload,
OSSL_PROVIDER_available, OSSL_PROVIDER_do_all,
OSSL_PROVIDER_gettable_params, OSSL_PROVIDER_get_params,
OSSL_PROVIDER_query_operation, OSSL_PROVIDER_get0_provider_ctx,
const char *path);
OSSL_PROVIDER *OSSL_PROVIDER_load(OPENSSL_CTX *libctx, const char *name);
+ OSSL_PROVIDER *OSSL_PROVIDER_try_load(OPENSSL_CTX *libctx, const char *name);
int OSSL_PROVIDER_unload(OSSL_PROVIDER *prov);
int OSSL_PROVIDER_available(OPENSSL_CTX *libctx, const char *name);
int OSSL_PROVIDER_do_all(OPENSSL_CTX *ctx,
or load a provider module with the given name and run its provider
entry point, C<OSSL_provider_init>.
+OSSL_PROVIDER_try_load() functions like OSSL_PROVIDER_load(), except that
+it does not disable the fall-back providers if the provider cannot be
+loaded and initialized.
+If the provider loads successfully, however, the fall-back providers are
+disabled.
+
OSSL_PROVIDER_unload() unloads the given provider.
For a provider added with OSSL_PROVIDER_add_builtin(), this simply
runs its teardown function.
OSSL_PROVIDER_add(), OSSL_PROVIDER_unload(), OSSL_PROVIDER_get_params() and
OSSL_PROVIDER_get_capabilities() return 1 on success, or 0 on error.
-OSSL_PROVIDER_load() returns a pointer to a provider object on
-success, or B<NULL> on error.
+OSSL_PROVIDER_load() and OSSL_PROVIDER_try_load() return a pointer to a
+provider object on success, or B<NULL> on error.
OSSL_PROVIDER_available() returns 1 if the named provider is available,
otherwise 0.
/* Load and unload a provider */
OSSL_PROVIDER *OSSL_PROVIDER_load(OPENSSL_CTX *, const char *name);
+OSSL_PROVIDER *OSSL_PROVIDER_try_load(OPENSSL_CTX *, const char *name);
int OSSL_PROVIDER_unload(OSSL_PROVIDER *prov);
int OSSL_PROVIDER_available(OPENSSL_CTX *, const char *name);
int OSSL_PROVIDER_do_all(OPENSSL_CTX *ctx,
OSSL_trace_begin ? 3_0_0 EXIST::FUNCTION:
OSSL_trace_end ? 3_0_0 EXIST::FUNCTION:
OSSL_PROVIDER_load ? 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_try_load ? 3_0_0 EXIST::FUNCTION:
OSSL_PROVIDER_unload ? 3_0_0 EXIST::FUNCTION:
OSSL_PROVIDER_add_builtin ? 3_0_0 EXIST::FUNCTION:
OSSL_PROVIDER_gettable_params ? 3_0_0 EXIST::FUNCTION: