X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=apps%2Fopenssl.c;h=a872e2c5eeec8bd8764c7e129b75e0b9ccfd3846;hp=1c8682759fcf0ffdb2961bf533841129413c868b;hb=445bc8086172e889023b377dc05191ebddfff46e;hpb=cbe2964821bb063f61ed2544cfce196ec1c0d62b diff --git a/apps/openssl.c b/apps/openssl.c index 1c8682759f..a872e2c5ee 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -27,8 +27,9 @@ #ifdef OPENSSL_SYS_VMS # include #endif -#define INCLUDE_FUNCTION_TABLE #include "apps.h" +#define INCLUDE_FUNCTION_TABLE +#include "progs.h" /* Structure to hold the number of columns to be displayed and the * field width used to display them. @@ -73,15 +74,15 @@ static void calculate_columns(DISPLAY_COLUMNS *dc) dc->columns = (80 - 1) / dc->width; } -static int apps_startup() +static int apps_startup(void) { #ifdef SIGPIPE signal(SIGPIPE, SIG_IGN); #endif /* Set non-default library initialisation settings */ - if (!OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_ALL_BUILTIN - | OPENSSL_INIT_LOAD_CONFIG, NULL)) + if (!OPENSSL_init_ssl(OPENSSL_INIT_ENGINE_ALL_BUILTIN + | OPENSSL_INIT_LOAD_CONFIG, NULL)) return 0; setup_ui_method(); @@ -89,12 +90,13 @@ static int apps_startup() return 1; } -static void apps_shutdown() +static void apps_shutdown(void) { destroy_ui_method(); + destroy_prefix_method(); } -static char *make_config_name() +static char *make_config_name(void) { const char *t; size_t len; @@ -442,6 +444,8 @@ typedef enum HELP_CHOICE { } HELP_CHOICE; const OPTIONS help_options[] = { + {OPT_HELP_STR, 1, '-', "Usage: help [options]\n"}, + {OPT_HELP_STR, 1, '-', " help [command]\n"}, {"help", OPT_hHELP, '-', "Display this summary"}, {NULL} }; @@ -469,6 +473,14 @@ int help_main(int argc, char **argv) } } + if (opt_num_rest() == 1) { + char *new_argv[3]; + + new_argv[0] = opt_rest()[0]; + new_argv[1] = "--help"; + new_argv[2] = NULL; + return do_cmd(prog_init(), 2, new_argv); + } if (opt_num_rest() != 0) { BIO_printf(bio_err, "Usage: %s\n", prog); return 1; @@ -508,7 +520,7 @@ static void list_type(FUNC_TYPE ft, int one) { FUNCTION *fp; int i = 0; - DISPLAY_COLUMNS dc; + DISPLAY_COLUMNS dc = {0}; if (!one) calculate_columns(&dc); @@ -750,6 +762,9 @@ static void list_disabled(void) #ifdef OPENSSL_NO_SEED BIO_puts(bio_out, "SEED\n"); #endif +#ifdef OPENSSL_NO_SM2 + BIO_puts(bio_out, "SM2\n"); +#endif #ifdef OPENSSL_NO_SM3 BIO_puts(bio_out, "SM3\n"); #endif @@ -787,12 +802,19 @@ static void list_disabled(void) static LHASH_OF(FUNCTION) *prog_init(void) { - LHASH_OF(FUNCTION) *ret; + static LHASH_OF(FUNCTION) *ret = NULL; + static int prog_inited = 0; FUNCTION *f; size_t i; + if (prog_inited) + return ret; + + prog_inited = 1; + /* Sort alphabetically within category. For nicer help displays. */ - for (i = 0, f = functions; f->name != NULL; ++f, ++i) ; + for (i = 0, f = functions; f->name != NULL; ++f, ++i) + ; qsort(functions, i, sizeof(*functions), SortFnByName); if ((ret = lh_FUNCTION_new(function_hash, function_cmp)) == NULL)