diff options
author | David Lamparter <equinox@diac24.net> | 2010-02-05 01:40:40 +0100 |
---|---|---|
committer | David Lamparter <equinox@diac24.net> | 2010-02-05 01:40:40 +0100 |
commit | f06277c84f7604b380bdac491e23c848d4952d18 (patch) | |
tree | 41a46707f2780d48893140e42ca3988fc761242f /lib/vty.c | |
parent | 447a9a8dbde95fc6ce92691491ac193f0199e2cd (diff) | |
parent | 590f04362a6dd546e868b5160a72443ce97547ca (diff) | |
download | quagga-f06277c84f7604b380bdac491e23c848d4952d18.tar.bz2 quagga-f06277c84f7604b380bdac491e23c848d4952d18.tar.xz |
Merge branch 'patches/smallones' into dn42
Diffstat (limited to 'lib/vty.c')
-rw-r--r-- | lib/vty.c | 28 |
1 files changed, 19 insertions, 9 deletions
@@ -250,7 +250,7 @@ vty_hello (struct vty *vty) vty_out (vty, "MOTD file not found%s", VTY_NEWLINE); } else if (host.motd) - vty_out (vty, host.motd); + vty_out (vty, "%s", host.motd); } /* Put out prompt and wait input from user. */ @@ -1842,7 +1842,7 @@ vty_serv_sock_addrinfo (const char *hostname, unsigned short port) freeaddrinfo (ainfo_save); } -#endif /* HAVE_IPV6 && ! NRL */ +#else /* HAVE_IPV6 && ! NRL */ /* Make vty server socket. */ static void @@ -1908,6 +1908,7 @@ vty_serv_sock_family (const char* addr, unsigned short port, int family) /* Add vty server event. */ vty_event (VTY_SERV, accept_sock, NULL); } +#endif /* HAVE_IPV6 && ! NRL */ #ifdef VTYSH /* For sockaddr_un. */ @@ -2232,28 +2233,37 @@ vty_read_file (FILE *confp) { int ret; struct vty *vty; + unsigned int line_num = 15; vty = vty_new (); - vty->fd = 0; /* stdout */ - vty->type = VTY_TERM; + vty->fd = dup(STDERR_FILENO); /* vty_close() will close this */ + if (vty->fd < 0) + { + /* Fine, we couldn't make a new fd. vty_close doesn't close stdout. */ + vty->fd = STDOUT_FILENO; + } + vty->type = VTY_FILE; vty->node = CONFIG_NODE; /* Execute configuration file */ - ret = config_from_file (vty, confp); + ret = config_from_file (vty, confp, &line_num); + + /* Flush any previous errors before printing messages below */ + buffer_flush_all (vty->obuf, vty->fd); if ( !((ret == CMD_SUCCESS) || (ret == CMD_ERR_NOTHING_TODO)) ) { switch (ret) { case CMD_ERR_AMBIGUOUS: - fprintf (stderr, "Ambiguous command.\n"); + fprintf (stderr, "*** Error reading config: Ambiguous command.\n"); break; case CMD_ERR_NO_MATCH: - fprintf (stderr, "There is no such command.\n"); + fprintf (stderr, "*** Error reading config: There is no such command.\n"); break; } - fprintf (stderr, "Error occured during reading below line.\n%s\n", - vty->buf); + fprintf (stderr, "*** Error occured processing line %u, below:\n%s\n", + line_num, vty->buf); vty_close (vty); exit (1); } |