summaryrefslogtreecommitdiffstats
path: root/providers/default/defltprov.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2019-06-14 11:41:32 +0200
committerRichard Levitte <levitte@openssl.org>2019-06-17 11:38:11 +0200
commit8013a933dacc80096e2bfca06c00f9ec29adb35b (patch)
treebc78610ccebce19fa4b9e1ac53a8f2c8fc9b0a66 /providers/default/defltprov.c
parentReplumbing: Adapt the FIPS module to use the library context upcall (diff)
downloadopenssl-8013a933dacc80096e2bfca06c00f9ec29adb35b.tar.xz
openssl-8013a933dacc80096e2bfca06c00f9ec29adb35b.zip
Replumbing: Adapt the default and legacy providers to use library context upcall
Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/9160)
Diffstat (limited to 'providers/default/defltprov.c')
-rw-r--r--providers/default/defltprov.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/providers/default/defltprov.c b/providers/default/defltprov.c
index 98999405d6..b9c8c36ef0 100644
--- a/providers/default/defltprov.c
+++ b/providers/default/defltprov.c
@@ -144,6 +144,8 @@ int ossl_default_provider_init(const OSSL_PROVIDER *provider,
const OSSL_DISPATCH **out,
void **provctx)
{
+ OSSL_core_get_library_context_fn *c_get_libctx = NULL;
+
for (; in->function_id != 0; in++) {
switch (in->function_id) {
case OSSL_FUNC_CORE_GET_PARAM_TYPES:
@@ -152,12 +154,25 @@ int ossl_default_provider_init(const OSSL_PROVIDER *provider,
case OSSL_FUNC_CORE_GET_PARAMS:
c_get_params = OSSL_get_core_get_params(in);
break;
+ case OSSL_FUNC_CORE_GET_LIBRARY_CONTEXT:
+ c_get_libctx = OSSL_get_core_get_library_context(in);
+ break;
default:
/* Just ignore anything we don't understand */
break;
}
}
+ if (c_get_libctx == NULL)
+ return 0;
+
*out = deflt_dispatch_table;
+
+ /*
+ * We want to make sure that all calls from this provider that requires
+ * a library context use the same context as the one used to call our
+ * functions. We do that by passing it along as the provider context.
+ */
+ *provctx = c_get_libctx(provider);
return 1;
}