aboutsummaryrefslogtreecommitdiff
path: root/middleware/etcd/handler.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/etcd/handler.go')
-rw-r--r--middleware/etcd/handler.go53
1 files changed, 17 insertions, 36 deletions
diff --git a/middleware/etcd/handler.go b/middleware/etcd/handler.go
index ac9820046..c4fa3c46e 100644
--- a/middleware/etcd/handler.go
+++ b/middleware/etcd/handler.go
@@ -14,13 +14,13 @@ import (
// ServeDNS implements the middleware.Handler interface.
func (e *Etcd) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
- opt := Options{}
+ opt := middleware.Options{}
state := request.Request{W: w, Req: r}
if state.QClass() != dns.ClassINET {
return dns.RcodeServerFailure, fmt.Errorf("can only deal with ClassINET")
}
name := state.Name()
- if e.Debug {
+ if e.Debugging {
if debug := isDebug(name); debug != "" {
opt.Debug = r.Question[0].Name
state.Clear()
@@ -58,30 +58,30 @@ func (e *Etcd) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
)
switch state.Type() {
case "A":
- records, debug, err = e.A(zone, state, nil, opt)
+ records, debug, err = middleware.A(e, zone, state, nil, opt)
case "AAAA":
- records, debug, err = e.AAAA(zone, state, nil, opt)
+ records, debug, err = middleware.AAAA(e, zone, state, nil, opt)
case "TXT":
- records, debug, err = e.TXT(zone, state, opt)
+ records, debug, err = middleware.TXT(e, zone, state, opt)
case "CNAME":
- records, debug, err = e.CNAME(zone, state, opt)
+ records, debug, err = middleware.CNAME(e, zone, state, opt)
case "PTR":
- records, debug, err = e.PTR(zone, state, opt)
+ records, debug, err = middleware.PTR(e, zone, state, opt)
case "MX":
- records, extra, debug, err = e.MX(zone, state, opt)
+ records, extra, debug, err = middleware.MX(e, zone, state, opt)
case "SRV":
- records, extra, debug, err = e.SRV(zone, state, opt)
+ records, extra, debug, err = middleware.SRV(e, zone, state, opt)
case "SOA":
- records, debug, err = e.SOA(zone, state, opt)
+ records, debug, err = middleware.SOA(e, zone, state, opt)
case "NS":
if state.Name() == zone {
- records, extra, debug, err = e.NS(zone, state, opt)
+ records, extra, debug, err = middleware.NS(e, zone, state, opt)
break
}
fallthrough
default:
// Do a fake A lookup, so we can distinguish between NODATA and NXDOMAIN
- _, debug, err = e.A(zone, state, nil, opt)
+ _, debug, err = middleware.A(e, zone, state, nil, opt)
}
if opt.Debug != "" {
@@ -90,15 +90,15 @@ func (e *Etcd) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
state.Req.Question[0].Name = opt.Debug
}
- if isEtcdNameError(err) {
- return e.Err(zone, dns.RcodeNameError, state, debug, err, opt)
+ if e.IsNameError(err) {
+ return middleware.BackendError(e, zone, dns.RcodeNameError, state, debug, err, opt)
}
if err != nil {
- return e.Err(zone, dns.RcodeServerFailure, state, debug, err, opt)
+ return middleware.BackendError(e, zone, dns.RcodeServerFailure, state, debug, err, opt)
}
if len(records) == 0 {
- return e.Err(zone, dns.RcodeSuccess, state, debug, err, opt)
+ return middleware.BackendError(e, zone, dns.RcodeSuccess, state, debug, err, opt)
}
m := new(dns.Msg)
@@ -107,7 +107,7 @@ func (e *Etcd) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
m.Answer = append(m.Answer, records...)
m.Extra = append(m.Extra, extra...)
if opt.Debug != "" {
- m.Extra = append(m.Extra, servicesToTxt(debug)...)
+ m.Extra = append(m.Extra, middleware.ServicesToTxt(debug)...)
}
m = dnsutil.Dedup(m)
@@ -119,22 +119,3 @@ func (e *Etcd) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
// Name implements the Handler interface.
func (e *Etcd) Name() string { return "etcd" }
-
-// Err write an error response to the client.
-func (e *Etcd) Err(zone string, rcode int, state request.Request, debug []msg.Service, err error, opt Options) (int, error) {
- m := new(dns.Msg)
- m.SetRcode(state.Req, rcode)
- m.Authoritative, m.RecursionAvailable, m.Compress = true, true, true
- m.Ns, _, _ = e.SOA(zone, state, opt)
- if opt.Debug != "" {
- m.Extra = servicesToTxt(debug)
- txt := errorToTxt(err)
- if txt != nil {
- m.Extra = append(m.Extra, errorToTxt(err))
- }
- }
- state.SizeAndDo(m)
- state.W.WriteMsg(m)
- // Return success as the rcode to signal we have written to the client.
- return dns.RcodeSuccess, nil
-}