diff --git a/server.go b/server.go index b2458e6..d473a69 100644 --- a/server.go +++ b/server.go @@ -205,7 +205,7 @@ func reloadDnsmasq() error { return nil } -// getAllLeases returns merged active and pinned lease info. +// getAllLeases returns merged active (non-expired) and pinned lease info. func getAllLeases() ([]LeaseEntry, error) { activeLeases, err := parseLeases() if err != nil { @@ -217,8 +217,15 @@ func getAllLeases() ([]LeaseEntry, error) { return nil, fmt.Errorf("parse pinned: %w", err) } + now := time.Now() entries := make([]LeaseEntry, 0, len(activeLeases)) for _, lease := range activeLeases { + // Skip expired leases (expiry is in the past and not pinned). + if lease.Expiry.Before(now) { + if _, ok := pinned[lease.MAC]; !ok { + continue + } + } status := PinStatusActive if _, ok := pinned[lease.MAC]; ok { status = PinStatusPermanent