aboutsummaryrefslogtreecommitdiff
path: root/middleware/rewrite/rewrite.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/rewrite/rewrite.go')
-rw-r--r--middleware/rewrite/rewrite.go65
1 files changed, 2 insertions, 63 deletions
diff --git a/middleware/rewrite/rewrite.go b/middleware/rewrite/rewrite.go
index adbdbca15..cb5bbc288 100644
--- a/middleware/rewrite/rewrite.go
+++ b/middleware/rewrite/rewrite.go
@@ -2,10 +2,7 @@
package rewrite
import (
- "strings"
-
"github.com/miekg/coredns/middleware"
-
"github.com/miekg/dns"
"golang.org/x/net/context"
)
@@ -59,64 +56,6 @@ func (rw Rewrite) Name() string { return "rewrite" }
type Rule interface {
// Rewrite rewrites the internal location of the current request.
Rewrite(*dns.Msg) Result
-}
-
-// SimpleRule is a simple rewrite rule. If the From and To look like a type
-// the type of the request is rewritten, otherwise the name is.
-// Note: TSIG signed requests will be invalid.
-type SimpleRule struct {
- From, To string
- fromType, toType uint16
- fromClass, toClass uint16
-}
-
-// NewSimpleRule creates a new Simple Rule
-func NewSimpleRule(from, to string) SimpleRule {
- tpf := dns.StringToType[from]
- tpt := dns.StringToType[to]
-
- // ANY is both a type and class, ANY class rewritting is way more less frequent
- // so we default to ANY as a type.
- clf := dns.StringToClass[from]
- clt := dns.StringToClass[to]
- if from == "ANY" {
- clf = 0
- clt = 0
- }
-
- // It's only a type/class if uppercase is used.
- if from != strings.ToUpper(from) {
- tpf = 0
- clf = 0
- from = middleware.Name(from).Normalize()
- }
- if to != strings.ToUpper(to) {
- tpt = 0
- clt = 0
- to = middleware.Name(to).Normalize()
- }
- return SimpleRule{From: from, To: to, fromType: tpf, toType: tpt, fromClass: clf, toClass: clt}
-}
-
-// Rewrite rewrites the the current request.
-func (s SimpleRule) Rewrite(r *dns.Msg) Result {
- if s.fromType > 0 && s.toType > 0 {
- if r.Question[0].Qtype == s.fromType {
- r.Question[0].Qtype = s.toType
- return RewriteDone
- }
- }
-
- if s.fromClass > 0 && s.toClass > 0 {
- if r.Question[0].Qclass == s.fromClass {
- r.Question[0].Qclass = s.toClass
- return RewriteDone
- }
- }
-
- if s.From == r.Question[0].Name {
- r.Question[0].Name = s.To
- return RewriteDone
- }
- return RewriteIgnored
+ // New returns a new rule.
+ New(...string) Rule
}