struct lease *lease;
list_for_each_entry(lease, &leases, head) {
// Construct entry
- struct dhcpv6_assignment *a = calloc(1, sizeof(*a) + lease->duid_len);
+ size_t duid_len = lease->duid_len ? lease->duid_len : 14;
+ struct dhcpv6_assignment *a = calloc(1, sizeof(*a) + duid_len);
if (!a) {
syslog(LOG_ERR, "Calloc failed for static lease assignment on interface %s",
iface->ifname);
return -1;
}
- a->clid_len = lease->duid_len;
+ a->clid_len = duid_len;
a->length = 128;
if (lease->hostid) {
a->assigned = lease->hostid;
int minprefix = -1;
for (size_t i = 0; i < iface->ia_addr_len; ++i) {
- if (iface->ia_addr[i].preferred > now &&
+ if (iface->ia_addr[i].preferred > (uint32_t)now &&
iface->ia_addr[i].prefix < 64 &&
iface->ia_addr[i].prefix > minprefix)
minprefix = iface->ia_addr[i].prefix;
size_t entrlen = sizeof(n) - 4;
if (iface->managed < RELAYD_MANAGED_NO_AFLAG && i != m &&
- addrs[i].prefix == 64)
+ addrs[i].prefix <= 64)
continue;
if (datalen + entrlen + 4 > buflen || a->assigned == 0)