From 55949d626bb63ca8846fc97bba79076c2ec3ce44 Mon Sep 17 00:00:00 2001 From: houyuwushang Date: Thu, 23 Jul 2026 10:04:15 +0800 Subject: [PATCH] core/dnsserver: normalize server block zones (#8320) --- core/dnsserver/register.go | 2 +- core/dnsserver/register_test.go | 13 +++++++++++++ test/corefile_test.go | 22 ++++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/core/dnsserver/register.go b/core/dnsserver/register.go index 015bc1c0f..7d5857d4a 100644 --- a/core/dnsserver/register.go +++ b/core/dnsserver/register.go @@ -100,7 +100,7 @@ func (h *dnsContext) InspectServerBlocks(_sourceFile string, serverBlocks []cadd } } for i := range hosts { - zoneAddrs = append(zoneAddrs, zoneAddr{Zone: dns.Fqdn(hosts[i]), Port: port, Transport: trans}) + zoneAddrs = append(zoneAddrs, zoneAddr{Zone: plugin.Name(hosts[i]).Normalize(), Port: port, Transport: trans}) } } diff --git a/core/dnsserver/register_test.go b/core/dnsserver/register_test.go index b8d594f80..2a4b24622 100644 --- a/core/dnsserver/register_test.go +++ b/core/dnsserver/register_test.go @@ -143,6 +143,19 @@ func TestInspectServerBlocks(t *testing.T) { "dns://example.org.:53": {Zone: "example.org.", Port: "53", Transport: "dns"}, }, }, + { + name: "uppercase dns", + serverBlocks: []caddyfile.ServerBlock{ + {Keys: []string{"EXAMPLE.ORG"}}, + }, + expectedServerBlocks: []caddyfile.ServerBlock{ + {Keys: []string{"dns://example.org.:53"}}, + }, + expectedConfigsLen: 1, + expectedZoneAddrs: map[string]zoneAddr{ + "dns://example.org.:53": {Zone: "example.org.", Port: "53", Transport: "dns"}, + }, + }, { name: "dns with port", serverBlocks: []caddyfile.ServerBlock{ diff --git a/test/corefile_test.go b/test/corefile_test.go index 840833727..db1bf41ad 100644 --- a/test/corefile_test.go +++ b/test/corefile_test.go @@ -2,6 +2,8 @@ package test import ( "testing" + + "github.com/miekg/dns" ) // TestCorefileParsing tests the Corefile parsing functionality. @@ -61,3 +63,23 @@ acl }) } } + +func TestUppercaseServerBlockZone(t *testing.T) { + instance, udp, _, err := CoreDNSServerAndPorts(`EXAMPLE.ORG.:0 { + whoami +}`) + if err != nil { + t.Fatalf("failed to start CoreDNS: %v", err) + } + defer CoreDNSServerStop(instance) + + query := new(dns.Msg) + query.SetQuestion("www.example.org.", dns.TypeA) + response, _, err := new(dns.Client).Exchange(query, udp) + if err != nil { + t.Fatalf("DNS exchange failed: %v", err) + } + if response.Rcode != dns.RcodeSuccess { + t.Fatalf("expected response code %s, got %s", dns.RcodeToString[dns.RcodeSuccess], dns.RcodeToString[response.Rcode]) + } +}