[packages] quagga: Drop heuristics for IPv6 address recognition
authorVasilis Tsiligiannis <acinonyx@openwrt.gr>
Fri, 13 Jul 2012 16:35:41 +0000 (16:35 +0000)
committerVasilis Tsiligiannis <acinonyx@openwrt.gr>
Fri, 13 Jul 2012 16:35:41 +0000 (16:35 +0000)
SVN-Revision: 32698

net/quagga/patches/007-drop-heuristic-ipv6-recognition.patch [new file with mode: 0644]

diff --git a/net/quagga/patches/007-drop-heuristic-ipv6-recognition.patch b/net/quagga/patches/007-drop-heuristic-ipv6-recognition.patch
new file mode 100644 (file)
index 0000000..1a0e6f4
--- /dev/null
@@ -0,0 +1,92 @@
+Index: quagga-0.99.21/lib/command.c
+===================================================================
+--- quagga-0.99.21.orig/lib/command.c
++++ quagga-0.99.21/lib/command.c
+@@ -868,86 +868,7 @@ cmd_ipv6_match (const char *str)
+   if (ret == 1)
+     return exact_match;
+-  while (*str != '\0')
+-    {
+-      switch (state)
+-      {
+-      case STATE_START:
+-        if (*str == ':')
+-          {
+-            if (*(str + 1) != ':' && *(str + 1) != '\0')
+-              return no_match;
+-            colons--;
+-            state = STATE_COLON;
+-          }
+-        else
+-          {
+-            sp = str;
+-            state = STATE_ADDR;
+-          }
+-
+-        continue;
+-      case STATE_COLON:
+-        colons++;
+-        if (*(str + 1) == ':')
+-          state = STATE_DOUBLE;
+-        else
+-          {
+-            sp = str + 1;
+-            state = STATE_ADDR;
+-          }
+-        break;
+-      case STATE_DOUBLE:
+-        if (double_colon)
+-          return no_match;
+-
+-        if (*(str + 1) == ':')
+-          return no_match;
+-        else
+-          {
+-            if (*(str + 1) != '\0')
+-              colons++;
+-            sp = str + 1;
+-            state = STATE_ADDR;
+-          }
+-
+-        double_colon++;
+-        nums++;
+-        break;
+-      case STATE_ADDR:
+-        if (*(str + 1) == ':' || *(str + 1) == '\0')
+-          {
+-            if (str - sp > 3)
+-              return no_match;
+-
+-            nums++;
+-            state = STATE_COLON;
+-          }
+-        if (*(str + 1) == '.')
+-          state = STATE_DOT;
+-        break;
+-      case STATE_DOT:
+-        state = STATE_ADDR;
+-        break;
+-      default:
+-        break;
+-      }
+-
+-      if (nums > 8)
+-      return no_match;
+-
+-      if (colons > 7)
+-      return no_match;
+-
+-      str++;
+-    }
+-
+-#if 0
+-  if (nums < 11)
+-    return partly_match;
+-#endif /* 0 */
+-
+-  return exact_match;
++  return no_match;
+ }
+ static enum match_type