router: don't announce as default router if we aren't
[project/odhcpd.git] / src / dhcpv6-ia.c
index c5f8783..30bffbc 100644 (file)
@@ -92,14 +92,15 @@ int setup_dhcpv6_ia_interface(struct interface *iface, bool enable)
                struct lease *lease;
                list_for_each_entry(lease, &leases, head) {
                        // Construct entry
                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;
                        }
 
                        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;
                        a->length = 128;
                        if (lease->hostid) {
                                a->assigned = lease->hostid;
@@ -572,7 +573,7 @@ void dhcpv6_ia_postupdate(struct interface *iface, time_t now)
 
        int minprefix = -1;
        for (size_t i = 0; i < iface->ia_addr_len; ++i) {
 
        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;
                                iface->ia_addr[i].prefix < 64 &&
                                iface->ia_addr[i].prefix > minprefix)
                        minprefix = iface->ia_addr[i].prefix;
@@ -739,7 +740,7 @@ static size_t append_reply(uint8_t *buf, size_t buflen, uint16_t status,
                                        size_t entrlen = sizeof(n) - 4;
 
                                        if (iface->managed < RELAYD_MANAGED_NO_AFLAG && i != m &&
                                        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)
                                                continue;
 
                                        if (datalen + entrlen + 4 > buflen || a->assigned == 0)