mirror of
https://github.com/miekg/dns.git
synced 2025-12-16 09:11:34 +01:00
Fix: drop requests with *cough* qr set.
Err, yeah.
This commit is contained in:
parent
6b75215519
commit
d8da4d2fa7
@ -169,7 +169,7 @@ func IsMsg(buf []byte) error {
|
|||||||
return errors.New("dns: bad message header")
|
return errors.New("dns: bad message header")
|
||||||
}
|
}
|
||||||
// Header: Opcode
|
// Header: Opcode
|
||||||
|
// TODO(miek): more checks here, e.g. check all header bits.
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -77,8 +77,7 @@ func (f HandlerFunc) ServeDNS(w ResponseWriter, r *Msg) {
|
|||||||
f(w, r)
|
f(w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FailedHandler returns a HandlerFunc
|
// FailedHandler returns a HandlerFunc that returns SERVFAIL for every request it gets.
|
||||||
// returns SERVFAIL for every request it gets.
|
|
||||||
func HandleFailed(w ResponseWriter, r *Msg) {
|
func HandleFailed(w ResponseWriter, r *Msg) {
|
||||||
m := new(Msg)
|
m := new(Msg)
|
||||||
m.SetRcode(r, RcodeServerFailure)
|
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:
|
Redo:
|
||||||
|
// Ideally we want use isMsg here before we allocate memory to actually parse the packet.
|
||||||
req := new(Msg)
|
req := new(Msg)
|
||||||
err := req.Unpack(m)
|
err := req.Unpack(m)
|
||||||
if err != nil { // Send a FormatError back
|
if err != nil { // Send a FormatError back
|
||||||
@ -445,6 +445,9 @@ Redo:
|
|||||||
w.WriteMsg(x)
|
w.WriteMsg(x)
|
||||||
goto Exit
|
goto Exit
|
||||||
}
|
}
|
||||||
|
if req.Response {
|
||||||
|
goto Exit
|
||||||
|
}
|
||||||
|
|
||||||
w.tsigStatus = nil
|
w.tsigStatus = nil
|
||||||
if w.tsigSecret != nil {
|
if w.tsigSecret != nil {
|
||||||
|
|||||||
@ -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) {
|
func TestShutdownTCP(t *testing.T) {
|
||||||
s, _, err := RunLocalTCPServer("127.0.0.1:0")
|
s, _, err := RunLocalTCPServer("127.0.0.1:0")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user