dns

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

commit 0500699332efdcf7796b1879af478f78f096d221
parent eae15e682554c49c592c049eb8b7d19f6631b245
Author: Oliver Lowe <o@olowe.co>
Date:   Sun, 14 Nov 2021 13:12:22 +1100

Log errors returned to clients to stdout too

Diffstat:
Mcmd/dohproxy/dohproxy.go | 24+++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/cmd/dohproxy/dohproxy.go b/cmd/dohproxy/dohproxy.go @@ -5,6 +5,8 @@ import ( "io" "net/http" "log" + "fmt" + "strconv" "git.sr.ht/~otl/dns" "golang.org/x/crypto/acme/autocert" "golang.org/x/net/dns/dnsmessage" @@ -45,28 +47,36 @@ func dnsHandler(w http.ResponseWriter, req *http.Request) { if v, ok := req.Header["Content-Type"]; ok { for _, s := range v { if s != dns.MediaType { - http.Error(w, "unsupported media type", http.StatusUnsupportedMediaType) + err := fmt.Errorf("unsupported media type %s", s) + log.Println(err.Error()) + http.Error(w, err.Error(), http.StatusUnsupportedMediaType) return } } } - if v, ok :- req.Header["Content-Length"]; ok { + if v, ok := req.Header["Content-Length"]; ok { for _, s := range v { - length, err := strconv.AtoI(s) + length, err := strconv.Atoi(s) if err != nil { - http.Error(w, "parse Content-Length: "+err.Error(), http.StatusInternalServerError) + err = fmt.Errorf("parse Content-Length: %v", err) + log.Println(err.Error()) + http.Error(w, err.Error(), http.StatusInternalServerError) return } if length > dns.MaxMsgSize { - error = fmt.Sprintf("content length %d larger than permitted %d", length,dns.MaxMsgSize) - http.Error(w, error, http.StatusRequestEntityTooLarge) + err = fmt.Errorf("content length %d larger than permitted %d", length, dns.MaxMsgSize) + log.Println(err.Error()) + http.Error(w, err.Error(), http.StatusRequestEntityTooLarge) return } } } + if req.Method != http.MethodPost && req.Method != http.MethodGet { - http.Error(w, "method must be GET or POST", http.StatusNotImplemented) + err := fmt.Errorf("invalid HTTP method %s, must be GET or POST", req.Method) + log.Println(err.Error()) + http.Error(w, err.Error(), http.StatusNotImplemented) return }