]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Revert API change of OPENSSL_version()
authorTomas Mraz <tomas@openssl.org>
Tue, 15 Oct 2024 09:18:24 +0000 (11:18 +0200)
committerRichard Levitte <levitte@openssl.org>
Thu, 17 Oct 2024 11:36:58 +0000 (13:36 +0200)
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)

apps/version.c
crypto/cversion.c

index d4110c5e4006a47b9a2be9ad79f50f408ed3ef63..89fb64b70a4d0ad6a3b2bf4898045fb60f6ccb7d 100644 (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:
index c0ff19f6b661266bc4ba4c2a3c5bdab80fa3faee..87154645b0f05c581671b6ef80fd65f3aae16d01 100644 (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 openssldir;
+    case OPENSSL_ENGINES_DIR:
+        return enginesdir;
+    case OPENSSL_MODULES_DIR:
+        return modulesdir;
+#else
     case OPENSSL_DIR:
-        return ossl_get_openssldir();
+# ifdef OPENSSLDIR
+        return "OPENSSLDIR: \"" OPENSSLDIR "\"";
+# else
+        return "OPENSSLDIR: N/A";
+# endif
     case OPENSSL_ENGINES_DIR:
-        return ossl_get_enginesdir();
+# ifdef ENGINESDIR
+        return "ENGINESDIR: \"" ENGINESDIR "\"";
+# else
+        return "ENGINESDIR: N/A";
+# endif
     case OPENSSL_MODULES_DIR:
-        return ossl_get_modulesdir();
+# 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";
 }