From 6833f5150df173ece62674712a3a82eb2d34d1c0 Mon Sep 17 00:00:00 2001 From: Ivan Hamilton Date: Fri, 18 Oct 2019 09:53:48 +1100 Subject: [PATCH 1/3] Update moved package name --- setup.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.go b/setup.go index 9fb7b66..d5fd11d 100644 --- a/setup.go +++ b/setup.go @@ -4,7 +4,7 @@ import ( "github.com/coredns/coredns/core/dnsserver" "github.com/coredns/coredns/plugin" - "github.com/mholt/caddy" + "github.com/caddyserver/caddy" ) func init() { From 6d09a7448ceb55e5f4e9fb50520328985a2cd7b6 Mon Sep 17 00:00:00 2001 From: Ivan Hamilton Date: Fri, 18 Oct 2019 09:58:31 +1100 Subject: [PATCH 2/3] Add go.mod Mimic replace config from coredns (v1.6.4 - b139ba3) --- go.mod | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 go.mod diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..f06cfd0 --- /dev/null +++ b/go.mod @@ -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 +) From f4d7207770d52fd8588f30b9a59178f25c6033a5 Mon Sep 17 00:00:00 2001 From: Ivan Hamilton Date: Fri, 18 Oct 2019 15:45:39 +1100 Subject: [PATCH 3/3] Flatten CNAME records beyond first --- alias.go | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/alias.go b/alias.go index 3b8db63..ed375ad 100644 --- a/alias.go +++ b/alias.go @@ -4,6 +4,7 @@ import ( "github.com/coredns/coredns/plugin" "github.com/miekg/dns" + "math" "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 // underlying ResponseWriter's WriteMsg method. 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. var ( - cname string - ttl uint32 + cname string = zone + ttl uint32 = math.MaxUint32 ) - for i, rr := range res.Answer { - if rr.Header().Rrtype == dns.TypeCNAME && rr.Header().Name == zone { + for i := 0; i < len(res.Answer); { + rr := res.Answer[i] + if rr.Header().Rrtype == dns.TypeCNAME && rr.Header().Name == cname { cname = rr.(*dns.CNAME).Target - ttl = rr.(*dns.CNAME).Header().Ttl + ttl = min(ttl, rr.(*dns.CNAME).Header().Ttl) // Remove the CNAME record 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 for _, rr := range res.Answer { if rr.Header().Name == cname { rr.Header().Name = zone - rr.Header().Ttl = ttl + rr.Header().Ttl = min(ttl, rr.Header().Ttl) } }