From fe1f02240037e92e9b813352648beb4e0dcdf625 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Sat, 25 Jul 2026 08:14:59 +0800 Subject: [PATCH] dns: Fix search domain expansion DHCP option 119/15 and resolved link domains are not rooted, so appending them to the query name produced a non-FQDN name, failing to pack with "domain must be fully qualified". --- dns/transport/dhcp/dhcp.go | 9 +++++++-- service/resolved/service.go | 6 ++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/dns/transport/dhcp/dhcp.go b/dns/transport/dhcp/dhcp.go index 688f4eef5..3abc7cf53 100644 --- a/dns/transport/dhcp/dhcp.go +++ b/dns/transport/dhcp/dhcp.go @@ -397,9 +397,14 @@ func (t *Transport) fetchServersResponse(iface *control.Interface, packetConn ne func (t *Transport) recreateServers(iface *control.Interface, dhcpPacket *dhcpv4.DHCPv4) error { searchList := dhcpPacket.DomainSearch() if searchList != nil && len(searchList.Labels) > 0 { - t.search = searchList.Labels + t.search = common.Filter(common.Map(searchList.Labels, mDNS.Fqdn), func(it string) bool { + return it != "." + }) } else if dhcpPacket.DomainName() != "" { - t.search = []string{dhcpPacket.DomainName()} + domainName := mDNS.Fqdn(dhcpPacket.DomainName()) + if domainName != "." { + t.search = []string{domainName} + } } serverAddrs := common.Map(dhcpPacket.DNS(), func(it net.IP) M.Socksaddr { return M.SocksaddrFrom(M.AddrFromIP(it), 53) diff --git a/service/resolved/service.go b/service/resolved/service.go index 8f9740a06..d14082d7e 100644 --- a/service/resolved/service.go +++ b/service/resolved/service.go @@ -204,10 +204,12 @@ func (i *Service) onNetworkUpdate() { } func (conf *TransportLink) nameList(ndots int, name string) []string { - search := common.Map(common.Filter(conf.domain, func(it LinkDomain) bool { + search := common.Filter(common.Map(common.Filter(conf.domain, func(it LinkDomain) bool { return !it.RoutingOnly }), func(it LinkDomain) string { - return it.Domain + return mDNS.Fqdn(it.Domain) + }), func(it string) bool { + return it != "." }) l := len(name)