]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: Modify 'banner motd file <X>'
authorDonald Sharp <sharpd@cumulusnetwroks.com>
Fri, 22 Jul 2016 23:50:51 +0000 (19:50 -0400)
committerDonald Sharp <sharpd@cumulusnetwroks.com>
Fri, 22 Jul 2016 23:50:51 +0000 (19:50 -0400)
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>
lib/command.c

index 34864e9d3f23f489441a6c942619f47d2144fb1e..eea4fc19608dff1f88eda4b537457d8a4cdbd8f4 100644 (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;
+
+  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 CMD_SUCCESS;
+  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,