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