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:
Renato Westphal 2019-11-12 13:39:46 -03:00 committed by GitHub
commit 220e485b4d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 69 additions and 6 deletions

View file

@ -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

View file

@ -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();

View file

@ -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;

View file

@ -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);
}