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 <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/16022)
This commit is contained in:
Pauli 2021-07-08 11:22:14 +10:00
parent ac1e85f464
commit 242dfd8a1b
2 changed files with 18 additions and 0 deletions

View File

@ -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 */

View File

@ -13,6 +13,9 @@
#include <openssl/provider.h>
#include <openssl/safestack.h>
/* 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;
}