mirror of
https://github.com/rsmarples/dhcpcd.git
synced 2024-11-24 10:35:03 +08:00
Avoid sillyness if not a valid IPv6 address
This commit is contained in:
parent
c2e168a8c1
commit
b2e8d8da6a
10
dhcp.c
10
dhcp.c
@ -1311,7 +1311,9 @@ print_option(char *s, ssize_t len, int type, int dl, const uint8_t *data,
|
|||||||
while (data < e) {
|
while (data < e) {
|
||||||
if (l)
|
if (l)
|
||||||
l++; /* space */
|
l++; /* space */
|
||||||
l += ipv6_printaddr(NULL, 0, data, ifname);
|
dl = ipv6_printaddr(NULL, 0, data, ifname);
|
||||||
|
if (dl != -1)
|
||||||
|
l += dl;
|
||||||
data += 16;
|
data += 16;
|
||||||
}
|
}
|
||||||
return l + 1;
|
return l + 1;
|
||||||
@ -1360,7 +1362,11 @@ print_option(char *s, ssize_t len, int type, int dl, const uint8_t *data,
|
|||||||
l = snprintf(s, len, "%s", inet_ntoa(addr));
|
l = snprintf(s, len, "%s", inet_ntoa(addr));
|
||||||
data += sizeof(addr.s_addr);
|
data += sizeof(addr.s_addr);
|
||||||
} else if (type & IPV6) {
|
} else if (type & IPV6) {
|
||||||
l = ipv6_printaddr(s, len, data, ifname);
|
dl = ipv6_printaddr(s, len, data, ifname);
|
||||||
|
if (dl != -1)
|
||||||
|
l = dl;
|
||||||
|
else
|
||||||
|
l = 0;
|
||||||
data += 16;
|
data += 16;
|
||||||
} else if (type & BINHEX) {
|
} else if (type & BINHEX) {
|
||||||
l = snprintf(s, len, "%.2x", data[0]);
|
l = snprintf(s, len, "%.2x", data[0]);
|
||||||
|
32
ipv6rs.c
32
ipv6rs.c
@ -382,7 +382,7 @@ add_router(struct ra *router)
|
|||||||
void
|
void
|
||||||
ipv6rs_handledata(_unused void *arg)
|
ipv6rs_handledata(_unused void *arg)
|
||||||
{
|
{
|
||||||
ssize_t len, l, n, olen;
|
ssize_t len, l, m, n, olen;
|
||||||
struct cmsghdr *cm;
|
struct cmsghdr *cm;
|
||||||
int hoplimit;
|
int hoplimit;
|
||||||
struct in6_pktinfo pkt;
|
struct in6_pktinfo pkt;
|
||||||
@ -654,22 +654,34 @@ ipv6rs_handledata(_unused void *arg)
|
|||||||
for (n = ndo->nd_opt_len - 1; n > 1; n -= 2,
|
for (n = ndo->nd_opt_len - 1; n > 1; n -= 2,
|
||||||
op += sizeof(addr.s6_addr))
|
op += sizeof(addr.s6_addr))
|
||||||
{
|
{
|
||||||
l += ipv6_printaddr(NULL, 0, op, ifp->name) + 1;
|
m = ipv6_printaddr(NULL, 0, op, ifp->name);
|
||||||
|
if (m != -1)
|
||||||
|
l += m + 1;
|
||||||
}
|
}
|
||||||
op = (uint8_t *)ndo;
|
op = (uint8_t *)ndo;
|
||||||
op += offsetof(struct nd_opt_rdnss,
|
op += offsetof(struct nd_opt_rdnss,
|
||||||
nd_opt_rdnss_lifetime);
|
nd_opt_rdnss_lifetime);
|
||||||
op += sizeof(rdnss->nd_opt_rdnss_lifetime);
|
op += sizeof(rdnss->nd_opt_rdnss_lifetime);
|
||||||
tmp = opt = malloc(l);
|
tmp = opt = malloc(l);
|
||||||
for (n = ndo->nd_opt_len - 1; n > 1; n -= 2,
|
if (opt) {
|
||||||
op += sizeof(addr.s6_addr))
|
for (n = ndo->nd_opt_len - 1; n > 1; n -= 2,
|
||||||
{
|
op += sizeof(addr.s6_addr))
|
||||||
tmp += ipv6_printaddr(tmp, l, op, ifp->name);
|
{
|
||||||
*tmp++ = ' ';
|
m = ipv6_printaddr(tmp, l, op,
|
||||||
if (lifetime > 0)
|
ifp->name);
|
||||||
has_dns = 1;
|
if (m != -1) {
|
||||||
|
l -= (m + 1);
|
||||||
|
tmp += m;
|
||||||
|
*tmp++ = ' ';
|
||||||
|
if (lifetime > 0)
|
||||||
|
has_dns = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (tmp != opt)
|
||||||
|
(*--tmp) = '\0';
|
||||||
|
else
|
||||||
|
*opt = '\0';
|
||||||
}
|
}
|
||||||
(*--tmp) = '\0';
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ND_OPT_DNSSL:
|
case ND_OPT_DNSSL:
|
||||||
|
Loading…
Reference in New Issue
Block a user