summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/basic.texi7
-rw-r--r--lib/vty.c25
2 files changed, 28 insertions, 4 deletions
diff --git a/doc/basic.texi b/doc/basic.texi
index 0f7bec9c2e..4485665afa 100644
--- a/doc/basic.texi
+++ b/doc/basic.texi
@@ -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
diff --git a/lib/vty.c b/lib/vty.c
index 68bf814ffd..7b39274ad2 100644
--- 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);