lib: Modify 'banner motd file <X>'

Modify the banner motd file X command to do these things
differently:

1)  Only allow the file <X> to be in SYSCONFDIR
2)  Only allow the user to use a file that exists.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Dinesh Dutt <ddutt@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2016-07-22 19:50:51 -04:00
parent 6ac9179ca7
commit 1ee08155da

View File

@ -3912,11 +3912,25 @@ DEFUN (no_config_log_timestamp_precision,
int
cmd_banner_motd_file (const char *file)
{
if (host.motdfile)
XFREE (MTYPE_HOST, host.motdfile);
host.motdfile = XSTRDUP (MTYPE_HOST, file);
int success = CMD_SUCCESS;
char p[PATH_MAX];
char *rpath;
char *in;
return CMD_SUCCESS;
rpath = realpath (file, p);
if (!rpath)
return CMD_ERR_NO_FILE;
in = strstr (rpath, SYSCONFDIR);
if (in == rpath)
{
if (host.motdfile)
XFREE (MTYPE_HOST, host.motdfile);
host.motdfile = XSTRDUP (MTYPE_HOST, file);
}
else
success = CMD_WARNING;
return success;
}
DEFUN (banner_motd_file,
@ -3927,7 +3941,15 @@ DEFUN (banner_motd_file,
"Banner from a file\n"
"Filename\n")
{
return cmd_banner_motd_file (argv[0]);
int cmd = cmd_banner_motd_file (argv[0]);
if (cmd == CMD_ERR_NO_FILE)
vty_out (vty, "%s does not exist", argv[0]);
else if (cmd == CMD_WARNING)
vty_out (vty, "%s must be in %s",
argv[0], SYSCONFDIR);
return cmd;
}
DEFUN (banner_motd_default,