xref: /freebsd/crypto/openssl/apps/info.c (revision b077aed3)
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