diff options
-rw-r--r-- | lib/ChangeLog | 7 | ||||
-rw-r--r-- | lib/command.c | 8 | ||||
-rw-r--r-- | lib/vty.c | 19 |
3 files changed, 22 insertions, 12 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog index 3b60e294..ca5d4c3c 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,10 @@ +2005-03-08 Paul Jakma <paul.jakma@sun.com> + + * command.c: (banner_motd_file_cmd) use XSTRDUP/XFREE + * vty.c: (vty_hello) suggestions from Andrew, read by line and + stub out trailling non-printable characters on each line thus + allowing us to specify VTY_NEWLINE to vty_out. + 2005-03-08 Jeroen Massar <jeroen@unfix.org> * vty.c: (vty_hello) display motd file, if set diff --git a/lib/command.c b/lib/command.c index ca1100da..7656f680 100644 --- a/lib/command.c +++ b/lib/command.c @@ -1,5 +1,5 @@ /* - $Id: command.c,v 1.38 2005/03/08 10:43:43 paul Exp $ + $Id: command.c,v 1.39 2005/03/08 15:16:57 paul Exp $ Command interpreter routine for virtual terminal [aka TeletYpe] Copyright (C) 1997, 98, 99 Kunihiro Ishiguro @@ -3409,8 +3409,10 @@ DEFUN (banner_motd_file, "Banner from a file\n" "Filename\n") { - if (host.motdfile) free(host.motdfile); - host.motdfile = strdup(argv[0]); + if (host.motdfile) + XFREE (MTYPE_TMP, host.motdfile); + host.motdfile = XSTRDUP (MTYPE_TMP, argv[0]); + return CMD_SUCCESS; } @@ -220,22 +220,23 @@ vty_hello (struct vty *vty) { FILE *f; char buf[4096]; - int r; + f = fopen (host.motdfile, "r"); if (f) { - while (!feof (f)) + while (fgets (buf, sizeof (buf), f)) { - memset (buf, '\0', sizeof (buf)); - r = fread (&buf, sizeof (buf) - 1, 1, f); - if (r < 0) - break; - vty_out (vty, buf); - } + char *s; + /* work backwards and squash all isspace() chars + * we want nul terminated for vty_out */ + for (s = buf+strlen(buf); (s > buf) && isspace(*(s-1)); s--); + *s = '\0'; + vty_out (vty, "%s%s", buf, VTY_NEWLINE); + } fclose (f); } else - vty_out (vty, "MOTD file not found\n"); + vty_out (vty, "MOTD file not found%s", VTY_NEWLINE); } else if (host.motd) vty_out (vty, host.motd); |