]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: change command logging to be off by default, and add 'log_commands' to enable it.
authorLou Berger <lberger@labn.net>
Tue, 17 May 2016 16:19:51 +0000 (12:19 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 9 Jun 2016 15:04:21 +0000 (11:04 -0400)
doc/basic.texi
lib/vty.c

index 0f7bec9c2e1cc8f672a1fea710cdcd9519efd37f..4485665afa6f0438ba9d3ea6a0d87219ac67116f 100644 (file)
@@ -185,6 +185,13 @@ In this example, the precision is set to provide timestamps with
 millisecond accuracy.
 @end deffn
 
+@deffn Command {log commands} {}
+This command enables the logging of all commands typed by a user to
+all enabled log destinations.  The note that logging includes full
+command lines, including passwords.  Once set, command logging can only
+be turned off by restarting the daemon.
+@end deffn  
+
 @deffn Command {service password-encryption} {}
 Encrypt password.
 @end deffn
index 68bf814ffd8f619ca7b6587e065256de7d142390..7b39274ad2c2f72feba4d440e3975dfc45622c96 100644 (file)
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -90,6 +90,7 @@ static u_char restricted_mode = 0;
 /* Integrated configuration file path */
 char integrate_default[] = SYSCONFDIR INTEGRATE_DEFAULT_CONFIG;
 
+static int do_log_commands = 0;
 
 /* VTY standard output function. */
 int
@@ -402,12 +403,13 @@ vty_command (struct vty *vty, char *buf)
   int ret;
   vector vline;
   const char *protocolname;
-  char *cp;
+  char *cp = NULL;
 
   /*
    * Log non empty command lines
    */
-  cp = buf;
+  if (do_log_commands)
+    cp = buf;
   if (cp != NULL)
     {
       /* Skip white spaces. */
@@ -435,7 +437,7 @@ vty_command (struct vty *vty, char *buf)
       snprintf(prompt_str, sizeof(prompt_str), cmd_prompt (vty->node), vty_str);
 
       /* now log the command */
-      zlog(NULL, LOG_NOTICE, "%s%s", prompt_str, buf);
+      zlog(NULL, LOG_ERR, "%s%s", prompt_str, buf);
     }
   /* Split readline string up into the vector */
   vline = cmd_make_strvec (buf);
@@ -2957,6 +2959,17 @@ DEFUN (show_history,
   return CMD_SUCCESS;
 }
 
+/* vty login. */
+DEFUN (log_commands,
+       log_commands_cmd,
+       "log commands",
+       "Logging control\n"
+       "Log all commands (can't be unset without restart)\n")
+{
+  do_log_commands = 1;
+  return CMD_SUCCESS;
+}
+
 /* Display current configuration. */
 static int
 vty_config_write (struct vty *vty)
@@ -2988,7 +3001,10 @@ vty_config_write (struct vty *vty)
       else
         vty_out (vty, " anonymous restricted%s", VTY_NEWLINE);
     }
-  
+
+  if (do_log_commands)
+    vty_out (vty, "log commands%s", VTY_NEWLINE);
+    
   vty_out (vty, "!%s", VTY_NEWLINE);
 
   return CMD_SUCCESS;
@@ -3123,6 +3139,7 @@ vty_init (struct thread_master *master_thread)
   install_element (CONFIG_NODE, &service_advanced_vty_cmd);
   install_element (CONFIG_NODE, &no_service_advanced_vty_cmd);
   install_element (CONFIG_NODE, &show_history_cmd);
+  install_element (CONFIG_NODE, &log_commands_cmd);
   install_element (ENABLE_NODE, &terminal_monitor_cmd);
   install_element (ENABLE_NODE, &terminal_no_monitor_cmd);
   install_element (ENABLE_NODE, &no_terminal_monitor_cmd);