openssl/crypto/cversion.c
Tomas Mraz f4c4674526 Revert API change of OPENSSL_version()
There was an API change done as part of PR #24450.
This patch reverts it.

Fixes #25690

Reviewed-by: Saša Nedvědický <sashan@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/25692)
2024-10-17 13:36:58 +02:00

140 lines
3.5 KiB
C

/*
* Copyright 1995-2024 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 <openssl/bio.h>
#include "internal/e_os.h"
#include "internal/cryptlib.h"
#include "internal/common.h"
#include "internal/thread_once.h"
#include "buildinf.h"
unsigned long OpenSSL_version_num(void)
{
return OPENSSL_VERSION_NUMBER;
}
unsigned int OPENSSL_version_major(void)
{
return OPENSSL_VERSION_MAJOR;
}
unsigned int OPENSSL_version_minor(void)
{
return OPENSSL_VERSION_MINOR;
}
unsigned int OPENSSL_version_patch(void)
{
return OPENSSL_VERSION_PATCH;
}
const char *OPENSSL_version_pre_release(void)
{
return OPENSSL_VERSION_PRE_RELEASE;
}
const char *OPENSSL_version_build_metadata(void)
{
return OPENSSL_VERSION_BUILD_METADATA;
}
extern char ossl_cpu_info_str[];
#if defined(_WIN32) && defined(OSSL_WINCTX)
/* size: MAX_PATH + sizeof("OPENSSLDIR: \"\"") */
static char openssldir[MAX_PATH + 15];
/* size: MAX_PATH + sizeof("ENGINESDIR: \"\"") */
static char enginesdir[MAX_PATH + 15];
/* size: MAX_PATH + sizeof("MODULESDIR: \"\"") */
static char modulesdir[MAX_PATH + 15];
static CRYPTO_ONCE version_strings_once = CRYPTO_ONCE_STATIC_INIT;
DEFINE_RUN_ONCE_STATIC(version_strings_setup)
{
BIO_snprintf(openssldir, sizeof(openssldir), "OPENSSLDIR: \"%s\"",
ossl_get_openssldir());
BIO_snprintf(enginesdir, sizeof(enginesdir), "ENGINESDIR: \"%s\"",
ossl_get_enginesdir());
BIO_snprintf(modulesdir, sizeof(modulesdir), "MODULESDIR: \"%s\"",
ossl_get_modulesdir());
return 1;
}
# define TOSTR(x) #x
# define OSSL_WINCTX_STRING "OSSL_WINCTX: \"" ## TOSTR(OSSL_WINCTX) ## "\""
#endif
const char *OpenSSL_version(int t)
{
#if defined(_WIN32) && defined(OSSL_WINCTX)
/* Cannot really fail but we would return empty strings anyway */
(void)RUN_ONCE(&version_strings_once, version_strings_setup);
#endif
switch (t) {
case OPENSSL_VERSION:
return OPENSSL_VERSION_TEXT;
case OPENSSL_VERSION_STRING:
return OPENSSL_VERSION_STR;
case OPENSSL_FULL_VERSION_STRING:
return OPENSSL_FULL_VERSION_STR;
case OPENSSL_BUILT_ON:
return DATE;
case OPENSSL_CFLAGS:
return compiler_flags;
case OPENSSL_PLATFORM:
return PLATFORM;
#if defined(_WIN32) && defined(OSSL_WINCTX)
case OPENSSL_DIR:
return openssldir;
case OPENSSL_ENGINES_DIR:
return enginesdir;
case OPENSSL_MODULES_DIR:
return modulesdir;
#else
case OPENSSL_DIR:
# ifdef OPENSSLDIR
return "OPENSSLDIR: \"" OPENSSLDIR "\"";
# else
return "OPENSSLDIR: N/A";
# endif
case OPENSSL_ENGINES_DIR:
# ifdef ENGINESDIR
return "ENGINESDIR: \"" ENGINESDIR "\"";
# else
return "ENGINESDIR: N/A";
# endif
case OPENSSL_MODULES_DIR:
# ifdef MODULESDIR
return "MODULESDIR: \"" MODULESDIR "\"";
# else
return "MODULESDIR: N/A";
# endif
#endif
case OPENSSL_CPU_INFO:
if (OPENSSL_info(OPENSSL_INFO_CPU_SETTINGS) != NULL)
return ossl_cpu_info_str;
else
return "CPUINFO: N/A";
case OPENSSL_WINCTX:
#if defined(_WIN32) && defined(OSSL_WINCTX)
return OSSL_WINCTX_STRING;
#else
return "OSSL_WINCTX: Undefined";
#endif
}
return "not available";
}