aboutsummaryrefslogtreecommitdiff
path: root/server/server.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-04-09 11:13:04 +0100
committerGravatar Miek Gieben <miek@miek.nl> 2016-04-09 11:13:04 +0100
commitdb3d689a8ac2bec199e5643394ffa779341acde0 (patch)
tree01e8a18adb3bb7c2d6bf73b9ab2964452136e97f /server/server.go
parent16c035731c528f986a93d01b18244cad7d71e725 (diff)
downloadcoredns-db3d689a8ac2bec199e5643394ffa779341acde0.tar.gz
coredns-db3d689a8ac2bec199e5643394ffa779341acde0.tar.zst
coredns-db3d689a8ac2bec199e5643394ffa779341acde0.zip
EDNS: return error on wrong version. (#95)
Split up the previous changes a bit. This PR only returns the expected error when the received packet has the wrong EDNS version. EDNS0 handling in the middleware needs a nicer abstraction, like ReflectEdns() or something.
Diffstat (limited to 'server/server.go')
-rw-r--r--server/server.go17
1 files changed, 10 insertions, 7 deletions
diff --git a/server/server.go b/server/server.go
index 67cc35ba5..7ea931daa 100644
--- a/server/server.go
+++ b/server/server.go
@@ -12,10 +12,10 @@ import (
"net"
"os"
"runtime"
- "strconv"
"sync"
"time"
+ "github.com/miekg/coredns/middleware"
"github.com/miekg/coredns/middleware/chaos"
"github.com/miekg/coredns/middleware/prometheus"
@@ -279,6 +279,14 @@ func (s *Server) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
}
}()
+ if m, err := middleware.Edns0Version(r); err != nil { // Wrong EDNS version, return at once.
+ qtype := dns.Type(r.Question[0].Qtype).String()
+ rc := middleware.RcodeToString(dns.RcodeBadVers)
+ metrics.Report(dropped, qtype, rc, m.Len(), time.Now())
+ w.WriteMsg(m)
+ return
+ }
+
// Execute the optional request callback if it exists
if s.ReqCallback != nil && s.ReqCallback(w, r) {
return
@@ -332,12 +340,7 @@ func (s *Server) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
// of the specified HTTP status code.
func DefaultErrorFunc(w dns.ResponseWriter, r *dns.Msg, rcode int) {
qtype := dns.Type(r.Question[0].Qtype).String()
-
- // this code is duplicated a few times, TODO(miek)
- rc := dns.RcodeToString[rcode]
- if rc == "" {
- rc = "RCODE" + strconv.Itoa(rcode)
- }
+ rc := middleware.RcodeToString(rcode)
answer := new(dns.Msg)
answer.SetRcode(r, rcode)