From 242dfd8a1b93326d200383948a8d57db5ce57de0 Mon Sep 17 00:00:00 2001 From: Pauli Date: Thu, 8 Jul 2021 11:22:14 +1000 Subject: [PATCH] apps: add query to allow a command to know of a provider command line option was processed Better fixing: Fixing #15683 Fixing #15686 Replacing rather than fixing: Fixing #15414 Since that claims to fix another: Fixing #15372 Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/16022) --- apps/include/opt.h | 5 +++++ apps/lib/app_provider.c | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/apps/include/opt.h b/apps/include/opt.h index ce0e35cd72..4f83a0ed53 100644 --- a/apps/include/opt.h +++ b/apps/include/opt.h @@ -388,8 +388,13 @@ int opt_pair(const char *arg, const OPT_PAIR * pairs, int *result); int opt_verify(int i, X509_VERIFY_PARAM *vpm); int opt_rand(int i); int opt_provider(int i); +int opt_provider_option_given(void); char **opt_rest(void); int opt_num_rest(void); +/* Returns non-zero if legacy paths are still available */ +int opt_legacy_okay(void); + + #endif /* OSSL_APPS_OPT_H */ diff --git a/apps/lib/app_provider.c b/apps/lib/app_provider.c index c3100b2fa8..63f78ae07d 100644 --- a/apps/lib/app_provider.c +++ b/apps/lib/app_provider.c @@ -13,6 +13,9 @@ #include #include +/* Non-zero if any of the provider options have been seen */ +static int provider_option_given = 0; + DEFINE_STACK_OF(OSSL_PROVIDER) /* @@ -64,6 +67,9 @@ static int opt_provider_path(const char *path) int opt_provider(int opt) { + const int given = provider_option_given; + + provider_option_given = 1; switch ((enum prov_range)opt) { case OPT_PROV__FIRST: case OPT_PROV__LAST: @@ -75,5 +81,12 @@ int opt_provider(int opt) case OPT_PROV_PROPQUERY: return app_set_propq(opt_arg()); } + /* Should never get here but if we do, undo what we did earlier */ + provider_option_given = given; return 0; } + +int opt_provider_option_given(void) +{ + return provider_option_given; +}