Avoids taking the length again when parsing DNS queries.

pull/1389/head
James Phillips 9 years ago
parent 1059a8b3a3
commit cd6be4a88d

@ -330,17 +330,19 @@ PARSE:
} }
case "node": case "node":
if len(labels) == 1 { if n == 1 {
goto INVALID goto INVALID
} }
// Allow a "." in the node name, just join all the parts // Allow a "." in the node name, just join all the parts
node := strings.Join(labels[:n-1], ".") node := strings.Join(labels[:n-1], ".")
d.nodeLookup(network, datacenter, node, req, resp) d.nodeLookup(network, datacenter, node, req, resp)
case "query": case "query":
if len(labels) == 1 { if n == 1 {
goto INVALID goto INVALID
} }
// Allow a "." in the query name, just join all the parts. // Allow a "." in the query name, just join all the parts.
query := strings.Join(labels[:n-1], ".") query := strings.Join(labels[:n-1], ".")
d.preparedQueryLookup(network, datacenter, query, req, resp) d.preparedQueryLookup(network, datacenter, query, req, resp)

@ -2783,3 +2783,43 @@ func TestDNS_PreparedQuery_AllowStale(t *testing.T) {
} }
} }
} }
func TestDNS_InvalidQueries(t *testing.T) {
dir, srv := makeDNSServer(t)
defer os.RemoveAll(dir)
defer srv.agent.Shutdown()
testutil.WaitForLeader(t, srv.agent.RPC, "dc1")
// Try invalid forms of queries that should hit the special invalid case
// of our query parser.
questions := []string{
"consul.",
"node.consul.",
"service.consul.",
"query.consul.",
}
for _, question := range questions {
m := new(dns.Msg)
m.SetQuestion(question, dns.TypeSRV)
c := new(dns.Client)
addr, _ := srv.agent.config.ClientListener("", srv.agent.config.Ports.DNS)
in, _, err := c.Exchange(m, addr.String())
if err != nil {
t.Fatalf("err: %v", err)
}
if len(in.Ns) != 1 {
t.Fatalf("Bad: %#v", in)
}
soaRec, ok := in.Ns[0].(*dns.SOA)
if !ok {
t.Fatalf("Bad: %#v", in.Ns[0])
}
if soaRec.Hdr.Ttl != 0 {
t.Fatalf("Bad: %#v", in.Ns[0])
}
}
}

Loading…
Cancel
Save