diff options
author | 2017-02-07 16:53:16 -0500 | |
---|---|---|
committer | 2017-02-07 21:53:16 +0000 | |
commit | fa1c90a479cce4666c32c4aae8728fc12f09980b (patch) | |
tree | 3a7514b48da436767d914dfad24656b8876d0412 /middleware/rewrite/class.go | |
parent | b8e75509cc7d3f73a8526ad515e85f76b9ccf59d (diff) | |
download | coredns-fa1c90a479cce4666c32c4aae8728fc12f09980b.tar.gz coredns-fa1c90a479cce4666c32c4aae8728fc12f09980b.tar.zst coredns-fa1c90a479cce4666c32c4aae8728fc12f09980b.zip |
Add field keywords to rewrite middleware (#497)
* Require Field for rewrite rules
* review feedback changes
* fix ut
* fix typo, add warning message
Diffstat (limited to 'middleware/rewrite/class.go')
-rw-r--r-- | middleware/rewrite/class.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/middleware/rewrite/class.go b/middleware/rewrite/class.go new file mode 100644 index 000000000..78cca1a13 --- /dev/null +++ b/middleware/rewrite/class.go @@ -0,0 +1,31 @@ +// Package rewrite is middleware for rewriting requests internally to something different. +package rewrite + +import ( + "strings" + + "github.com/miekg/dns" +) + +// ClassRule is a class rewrite rule. +type ClassRule struct { + fromClass, toClass uint16 +} + +// Initializer +func (rule ClassRule) New(args ...string) Rule { + from, to := args[0], strings.Join(args[1:], " ") + return &ClassRule{dns.StringToClass[from], dns.StringToClass[to]} + +} + +// Rewrite rewrites the the current request. +func (rule ClassRule) Rewrite(r *dns.Msg) Result { + if rule.fromClass > 0 && rule.toClass > 0 { + if r.Question[0].Qclass == rule.fromClass { + r.Question[0].Qclass = rule.toClass + return RewriteDone + } + } + return RewriteIgnored +} |