Skip to content

Commit 09059a9

Browse files
author
Rob Sanders
committed
Fix cli_init() to check status when adding default commands and correctly cleanup if a problem
1 parent 3344c6d commit 09059a9

1 file changed

Lines changed: 29 additions & 1 deletion

File tree

libcli.c

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ struct cli_def *cli_init() {
585585

586586
cli->buf_size = 1024;
587587
if (!(cli->buffer = calloc(cli->buf_size, 1))) {
588-
free_z(cli);
588+
cli_done(cli);
589589
return 0;
590590
}
591591
cli->telnet_protocol = 1;
@@ -600,17 +600,29 @@ struct cli_def *cli_init() {
600600
cli_register_command(cli, 0, "disable", cli_disable, PRIVILEGE_PRIVILEGED, MODE_EXEC, "Turn off privileged commands");
601601

602602
c = cli_register_command(cli, 0, "configure", 0, PRIVILEGE_PRIVILEGED, MODE_EXEC, "Enter configuration mode");
603+
if (!c) {
604+
cli_done(cli);
605+
return 0;
606+
}
603607
cli_register_command(cli, c, "terminal", cli_int_configure_terminal, PRIVILEGE_PRIVILEGED, MODE_EXEC,
604608
"Conlfigure from the terminal");
605609

606610
// And now the built in filters
607611
c = cli_register_filter(cli, "begin", cli_range_filter_init, cli_range_filter, PRIVILEGE_UNPRIVILEGED, MODE_ANY,
608612
"Begin with lines that match");
613+
if (!c) {
614+
cli_done(cli);
615+
return 0;
616+
}
609617
cli_register_optarg(c, "range_start", CLI_CMD_ARGUMENT | CLI_CMD_REMAINDER_OF_LINE, PRIVILEGE_UNPRIVILEGED, MODE_ANY,
610618
"Begin showing lines that match", NULL, NULL, NULL);
611619

612620
c = cli_register_filter(cli, "between", cli_range_filter_init, cli_range_filter, PRIVILEGE_UNPRIVILEGED, MODE_ANY,
613621
"Between lines that match");
622+
if (!c) {
623+
cli_done(cli);
624+
return 0;
625+
}
614626
cli_register_optarg(c, "range_start", CLI_CMD_ARGUMENT, PRIVILEGE_UNPRIVILEGED, MODE_ANY,
615627
"Begin showing lines that match", NULL, NULL, NULL);
616628
cli_register_optarg(c, "range_end", CLI_CMD_ARGUMENT | CLI_CMD_REMAINDER_OF_LINE, PRIVILEGE_UNPRIVILEGED, MODE_ANY,
@@ -621,23 +633,39 @@ struct cli_def *cli_init() {
621633

622634
c = cli_register_filter(cli, "exclude", cli_match_filter_init, cli_match_filter, PRIVILEGE_UNPRIVILEGED, MODE_ANY,
623635
"Exclude lines that match");
636+
if (!c) {
637+
cli_done(cli);
638+
return 0;
639+
}
624640
cli_register_optarg(c, "search_pattern", CLI_CMD_ARGUMENT | CLI_CMD_REMAINDER_OF_LINE, PRIVILEGE_UNPRIVILEGED,
625641
MODE_ANY, "Search pattern", NULL, NULL, NULL);
626642

627643
c = cli_register_filter(cli, "include", cli_match_filter_init, cli_match_filter, PRIVILEGE_UNPRIVILEGED, MODE_ANY,
628644
"Include lines that match");
645+
if (!c) {
646+
cli_done(cli);
647+
return 0;
648+
}
629649
cli_register_optarg(c, "search_pattern", CLI_CMD_ARGUMENT | CLI_CMD_REMAINDER_OF_LINE, PRIVILEGE_UNPRIVILEGED,
630650
MODE_ANY, "Search pattern", NULL, NULL, NULL);
631651

632652
c = cli_register_filter(cli, "grep", cli_match_filter_init, cli_match_filter, PRIVILEGE_UNPRIVILEGED, MODE_ANY,
633653
"Include lines that match regex (options: -v, -i, -e)");
654+
if (!c) {
655+
cli_done(cli);
656+
return 0;
657+
}
634658
cli_register_optarg(c, "search_flags", CLI_CMD_HYPHENATED_OPTION, PRIVILEGE_UNPRIVILEGED, MODE_ANY,
635659
"Search flags (-[ivx]", NULL, cli_search_flags_validator, NULL);
636660
cli_register_optarg(c, "search_pattern", CLI_CMD_ARGUMENT | CLI_CMD_REMAINDER_OF_LINE, PRIVILEGE_UNPRIVILEGED,
637661
MODE_ANY, "Search pattern", NULL, NULL, NULL);
638662

639663
c = cli_register_filter(cli, "egrep", cli_match_filter_init, cli_match_filter, PRIVILEGE_UNPRIVILEGED, MODE_ANY,
640664
"Include lines that match extended regex");
665+
if (!c) {
666+
cli_done(cli);
667+
return 0;
668+
}
641669
cli_register_optarg(c, "search_flags", CLI_CMD_HYPHENATED_OPTION, PRIVILEGE_UNPRIVILEGED, MODE_ANY,
642670
"Search flags (-[ivx]", NULL, cli_search_flags_validator, NULL);
643671
cli_register_optarg(c, "search_pattern", CLI_CMD_ARGUMENT | CLI_CMD_REMAINDER_OF_LINE, PRIVILEGE_UNPRIVILEGED,

0 commit comments

Comments
 (0)