diff options
-rw-r--r-- | lib/grammar_sandbox_main.c | 2 | ||||
-rw-r--r-- | lib/libfrr.c | 7 | ||||
-rw-r--r-- | lib/libfrr.h | 2 | ||||
-rw-r--r-- | lib/subdir.am | 2 | ||||
-rw-r--r-- | lib/vty.c | 34 | ||||
-rw-r--r-- | lib/vty.h | 2 | ||||
-rw-r--r-- | tests/helpers/c/main.c | 2 | ||||
-rw-r--r-- | tests/lib/cli/common_cli.c | 2 | ||||
-rw-r--r-- | tests/lib/northbound/test_oper_data.c | 2 |
9 files changed, 43 insertions, 12 deletions
diff --git a/lib/grammar_sandbox_main.c b/lib/grammar_sandbox_main.c index 38494fb00..6d28a667b 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 15de96fee..194a1d9bd 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 891e2c128..d17495e04 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 4897f5e8e..61dded05f 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 \ @@ -46,6 +46,10 @@ #include <arpa/telnet.h> #include <termios.h> +#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); @@ -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 11db2dabc..b1dcfcf70 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 393b58874..2071ae08c 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 7cd622854..3180f9f9f 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)); |