aboutsummaryrefslogtreecommitdiff
path: root/middleware/middleware.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/middleware.go')
-rw-r--r--middleware/middleware.go11
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"