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]
|
q := r.Question[0]
|
||||||
domain := q.Name
|
domain := q.Name
|
||||||
|
|
||||||
valid := r.Response == false &&
|
reject_and_log := func(code int, reason string) {
|
||||||
(q.Qclass == dns.ClassINET || q.Qclass == dns.ClassANY) &&
|
m.Rcode = code
|
||||||
q.Qtype == dns.TypeTXT
|
|
||||||
if !valid {
|
|
||||||
logger.Debug("invalid request header")
|
|
||||||
m.Rcode = dns.RcodeNotImplemented
|
|
||||||
m.Answer = []dns.RR{}
|
m.Answer = []dns.RR{}
|
||||||
} else if domain != fqdn {
|
logger.Debug(
|
||||||
logger.Debug("invalid domain")
|
"rejecting query",
|
||||||
m.Rcode = dns.RcodeNameError
|
zap.String("reason", reason),
|
||||||
m.Answer = []dns.RR{}
|
zap.Object("response", LoggableDNSMsg{m}),
|
||||||
} else {
|
)
|
||||||
|
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
|
m.Authoritative = true
|
||||||
rr := new(dns.TXT)
|
rr := new(dns.TXT)
|
||||||
rr.Hdr = dns.RR_Header{
|
rr.Hdr = dns.RR_Header{
|
||||||
|
|
@ -208,13 +217,13 @@ func (s *StubDNS) make_handler(fqdn string, txt string) dns.HandlerFunc {
|
||||||
}
|
}
|
||||||
rr.Txt = []string{txt}
|
rr.Txt = []string{txt}
|
||||||
m.Answer = []dns.RR{rr}
|
m.Answer = []dns.RR{rr}
|
||||||
}
|
|
||||||
logger.Debug(
|
logger.Debug(
|
||||||
"sending response",
|
"replying",
|
||||||
zap.Object("response", LoggableDNSMsg{m}),
|
zap.Object("response", LoggableDNSMsg{m}),
|
||||||
)
|
)
|
||||||
w.WriteMsg(m)
|
w.WriteMsg(m)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return handler
|
return handler
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue