components/quagga/patches/37-cve-2017-5495.patch
author Ann Lai <ann.lai@oracle.com>
Fri, 07 Apr 2017 17:54:54 -0700
changeset 7850 b1ddd00f19fd
parent 7669 4efcda591db9
permissions -rw-r--r--
25839325 pkglint is very unhappy with the boot/shim packages now-duplicate files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7669
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     1
This patch fixes CVE-2017-5495, which is in all versions of Quagga 
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     2
prior to 1.1.0. After upgrading to a version later than that, this patch
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     3
may be removed.
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     4
See:
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     5
http://git.savannah.gnu.org/gitweb/?p=quagga.git;a=commit;h=b7ceefea77a246fe5c1dcd1b91bf6079d1b97c02
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     6
http://git.savannah.gnu.org/gitweb/?p=quagga.git;a=commit;h=7d66284a5817a1613b1e4d64a0775ec04fdf8c01
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     7
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     8
*** lib/command.c
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     9
--- lib/command.c
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    10
*************** config_from_file (struct vty *vty, FILE
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    11
*** 2306,2312 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    12
    int ret;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    13
    vector vline;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    14
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    15
!   while (fgets (vty->buf, VTY_BUFSIZ, fp))
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    16
      {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    17
        vline = cmd_make_strvec (vty->buf);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    18
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    19
--- 2306,2312 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    20
    int ret;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    21
    vector vline;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    22
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    23
!   while (fgets (vty->buf, vty->max, fp))
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    24
      {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    25
        vline = cmd_make_strvec (vty->buf);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    26
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    27
*** lib/vty.c
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    28
--- lib/vty.c
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    29
***************
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    30
*** 39,44 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    31
--- 39,46 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    32
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    33
  #include <arpa/telnet.h>
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    34
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    35
+ #define VTY_BUFSIZ 4096
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    36
+ 
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    37
  /* Vty events */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    38
  enum event 
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    39
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    40
*************** static u_char restricted_mode = 0;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    41
*** 90,95 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    42
--- 92,113 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    43
  char integrate_default[] = SYSCONFDIR INTEGRATE_DEFAULT_CONFIG;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    44
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    45
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    46
+ static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    47
+ vty_buf_assert (struct vty *vty)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    48
+ {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    49
+   assert (vty->cp <= vty->length);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    50
+   assert (vty->length < vty->max);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    51
+   assert (vty->buf[vty->length] == '\0');
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    52
+ }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    53
+ 
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    54
+ /* Sanity/safety wrappers around access to vty->buf */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    55
+ static void vty_buf_put (struct vty *vty, char c)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    56
+ {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    57
+   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    58
+   vty->buf[vty->cp] = c;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    59
+   vty->buf[vty->max - 1] = '\0';
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    60
+ }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    61
+ 
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    62
  /* VTY standard output function. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    63
  int
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    64
  vty_out (struct vty *vty, const char *format, ...)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    65
*************** vty_write (struct vty *vty, const char *
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    66
*** 470,553 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    67
    buffer_put (vty->obuf, buf, nbytes);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    68
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    69
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    70
- /* Ensure length of input buffer.  Is buffer is short, double it. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    71
- static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    72
- vty_ensure (struct vty *vty, int length)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    73
- {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    74
-   if (vty->max <= length)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    75
-     {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    76
-       vty->max *= 2;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    77
-       vty->buf = XREALLOC (MTYPE_VTY, vty->buf, vty->max);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    78
-     }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    79
- }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    80
- 
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    81
  /* Basic function to insert character into vty. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    82
  static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    83
  vty_self_insert (struct vty *vty, char c)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    84
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    85
    int i;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    86
    int length;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    87
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    88
-   vty_ensure (vty, vty->length + 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    89
    length = vty->length - vty->cp;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    90
    memmove (&vty->buf[vty->cp + 1], &vty->buf[vty->cp], length);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    91
!   vty->buf[vty->cp] = c;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    92
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    93
    vty_write (vty, &vty->buf[vty->cp], length + 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    94
    for (i = 0; i < length; i++)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    95
      vty_write (vty, &telnet_backward_char, 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    96
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    97
    vty->cp++;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    98
!   vty->length++;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    99
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   100
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   101
  /* Self insert character 'c' in overwrite mode. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   102
  static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   103
  vty_self_insert_overwrite (struct vty *vty, char c)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   104
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   105
!   vty_ensure (vty, vty->length + 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   106
!   vty->buf[vty->cp++] = c;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   107
! 
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   108
!   if (vty->cp > vty->length)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   109
!     vty->length++;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   110
! 
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   111
!   if ((vty->node == AUTH_NODE) || (vty->node == AUTH_ENABLE_NODE))
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   112
!     return;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   113
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   114
    vty_write (vty, &c, 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   115
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   116
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   117
! /* Insert a word into vty interface with overwrite mode. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   118
  static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   119
  vty_insert_word_overwrite (struct vty *vty, char *str)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   120
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   121
!   int len = strlen (str);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   122
!   vty_write (vty, str, len);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   123
!   strcpy (&vty->buf[vty->cp], str);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   124
!   vty->cp += len;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   125
    vty->length = vty->cp;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   126
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   127
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   128
  /* Forward character. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   129
  static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   130
  vty_forward_char (struct vty *vty)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   131
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   132
    if (vty->cp < vty->length)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   133
      {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   134
        vty_write (vty, &vty->buf[vty->cp], 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   135
        vty->cp++;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   136
      }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   137
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   138
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   139
  /* Backward character. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   140
  static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   141
  vty_backward_char (struct vty *vty)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   142
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   143
    if (vty->cp > 0)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   144
      {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   145
        vty->cp--;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   146
        vty_write (vty, &telnet_backward_char, 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   147
      }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   148
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   149
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   150
  /* Move to the beginning of the line. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   151
--- 488,591 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   152
    buffer_put (vty->obuf, buf, nbytes);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   153
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   154
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   155
  /* Basic function to insert character into vty. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   156
  static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   157
  vty_self_insert (struct vty *vty, char c)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   158
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   159
    int i;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   160
    int length;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   161
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   162
+   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   163
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   164
+   /* length is sans nul, max is with */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   165
+   if (vty->length + 1 >= vty->max)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   166
+     return;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   167
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   168
    length = vty->length - vty->cp;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   169
    memmove (&vty->buf[vty->cp + 1], &vty->buf[vty->cp], length);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   170
!   vty->length++;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   171
!   vty->buf[vty->length] = '\0';
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   172
! 
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   173
!   vty_buf_put (vty, c);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   174
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   175
    vty_write (vty, &vty->buf[vty->cp], length + 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   176
    for (i = 0; i < length; i++)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   177
      vty_write (vty, &telnet_backward_char, 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   178
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   179
    vty->cp++;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   180
!   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   181
!   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   182
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   183
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   184
  /* Self insert character 'c' in overwrite mode. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   185
  static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   186
  vty_self_insert_overwrite (struct vty *vty, char c)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   187
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   188
!   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   189
!   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   190
!   if (vty->cp == vty->length)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   191
!     {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   192
!       vty_self_insert (vty, c);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   193
!       return;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   194
!     }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   195
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   196
+   vty_buf_put (vty, c);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   197
+   vty->cp++;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   198
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   199
+   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   200
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   201
    vty_write (vty, &c, 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   202
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   203
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   204
! /**
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   205
!  * Insert a string into vty->buf at the current cursor position.
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   206
!  *
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   207
!  * If the resultant string would be larger than VTY_BUFSIZ it is
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   208
!  * truncated to fit.
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   209
!  */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   210
  static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   211
  vty_insert_word_overwrite (struct vty *vty, char *str)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   212
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   213
!   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   214
!   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   215
!   size_t nwrite = MIN ((int) strlen (str), vty->max - vty->cp - 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   216
!   memcpy (&vty->buf[vty->cp], str, nwrite);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   217
!   vty->cp += nwrite;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   218
    vty->length = vty->cp;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   219
+   vty->buf[vty->length] = '\0';
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   220
+   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   221
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   222
+   vty_write (vty, str, nwrite);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   223
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   224
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   225
  /* Forward character. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   226
  static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   227
  vty_forward_char (struct vty *vty)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   228
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   229
+   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   230
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   231
    if (vty->cp < vty->length)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   232
      {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   233
        vty_write (vty, &vty->buf[vty->cp], 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   234
        vty->cp++;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   235
      }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   236
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   237
+   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   238
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   239
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   240
  /* Backward character. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   241
  static void
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   242
  vty_backward_char (struct vty *vty)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   243
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   244
+   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   245
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   246
    if (vty->cp > 0)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   247
      {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   248
        vty->cp--;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   249
        vty_write (vty, &telnet_backward_char, 1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   250
      }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   251
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   252
+   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   253
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   254
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   255
  /* Move to the beginning of the line. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   256
*************** vty_history_print (struct vty *vty)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   257
*** 582,588 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   258
    length = strlen (vty->hist[vty->hp]);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   259
    memcpy (vty->buf, vty->hist[vty->hp], length);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   260
    vty->cp = vty->length = length;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   261
! 
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   262
    /* Redraw current line */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   263
    vty_redraw_line (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   264
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   265
--- 620,628 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   266
    length = strlen (vty->hist[vty->hp]);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   267
    memcpy (vty->buf, vty->hist[vty->hp], length);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   268
    vty->cp = vty->length = length;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   269
!   vty->buf[vty->length] = '\0';
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   270
!   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   271
!   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   272
    /* Redraw current line */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   273
    vty_redraw_line (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   274
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   275
*************** vty_redraw_line (struct vty *vty)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   276
*** 638,643 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   277
--- 678,685 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   278
  {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   279
    vty_write (vty, vty->buf, vty->length);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   280
    vty->cp = vty->length;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   281
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   282
+   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   283
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   284
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   285
  /* Forward word. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   286
*************** vty_delete_char (struct vty *vty)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   287
*** 737,746 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   288
        vty_down_level (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   289
        return;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   290
      }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   291
! 
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   292
    if (vty->cp == vty->length)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   293
      return;			/* completion need here? */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   294
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   295
    size = vty->length - vty->cp;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   296
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   297
    vty->length--;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   298
--- 779,790 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   299
        vty_down_level (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   300
        return;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   301
      }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   302
!   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   303
    if (vty->cp == vty->length)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   304
      return;			/* completion need here? */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   305
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   306
+   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   307
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   308
    size = vty->length - vty->cp;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   309
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   310
    vty->length--;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   311
*************** vty_kill_line (struct vty *vty)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   312
*** 787,792 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   313
--- 831,837 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   314
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   315
    memset (&vty->buf[vty->cp], 0, size);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   316
    vty->length = vty->cp;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   317
+   vty_buf_assert (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   318
  }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   319
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   320
  /* Kill line from the beginning. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   321
*************** vtysh_read (struct thread *thread)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   322
*** 2087,2098 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   323
    printf ("line: %.*s\n", nbytes, buf);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   324
  #endif /* VTYSH_DEBUG */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   325
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   326
    for (p = buf; p < buf+nbytes; p++)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   327
      {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   328
-       vty_ensure(vty, vty->length+1);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   329
        vty->buf[vty->length++] = *p;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   330
        if (*p == '\0')
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   331
  	{
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   332
  	  /* Pass this line to parser. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   333
  	  ret = vty_execute (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   334
  	  /* Note that vty_execute clears the command buffer and resets
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   335
--- 2132,2152 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   336
    printf ("line: %.*s\n", nbytes, buf);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   337
  #endif /* VTYSH_DEBUG */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   338
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   339
+   if (vty->length + nbytes >= vty->max)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   340
+     {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   341
+       /* Clear command line buffer. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   342
+       vty->cp = vty->length = 0;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   343
+       vty_clear_buf (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   344
+       vty_out (vty, "%% Command is too long.%s", VTY_NEWLINE);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   345
+       goto out;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   346
+     }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   347
+   
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   348
    for (p = buf; p < buf+nbytes; p++)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   349
      {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   350
        vty->buf[vty->length++] = *p;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   351
        if (*p == '\0')
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   352
  	{
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   353
+ 	  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   354
  	  /* Pass this line to parser. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   355
  	  ret = vty_execute (vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   356
  	  /* Note that vty_execute clears the command buffer and resets
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   357
*************** vtysh_read (struct thread *thread)
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   358
*** 2113,2118 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   359
--- 2167,2173 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   360
  	}
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   361
      }
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   362
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   363
+ out:
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   364
    vty_event (VTYSH_READ, sock, vty);
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   365
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   366
    return 0;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   367
*** lib/vty.h
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   368
--- lib/vty.h
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   369
*************** Software Foundation, Inc., 59 Temple Pla
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   370
*** 24,30 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   371
  #include "thread.h"
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   372
  #include "log.h"
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   373
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   374
- #define VTY_BUFSIZ 512
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   375
  #define VTY_MAXHIST 20
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   376
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   377
  /* VTY struct. */
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   378
--- 24,29 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   379
*** vtysh/vtysh.c
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   380
--- vtysh/vtysh.c
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   381
*************** vtysh_config_from_file (struct vty *vty,
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   382
*** 459,465 ****
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   383
    vector vline;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   384
    struct cmd_element *cmd;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   385
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   386
!   while (fgets (vty->buf, VTY_BUFSIZ, fp))
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   387
      {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   388
        if (vty->buf[0] == '!' || vty->buf[1] == '#')
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   389
  	continue;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   390
--- 459,465 ----
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   391
    vector vline;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   392
    struct cmd_element *cmd;
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   393
  
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   394
!   while (fgets (vty->buf, vty->max, fp))
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   395
      {
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   396
        if (vty->buf[0] == '!' || vty->buf[1] == '#')
4efcda591db9 25459915 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
   397
  	continue;