From 342699d9330c75b3ce7949112ef15b0d21e9c8d1 Mon Sep 17 00:00:00 2001 From: Simon Zolin Date: Tue, 14 May 2019 14:50:47 +0300 Subject: [PATCH] * dhcpd: minor improvements --- dhcpd/db.go | 17 +++++++++++++---- dhcpd/dhcpd.go | 5 ----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/dhcpd/db.go b/dhcpd/db.go index 1caa7d81..f9c371d3 100644 --- a/dhcpd/db.go +++ b/dhcpd/db.go @@ -23,8 +23,20 @@ type leaseJSON struct { Expiry int64 `json:"exp"` } +// Safe version of dhcp4.IPInRange() +func ipInRange(start, stop, ip net.IP) bool { + if len(start) != len(stop) || + len(start) != len(ip) { + return false + } + return dhcp4.IPInRange(start, stop, ip) +} + // Load lease table from DB func (s *Server) dbLoad() { + s.leases = nil + s.IPpool = make(map[[4]byte]net.HardwareAddr) + data, err := ioutil.ReadFile(dbFilename) if err != nil { if !os.IsNotExist(err) { @@ -40,13 +52,10 @@ func (s *Server) dbLoad() { return } - s.leases = nil - s.IPpool = make(map[[4]byte]net.HardwareAddr) - numLeases := len(obj) for i := range obj { - if !dhcp4.IPInRange(s.leaseStart, s.leaseStop, obj[i].IP) { + if !ipInRange(s.leaseStart, s.leaseStop, obj[i].IP) { log.Tracef("Skipping a lease with IP %s: not within current IP range", obj[i].IP) continue } diff --git a/dhcpd/dhcpd.go b/dhcpd/dhcpd.go index 20ab4d24..85df1590 100644 --- a/dhcpd/dhcpd.go +++ b/dhcpd/dhcpd.go @@ -286,11 +286,6 @@ func (s *Server) findExpiredLease() int { } func (s *Server) findFreeIP(hwaddr net.HardwareAddr) (net.IP, error) { - // if IP pool is nil, lazy initialize it - if s.IPpool == nil { - s.IPpool = make(map[[4]byte]net.HardwareAddr) - } - // go from start to end, find unreserved IP var foundIP net.IP for i := 0; i < dhcp4.IPRange(s.leaseStart, s.leaseStop); i++ {