ignore Z flag in queries, clear Z flag in automatic replies (#976)
This commit is contained in:
parent
fbd426fefa
commit
1545072057
|
@ -35,9 +35,6 @@ func defaultMsgAcceptFunc(dh Header) MsgAcceptAction {
|
||||||
return MsgReject
|
return MsgReject
|
||||||
}
|
}
|
||||||
|
|
||||||
if isZero := dh.Bits&_Z != 0; isZero {
|
|
||||||
return MsgReject
|
|
||||||
}
|
|
||||||
if dh.Qdcount != 1 {
|
if dh.Qdcount != 1 {
|
||||||
return MsgReject
|
return MsgReject
|
||||||
}
|
}
|
||||||
|
|
|
@ -571,6 +571,7 @@ func (srv *Server) serveDNS(m []byte, w *response) {
|
||||||
req.SetRcodeFormatError(req)
|
req.SetRcodeFormatError(req)
|
||||||
// Are we allowed to delete any OPT records here?
|
// Are we allowed to delete any OPT records here?
|
||||||
req.Ns, req.Answer, req.Extra = nil, nil, nil
|
req.Ns, req.Answer, req.Extra = nil, nil, nil
|
||||||
|
req.Zero = false
|
||||||
|
|
||||||
w.WriteMsg(req)
|
w.WriteMsg(req)
|
||||||
fallthrough
|
fallthrough
|
||||||
|
|
|
@ -187,6 +187,34 @@ func TestServing(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Verify that the server responds to a query with Z flag on, ignoring the flag, and does not echoes it back
|
||||||
|
func TestServeIgnoresZFlag(t *testing.T) {
|
||||||
|
HandleFunc("example.com.", AnotherHelloServer)
|
||||||
|
|
||||||
|
s, addrstr, err := RunLocalUDPServer(":0")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to run test server: %v", err)
|
||||||
|
}
|
||||||
|
defer s.Shutdown()
|
||||||
|
|
||||||
|
c := new(Client)
|
||||||
|
m := new(Msg)
|
||||||
|
|
||||||
|
// Test the Z flag is not echoed
|
||||||
|
m.SetQuestion("example.com.", TypeTXT)
|
||||||
|
m.Zero = true
|
||||||
|
r, _, err := c.Exchange(m, addrstr)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("failed to exchange example.com with +zflag", err)
|
||||||
|
}
|
||||||
|
if r.Zero {
|
||||||
|
t.Error("the response should not have Z flag set - even for a query which does")
|
||||||
|
}
|
||||||
|
if r.Rcode != RcodeSuccess {
|
||||||
|
t.Errorf("expected rcode %v, got %v", RcodeSuccess, r.Rcode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestServingTLS(t *testing.T) {
|
func TestServingTLS(t *testing.T) {
|
||||||
HandleFunc("miek.nl.", HelloServer)
|
HandleFunc("miek.nl.", HelloServer)
|
||||||
HandleFunc("example.com.", AnotherHelloServer)
|
HandleFunc("example.com.", AnotherHelloServer)
|
||||||
|
|
Loading…
Reference in New Issue