summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Hoog Antink <rha@open.ch>2012-05-09 06:35:34 +0000
committerDavid Lamparter <equinox@diac24.net>2012-05-21 15:41:14 +0200
commit7c9c6aebe8daabece9e78d47727dcdcb757c0a63 (patch)
treecba28a59fdd2012b8cadba54335901b47dd255de
parent36735ed988f96810e78d0ace2f7d8e6397db5c50 (diff)
lib: drop heuristic IPv6 address recognition
* command.c: (cmd_ipv6_match) Drop IPv6 address recognition heuristics and solely rely on inet_pton, because strings like "abcd" were mistaken for IPv6 addresses. This affects e.g. the command "neighbour WORD peer-group", which won't work with words consisting of up to 4 characters between 'a' and 'f' and digits. From: Roman Hoog Antink <rha@open.ch> [full delete instead of #if 0] Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
-rw-r--r--lib/command.c81
1 files changed, 1 insertions, 80 deletions
diff --git a/lib/command.c b/lib/command.c
index e62a7a7e..4d95e924 100644
--- a/lib/command.c
+++ b/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