aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2014-11-25 18:49:14 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2014-11-25 18:49:14 +0100
commit298fabaefcdb79037d0dd33ba331369586690202 (patch)
treebd008aae768dea75cbda32371502746dadd24048
parent2bba9ad67a917de2624d427c8c107ce3e2d3d085 (diff)
downloadbusybox-298fabaefcdb79037d0dd33ba331369586690202.tar.gz
udhcpd: if a lease from lease file coincides with a static one, ignore it
function old new delta read_leases 269 328 +59 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--networking/udhcp/files.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/networking/udhcp/files.c b/networking/udhcp/files.c
index 6840f3c25..1c8808c0f 100644
--- a/networking/udhcp/files.c
+++ b/networking/udhcp/files.c
@@ -189,12 +189,24 @@ void FAST_FUNC read_leases(const char *file)
goto ret;
while (full_read(fd, &lease, sizeof(lease)) == sizeof(lease)) {
-//FIXME: what if it matches some static lease?
uint32_t y = ntohl(lease.lease_nip);
if (y >= server_config.start_ip && y <= server_config.end_ip) {
signed_leasetime_t expires = ntohl(lease.expires) - (signed_leasetime_t)time_passed;
+ uint32_t static_nip;
+
if (expires <= 0)
continue;
+
+ /* Check if there is a different static lease for this IP or MAC */
+ static_nip = get_static_nip_by_mac(server_config.static_leases, lease.lease_mac);
+ if (static_nip) {
+ /* NB: we do not add lease even if static_nip == lease.lease_nip.
+ */
+ continue;
+ }
+ if (is_nip_reserved(server_config.static_leases, lease.lease_nip))
+ continue;
+
/* NB: add_lease takes "relative time", IOW,
* lease duration, not lease deadline. */
if (add_lease(lease.lease_mac, lease.lease_nip,