style: rework query handling
This commit is contained in:
parent
0c040f6376
commit
0a768b5234
1 changed files with 25 additions and 16 deletions
35
stub.go
35
stub.go
|
|
@ -186,18 +186,27 @@ func (s *StubDNS) make_handler(fqdn string, txt string) dns.HandlerFunc {
|
|||
q := r.Question[0]
|
||||
domain := q.Name
|
||||
|
||||
valid := r.Response == false &&
|
||||
(q.Qclass == dns.ClassINET || q.Qclass == dns.ClassANY) &&
|
||||
q.Qtype == dns.TypeTXT
|
||||
if !valid {
|
||||
logger.Debug("invalid request header")
|
||||
m.Rcode = dns.RcodeNotImplemented
|
||||
reject_and_log := func(code int, reason string) {
|
||||
m.Rcode = code
|
||||
m.Answer = []dns.RR{}
|
||||
} else if domain != fqdn {
|
||||
logger.Debug("invalid domain")
|
||||
m.Rcode = dns.RcodeNameError
|
||||
m.Answer = []dns.RR{}
|
||||
} else {
|
||||
logger.Debug(
|
||||
"rejecting query",
|
||||
zap.String("reason", reason),
|
||||
zap.Object("response", LoggableDNSMsg{m}),
|
||||
)
|
||||
w.WriteMsg(m)
|
||||
}
|
||||
|
||||
switch {
|
||||
case r.Response:
|
||||
reject_and_log(dns.RcodeRefused, "not a query")
|
||||
case !(q.Qclass == dns.ClassINET || q.Qclass == dns.ClassANY):
|
||||
reject_and_log(dns.RcodeNotImplemented, "invalid class")
|
||||
case q.Qtype != dns.TypeTXT:
|
||||
reject_and_log(dns.RcodeNotImplemented, "invalid type")
|
||||
case domain != fqdn:
|
||||
reject_and_log(dns.RcodeNameError, "wrong domain")
|
||||
default:
|
||||
m.Authoritative = true
|
||||
rr := new(dns.TXT)
|
||||
rr.Hdr = dns.RR_Header{
|
||||
|
|
@ -208,13 +217,13 @@ func (s *StubDNS) make_handler(fqdn string, txt string) dns.HandlerFunc {
|
|||
}
|
||||
rr.Txt = []string{txt}
|
||||
m.Answer = []dns.RR{rr}
|
||||
}
|
||||
logger.Debug(
|
||||
"sending response",
|
||||
"replying",
|
||||
zap.Object("response", LoggableDNSMsg{m}),
|
||||
)
|
||||
w.WriteMsg(m)
|
||||
}
|
||||
}
|
||||
|
||||
return handler
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue