diff options
author | Tomas Mraz <tomas@openssl.org> | 2022-05-04 16:58:06 +0200 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2022-05-13 08:30:41 +0200 |
commit | b98f989e0c741d7534a58ba3fb22f5af0f016ca4 (patch) | |
tree | dca8f71bc7f5d7513e584ff061baf2fd257638a0 /providers/fips/fipsprov.c | |
parent | 615525bd4d6bbc56601fbdc82e7ac20344f48872 (diff) | |
download | openssl-new-b98f989e0c741d7534a58ba3fb22f5af0f016ca4.tar.gz |
Fix build on OPENSSL_SYS_TANDEM and older POSIXes
It also allows for passing -DOPENSSL_NO_LOCALE as a workaround
to ./Configure command.
Fixes #18233
Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/18282)
Diffstat (limited to 'providers/fips/fipsprov.c')
-rw-r--r-- | providers/fips/fipsprov.c | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/providers/fips/fipsprov.c b/providers/fips/fipsprov.c index 1b79c000b6..5436c48564 100644 --- a/providers/fips/fipsprov.c +++ b/providers/fips/fipsprov.c @@ -24,6 +24,7 @@ #include "self_test.h" #include "crypto/context.h" #include "internal/core.h" +#include "internal/e_os.h" static const char FIPS_DEFAULT_PROPERTIES[] = "provider=fips,fips=yes"; static const char FIPS_UNAPPROVED_PROPERTIES[] = "provider=fips,fips=no"; @@ -38,17 +39,13 @@ static OSSL_FUNC_provider_get_params_fn fips_get_params; static OSSL_FUNC_provider_query_operation_fn fips_query; /* Locale object accessor functions */ -#ifdef OPENSSL_SYS_MACOSX -# include <xlocale.h> -#else +#ifndef OPENSSL_NO_LOCALE # include <locale.h> -#endif - -#if defined OPENSSL_SYS_WINDOWS -# define locale_t _locale_t -# define freelocale _free_locale -#endif +# ifdef OPENSSL_SYS_MACOSX +# include <xlocale.h> +# endif static locale_t loc; +#endif static int fips_init_casecmp(void); static void fips_deinit_casecmp(void); @@ -495,22 +492,35 @@ static const OSSL_ALGORITHM *fips_query(void *provctx, int operation_id, return NULL; } +# ifndef OPENSSL_NO_LOCALE void *ossl_c_locale() { return (void *)loc; } static int fips_init_casecmp(void) { -# ifdef OPENSSL_SYS_WINDOWS +# ifdef OPENSSL_SYS_WINDOWS loc = _create_locale(LC_COLLATE, "C"); -# else +# else loc = newlocale(LC_COLLATE_MASK, "C", (locale_t) 0); -# endif +# endif return (loc == (locale_t) 0) ? 0 : 1; } static void fips_deinit_casecmp(void) { freelocale(loc); } +# else +void *ossl_c_locale() { + return NULL; +} + +static int fips_init_casecmp(void) { + return 1; +} + +static void fips_deinit_casecmp(void) { +} +# endif static void fips_teardown(void *provctx) { |