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:
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
}