projects
/
project
/
odhcpd.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d21af09
)
Fix parsing of static ndp entries
author
Hans Dedecker
<dedeckeh@gmail.com>
Sat, 22 Feb 2014 08:22:37 +0000
(09:22 +0100)
committer
Steven Barth
<steven@midlink.org>
Tue, 25 Feb 2014 11:08:24 +0000
(12:08 +0100)
src/ndp.c
patch
|
blob
|
history
diff --git
a/src/ndp.c
b/src/ndp.c
index
6d18bb5
..
e006c85
100644
(file)
--- a/
src/ndp.c
+++ b/
src/ndp.c
@@
-167,6
+167,7
@@
int setup_ndp_interface(struct interface *iface, bool enable)
memcpy(entry, iface->static_ndp, iface->static_ndp_len);
for (entry = strtok_r(entry, " ", &saveptr); entry; entry = strtok_r(NULL, " ", &saveptr)) {
memcpy(entry, iface->static_ndp, iface->static_ndp_len);
for (entry = strtok_r(entry, " ", &saveptr); entry; entry = strtok_r(NULL, " ", &saveptr)) {
+ char *sep;
struct ndp_neighbor *n = malloc(sizeof(*n));
if (!n) {
syslog(LOG_ERR, "Malloc failed for static NDP-prefix %s", entry);
struct ndp_neighbor *n = malloc(sizeof(*n));
if (!n) {
syslog(LOG_ERR, "Malloc failed for static NDP-prefix %s", entry);
@@
-176,12
+177,20
@@
int setup_ndp_interface(struct interface *iface, bool enable)
n->iface = iface;
n->timeout = 0;
n->iface = iface;
n->timeout = 0;
-
char ipbuf[INET6_ADDRSTRLEN]
;
- if (
sscanf(entry, "%45s/%hhu", ipbuf, &n->len) < 2
- || n->len > 128 || inet_pton(AF_INET6, ipbuf, &n->addr) != 1) {
+
sep = strchr(entry, '/')
;
+ if (
!sep) {
+ free(n);
syslog(LOG_ERR, "Invalid static NDP-prefix %s", entry);
return -1;
}
syslog(LOG_ERR, "Invalid static NDP-prefix %s", entry);
return -1;
}
+
+ *sep = 0;
+ n->len = atoi(sep + 1);
+ if (inet_pton(AF_INET6, entry, &n->addr) != 1 || n->len > 128) {
+ free(n);
+ syslog(LOG_ERR, "Invalid static NDP-prefix %s/%s", entry, sep + 1);
+ return -1;
+ }
list_add(&n->head, &neighbors);
}
list_add(&n->head, &neighbors);
}