xref: /freebsd/crypto/openssl/apps/version.c (revision b077aed33b7b6aefca7b17ddb250cf521f938613)
1e71b7053SJung-uk Kim /*
2*b077aed3SPierre Pronchery  * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
374664626SKris Kennaway  *
4*b077aed3SPierre Pronchery  * Licensed under the Apache License 2.0 (the "License").  You may not use
5e71b7053SJung-uk Kim  * this file except in compliance with the License.  You can obtain a copy
6e71b7053SJung-uk Kim  * in the file LICENSE in the source distribution or at
7e71b7053SJung-uk Kim  * https://www.openssl.org/source/license.html
85c87c606SMark Murray  */
974664626SKris Kennaway 
1074664626SKris Kennaway #include <stdio.h>
1174664626SKris Kennaway #include <stdlib.h>
1274664626SKris Kennaway #include <string.h>
1374664626SKris Kennaway #include "apps.h"
14e71b7053SJung-uk Kim #include "progs.h"
1574664626SKris Kennaway #include <openssl/evp.h>
1674664626SKris Kennaway #include <openssl/crypto.h>
173b4e3dcbSSimon L. B. Nielsen #include <openssl/bn.h>
1874664626SKris Kennaway 
19e71b7053SJung-uk Kim typedef enum OPTION_choice {
20*b077aed3SPierre Pronchery     OPT_COMMON,
21*b077aed3SPierre Pronchery     OPT_B, OPT_D, OPT_E, OPT_M, OPT_F, OPT_O, OPT_P, OPT_V, OPT_A, OPT_R, OPT_C
22e71b7053SJung-uk Kim } OPTION_CHOICE;
2374664626SKris Kennaway 
24e71b7053SJung-uk Kim const OPTIONS version_options[] = {
25*b077aed3SPierre Pronchery     OPT_SECTION("General"),
26e71b7053SJung-uk Kim     {"help", OPT_HELP, '-', "Display this summary"},
27*b077aed3SPierre Pronchery 
28*b077aed3SPierre Pronchery     OPT_SECTION("Output"),
29e71b7053SJung-uk Kim     {"a", OPT_A, '-', "Show all data"},
30e71b7053SJung-uk Kim     {"b", OPT_B, '-', "Show build date"},
31e71b7053SJung-uk Kim     {"d", OPT_D, '-', "Show configuration directory"},
32e71b7053SJung-uk Kim     {"e", OPT_E, '-', "Show engines directory"},
33*b077aed3SPierre Pronchery     {"m", OPT_M, '-', "Show modules directory"},
34e71b7053SJung-uk Kim     {"f", OPT_F, '-', "Show compiler flags used"},
35e71b7053SJung-uk Kim     {"o", OPT_O, '-', "Show some internal datatype options"},
36e71b7053SJung-uk Kim     {"p", OPT_P, '-', "Show target build platform"},
37e71b7053SJung-uk Kim     {"r", OPT_R, '-', "Show random seeding options"},
38e71b7053SJung-uk Kim     {"v", OPT_V, '-', "Show library version"},
39*b077aed3SPierre Pronchery     {"c", OPT_C, '-', "Show CPU settings info"},
40e71b7053SJung-uk Kim     {NULL}
41e71b7053SJung-uk Kim };
42f579bf8eSKris Kennaway 
version_main(int argc,char ** argv)43e71b7053SJung-uk Kim int version_main(int argc, char **argv)
44e71b7053SJung-uk Kim {
45e71b7053SJung-uk Kim     int ret = 1, dirty = 0, seed = 0;
465c87c606SMark Murray     int cflags = 0, version = 0, date = 0, options = 0, platform = 0, dir = 0;
47*b077aed3SPierre Pronchery     int engdir = 0, moddir = 0, cpuinfo = 0;
48e71b7053SJung-uk Kim     char *prog;
49e71b7053SJung-uk Kim     OPTION_CHOICE o;
5074664626SKris Kennaway 
51e71b7053SJung-uk Kim     prog = opt_init(argc, argv, version_options);
52e71b7053SJung-uk Kim     while ((o = opt_next()) != OPT_EOF) {
53e71b7053SJung-uk Kim         switch (o) {
54e71b7053SJung-uk Kim         case OPT_EOF:
55e71b7053SJung-uk Kim         case OPT_ERR:
56e71b7053SJung-uk Kim opthelp:
57e71b7053SJung-uk Kim             BIO_printf(bio_err, "%s: Use -help for summary.\n", prog);
5874664626SKris Kennaway             goto end;
59e71b7053SJung-uk Kim         case OPT_HELP:
60e71b7053SJung-uk Kim             opt_help(version_options);
61e71b7053SJung-uk Kim             ret = 0;
62e71b7053SJung-uk Kim             goto end;
63e71b7053SJung-uk Kim         case OPT_B:
64e71b7053SJung-uk Kim             dirty = date = 1;
65e71b7053SJung-uk Kim             break;
66e71b7053SJung-uk Kim         case OPT_D:
67e71b7053SJung-uk Kim             dirty = dir = 1;
68e71b7053SJung-uk Kim             break;
69e71b7053SJung-uk Kim         case OPT_E:
70e71b7053SJung-uk Kim             dirty = engdir = 1;
71e71b7053SJung-uk Kim             break;
72*b077aed3SPierre Pronchery         case OPT_M:
73*b077aed3SPierre Pronchery             dirty = moddir = 1;
74*b077aed3SPierre Pronchery             break;
75e71b7053SJung-uk Kim         case OPT_F:
76e71b7053SJung-uk Kim             dirty = cflags = 1;
77e71b7053SJung-uk Kim             break;
78e71b7053SJung-uk Kim         case OPT_O:
79e71b7053SJung-uk Kim             dirty = options = 1;
80e71b7053SJung-uk Kim             break;
81e71b7053SJung-uk Kim         case OPT_P:
82e71b7053SJung-uk Kim             dirty = platform = 1;
83e71b7053SJung-uk Kim             break;
84e71b7053SJung-uk Kim         case OPT_R:
85e71b7053SJung-uk Kim             dirty = seed = 1;
86e71b7053SJung-uk Kim             break;
87e71b7053SJung-uk Kim         case OPT_V:
88e71b7053SJung-uk Kim             dirty = version = 1;
89e71b7053SJung-uk Kim             break;
90*b077aed3SPierre Pronchery         case OPT_C:
91*b077aed3SPierre Pronchery             dirty = cpuinfo = 1;
92*b077aed3SPierre Pronchery             break;
93e71b7053SJung-uk Kim         case OPT_A:
94*b077aed3SPierre Pronchery             seed = options = cflags = version = date = platform
95*b077aed3SPierre Pronchery                 = dir = engdir = moddir = cpuinfo
96e71b7053SJung-uk Kim                 = 1;
97e71b7053SJung-uk Kim             break;
9874664626SKris Kennaway         }
9974664626SKris Kennaway     }
100*b077aed3SPierre Pronchery 
101*b077aed3SPierre Pronchery     /* No extra arguments. */
102*b077aed3SPierre Pronchery     argc = opt_num_rest();
103*b077aed3SPierre Pronchery     if (argc != 0)
104e71b7053SJung-uk Kim         goto opthelp;
105*b077aed3SPierre Pronchery 
106e71b7053SJung-uk Kim     if (!dirty)
107e71b7053SJung-uk Kim         version = 1;
10874664626SKris Kennaway 
109*b077aed3SPierre Pronchery     if (version)
1103b4e3dcbSSimon L. B. Nielsen         printf("%s (Library: %s)\n",
111e71b7053SJung-uk Kim                OPENSSL_VERSION_TEXT, OpenSSL_version(OPENSSL_VERSION));
1126f9291ceSJung-uk Kim     if (date)
113e71b7053SJung-uk Kim         printf("%s\n", OpenSSL_version(OPENSSL_BUILT_ON));
1146f9291ceSJung-uk Kim     if (platform)
115e71b7053SJung-uk Kim         printf("%s\n", OpenSSL_version(OPENSSL_PLATFORM));
1166f9291ceSJung-uk Kim     if (options) {
11774664626SKris Kennaway         printf("options: ");
11874664626SKris Kennaway         printf(" %s", BN_options());
11974664626SKris Kennaway         printf("\n");
12074664626SKris Kennaway     }
1216f9291ceSJung-uk Kim     if (cflags)
122e71b7053SJung-uk Kim         printf("%s\n", OpenSSL_version(OPENSSL_CFLAGS));
1236f9291ceSJung-uk Kim     if (dir)
124e71b7053SJung-uk Kim         printf("%s\n", OpenSSL_version(OPENSSL_DIR));
125e71b7053SJung-uk Kim     if (engdir)
126e71b7053SJung-uk Kim         printf("%s\n", OpenSSL_version(OPENSSL_ENGINES_DIR));
127*b077aed3SPierre Pronchery     if (moddir)
128*b077aed3SPierre Pronchery         printf("%s\n", OpenSSL_version(OPENSSL_MODULES_DIR));
129e71b7053SJung-uk Kim     if (seed) {
130*b077aed3SPierre Pronchery         const char *src = OPENSSL_info(OPENSSL_INFO_SEED_SOURCE);
131*b077aed3SPierre Pronchery         printf("Seeding source: %s\n", src ? src : "N/A");
132e71b7053SJung-uk Kim     }
133*b077aed3SPierre Pronchery     if (cpuinfo)
134*b077aed3SPierre Pronchery         printf("%s\n", OpenSSL_version(OPENSSL_CPU_INFO));
135e71b7053SJung-uk Kim     ret = 0;
13674664626SKris Kennaway  end:
137e71b7053SJung-uk Kim     return ret;
13874664626SKris Kennaway }
139*b077aed3SPierre Pronchery 
140*b077aed3SPierre Pronchery 
141*b077aed3SPierre Pronchery #if defined(__TANDEM) && defined(OPENSSL_VPROC)
142*b077aed3SPierre Pronchery /*
143*b077aed3SPierre Pronchery  * Define a VPROC function for the openssl program.
144*b077aed3SPierre Pronchery  * This is used by platform version identification tools.
145*b077aed3SPierre Pronchery  * Do not inline this procedure or make it static.
146*b077aed3SPierre Pronchery  */
147*b077aed3SPierre Pronchery # define OPENSSL_VPROC_STRING_(x)    x##_OPENSSL
148*b077aed3SPierre Pronchery # define OPENSSL_VPROC_STRING(x)     OPENSSL_VPROC_STRING_(x)
149*b077aed3SPierre Pronchery # define OPENSSL_VPROC_FUNC          OPENSSL_VPROC_STRING(OPENSSL_VPROC)
OPENSSL_VPROC_FUNC(void)150*b077aed3SPierre Pronchery void OPENSSL_VPROC_FUNC(void) {}
151*b077aed3SPierre Pronchery #endif
152