diff --git a/internal/dns/dns.go b/internal/dns/dns.go index 4f90138..8da9d9c 100644 --- a/internal/dns/dns.go +++ b/internal/dns/dns.go @@ -548,6 +548,7 @@ func (s *Server) resolveSubname(domain string, q dns.Question) (dns.RR, error) { } if q.Qtype == dns.TypeA || q.Qtype == dns.TypeAAAA /*|| q.Qtype == dns.TypeMX*/ { name := strings.TrimSuffix(q.Name, ".") + name = strings.TrimSuffix(name, ".lan") // trim lan domain name = strings.TrimSuffix(name, "."+string(s.domain)) // trim server domain name = strings.TrimSuffix(name, "."+strings.TrimSuffix(domain, "."+string(s.domain))) // trim function domain if ip, ok := s.subname(domain, name); ok { diff --git a/internal/dns/dns_test.go b/internal/dns/dns_test.go index 4ada4e5..b23cb64 100644 --- a/internal/dns/dns_test.go +++ b/internal/dns/dns_test.go @@ -158,6 +158,28 @@ func TestResolveLatencySteering(t *testing.T) { } } +func TestDHCPDomain(t *testing.T) { + s := NewServer("localhost:0", "example.org") + s.SetLeases([]dhcp4d.Lease{ + { + Hostname: "testtarget", + Addr: net.IP{192, 168, 42, 23}, + }, + }) + + t.Run("testtarget.lan.", func(t *testing.T) { + if err := resolveTestTarget(s, "testtarget.lan.", net.ParseIP("192.168.42.23")); err != nil { + t.Fatal(err) + } + }) + + t.Run("testtarget.example.org.", func(t *testing.T) { + if err := resolveTestTarget(s, "testtarget.lan.", net.ParseIP("192.168.42.23")); err != nil { + t.Fatal(err) + } + }) +} + func TestDHCP(t *testing.T) { r := &recorder{} s := NewServer("localhost:0", "lan")