diff --git a/normalize/validate.go b/normalize/validate.go index 09ff1e1a3..bb1e507fe 100644 --- a/normalize/validate.go +++ b/normalize/validate.go @@ -5,10 +5,10 @@ import ( "net" "strings" - "github.com/miekg/dns" - "github.com/miekg/dns/dnsutil" "github.com/StackExchange/dnscontrol/models" "github.com/StackExchange/dnscontrol/transform" + "github.com/miekg/dns" + "github.com/miekg/dns/dnsutil" ) // Returns false if label does not validate. @@ -138,19 +138,27 @@ func import_transform(src_domain, dst_domain *models.DomainConfig, transforms [] // 4. For As, change the target as described the transforms. for _, rec := range src_domain.Records { - var newrec models.RecordConfig - newrec = *rec - newrec.Name = newrec.NameFQDN - newrec.NameFQDN = dnsutil.AddOrigin(newrec.Name, dst_domain.Name) + newRec := func() *models.RecordConfig { + rec2, _ := rec.Copy() + rec2.Name = rec2.NameFQDN + rec2.NameFQDN = dnsutil.AddOrigin(rec2.Name, dst_domain.Name) + return rec2 + } switch rec.Type { case "A": - tr, err := transform.TransformIP(net.ParseIP(newrec.Target), transforms) + trs, err := transform.TransformIPToList(net.ParseIP(rec.Target), transforms) if err != nil { - return fmt.Errorf("import_transform: TransformIP(%v, %v) returned err=%s", newrec.Target, transforms, err) + return fmt.Errorf("import_transform: TransformIP(%v, %v) returned err=%s", rec.Target, transforms, err) + } + for _, tr := range trs { + r := newRec() + r.Target = tr.String() + dst_domain.Records = append(dst_domain.Records, r) } - newrec.Target = tr.String() case "CNAME": - newrec.Target = transform_cname(newrec.Target, src_domain.Name, dst_domain.Name) + r := newRec() + r.Target = transform_cname(r.Target, src_domain.Name, dst_domain.Name) + dst_domain.Records = append(dst_domain.Records, r) case "MX", "NS", "TXT": // Not imported. continue @@ -158,7 +166,6 @@ func import_transform(src_domain, dst_domain *models.DomainConfig, transforms [] return fmt.Errorf("import_transform: Unimplemented record type %v (%v)", rec.Type, rec.Name) } - dst_domain.Records = append(dst_domain.Records, &newrec) } return nil } diff --git a/transform/transform.go b/transform/transform.go index e3fa4dcac..ae5b3e6f5 100644 --- a/transform/transform.go +++ b/transform/transform.go @@ -111,7 +111,7 @@ func TransformIPToList(address net.IP, transforms []IpConversion) ([]net.IP, err return nil, err } if (thisIP >= min) && (thisIP <= max) { - if conv.NewIPs != nil { + if len(conv.NewIPs) > 0 { return conv.NewIPs, nil } list := []net.IP{} diff --git a/transform/transform_test.go b/transform/transform_test.go index 60f6f13d9..0b6267ea6 100644 --- a/transform/transform_test.go +++ b/transform/transform_test.go @@ -126,6 +126,7 @@ func Test_TransformIP(t *testing.T) { High: net.ParseIP("55.255.0.0"), NewBases: []net.IP{net.ParseIP("66.0.0.0"), net.ParseIP("77.0.0.0")}, }} + //NO TRANSFORMS ON 99.x.x.x PLZ var tests = []struct { experiment string @@ -150,6 +151,7 @@ func Test_TransformIP(t *testing.T) { {"44.44.44.24", "100.100.100.44"}, {"44.44.44.44", "44.44.44.44"}, {"55.0.42.42", "66.0.42.42,77.0.42.42"}, + {"99.0.0.42", "99.0.0.42"}, } for _, test := range tests {