diff options
Diffstat (limited to 'middleware/middleware.go')
-rw-r--r-- | middleware/middleware.go | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/middleware/middleware.go b/middleware/middleware.go index 47d732f4d..da0107cd3 100644 --- a/middleware/middleware.go +++ b/middleware/middleware.go @@ -2,6 +2,7 @@ package middleware import ( + "errors" "fmt" "github.com/miekg/dns" @@ -65,5 +66,15 @@ func (f HandlerFunc) Name() string { return "handlerfunc" } // Error returns err with 'middleware/name: ' prefixed to it. func Error(name string, err error) error { return fmt.Errorf("%s/%s: %s", "middleware", name, err) } +// NextOrFailure calls next.ServeDNS when next is not nill, otherwise it will return, a ServerFailure +// and a nil error. +func NextOrFailure(name string, next Handler, ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { + if next != nil { + return next.ServeDNS(ctx, w, r) + } + + return dns.RcodeServerFailure, Error(name, errors.New("no next middleware found")) +} + // Namespace is the namespace used for the metrics. const Namespace = "coredns" |