summaryrefslogtreecommitdiffstats
path: root/providers/fips
diff options
context:
space:
mode:
authorTomas Mraz <tomas@openssl.org>2022-05-04 16:58:06 +0200
committerTomas Mraz <tomas@openssl.org>2022-05-13 08:30:41 +0200
commitb98f989e0c741d7534a58ba3fb22f5af0f016ca4 (patch)
treedca8f71bc7f5d7513e584ff061baf2fd257638a0 /providers/fips
parent615525bd4d6bbc56601fbdc82e7ac20344f48872 (diff)
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')
-rw-r--r--providers/fips/fipsprov.c34
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)
{