may be specified either by their name or by their numeric ID, prefixed with a
sharp ('#').
-help
- Print the list of known keywords and their basic usage. The same help screen
- is also displayed for unknown commands.
+help [<command>]
+ Print the list of known keywords and their basic usage, or commands matching
+ the requested one. The same help screen is also displayed for unknown
+ commands.
new ssl cert <filename>
Create a new empty SSL certificate store to be filled with a certificate and
struct buffer out;
struct { struct cli_kw *kw; int dist; } matches[CLI_MAX_MATCHES], swp;
int idx;
+ int ishelp = 0;
int length = 0;
ha_free(&dynamic_usage_msg);
+ if (args && *args && strcmp(*args, "help") == 0) {
+ args++;
+ ishelp = 1;
+ }
+
/* first, let's measure the longest match */
list_for_each_entry(kw_list, &cli_keywords.list, list) {
for (kw = &kw_list->kw[0]; kw->str_kw[0]; kw++) {
/* now <length> equals the number of exactly matching words */
chunk_reset(tmp);
- if (!args) // this is the help message.
+ if (ishelp) // this is the help message.
chunk_strcat(tmp, "The following commands are valid at this level:\n");
else if (!length && (!*args || !**args)) // no match
chunk_strcat(tmp, "Unknown command. Please enter one of the following commands only:\n");
/* always show the prompt/help/quit commands */
chunk_strcat(tmp,
- " help : full commands list\n"
+ " help [<command>] : list matching or all commands\n"
" prompt : toggle interactive mode with prompt\n"
" quit : disconnect\n");
{
if (*args[0] == 'h')
/* help */
- cli_gen_usage_msg(appctx, NULL);
+ cli_gen_usage_msg(appctx, args);
else if (*args[0] == 'p')
/* prompt */
appctx->st1 ^= APPCTX_CLI_ST1_PROMPT;