|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
From edb8d6dc015b7316bdb1a70507d78fdeeecb17b3 Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
From: Quentin Young <qlyoung@cumulusnetworks.com>
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
Date: Tue, 10 Jan 2017 23:33:50 +0000
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
Subject: [PATCH] lib: limit size of vty buffer to 4096 bytes
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
This removes the automatic resizing of the vty input buffer and places a
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
hard size cap of 4096 bytes. It also fixes a potentially unsafe strcpy.
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
[Edits by Paul Jakma, paul@jakma.org]
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
(cherry-picked from commit b7ceefea77a246fe5c1dcd1b91bf6079d1b97c02)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
---
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
lib/command.c | 2 +-
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
lib/vty.c | 58 ++++++++++++++++++++++++++++++++--------------------------
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
lib/vty.h | 1 -
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vtysh/vtysh.c | 2 +-
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
4 files changed, 34 insertions(+), 29 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
diff --git a/lib/command.c b/lib/command.c
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
index 8317789..cf616d4 100644
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
--- a/lib/command.c
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+++ b/lib/command.c
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
@@ -2769,7 +2769,7 @@ config_from_file (struct vty *vty, FILE *fp, unsigned int *line_num)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
*line_num = 0;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vector vline;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- while (fgets (vty->buf, VTY_BUFSIZ, fp))
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ while (fgets (vty->buf, vty->max, fp))
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
++(*line_num);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vline = cmd_make_strvec (vty->buf);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
diff --git a/lib/vty.c b/lib/vty.c
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
index 750f885..cda72a0 100644
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
--- a/lib/vty.c
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+++ b/lib/vty.c
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
@@ -39,6 +39,8 @@
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
#include <arpa/telnet.h>
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+#define VTY_BUFSIZ 4096
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
/* Vty events */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
enum event
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
@@ -470,17 +472,6 @@ vty_write (struct vty *vty, const char *buf, size_t nbytes)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
buffer_put (vty->obuf, buf, nbytes);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
-/* Ensure length of input buffer. Is buffer is short, double it. */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
-static void
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
-vty_ensure (struct vty *vty, int length)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
-{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- if (vty->max <= length)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- {
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- vty->max *= 2;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- vty->buf = XREALLOC (MTYPE_VTY, vty->buf, vty->max);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- }
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
-}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
-
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
/* Basic function to insert character into vty. */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
static void
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vty_self_insert (struct vty *vty, char c)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
@@ -488,7 +479,9 @@ vty_self_insert (struct vty *vty, char c)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
int i;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
int length;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- vty_ensure (vty, vty->length + 1);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ if (vty->length + 1 > VTY_BUFSIZ)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ return;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
length = vty->length - vty->cp;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
memmove (&vty->buf[vty->cp + 1], &vty->buf[vty->cp], length);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vty->buf[vty->cp] = c;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
@@ -505,26 +498,29 @@ vty_self_insert (struct vty *vty, char c)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
static void
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vty_self_insert_overwrite (struct vty *vty, char c)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- vty_ensure (vty, vty->length + 1);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- vty->buf[vty->cp++] = c;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
-
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- if (vty->cp > vty->length)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- vty->length++;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
-
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- if ((vty->node == AUTH_NODE) || (vty->node == AUTH_ENABLE_NODE))
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- return;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ if (vty->cp == vty->length)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ {
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ vty_self_insert (vty, c);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ return;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ vty->buf[vty->cp++] = c;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vty_write (vty, &c, 1);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
-/* Insert a word into vty interface with overwrite mode. */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+/**
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ * Insert a string into vty->buf at the current cursor position.
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ *
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ * If the resultant string would be larger than VTY_BUFSIZ it is
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ * truncated to fit.
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
static void
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vty_insert_word_overwrite (struct vty *vty, char *str)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- int len = strlen (str);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- vty_write (vty, str, len);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- strcpy (&vty->buf[vty->cp], str);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- vty->cp += len;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ size_t nwrite = MIN ((int) strlen (str), VTY_BUFSIZ - vty->cp);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ vty_write (vty, str, nwrite);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ strncpy (&vty->buf[vty->cp], str, nwrite);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ vty->cp += nwrite;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vty->length = vty->cp;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
@@ -2091,12 +2087,21 @@ vtysh_read (struct thread *thread)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
printf ("line: %.*s\n", nbytes, buf);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
#endif /* VTYSH_DEBUG */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ if (vty->length + nbytes > VTY_BUFSIZ)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ {
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ /* Clear command line buffer. */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ vty->cp = vty->length = 0;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ vty_clear_buf (vty);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ vty_out (vty, "%% Command is too long.%s", VTY_NEWLINE);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ goto out;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
for (p = buf; p < buf+nbytes; p++)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- vty_ensure(vty, vty->length+1);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vty->buf[vty->length++] = *p;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
if (*p == '\0')
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
/* Pass this line to parser. */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
ret = vty_execute (vty);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
/* Note that vty_execute clears the command buffer and resets
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
@@ -2117,6 +2122,7 @@ vtysh_read (struct thread *thread)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+out:
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vty_event (VTYSH_READ, sock, vty);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
return 0;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
diff --git a/lib/vty.h b/lib/vty.h
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
index f31f4b5..86eef17 100644
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
--- a/lib/vty.h
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+++ b/lib/vty.h
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
@@ -25,7 +25,6 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
#include "log.h"
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
#include "sockunion.h"
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
-#define VTY_BUFSIZ 512
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
#define VTY_MAXHIST 20
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
/* VTY struct. */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
index 984f8d3..a673eaa 100644
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
--- a/vtysh/vtysh.c
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+++ b/vtysh/vtysh.c
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
@@ -460,7 +460,7 @@ vtysh_config_from_file (struct vty *vty, FILE *fp)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
vector vline;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
struct cmd_element *cmd;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
- while (fgets (vty->buf, VTY_BUFSIZ, fp))
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
+ while (fgets (vty->buf, vty->max, fp))
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
if (vty->buf[0] == '!' || vty->buf[1] == '#')
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
continue;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
--
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
2.9.3
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
65ebe04 |
|