diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2014-11-25 20:49:14 +0300 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2014-11-25 20:49:14 +0300 |
commit | 298fabaefcdb79037d0dd33ba331369586690202 (patch) | |
tree | bd008aae768dea75cbda32371502746dadd24048 /networking | |
parent | 2bba9ad67a917de2624d427c8c107ce3e2d3d085 (diff) |
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>
Diffstat (limited to 'networking')
-rw-r--r-- | networking/udhcp/files.c | 14 |
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, |