commit
c307d2c587
24
alias.go
24
alias.go
|
@ -4,6 +4,7 @@ import (
|
||||||
"github.com/coredns/coredns/plugin"
|
"github.com/coredns/coredns/plugin"
|
||||||
|
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
|
"math"
|
||||||
|
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
)
|
)
|
||||||
|
@ -33,6 +34,13 @@ func NewResponseModifier(w dns.ResponseWriter) *ResponseModifier {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func min(a, b uint32) uint32 {
|
||||||
|
if a < b {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
// WriteMsg records the status code and calls the
|
// WriteMsg records the status code and calls the
|
||||||
// underlying ResponseWriter's WriteMsg method.
|
// underlying ResponseWriter's WriteMsg method.
|
||||||
func (r *ResponseModifier) WriteMsg(res *dns.Msg) error {
|
func (r *ResponseModifier) WriteMsg(res *dns.Msg) error {
|
||||||
|
@ -46,24 +54,26 @@ func (r *ResponseModifier) WriteMsg(res *dns.Msg) error {
|
||||||
|
|
||||||
// Find and delete CNAME record on that zone, storing the canonical name.
|
// Find and delete CNAME record on that zone, storing the canonical name.
|
||||||
var (
|
var (
|
||||||
cname string
|
cname string = zone
|
||||||
ttl uint32
|
ttl uint32 = math.MaxUint32
|
||||||
)
|
)
|
||||||
for i, rr := range res.Answer {
|
for i := 0; i < len(res.Answer); {
|
||||||
if rr.Header().Rrtype == dns.TypeCNAME && rr.Header().Name == zone {
|
rr := res.Answer[i]
|
||||||
|
if rr.Header().Rrtype == dns.TypeCNAME && rr.Header().Name == cname {
|
||||||
cname = rr.(*dns.CNAME).Target
|
cname = rr.(*dns.CNAME).Target
|
||||||
ttl = rr.(*dns.CNAME).Header().Ttl
|
ttl = min(ttl, rr.(*dns.CNAME).Header().Ttl)
|
||||||
// Remove the CNAME record
|
// Remove the CNAME record
|
||||||
res.Answer = append(res.Answer[:i], res.Answer[i+1:]...)
|
res.Answer = append(res.Answer[:i], res.Answer[i+1:]...)
|
||||||
break
|
continue
|
||||||
}
|
}
|
||||||
|
i++
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rename all the records with the above canonical name to the zone name
|
// Rename all the records with the above canonical name to the zone name
|
||||||
for _, rr := range res.Answer {
|
for _, rr := range res.Answer {
|
||||||
if rr.Header().Name == cname {
|
if rr.Header().Name == cname {
|
||||||
rr.Header().Name = zone
|
rr.Header().Name = zone
|
||||||
rr.Header().Ttl = ttl
|
rr.Header().Ttl = min(ttl, rr.Header().Ttl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
module github.com/serverwentdown/alias
|
||||||
|
|
||||||
|
go 1.13
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/caddyserver/caddy v1.0.3
|
||||||
|
github.com/coredns/coredns v1.6.4
|
||||||
|
github.com/miekg/dns v1.1.17
|
||||||
|
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297
|
||||||
|
)
|
||||||
|
|
||||||
|
replace (
|
||||||
|
github.com/Azure/go-autorest => github.com/Azure/go-autorest v13.0.0+incompatible
|
||||||
|
github.com/miekg/dns v1.1.3 => github.com/miekg/dns v1.1.17
|
||||||
|
golang.org/x/net v0.0.0-20190813000000-74dc4d7220e7 => golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297
|
||||||
|
)
|
Loading…
Reference in New Issue