mirror of https://github.com/hashicorp/consul
Fix a bug that wrongly trims domains when there is an overlap with DC name 1.15.x (#18163)
Fix a bug that wrongly trims domains when there is an overlap with DC name (#17160) * Fix a bug that wrongly trims domains when there is an overlap with DC name Before this change, when DC name and domain/alt-domain overlap, the domain name incorrectly trimmed from the query. Example: Given: datacenter = dc-test, alt-domain = test.consul. Querying for "test-node.node.dc-test.consul" will faile, because the code was trimming "test.consul" instead of just ".consul" This change, fixes the issue by adding dot (.) before trimming * trimDomain: ensure domain trimmed without modyfing original domains * update changelog --------- Co-authored-by: Alex Simenduev <shamil.si@gmail.com>pull/18188/head
parent
e17c8f7a9a
commit
c940dac2a3
|
@ -0,0 +1,3 @@
|
|||
```release-note:bug
|
||||
Fix a bug that wrongly trims domains when there is an overlap with DC name.
|
||||
```
|
|
@ -1043,7 +1043,7 @@ func (d *DNSServer) trimDomain(query string) string {
|
|||
longer, shorter = shorter, longer
|
||||
}
|
||||
|
||||
if strings.HasSuffix(query, longer) {
|
||||
if strings.HasSuffix(query, "."+strings.TrimLeft(longer, ".")) {
|
||||
return strings.TrimSuffix(query, longer)
|
||||
}
|
||||
return strings.TrimSuffix(query, shorter)
|
||||
|
|
|
@ -7068,6 +7068,45 @@ func TestDNS_AltDomains_Overlap(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestDNS_AltDomain_DCName_Overlap(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("too slow for testing.Short")
|
||||
}
|
||||
|
||||
// this tests the DC name overlap with the consul domain/alt-domain
|
||||
// we should get response when DC suffix is a prefix of consul alt-domain
|
||||
t.Parallel()
|
||||
a := NewTestAgent(t, `
|
||||
datacenter = "dc-test"
|
||||
node_name = "test-node"
|
||||
alt_domain = "test.consul."
|
||||
`)
|
||||
defer a.Shutdown()
|
||||
testrpc.WaitForLeader(t, a.RPC, "dc-test")
|
||||
|
||||
questions := []string{
|
||||
"test-node.node.dc-test.consul.",
|
||||
"test-node.node.dc-test.test.consul.",
|
||||
}
|
||||
|
||||
for _, question := range questions {
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion(question, dns.TypeA)
|
||||
|
||||
c := new(dns.Client)
|
||||
in, _, err := c.Exchange(m, a.DNSAddr())
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
|
||||
require.Len(t, in.Answer, 1)
|
||||
|
||||
aRec, ok := in.Answer[0].(*dns.A)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, aRec.A.To4().String(), "127.0.0.1")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDNS_PreparedQuery_AllowStale(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("too slow for testing.Short")
|
||||
|
|
Loading…
Reference in New Issue