diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/asn1_time_test.c | 4 | ||||
-rw-r--r-- | test/build.info | 2 | ||||
-rw-r--r-- | test/ca_internals_test.c | 2 | ||||
-rw-r--r-- | test/testutil.h | 2 | ||||
-rw-r--r-- | test/testutil/helper.c | 90 |
5 files changed, 95 insertions, 5 deletions
diff --git a/test/asn1_time_test.c b/test/asn1_time_test.c index 7736fd3..32bc4ff 100644 --- a/test/asn1_time_test.c +++ b/test/asn1_time_test.c @@ -434,10 +434,10 @@ static int convert_asn1_to_time_t(int idx) { time_t testdateutc; - testdateutc = ossl_asn1_string_to_time_t(asn1_to_utc[idx].input); + testdateutc = test_asn1_string_to_time_t(asn1_to_utc[idx].input); if (!TEST_time_t_eq(testdateutc, asn1_to_utc[idx].expected)) { - TEST_info("ossl_asn1_string_to_time_t (%s) failed: expected %lli, got %lli\n", + TEST_info("test_asn1_string_to_time_t (%s) failed: expected %lli, got %lli\n", asn1_to_utc[idx].input, (long long int)asn1_to_utc[idx].expected, (long long int)testdateutc); diff --git a/test/build.info b/test/build.info index 9cbca83..e2b09ae 100644 --- a/test/build.info +++ b/test/build.info @@ -26,7 +26,7 @@ IF[{- !$disabled{tests} -}] testutil/format_output.c testutil/load.c testutil/fake_random.c \ testutil/test_cleanup.c testutil/main.c testutil/testutil_init.c \ testutil/options.c testutil/test_options.c testutil/provider.c \ - testutil/apps_shims.c testutil/random.c $LIBAPPSSRC + testutil/apps_shims.c testutil/random.c testutil/helper.c $LIBAPPSSRC INCLUDE[libtestutil.a]=../include ../apps/include .. DEPEND[libtestutil.a]=../libcrypto diff --git a/test/ca_internals_test.c b/test/ca_internals_test.c index 24f7ba3..776996b 100644 --- a/test/ca_internals_test.c +++ b/test/ca_internals_test.c @@ -47,7 +47,7 @@ static int test_do_updatedb(void) } testdate = test_get_argument(2); - testdateutc = ossl_asn1_string_to_time_t(testdate); + testdateutc = test_asn1_string_to_time_t(testdate); if (TEST_time_t_lt(testdateutc, 0)) { return 0; } diff --git a/test/testutil.h b/test/testutil.h index a247f55..35fbdab 100644 --- a/test/testutil.h +++ b/test/testutil.h @@ -648,5 +648,5 @@ X509 *load_cert_pem(const char *file, OSSL_LIB_CTX *libctx); X509 *load_cert_der(const unsigned char *bytes, int len); STACK_OF(X509) *load_certs_pem(const char *file); X509_REQ *load_csr_der(const char *file, OSSL_LIB_CTX *libctx); - +time_t test_asn1_string_to_time_t(const char *asn1_string); #endif /* OSSL_TESTUTIL_H */ diff --git a/test/testutil/helper.c b/test/testutil/helper.c new file mode 100644 index 0000000..8da42b0 --- /dev/null +++ b/test/testutil/helper.c @@ -0,0 +1,90 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include <stdio.h> +#include <time.h> +#include <openssl/asn1t.h> +#include "../testutil.h" + +/* + * tweak for Windows + */ +#ifdef WIN32 +# define timezone _timezone +#endif + +#if defined(__FreeBSD__) || defined(__wasi__) +# define USE_TIMEGM +#endif + +time_t test_asn1_string_to_time_t(const char *asn1_string) +{ + ASN1_TIME *timestamp_asn1 = NULL; + struct tm *timestamp_tm = NULL; +#if defined(__DJGPP__) + char *tz = NULL; +#elif !defined(USE_TIMEGM) + time_t timestamp_local; +#endif + time_t timestamp_utc; + + timestamp_asn1 = ASN1_TIME_new(); + if(timestamp_asn1 == NULL) + return -1; + if (!ASN1_TIME_set_string(timestamp_asn1, asn1_string)) + { + ASN1_TIME_free(timestamp_asn1); + return -1; + } + + timestamp_tm = OPENSSL_malloc(sizeof(*timestamp_tm)); + if (timestamp_tm == NULL) { + ASN1_TIME_free(timestamp_asn1); + return -1; + } + if (!(ASN1_TIME_to_tm(timestamp_asn1, timestamp_tm))) { + OPENSSL_free(timestamp_tm); + ASN1_TIME_free(timestamp_asn1); + return -1; + } + ASN1_TIME_free(timestamp_asn1); + +#if defined(__DJGPP__) + /* + * This is NOT thread-safe. Do not use this method for platforms other + * than djgpp. + */ + tz = getenv("TZ"); + if (tz != NULL) { + tz = OPENSSL_strdup(tz); + if (tz == NULL) { + OPENSSL_free(timestamp_tm); + return -1; + } + } + setenv("TZ", "UTC", 1); + + timestamp_utc = mktime(timestamp_tm); + + if (tz != NULL) { + setenv("TZ", tz, 1); + OPENSSL_free(tz); + } else { + unsetenv("TZ"); + } +#elif defined(USE_TIMEGM) + timestamp_utc = timegm(timestamp_tm); +#else + timestamp_local = mktime(timestamp_tm); + timestamp_utc = timestamp_local - timezone; +#endif + OPENSSL_free(timestamp_tm); + + return timestamp_utc; +} |