diff --git a/models/.record.go.swp b/models/.record.go.swp index 4fc202277..a642d5e80 100644 Binary files a/models/.record.go.swp and b/models/.record.go.swp differ diff --git a/models/domain.go b/models/domain.go index 5e1385f31..ad20b23f0 100644 --- a/models/domain.go +++ b/models/domain.go @@ -80,14 +80,14 @@ func (dc *DomainConfig) Punycode() error { } rec.SetLabelFromFQDN(t, dc.Name) switch rec.Type { // #rtype_variations - case "ALIAS", "MX", "NS", "CNAME", "PTR", "NAPTR", "SRV", "URL", "URL301", "FRAME", "R53_ALIAS": + case "ALIAS", "MX", "NS", "CNAME", "PTR", "SRV", "URL", "URL301", "FRAME", "R53_ALIAS": // These rtypes are hostnames, therefore need to be converted (unlike, for example, an AAAA record) t, err := idna.ToASCII(rec.GetTargetField()) rec.SetTarget(t) if err != nil { return err } - case "A", "AAAA", "CAA", "SSHFP", "TXT", "TLSA": + case "A", "AAAA", "CAA", "NAPTR", "SSHFP", "TXT", "TLSA": // Nothing to do. default: msg := fmt.Sprintf("Punycode rtype %v unimplemented", rec.Type) diff --git a/models/record.go b/models/record.go index 3dca8ea81..e7d27fdc9 100644 --- a/models/record.go +++ b/models/record.go @@ -82,7 +82,7 @@ type RecordConfig struct { NaptrService string `json:"naptrservice,omitempty"` NaptrRegexp string `json:"naptrregexp,omitempty"` //NaptrReplacement string `json:"naptrreplacement,omitempty"` - NaptrReplacement string `json:"target"` + //NaptrReplacement string `json:"target"` SshfpAlgorithm uint8 `json:"sshfpalgorithm,omitempty"` SshfpFingerprint uint8 `json:"sshfpfingerprint,omitempty"` TlsaUsage uint8 `json:"tlsausage,omitempty"` @@ -215,8 +215,7 @@ func (rc *RecordConfig) ToRR() dns.RR { rr.(*dns.NAPTR).Flags = rc.NaptrFlags rr.(*dns.NAPTR).Service = rc.NaptrService rr.(*dns.NAPTR).Regexp = rc.NaptrRegexp - //rr.(*dns.NAPTR).Replacement = rc.GetTargetField() - rr.(*dns.NAPTR).Replacement = rc.NaptrReplacement + rr.(*dns.NAPTR).Replacement = rc.GetTargetField() case dns.TypeMX: rr.(*dns.MX).Preference = rc.MxPreference rr.(*dns.MX).Mx = rc.GetTargetField() @@ -316,10 +315,10 @@ func downcase(recs []*RecordConfig) { r.Name = strings.ToLower(r.Name) r.NameFQDN = strings.ToLower(r.NameFQDN) switch r.Type { // #rtype_variations - case "ANAME", "CNAME", "MX", "NS", "PTR", "NAPTR", "SRV": + case "ANAME", "CNAME", "MX", "NS", "PTR", "SRV": // These record types have a target that is case insensitive, so we downcase it. r.Target = strings.ToLower(r.Target) - case "A", "AAAA", "ALIAS", "CAA", "IMPORT_TRANSFORM", "TLSA", "TXT", "SOA", "SSHFP", "CF_REDIRECT", "CF_TEMP_REDIRECT": + case "A", "AAAA", "ALIAS", "CAA", "IMPORT_TRANSFORM", "NAPTR", "TLSA", "TXT", "SOA", "SSHFP", "CF_REDIRECT", "CF_TEMP_REDIRECT": // These record types have a target that is case sensitive, or is an IP address. We leave them alone. // Do nothing. default: diff --git a/models/t_naptr.go b/models/t_naptr.go index 7ccb4ff35..f17f265ef 100644 --- a/models/t_naptr.go +++ b/models/t_naptr.go @@ -14,7 +14,8 @@ func (rc *RecordConfig) SetTargetNAPTR(order uint16, preference uint16, flags st rc.NaptrFlags = flags rc.NaptrService = service rc.NaptrRegexp = regexp - rc.NaptrReplacement = target + rc.SetTarget(target) + if rc.Type == "" { rc.Type = "NAPTR" } diff --git a/models/target.go b/models/target.go index 411ce567b..9e46a9552 100644 --- a/models/target.go +++ b/models/target.go @@ -78,7 +78,7 @@ func (rc *RecordConfig) GetTargetDebug() string { case "A", "AAAA", "CNAME", "NS", "PTR", "TXT": // Nothing special. case "NAPTR": - content += fmt.Sprintf(" naptrorder=%d naptrpreference=%d naptrflags=%s naptrservice=%s naptrregexp=%s naptrreplacement=%s", rc.NaptrOrder, rc.NaptrPreference, rc.NaptrFlags, rc.NaptrService, rc.NaptrRegexp, rc.NaptrReplacement) + content += fmt.Sprintf(" naptrorder=%d naptrpreference=%d naptrflags=%s naptrservice=%s naptrregexp=%s", rc.NaptrOrder, rc.NaptrPreference, rc.NaptrFlags, rc.NaptrService, rc.NaptrRegexp) case "MX": content += fmt.Sprintf(" pref=%d", rc.MxPreference) case "SOA": diff --git a/pkg/normalize/validate.go b/pkg/normalize/validate.go index c9b4cfbca..52e2fc34a 100644 --- a/pkg/normalize/validate.go +++ b/pkg/normalize/validate.go @@ -171,13 +171,11 @@ func checkTargets(rec *models.RecordConfig, domain string) (errs []error) { } case "PTR": check(checkTarget(target)) - case "NAPTR": - check(checkTarget(target)) case "ALIAS": check(checkTarget(target)) case "SRV": check(checkTarget(target)) - case "TXT", "IMPORT_TRANSFORM", "CAA", "SSHFP", "TLSA": + case "TXT", "IMPORT_TRANSFORM", "CAA", "NAPTR", "SSHFP", "TLSA": default: if rec.Metadata["orig_custom_type"] != "" { // it is a valid custom type. We perform no validation on target diff --git a/providers/bind/bindProvider.go b/providers/bind/bindProvider.go index 1d3650698..ee6a130e5 100644 --- a/providers/bind/bindProvider.go +++ b/providers/bind/bindProvider.go @@ -33,7 +33,7 @@ import ( var features = providers.DocumentationNotes{ providers.CanUseCAA: providers.Can(), providers.CanUsePTR: providers.Can(), - providers.CanUseNAPTR: providers.Can(), + providers.CanUseNAPTR: providers.Can(), providers.CanUseSRV: providers.Can(), providers.CanUseSSHFP: providers.Can(), providers.CanUseTLSA: providers.Can(), @@ -121,6 +121,8 @@ func rrToRecord(rr dns.RR, origin string, replaceSerial uint32) (models.RecordCo panicInvalid(rc.SetTarget(v.Ns)) case *dns.PTR: panicInvalid(rc.SetTarget(v.Ptr)) + case *dns.NAPTR: + panicInvalid(rc.SetTargetNAPTR(v.Order, v.Preference, v.Flags, v.Service, v.Regexp, v.Replacement)) case *dns.SOA: oldSerial = v.Serial if oldSerial == 0 {