summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/dhcpv6-ia.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/src/dhcpv6-ia.c b/src/dhcpv6-ia.c
index be6a245..b235f22 100644
--- a/src/dhcpv6-ia.c
+++ b/src/dhcpv6-ia.c
@@ -977,25 +977,28 @@ static void dhcpv6_log(uint8_t msgtype, struct interface *iface, time_t now,
break;
}
- struct odhcpd_ipaddr *addrs = (a->managed) ? a->managed : iface->ia_addr;
- size_t addrlen = (a->managed) ? (size_t)a->managed_size : iface->ia_addr_len;
char leasebuf[256] = "";
- size_t lbsize = 0;
- char addrbuf[INET6_ADDRSTRLEN];
- for (size_t i = 0; i < addrlen; ++i) {
- if (addrs[i].prefix > 96 || addrs[i].preferred <= now)
- continue;
+ if (a) {
+ struct odhcpd_ipaddr *addrs = (a->managed) ? a->managed : iface->ia_addr;
+ size_t addrlen = (a->managed) ? (size_t)a->managed_size : iface->ia_addr_len;
+ size_t lbsize = 0;
+ char addrbuf[INET6_ADDRSTRLEN];
- struct in6_addr addr = addrs[i].addr;
- int prefix = a->managed ? addrs[i].prefix : a->length;
- if (prefix == 128)
- addr.s6_addr32[3] = htonl(a->assigned);
- else
- addr.s6_addr32[1] |= htonl(a->assigned);
+ for (size_t i = 0; i < addrlen; ++i) {
+ if (addrs[i].prefix > 96 || addrs[i].preferred <= (uint32_t)now)
+ continue;
+
+ struct in6_addr addr = addrs[i].addr;
+ int prefix = a->managed ? addrs[i].prefix : a->length;
+ if (prefix == 128)
+ addr.s6_addr32[3] = htonl(a->assigned);
+ else
+ addr.s6_addr32[1] |= htonl(a->assigned);
- inet_ntop(AF_INET6, &addr, addrbuf, sizeof(addrbuf));
- lbsize += snprintf(leasebuf + lbsize, sizeof(leasebuf) - lbsize, "%s/%d ", addrbuf, prefix);
+ inet_ntop(AF_INET6, &addr, addrbuf, sizeof(addrbuf));
+ lbsize += snprintf(leasebuf + lbsize, sizeof(leasebuf) - lbsize, "%s/%d ", addrbuf, prefix);
+ }
}
syslog(LOG_WARNING, "DHCPV6 %s %s from %s on %s: %s %s", type, (is_pd) ? "IA_PD" : "IA_NA",