forked from Mirror/frr
Merge pull request #5209 from ton31337/feature/banner_motd_from_input
vtysh: Add an option to set banner motd from an input
This commit is contained in:
commit
220e485b4d
|
@ -238,6 +238,17 @@ Basic Config Commands
|
|||
|
||||
Set default motd string.
|
||||
|
||||
.. index:: banner motd file FILE
|
||||
.. clicmd:: banner motd file FILE
|
||||
|
||||
Set motd string from file. The file must be in directory specified
|
||||
under ``--sysconfdir``.
|
||||
|
||||
.. index:: banner motd line LINE
|
||||
.. clicmd:: banner motd line LINE
|
||||
|
||||
Set motd string from an input.
|
||||
|
||||
.. index:: no banner motd
|
||||
.. clicmd:: no banner motd
|
||||
|
||||
|
|
|
@ -198,9 +198,6 @@ static struct cmd_node enable_node = {
|
|||
|
||||
static struct cmd_node config_node = {CONFIG_NODE, "%s(config)# ", 1};
|
||||
|
||||
/* Default motd string. */
|
||||
static const char *default_motd = FRR_DEFAULT_MOTD;
|
||||
|
||||
static const struct facility_map {
|
||||
int facility;
|
||||
const char *name;
|
||||
|
@ -592,6 +589,10 @@ static int config_write_host(struct vty *vty)
|
|||
|
||||
if (host.motdfile)
|
||||
vty_out(vty, "banner motd file %s\n", host.motdfile);
|
||||
else if (host.motd
|
||||
&& strncmp(host.motd, FRR_DEFAULT_MOTD,
|
||||
strlen(host.motd)))
|
||||
vty_out(vty, "banner motd line %s\n", host.motd);
|
||||
else if (!host.motd)
|
||||
vty_out(vty, "no banner motd\n");
|
||||
}
|
||||
|
@ -2668,6 +2669,13 @@ int cmd_banner_motd_file(const char *file)
|
|||
return success;
|
||||
}
|
||||
|
||||
void cmd_banner_motd_line(const char *line)
|
||||
{
|
||||
if (host.motd)
|
||||
XFREE(MTYPE_HOST, host.motd);
|
||||
host.motd = XSTRDUP(MTYPE_HOST, line);
|
||||
}
|
||||
|
||||
DEFUN (banner_motd_file,
|
||||
banner_motd_file_cmd,
|
||||
"banner motd file FILE",
|
||||
|
@ -2688,6 +2696,26 @@ DEFUN (banner_motd_file,
|
|||
return cmd;
|
||||
}
|
||||
|
||||
DEFUN (banner_motd_line,
|
||||
banner_motd_line_cmd,
|
||||
"banner motd line LINE...",
|
||||
"Set banner\n"
|
||||
"Banner for motd\n"
|
||||
"Banner from an input\n"
|
||||
"Text\n")
|
||||
{
|
||||
int idx = 0;
|
||||
char *motd;
|
||||
|
||||
argv_find(argv, argc, "LINE", &idx);
|
||||
motd = argv_concat(argv, argc, idx);
|
||||
|
||||
cmd_banner_motd_line(motd);
|
||||
XFREE(MTYPE_TMP, motd);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (banner_motd_default,
|
||||
banner_motd_default_cmd,
|
||||
"banner motd default",
|
||||
|
@ -2695,7 +2723,7 @@ DEFUN (banner_motd_default,
|
|||
"Strings for motd\n"
|
||||
"Default string\n")
|
||||
{
|
||||
host.motd = default_motd;
|
||||
cmd_banner_motd_line(FRR_DEFAULT_MOTD);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -2864,7 +2892,7 @@ void cmd_init(int terminal)
|
|||
host.config = NULL;
|
||||
host.noconfig = (terminal < 0);
|
||||
host.lines = -1;
|
||||
host.motd = default_motd;
|
||||
cmd_banner_motd_line(FRR_DEFAULT_MOTD);
|
||||
host.motdfile = NULL;
|
||||
|
||||
/* Install top nodes. */
|
||||
|
@ -2944,6 +2972,7 @@ void cmd_init(int terminal)
|
|||
install_element(CONFIG_NODE, &no_service_password_encrypt_cmd);
|
||||
install_element(CONFIG_NODE, &banner_motd_default_cmd);
|
||||
install_element(CONFIG_NODE, &banner_motd_file_cmd);
|
||||
install_element(CONFIG_NODE, &banner_motd_line_cmd);
|
||||
install_element(CONFIG_NODE, &no_banner_motd_cmd);
|
||||
install_element(CONFIG_NODE, &service_terminal_length_cmd);
|
||||
install_element(CONFIG_NODE, &no_service_terminal_length_cmd);
|
||||
|
@ -2988,6 +3017,7 @@ void cmd_terminate(void)
|
|||
XFREE(MTYPE_HOST, host.logfile);
|
||||
XFREE(MTYPE_HOST, host.motdfile);
|
||||
XFREE(MTYPE_HOST, host.config);
|
||||
XFREE(MTYPE_HOST, host.motd);
|
||||
|
||||
list_delete(&varhandlers);
|
||||
qobj_finish();
|
||||
|
|
|
@ -78,7 +78,7 @@ struct host {
|
|||
int encrypt;
|
||||
|
||||
/* Banner configuration. */
|
||||
const char *motd;
|
||||
char *motd;
|
||||
char *motdfile;
|
||||
};
|
||||
|
||||
|
@ -499,6 +499,7 @@ extern void host_config_set(const char *);
|
|||
extern void print_version(const char *);
|
||||
|
||||
extern int cmd_banner_motd_file(const char *);
|
||||
extern void cmd_banner_motd_line(const char *line);
|
||||
|
||||
/* struct host global, ick */
|
||||
extern struct host host;
|
||||
|
|
|
@ -147,6 +147,26 @@ DEFUN (vtysh_banner_motd_file,
|
|||
return cmd_banner_motd_file(argv[idx_file]->arg);
|
||||
}
|
||||
|
||||
DEFUN (vtysh_banner_motd_line,
|
||||
vtysh_banner_motd_line_cmd,
|
||||
"banner motd line LINE...",
|
||||
"Set banner\n"
|
||||
"Banner for motd\n"
|
||||
"Banner from an input\n"
|
||||
"Text\n")
|
||||
{
|
||||
int idx = 0;
|
||||
char *motd;
|
||||
|
||||
argv_find(argv, argc, "LINE", &idx);
|
||||
motd = argv_concat(argv, argc, idx);
|
||||
|
||||
cmd_banner_motd_line(motd);
|
||||
XFREE(MTYPE_TMP, motd);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (username_nopassword,
|
||||
username_nopassword_cmd,
|
||||
"username WORD nopassword",
|
||||
|
@ -203,4 +223,5 @@ void vtysh_user_init(void)
|
|||
userlist = list_new();
|
||||
install_element(CONFIG_NODE, &username_nopassword_cmd);
|
||||
install_element(CONFIG_NODE, &vtysh_banner_motd_file_cmd);
|
||||
install_element(CONFIG_NODE, &vtysh_banner_motd_line_cmd);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue