treewide: replace RELAYD prefix naming in macros
[project/odhcpd.git] / src / dhcpv4.c
index 976e1c9..c7ac058 100644 (file)
@@ -518,7 +518,6 @@ static bool dhcpv4_assign(struct interface *iface,
        // try to assign the IP the client asked for
        if (start <= raddr && raddr <= end && dhcpv4_test(iface, raddr)) {
                assign->addr = raddr;
-               list_add(&assign->head, &iface->dhcpv4_assignments);
                syslog(LOG_INFO, "assigning the IP the client asked for: %u.%u.%u.%u",
                                (assign->addr & 0xff000000) >> 24,
                                (assign->addr & 0x00ff0000) >> 16,
@@ -541,7 +540,6 @@ static bool dhcpv4_assign(struct interface *iface,
 
        if (list_empty(&iface->dhcpv4_assignments)) {
                assign->addr = try;
-               list_add(&assign->head, &iface->dhcpv4_assignments);
                syslog(LOG_INFO, "assigning mapped IP (empty list): %u.%u.%u.%u",
                                (assign->addr & 0xff000000) >> 24,
                                (assign->addr & 0x00ff0000) >> 16,
@@ -554,7 +552,6 @@ static bool dhcpv4_assign(struct interface *iface,
                if (dhcpv4_test(iface, try)) {
                        /* test was successful: IP address is not assigned, assign it */
                        assign->addr = try;
-                       list_add(&assign->head, &iface->dhcpv4_assignments);
                        syslog(LOG_DEBUG, "assigning mapped IP: %u.%u.%u.%u (try %u of %u)",
                                        (assign->addr & 0xff000000) >> 24,
                                        (assign->addr & 0x00ff0000) >> 16,
@@ -590,7 +587,6 @@ static struct dhcpv4_assignment* dhcpv4_lease(struct interface *iface,
 
        if (msg == DHCPV4_MSG_DISCOVER || msg == DHCPV4_MSG_REQUEST) {
                bool assigned = !!a;
-               uint32_t my_leasetime;
 
                if (!a && !iface->no_dynamic_dhcp) {
                        /* Create new binding */
@@ -604,17 +600,21 @@ static struct dhcpv4_assignment* dhcpv4_lease(struct interface *iface,
                        a->valid_until = now;
 
                        assigned = dhcpv4_assign(iface, a, raddr);
+                       if (assigned)
+                               list_add(&a->head, &iface->dhcpv4_assignments);
                }
 
-               if (a->leasetime)
-                       my_leasetime = a->leasetime;
-               else
-                       my_leasetime = iface->dhcpv4_leasetime;
+               if (assigned) {
+                       uint32_t my_leasetime;
+
+                       if (a->leasetime)
+                               my_leasetime = a->leasetime;
+                       else
+                               my_leasetime = iface->dhcpv4_leasetime;
 
-               if ((*leasetime == 0) || (my_leasetime < *leasetime))
-                       *leasetime = my_leasetime;
+                       if ((*leasetime == 0) || (my_leasetime < *leasetime))
+                               *leasetime = my_leasetime;
 
-               if (assigned) {
                        if (msg == DHCPV4_MSG_DISCOVER) {
                                a->flags &= ~OAF_BOUND;