From: Richard Levitte Date: Sun, 11 Dec 2016 06:02:06 +0000 (+0100) Subject: STORE: add ENGINE information to loaders X-Git-Tag: OpenSSL_1_1_1-pre1~1164 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=f91ded1fc40bbe3950ae3e971d4c84a2edf039f8;p=oweals%2Fopenssl.git STORE: add ENGINE information to loaders Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/3542) --- diff --git a/crypto/store/loader_file.c b/crypto/store/loader_file.c index 27af752497..446f60c163 100644 --- a/crypto/store/loader_file.c +++ b/crypto/store/loader_file.c @@ -1041,6 +1041,7 @@ static int file_close(OSSL_STORE_LOADER_CTX *ctx) static OSSL_STORE_LOADER file_loader = { "file", + NULL, file_open, NULL, file_load, diff --git a/crypto/store/store_locl.h b/crypto/store/store_locl.h index 5797a365ea..a954c577c4 100644 --- a/crypto/store/store_locl.h +++ b/crypto/store/store_locl.h @@ -72,6 +72,7 @@ OSSL_STORE_LOADER *ossl_store_unregister_loader_int(const char *scheme); /* loader stuff */ struct ossl_store_loader_st { const char *scheme; + ENGINE *engine; OSSL_STORE_open_fn open; OSSL_STORE_ctrl_fn ctrl; OSSL_STORE_load_fn load; diff --git a/crypto/store/store_register.c b/crypto/store/store_register.c index a138edc636..bde190e78e 100644 --- a/crypto/store/store_register.c +++ b/crypto/store/store_register.c @@ -28,7 +28,7 @@ DEFINE_RUN_ONCE_STATIC(do_registry_init) * Functions for manipulating OSSL_STORE_LOADERs */ -OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(const char *scheme) +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme) { OSSL_STORE_LOADER *res = OPENSSL_zalloc(sizeof(*res)); @@ -49,10 +49,16 @@ OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(const char *scheme) return NULL; } + res->engine = e; res->scheme = scheme; return res; } +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader) +{ + return loader->engine; +} + const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader) { return loader->scheme; @@ -257,3 +263,16 @@ void ossl_store_destroy_loaders_int(void) CRYPTO_THREAD_lock_free(registry_lock); registry_lock = NULL; } + +/* + * Functions to list OSSL_STORE loaders + */ + +IMPLEMENT_LHASH_DOALL_ARG_CONST(OSSL_STORE_LOADER, void); +int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER + *loader, void *do_arg), + void *do_arg) +{ + lh_OSSL_STORE_LOADER_doall_void(loader_register, do_function, do_arg); + return 1; +} diff --git a/include/openssl/store.h b/include/openssl/store.h index 35f62ec9d3..d3947dfc0f 100644 --- a/include/openssl/store.h +++ b/include/openssl/store.h @@ -159,7 +159,8 @@ void OSSL_STORE_INFO_free(OSSL_STORE_INFO *info); */ typedef struct ossl_store_loader_st OSSL_STORE_LOADER; -OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(const char *scheme); +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); /* struct ossl_store_loader_ctx_st is defined differently by each loader */ typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; @@ -193,6 +194,14 @@ void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); +/*- + * Functions to list STORE loaders + * ------------------------------- + */ +int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER + *loader, void *do_arg), + void *do_arg); + /* * Error strings diff --git a/util/libcrypto.num b/util/libcrypto.num index 3c651edd43..d734461a9b 100644 --- a/util/libcrypto.num +++ b/util/libcrypto.num @@ -4340,3 +4340,5 @@ OSSL_STORE_ctrl 4282 1_1_1 EXIST::FUNCTION: OSSL_STORE_INFO_get0_NAME_description 4283 1_1_1 EXIST::FUNCTION: OSSL_STORE_INFO_set0_NAME_description 4284 1_1_1 EXIST::FUNCTION: OSSL_STORE_INFO_get1_NAME_description 4285 1_1_1 EXIST::FUNCTION: +OSSL_STORE_do_all_loaders 4286 1_1_1 EXIST::FUNCTION: +OSSL_STORE_LOADER_get0_engine 4287 1_1_1 EXIST::FUNCTION: