]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Add the function OSSL_LIB_CTX_get0_global_default()
authorMatt Caswell <matt@openssl.org>
Fri, 16 Apr 2021 10:13:30 +0000 (11:13 +0100)
committerMatt Caswell <matt@openssl.org>
Mon, 19 Apr 2021 09:52:18 +0000 (10:52 +0100)
An API function for obtaining the global default lib ctx.

Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/14890)

crypto/context.c
doc/man3/OSSL_LIB_CTX.pod
include/openssl/crypto.h.in
util/libcrypto.num

index 07fff535ff9cdb9b3222429b02f02e9645db9442..d7671d66a802b3f6782eeec5d289c00e5a3bb2ce 100644 (file)
@@ -199,9 +199,17 @@ void OSSL_LIB_CTX_free(OSSL_LIB_CTX *ctx)
     OPENSSL_free(ctx);
 }
 
+#ifndef FIPS_MODULE
+OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void)
+{
+    if (!RUN_ONCE(&default_context_init, default_context_do_init))
+        return NULL;
+
+    return &default_context_int;
+}
+
 OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx)
 {
-#ifndef FIPS_MODULE
     OSSL_LIB_CTX *current_defctx;
 
     if ((current_defctx = get_default_context()) != NULL) {
@@ -209,10 +217,10 @@ OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx)
             set_default_context(libctx);
         return current_defctx;
     }
-#endif
 
     return NULL;
 }
+#endif
 
 OSSL_LIB_CTX *ossl_lib_ctx_get_concrete(OSSL_LIB_CTX *ctx)
 {
index a23a10f5ceae0d266c66ab0e575ae4ddad59d632..f2bf3d9de6cedfe3e3b082c148d272abddef5d0c 100644 (file)
@@ -3,7 +3,7 @@
 =head1 NAME
 
 OSSL_LIB_CTX, OSSL_LIB_CTX_new, OSSL_LIB_CTX_free, OSSL_LIB_CTX_load_config,
-OSSL_LIB_CTX_set0_default
+OSSL_LIB_CTX_get0_global_default, OSSL_LIB_CTX_set0_default
 - OpenSSL library context
 
 =head1 SYNOPSIS
@@ -15,6 +15,7 @@ OSSL_LIB_CTX_set0_default
  OSSL_LIB_CTX *OSSL_LIB_CTX_new(void);
  int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file);
  void OSSL_LIB_CTX_free(OSSL_LIB_CTX *ctx);
+ OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void);
  OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *ctx);
 
 =head1 DESCRIPTION
@@ -38,12 +39,17 @@ from a configuration.
 OSSL_LIB_CTX_free() frees the given I<ctx>, unless it happens to be the
 default OpenSSL library context.
 
+OSSL_LIB_CTX_get0_global_default() returns a concrete (non NULL) reference to
+the global default library context.
+
 OSSL_LIB_CTX_set0_default() sets the default OpenSSL library context to be
 I<ctx> in the current thread.  The previous default library context is
 returned.  Care should be taken by the caller to restore the previous
 default library context with a subsequent call of this function. If I<ctx> is
 NULL then no change is made to the default library context, but a pointer to
-the current library context is still returned.
+the current library context is still returned. On a successful call of this
+function the returned value will always be a concrete (non NULL) library
+context.
 
 Care should be taken when changing the default library context and starting
 async jobs (see L<ASYNC_start_job(3)>), as the default library context when
@@ -55,15 +61,17 @@ that job has finished.
 
 =head1 RETURN VALUES
 
-OSSL_LIB_CTX_new() and OSSL_LIB_CTX_set0_default() return a library context
-pointer on success, or NULL on error.
+OSSL_LIB_CTX_new(), OSSL_LIB_CTX_get0_global_default() and
+OSSL_LIB_CTX_set0_default() return a library context pointer on success, or NULL
+on error.
 
 OSSL_LIB_CTX_free() doesn't return any value.
 
 =head1 HISTORY
 
-OSSL_LIB_CTX, OSSL_LIB_CTX_new(), OSSL_LIB_CTX_load_config(), OSSL_LIB_CTX_free()
-and OSSL_LIB_CTX_set0_default() were added in OpenSSL 3.0.
+OSSL_LIB_CTX, OSSL_LIB_CTX_new(), OSSL_LIB_CTX_load_config(),
+OSSL_LIB_CTX_free(), OSSL_LIB_CTX_get0_global_default() and
+OSSL_LIB_CTX_set0_default() were added in OpenSSL 3.0.
 
 =head1 COPYRIGHT
 
index adceb0c1039fd158ae5b92b6c899e08e4f482296..f25b997e3207eae5d5e35914780fb1a13d1deefb 100644 (file)
@@ -519,6 +519,7 @@ int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b);
 OSSL_LIB_CTX *OSSL_LIB_CTX_new(void);
 int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file);
 void OSSL_LIB_CTX_free(OSSL_LIB_CTX *);
+OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void);
 OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx);
 
 # ifdef  __cplusplus
index 1ec8ee6fd99dafe49da098b3492d305c57348f0f..a059aecd5e381de6d66c69803d77d55662dff961 100644 (file)
@@ -5356,3 +5356,4 @@ EVP_MD_CTX_get0_md                      ? 3_0_0   EXIST::FUNCTION:
 EVP_MD_CTX_get1_md                      ?      3_0_0   EXIST::FUNCTION:
 EVP_CIPHER_CTX_get0_cipher              ?      3_0_0   EXIST::FUNCTION:
 EVP_CIPHER_CTX_get1_cipher              ?      3_0_0   EXIST::FUNCTION:
+OSSL_LIB_CTX_get0_global_default        ?      3_0_0   EXIST::FUNCTION: