Fix: drop requests with *cough* qr set.

Err, yeah.
This commit is contained in:
Miek Gieben 2014-10-19 09:36:26 +00:00
parent 6b75215519
commit d8da4d2fa7
3 changed files with 31 additions and 3 deletions

View File

@ -169,7 +169,7 @@ func IsMsg(buf []byte) error {
return errors.New("dns: bad message header")
}
// Header: Opcode
// TODO(miek): more checks here, e.g. check all header bits.
return nil
}

View File

@ -77,8 +77,7 @@ func (f HandlerFunc) ServeDNS(w ResponseWriter, r *Msg) {
f(w, r)
}
// FailedHandler returns a HandlerFunc
// returns SERVFAIL for every request it gets.
// FailedHandler returns a HandlerFunc that returns SERVFAIL for every request it gets.
func HandleFailed(w ResponseWriter, r *Msg) {
m := new(Msg)
m.SetRcode(r, RcodeServerFailure)
@ -437,6 +436,7 @@ func (srv *Server) serve(a net.Addr, h Handler, m []byte, u *net.UDPConn, s *ses
}
}()
Redo:
// Ideally we want use isMsg here before we allocate memory to actually parse the packet.
req := new(Msg)
err := req.Unpack(m)
if err != nil { // Send a FormatError back
@ -445,6 +445,9 @@ Redo:
w.WriteMsg(x)
goto Exit
}
if req.Response {
goto Exit
}
w.tsigStatus = nil
if w.tsigSecret != nil {

View File

@ -302,6 +302,31 @@ func TestServingLargeResponses(t *testing.T) {
}
}
func TestServingResponse(t *testing.T) {
HandleFunc("miek.nl.", HelloServer)
s, addrstr, err := RunLocalUDPServer("127.0.0.1:0")
if err != nil {
t.Fatalf("Unable to run test server: %s", err)
}
defer s.Shutdown()
c := new(Client)
m := new(Msg)
m.SetQuestion("miek.nl.", TypeTXT)
m.Response = false
_, _, err = c.Exchange(m, addrstr)
if err != nil {
t.Log("failed to exchange", err)
t.Fatal()
}
m.Response = true
_, _, err = c.Exchange(m, addrstr)
if err == nil {
t.Log("exchanged response message", err)
t.Fatal()
}
}
func TestShutdownTCP(t *testing.T) {
s, _, err := RunLocalTCPServer("127.0.0.1:0")
if err != nil {