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)
This commit is contained in:
Tomas Mraz 2024-10-15 11:18:24 +02:00 committed by Richard Levitte
parent 0f8ff8fc25
commit f4c4674526
2 changed files with 73 additions and 18 deletions

View File

@ -56,7 +56,6 @@ int version_main(int argc, char **argv)
#endif
char *prog;
OPTION_CHOICE o;
const char *tmp;
prog = opt_init(argc, argv, version_options);
while ((o = opt_next()) != OPT_EOF) {
@ -134,18 +133,12 @@ opthelp:
}
if (cflags)
printf("%s\n", OpenSSL_version(OPENSSL_CFLAGS));
if (dir) {
tmp = OpenSSL_version(OPENSSL_DIR);
printf("OPENSSLDIR: %s\n", tmp == NULL ? "Undefined" : tmp);
}
if (engdir) {
tmp = OpenSSL_version(OPENSSL_ENGINES_DIR);
printf("ENGINESDIR: %s\n", tmp == NULL ? "Undefined" : tmp);
}
if (moddir) {
tmp = OpenSSL_version(OPENSSL_MODULES_DIR);
printf("MODULESDIR: %s\n", tmp == NULL ? "Undefined" : tmp);
}
if (dir)
printf("%s\n", OpenSSL_version(OPENSSL_DIR));
if (engdir)
printf("%s\n", OpenSSL_version(OPENSSL_ENGINES_DIR));
if (moddir)
printf("%s\n", OpenSSL_version(OPENSSL_MODULES_DIR));
if (seed) {
const char *src = OPENSSL_info(OPENSSL_INFO_SEED_SOURCE);
printf("Seeding source: %s\n", src ? src : "N/A");
@ -154,7 +147,7 @@ opthelp:
printf("%s\n", OpenSSL_version(OPENSSL_CPU_INFO));
#if defined(_WIN32)
if (windows)
printf("OSSL_WINCTX: %s\n", OpenSSL_version(OPENSSL_WINCTX));
printf("%s\n", OpenSSL_version(OPENSSL_WINCTX));
#endif
ret = 0;
end:

View File

@ -7,8 +7,12 @@
* 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"
@ -44,8 +48,41 @@ const char *OPENSSL_version_build_metadata(void)
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;
@ -59,19 +96,44 @@ const char *OpenSSL_version(int t)
return compiler_flags;
case OPENSSL_PLATFORM:
return PLATFORM;
#if defined(_WIN32) && defined(OSSL_WINCTX)
case OPENSSL_DIR:
return ossl_get_openssldir();
return openssldir;
case OPENSSL_ENGINES_DIR:
return ossl_get_enginesdir();
return enginesdir;
case OPENSSL_MODULES_DIR:
return ossl_get_modulesdir();
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:
return ossl_get_wininstallcontext();
#if defined(_WIN32) && defined(OSSL_WINCTX)
return OSSL_WINCTX_STRING;
#else
return "OSSL_WINCTX: Undefined";
#endif
}
return "not available";
}