From: Donald Sharp Date: Tue, 8 Jan 2019 13:08:13 +0000 (-0500) Subject: lib: Add '--command-log-always` to all daemons startup X-Git-Tag: base_7.2~275^2~1 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=2950f5da55af16c8efd1ca24f714e9d69c602503;p=matthieu%2Ffrr.git lib: Add '--command-log-always` to all daemons startup Add 'no log commands' cli and at the same time add a --command-log-always to the daemon startup cli. If --command-log-always is specified then all commands are auto-logged and the 'no log commands' form of the command is now ignored. Signed-off-by: Donald Sharp --- diff --git a/lib/grammar_sandbox_main.c b/lib/grammar_sandbox_main.c index 38494fb007..6d28a667b3 100644 --- a/lib/grammar_sandbox_main.c +++ b/lib/grammar_sandbox_main.c @@ -56,7 +56,7 @@ int main(int argc, char **argv) host.name = strdup("test"); host.domainname = strdup("testdomainname"); - vty_init(master); + vty_init(master, true); memory_init(); yang_init(); nb_init(master, NULL, 0); diff --git a/lib/libfrr.c b/lib/libfrr.c index 15de96feee..194a1d9bd4 100644 --- a/lib/libfrr.c +++ b/lib/libfrr.c @@ -94,6 +94,7 @@ static void opt_extend(const struct optspec *os) #define OPTION_LOGLEVEL 1004 #define OPTION_TCLI 1005 #define OPTION_DB_FILE 1006 +#define OPTION_LOGGING 1007 static const struct option lo_always[] = { {"help", no_argument, NULL, 'h'}, @@ -105,6 +106,7 @@ static const struct option lo_always[] = { {"log", required_argument, NULL, OPTION_LOG}, {"log-level", required_argument, NULL, OPTION_LOGLEVEL}, {"tcli", no_argument, NULL, OPTION_TCLI}, + {"command-log-always", no_argument, NULL, OPTION_LOGGING}, {NULL}}; static const struct optspec os_always = { "hvdM:", @@ -496,6 +498,9 @@ static int frr_opt(int opt) case OPTION_LOGLEVEL: di->early_loglevel = optarg; break; + case OPTION_LOGGING: + di->log_always = true; + break; default: return 1; } @@ -648,7 +653,7 @@ struct thread_master *frr_init(void) else cmd_init(1); - vty_init(master); + vty_init(master, di->log_always); memory_init(); log_ref_init(); diff --git a/lib/libfrr.h b/lib/libfrr.h index 891e2c1282..d17495e04a 100644 --- a/lib/libfrr.h +++ b/lib/libfrr.h @@ -97,6 +97,8 @@ struct frr_daemon_info { const struct frr_yang_module_info **yang_modules; size_t n_yang_modules; + + bool log_always; }; /* execname is the daemon's executable (and pidfile and configfile) name, diff --git a/lib/subdir.am b/lib/subdir.am index 4897f5e8e5..61dded05f8 100644 --- a/lib/subdir.am +++ b/lib/subdir.am @@ -131,6 +131,8 @@ lib/nexthop_group_clippy.c: $(CLIPPY_DEPS) lib/nexthop_group.lo: lib/nexthop_group_clippy.c lib/northbound_cli_clippy.c: $(CLIPPY_DEPS) lib/northbound_cli.lo: lib/northbound_cli_clippy.c +lib/vty_clippy.c: $(CLIPPY_DEPS) +lib/vty.lo: lib/vty_clippy.c pkginclude_HEADERS += \ lib/agg_table.h \ diff --git a/lib/vty.c b/lib/vty.c index 2d97cca351..8273d0e0c0 100644 --- a/lib/vty.c +++ b/lib/vty.c @@ -46,6 +46,10 @@ #include #include +#ifndef VTYSH_EXTRACT_PL +#include "lib/vty_clippy.c" +#endif + DEFINE_MTYPE_STATIC(LIB, VTY, "VTY") DEFINE_MTYPE_STATIC(LIB, VTY_OUT_BUF, "VTY output buffer") DEFINE_MTYPE_STATIC(LIB, VTY_HIST, "VTY history") @@ -92,7 +96,8 @@ static int no_password_check = 0; /* Integrated configuration file path */ static char integrate_default[] = SYSCONFDIR INTEGRATE_DEFAULT_CONFIG; -static int do_log_commands = 0; +static bool do_log_commands; +static bool do_log_commands_perm; void vty_frame(struct vty *vty, const char *format, ...) { @@ -2975,13 +2980,24 @@ DEFUN_NOSH (show_history, } /* vty login. */ -DEFUN (log_commands, +DEFPY (log_commands, log_commands_cmd, - "log commands", + "[no] log commands", + NO_STR "Logging control\n" - "Log all commands (can't be unset without restart)\n") + "Log all commands\n") { - do_log_commands = 1; + if (no) { + if (do_log_commands_perm) { + vty_out(vty, + "Daemon started with permanent logging turned on for commands, ignoring\n"); + return CMD_WARNING; + } + + do_log_commands = false; + } else + do_log_commands = true; + return CMD_SUCCESS; } @@ -3101,7 +3117,7 @@ void vty_init_vtysh(void) } /* Install vty's own commands like `who' command. */ -void vty_init(struct thread_master *master_thread) +void vty_init(struct thread_master *master_thread, bool do_command_logging) { /* For further configuration read, preserve current directory. */ vty_save_cwd(); @@ -3125,6 +3141,12 @@ void vty_init(struct thread_master *master_thread) install_element(CONFIG_NODE, &no_service_advanced_vty_cmd); install_element(CONFIG_NODE, &show_history_cmd); install_element(CONFIG_NODE, &log_commands_cmd); + + if (do_command_logging) { + do_log_commands = true; + do_log_commands_perm = true; + } + install_element(ENABLE_NODE, &terminal_monitor_cmd); install_element(ENABLE_NODE, &terminal_no_monitor_cmd); install_element(ENABLE_NODE, &no_terminal_monitor_cmd); diff --git a/lib/vty.h b/lib/vty.h index 98d75542fd..4847c9f189 100644 --- a/lib/vty.h +++ b/lib/vty.h @@ -290,7 +290,7 @@ struct vty_arg { #endif /* Prototypes. */ -extern void vty_init(struct thread_master *); +extern void vty_init(struct thread_master *, bool do_command_logging); extern void vty_init_vtysh(void); extern void vty_terminate(void); extern void vty_reset(void); diff --git a/tests/helpers/c/main.c b/tests/helpers/c/main.c index 11db2dabc3..b1dcfcf707 100644 --- a/tests/helpers/c/main.c +++ b/tests/helpers/c/main.c @@ -153,7 +153,7 @@ int main(int argc, char **argv) /* Library inits. */ cmd_init(1); - vty_init(master); + vty_init(master, false); memory_init(); yang_init(); nb_init(master, NULL, 0); diff --git a/tests/lib/cli/common_cli.c b/tests/lib/cli/common_cli.c index 393b588745..2071ae08cd 100644 --- a/tests/lib/cli/common_cli.c +++ b/tests/lib/cli/common_cli.c @@ -82,7 +82,7 @@ int main(int argc, char **argv) cmd_hostname_set("test"); cmd_domainname_set("test.domain"); - vty_init(master); + vty_init(master, false); memory_init(); yang_init(); nb_init(master, NULL, 0); diff --git a/tests/lib/northbound/test_oper_data.c b/tests/lib/northbound/test_oper_data.c index 7cd622854e..3180f9f9f3 100644 --- a/tests/lib/northbound/test_oper_data.c +++ b/tests/lib/northbound/test_oper_data.c @@ -411,7 +411,7 @@ int main(int argc, char **argv) /* Library inits. */ cmd_init(1); cmd_hostname_set("test"); - vty_init(master); + vty_init(master, false); memory_init(); yang_init(); nb_init(master, modules, array_size(modules));