1*b077aed3SPierre Pronchery /*
2*b077aed3SPierre Pronchery * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
3*b077aed3SPierre Pronchery *
4*b077aed3SPierre Pronchery * Licensed under the Apache License 2.0 (the "License"). You may not use
5*b077aed3SPierre Pronchery * this file except in compliance with the License. You can obtain a copy
6*b077aed3SPierre Pronchery * in the file LICENSE in the source distribution or at
7*b077aed3SPierre Pronchery * https://www.openssl.org/source/license.html
8*b077aed3SPierre Pronchery */
9*b077aed3SPierre Pronchery
10*b077aed3SPierre Pronchery #include <openssl/crypto.h>
11*b077aed3SPierre Pronchery #include "apps.h"
12*b077aed3SPierre Pronchery #include "progs.h"
13*b077aed3SPierre Pronchery
14*b077aed3SPierre Pronchery typedef enum OPTION_choice {
15*b077aed3SPierre Pronchery OPT_COMMON,
16*b077aed3SPierre Pronchery OPT_CONFIGDIR, OPT_ENGINESDIR, OPT_MODULESDIR, OPT_DSOEXT, OPT_DIRNAMESEP,
17*b077aed3SPierre Pronchery OPT_LISTSEP, OPT_SEEDS, OPT_CPUSETTINGS
18*b077aed3SPierre Pronchery } OPTION_CHOICE;
19*b077aed3SPierre Pronchery
20*b077aed3SPierre Pronchery const OPTIONS info_options[] = {
21*b077aed3SPierre Pronchery
22*b077aed3SPierre Pronchery OPT_SECTION("General"),
23*b077aed3SPierre Pronchery {"help", OPT_HELP, '-', "Display this summary"},
24*b077aed3SPierre Pronchery
25*b077aed3SPierre Pronchery OPT_SECTION("Output"),
26*b077aed3SPierre Pronchery {"configdir", OPT_CONFIGDIR, '-', "Default configuration file directory"},
27*b077aed3SPierre Pronchery {"enginesdir", OPT_ENGINESDIR, '-', "Default engine module directory"},
28*b077aed3SPierre Pronchery {"modulesdir", OPT_MODULESDIR, '-',
29*b077aed3SPierre Pronchery "Default module directory (other than engine modules)"},
30*b077aed3SPierre Pronchery {"dsoext", OPT_DSOEXT, '-', "Configured extension for modules"},
31*b077aed3SPierre Pronchery {"dirnamesep", OPT_DIRNAMESEP, '-', "Directory-filename separator"},
32*b077aed3SPierre Pronchery {"listsep", OPT_LISTSEP, '-', "List separator character"},
33*b077aed3SPierre Pronchery {"seeds", OPT_SEEDS, '-', "Seed sources"},
34*b077aed3SPierre Pronchery {"cpusettings", OPT_CPUSETTINGS, '-', "CPU settings info"},
35*b077aed3SPierre Pronchery {NULL}
36*b077aed3SPierre Pronchery };
37*b077aed3SPierre Pronchery
info_main(int argc,char ** argv)38*b077aed3SPierre Pronchery int info_main(int argc, char **argv)
39*b077aed3SPierre Pronchery {
40*b077aed3SPierre Pronchery int ret = 1, dirty = 0, type = 0;
41*b077aed3SPierre Pronchery char *prog;
42*b077aed3SPierre Pronchery OPTION_CHOICE o;
43*b077aed3SPierre Pronchery
44*b077aed3SPierre Pronchery prog = opt_init(argc, argv, info_options);
45*b077aed3SPierre Pronchery while ((o = opt_next()) != OPT_EOF) {
46*b077aed3SPierre Pronchery switch (o) {
47*b077aed3SPierre Pronchery default:
48*b077aed3SPierre Pronchery opthelp:
49*b077aed3SPierre Pronchery BIO_printf(bio_err, "%s: Use -help for summary.\n", prog);
50*b077aed3SPierre Pronchery goto end;
51*b077aed3SPierre Pronchery case OPT_HELP:
52*b077aed3SPierre Pronchery opt_help(info_options);
53*b077aed3SPierre Pronchery ret = 0;
54*b077aed3SPierre Pronchery goto end;
55*b077aed3SPierre Pronchery case OPT_CONFIGDIR:
56*b077aed3SPierre Pronchery type = OPENSSL_INFO_CONFIG_DIR;
57*b077aed3SPierre Pronchery dirty++;
58*b077aed3SPierre Pronchery break;
59*b077aed3SPierre Pronchery case OPT_ENGINESDIR:
60*b077aed3SPierre Pronchery type = OPENSSL_INFO_ENGINES_DIR;
61*b077aed3SPierre Pronchery dirty++;
62*b077aed3SPierre Pronchery break;
63*b077aed3SPierre Pronchery case OPT_MODULESDIR:
64*b077aed3SPierre Pronchery type = OPENSSL_INFO_MODULES_DIR;
65*b077aed3SPierre Pronchery dirty++;
66*b077aed3SPierre Pronchery break;
67*b077aed3SPierre Pronchery case OPT_DSOEXT:
68*b077aed3SPierre Pronchery type = OPENSSL_INFO_DSO_EXTENSION;
69*b077aed3SPierre Pronchery dirty++;
70*b077aed3SPierre Pronchery break;
71*b077aed3SPierre Pronchery case OPT_DIRNAMESEP:
72*b077aed3SPierre Pronchery type = OPENSSL_INFO_DIR_FILENAME_SEPARATOR;
73*b077aed3SPierre Pronchery dirty++;
74*b077aed3SPierre Pronchery break;
75*b077aed3SPierre Pronchery case OPT_LISTSEP:
76*b077aed3SPierre Pronchery type = OPENSSL_INFO_LIST_SEPARATOR;
77*b077aed3SPierre Pronchery dirty++;
78*b077aed3SPierre Pronchery break;
79*b077aed3SPierre Pronchery case OPT_SEEDS:
80*b077aed3SPierre Pronchery type = OPENSSL_INFO_SEED_SOURCE;
81*b077aed3SPierre Pronchery dirty++;
82*b077aed3SPierre Pronchery break;
83*b077aed3SPierre Pronchery case OPT_CPUSETTINGS:
84*b077aed3SPierre Pronchery type = OPENSSL_INFO_CPU_SETTINGS;
85*b077aed3SPierre Pronchery dirty++;
86*b077aed3SPierre Pronchery break;
87*b077aed3SPierre Pronchery }
88*b077aed3SPierre Pronchery }
89*b077aed3SPierre Pronchery if (opt_num_rest() != 0)
90*b077aed3SPierre Pronchery goto opthelp;
91*b077aed3SPierre Pronchery if (dirty > 1) {
92*b077aed3SPierre Pronchery BIO_printf(bio_err, "%s: Only one item allowed\n", prog);
93*b077aed3SPierre Pronchery goto opthelp;
94*b077aed3SPierre Pronchery }
95*b077aed3SPierre Pronchery if (dirty == 0) {
96*b077aed3SPierre Pronchery BIO_printf(bio_err, "%s: No items chosen\n", prog);
97*b077aed3SPierre Pronchery goto opthelp;
98*b077aed3SPierre Pronchery }
99*b077aed3SPierre Pronchery
100*b077aed3SPierre Pronchery BIO_printf(bio_out, "%s\n", OPENSSL_info(type));
101*b077aed3SPierre Pronchery ret = 0;
102*b077aed3SPierre Pronchery end:
103*b077aed3SPierre Pronchery return ret;
104*b077aed3SPierre Pronchery }
105