Skip to content

Commit

Permalink
lib: Add '--command-log-always` to all daemons startup
Browse files Browse the repository at this point in the history
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 <sharpd@cumulusnetworks.com>
  • Loading branch information
donaldsharp committed May 31, 2019
1 parent 9c61cec commit 2950f5d
Show file tree
Hide file tree
Showing 9 changed files with 43 additions and 12 deletions.
2 changes: 1 addition & 1 deletion lib/grammar_sandbox_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
7 changes: 6 additions & 1 deletion lib/libfrr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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'},
Expand All @@ -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:",
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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();
Expand Down
2 changes: 2 additions & 0 deletions lib/libfrr.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 2 additions & 0 deletions lib/subdir.am
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
34 changes: 28 additions & 6 deletions lib/vty.c
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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, ...)
{
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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();
Expand All @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion lib/vty.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion tests/helpers/c/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion tests/lib/cli/common_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion tests/lib/northbound/test_oper_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down

0 comments on commit 2950f5d

Please sign in to comment.