- // Was only a solicitation: mark binding for removal
- if (assigned && a->valid_until < now) {
- a->valid_until = (msg == DHCPV4_MSG_DISCOVER) ? 0 :
- (now + iface->dhcpv4_leasetime);
+ if (a->leasetime >= 60) {
+ my_leasetime = a->leasetime;
+ } else {
+ my_leasetime = iface->dhcpv4_leasetime;
+ }
+
+ if ((*leasetime == 0) || (my_leasetime < *leasetime))
+ *leasetime = my_leasetime;
+
+ if (assigned) {
+ bool is_discover = (msg == DHCPV4_MSG_DISCOVER);
+
+ if (!INFINITE_VALID(a->valid_until))
+ // Was only a discover; mark binding for removal
+ a->valid_until = (is_discover ? now : ((*leasetime == UINT32_MAX) ?
+ 0 : (time_t)(now + *leasetime)));
+
+ /* Mark assignment as bound */
+ if (!is_discover)
+ a->flags |= OAF_BOUND;
+