aboutsummaryrefslogtreecommitdiff
path: root/providers
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
parentbb751e1108675d5ac30af9047b182905b8cc232b (diff)
downloadopenssl-8013a933dacc80096e2bfca06c00f9ec29adb35b.zip
openssl-8013a933dacc80096e2bfca06c00f9ec29adb35b.tar.gz
openssl-8013a933dacc80096e2bfca06c00f9ec29adb35b.tar.bz2
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')
-rw-r--r--providers/default/defltprov.c15
-rw-r--r--providers/legacy/legacyprov.c15
2 files changed, 30 insertions, 0 deletions
diff --git a/providers/default/defltprov.c b/providers/default/defltprov.c
index 9899940..b9c8c36 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;
}
diff --git a/providers/legacy/legacyprov.c b/providers/legacy/legacyprov.c
index 9ca4e14..9b55337 100644
--- a/providers/legacy/legacyprov.c
+++ b/providers/legacy/legacyprov.c
@@ -99,6 +99,8 @@ int OSSL_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:
@@ -107,12 +109,25 @@ int OSSL_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;
/* Just ignore anything we don't understand */
default:
break;
}
}
+ if (c_get_libctx == NULL)
+ return 0;
+
*out = legacy_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;
}