summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaul <paul>2005-03-08 10:43:43 +0000
committerpaul <paul>2005-03-08 10:43:43 +0000
commit3b0c5d9a56560cfbfb1a8f5b9e6cc71025eb5490 (patch)
treea4b9c7506cb74223635135902e0479fda0b46fe2
parentc3d26c72982bc95906afb58fb46f1268bc915a3b (diff)
2005-03-08 Jeroen Massar <jeroen@unfix.org>
* vty.c: (vty_hello) display motd file, if set * command.h: add char *motdfile to struct host * command.c: (config_write_host) write out motdfile config (banner_motd_file_cmd) new command, allow motd to be read from file. (no_banner_motd_cmd) free motdfile string, if needs be. (cmd_init) init (struct host).motdfile. Add new motd file commands.
-rw-r--r--lib/ChangeLog11
-rw-r--r--lib/command.c22
-rw-r--r--lib/command.h1
-rw-r--r--lib/vty.c23
4 files changed, 54 insertions, 3 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog
index d57aa302..3b60e294 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,14 @@
+2005-03-08 Jeroen Massar <jeroen@unfix.org>
+
+ * vty.c: (vty_hello) display motd file, if set
+ * command.h: add char *motdfile to struct host
+ * command.c: (config_write_host) write out motdfile config
+ (banner_motd_file_cmd) new command, allow motd to be read from
+ file.
+ (no_banner_motd_cmd) free motdfile string, if needs be.
+ (cmd_init) init (struct host).motdfile. Add new motd file
+ commands.
+
2005-03-07 Michael Sandee <voidptr@voidptr.sboost.org>
* command.c: host.name might be NULL.
diff --git a/lib/command.c b/lib/command.c
index 1e1f3cf5..ca1100da 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -1,5 +1,5 @@
/*
- $Id: command.c,v 1.37 2005/03/07 08:35:39 hasso Exp $
+ $Id: command.c,v 1.38 2005/03/08 10:43:43 paul Exp $
Command interpreter routine for virtual terminal [aka TeletYpe]
Copyright (C) 1997, 98, 99 Kunihiro Ishiguro
@@ -597,7 +597,9 @@ config_write_host (struct vty *vty)
vty_out (vty, "service terminal-length %d%s", host.lines,
VTY_NEWLINE);
- if (! host.motd)
+ if (host.motdfile)
+ vty_out (vty, "banner motd file %s%s", host.motdfile, VTY_NEWLINE);
+ else if (! host.motd)
vty_out (vty, "no banner motd%s", VTY_NEWLINE);
return 1;
@@ -3399,6 +3401,18 @@ DEFUN (no_config_log_record_priority,
return CMD_SUCCESS;
}
+DEFUN (banner_motd_file,
+ banner_motd_file_cmd,
+ "banner motd file [FILE]",
+ "Set banner\n"
+ "Banner for motd\n"
+ "Banner from a file\n"
+ "Filename\n")
+{
+ if (host.motdfile) free(host.motdfile);
+ host.motdfile = strdup(argv[0]);
+ return CMD_SUCCESS;
+}
DEFUN (banner_motd_default,
banner_motd_default_cmd,
@@ -3419,6 +3433,8 @@ DEFUN (no_banner_motd,
"Strings for motd\n")
{
host.motd = NULL;
+ if (host.motdfile) free(host.motdfile);
+ host.motdfile = NULL;
return CMD_SUCCESS;
}
@@ -3460,6 +3476,7 @@ cmd_init (int terminal)
host.config = NULL;
host.lines = -1;
host.motd = default_motd;
+ host.motdfile = NULL;
/* Install top nodes. */
install_node (&view_node, NULL);
@@ -3539,6 +3556,7 @@ cmd_init (int terminal)
install_element (CONFIG_NODE, &service_password_encrypt_cmd);
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, &no_banner_motd_cmd);
install_element (CONFIG_NODE, &service_terminal_length_cmd);
install_element (CONFIG_NODE, &no_service_terminal_length_cmd);
diff --git a/lib/command.h b/lib/command.h
index eba919cb..14808330 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -55,6 +55,7 @@ struct host
/* Banner configuration. */
const char *motd;
+ char *motdfile;
};
/* There are some command levels which called from command node. */
diff --git a/lib/vty.c b/lib/vty.c
index f8e483f6..bb3f14a5 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -216,7 +216,28 @@ vty_time_print (struct vty *vty, int cr)
void
vty_hello (struct vty *vty)
{
- if (host.motd)
+ if (host.motdfile)
+ {
+ FILE *f;
+ char buf[4096];
+ int r;
+ f = fopen (host.motdfile, "r");
+ if (f)
+ {
+ while (!feof (f))
+ {
+ memset (buf, '\0', sizeof (buf));
+ r = fread (&buf, sizeof (buf) - 1, 1, f);
+ if (r < 0)
+ break;
+ vty_out (vty, buf);
+ }
+ fclose (f);
+ }
+ else
+ vty_out (vty, "MOTD file not found\n");
+ }
+ else if (host.motd)
vty_out (vty, host.motd);
}