dns

DNS client and server implementations using the Go project's dnsmessage package
Log | Files | Refs | README | LICENSE

commit 6b8f8a165e7b32c133ee48fc2233f91692db5d91
parent 1c3a28b4e3d5fcd9374467eac2287607a1a8e669
Author: Oliver Lowe <o@olowe.co>
Date:   Sat, 20 Nov 2021 12:31:22 +1100

cmd/dohproxy: only ever read max dns message size

Even if content-length header is omitted.
While here remove unused constants.

Diffstat:
Mcmd/dohproxy/dohproxy.go | 15++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/cmd/dohproxy/dohproxy.go b/cmd/dohproxy/dohproxy.go @@ -13,10 +13,6 @@ import ( "git.sr.ht/~otl/dns" ) -// https://quad9.net -const quad9 string = "9.9.9.9:domain" -const cloudflare string = "1.1.1.1:domain" - func dnsHandler(w http.ResponseWriter, req *http.Request) { if v, ok := req.Header["Content-Type"]; ok { for _, s := range v { @@ -54,10 +50,12 @@ func dnsHandler(w http.ResponseWriter, req *http.Request) { return } - buf := make([]byte, 512) + buf := make([]byte, dns.MaxMsgSize) + var n int + var err error switch req.Method { case http.MethodPost: - _, err := req.Body.Read(buf) + n, err = req.Body.Read(buf) if err != nil && err != io.EOF { http.Error(w, err.Error(), http.StatusInternalServerError) return @@ -70,13 +68,12 @@ func dnsHandler(w http.ResponseWriter, req *http.Request) { } var msg dnsmessage.Message - if err := msg.Unpack(buf); err != nil { + if err := msg.Unpack(buf[:n]); err != nil { log.Println("unpack query:", err) http.Error(w, "unpack query: "+err.Error(), http.StatusInternalServerError) } var resolved dnsmessage.Message - var err error if conf.usetls { resolved, err = dns.ExchangeTLS(msg, conf.forwardaddr) } else { @@ -89,7 +86,7 @@ func dnsHandler(w http.ResponseWriter, req *http.Request) { } packed, err := resolved.Pack() if err != nil { - log.Println("pack resolved query:", err.Error) + log.Println("pack resolved query:", err.Error()) http.Error(w, err.Error(), http.StatusInternalServerError) return }