1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00

Fix NAPTR record support.

This commit is contained in:
Peter Dunaskin
2019-03-29 12:01:52 +01:00
parent 7566c0428e
commit e2726dda64
7 changed files with 13 additions and 13 deletions

Binary file not shown.

View File

@ -80,14 +80,14 @@ func (dc *DomainConfig) Punycode() error {
} }
rec.SetLabelFromFQDN(t, dc.Name) rec.SetLabelFromFQDN(t, dc.Name)
switch rec.Type { // #rtype_variations 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) // These rtypes are hostnames, therefore need to be converted (unlike, for example, an AAAA record)
t, err := idna.ToASCII(rec.GetTargetField()) t, err := idna.ToASCII(rec.GetTargetField())
rec.SetTarget(t) rec.SetTarget(t)
if err != nil { if err != nil {
return err return err
} }
case "A", "AAAA", "CAA", "SSHFP", "TXT", "TLSA": case "A", "AAAA", "CAA", "NAPTR", "SSHFP", "TXT", "TLSA":
// Nothing to do. // Nothing to do.
default: default:
msg := fmt.Sprintf("Punycode rtype %v unimplemented", rec.Type) msg := fmt.Sprintf("Punycode rtype %v unimplemented", rec.Type)

View File

@ -82,7 +82,7 @@ type RecordConfig struct {
NaptrService string `json:"naptrservice,omitempty"` NaptrService string `json:"naptrservice,omitempty"`
NaptrRegexp string `json:"naptrregexp,omitempty"` NaptrRegexp string `json:"naptrregexp,omitempty"`
//NaptrReplacement string `json:"naptrreplacement,omitempty"` //NaptrReplacement string `json:"naptrreplacement,omitempty"`
NaptrReplacement string `json:"target"` //NaptrReplacement string `json:"target"`
SshfpAlgorithm uint8 `json:"sshfpalgorithm,omitempty"` SshfpAlgorithm uint8 `json:"sshfpalgorithm,omitempty"`
SshfpFingerprint uint8 `json:"sshfpfingerprint,omitempty"` SshfpFingerprint uint8 `json:"sshfpfingerprint,omitempty"`
TlsaUsage uint8 `json:"tlsausage,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).Flags = rc.NaptrFlags
rr.(*dns.NAPTR).Service = rc.NaptrService rr.(*dns.NAPTR).Service = rc.NaptrService
rr.(*dns.NAPTR).Regexp = rc.NaptrRegexp rr.(*dns.NAPTR).Regexp = rc.NaptrRegexp
//rr.(*dns.NAPTR).Replacement = rc.GetTargetField() rr.(*dns.NAPTR).Replacement = rc.GetTargetField()
rr.(*dns.NAPTR).Replacement = rc.NaptrReplacement
case dns.TypeMX: case dns.TypeMX:
rr.(*dns.MX).Preference = rc.MxPreference rr.(*dns.MX).Preference = rc.MxPreference
rr.(*dns.MX).Mx = rc.GetTargetField() rr.(*dns.MX).Mx = rc.GetTargetField()
@ -316,10 +315,10 @@ func downcase(recs []*RecordConfig) {
r.Name = strings.ToLower(r.Name) r.Name = strings.ToLower(r.Name)
r.NameFQDN = strings.ToLower(r.NameFQDN) r.NameFQDN = strings.ToLower(r.NameFQDN)
switch r.Type { // #rtype_variations 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. // These record types have a target that is case insensitive, so we downcase it.
r.Target = strings.ToLower(r.Target) 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. // These record types have a target that is case sensitive, or is an IP address. We leave them alone.
// Do nothing. // Do nothing.
default: default:

View File

@ -14,7 +14,8 @@ func (rc *RecordConfig) SetTargetNAPTR(order uint16, preference uint16, flags st
rc.NaptrFlags = flags rc.NaptrFlags = flags
rc.NaptrService = service rc.NaptrService = service
rc.NaptrRegexp = regexp rc.NaptrRegexp = regexp
rc.NaptrReplacement = target rc.SetTarget(target)
if rc.Type == "" { if rc.Type == "" {
rc.Type = "NAPTR" rc.Type = "NAPTR"
} }

View File

@ -78,7 +78,7 @@ func (rc *RecordConfig) GetTargetDebug() string {
case "A", "AAAA", "CNAME", "NS", "PTR", "TXT": case "A", "AAAA", "CNAME", "NS", "PTR", "TXT":
// Nothing special. // Nothing special.
case "NAPTR": 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": case "MX":
content += fmt.Sprintf(" pref=%d", rc.MxPreference) content += fmt.Sprintf(" pref=%d", rc.MxPreference)
case "SOA": case "SOA":

View File

@ -171,13 +171,11 @@ func checkTargets(rec *models.RecordConfig, domain string) (errs []error) {
} }
case "PTR": case "PTR":
check(checkTarget(target)) check(checkTarget(target))
case "NAPTR":
check(checkTarget(target))
case "ALIAS": case "ALIAS":
check(checkTarget(target)) check(checkTarget(target))
case "SRV": case "SRV":
check(checkTarget(target)) check(checkTarget(target))
case "TXT", "IMPORT_TRANSFORM", "CAA", "SSHFP", "TLSA": case "TXT", "IMPORT_TRANSFORM", "CAA", "NAPTR", "SSHFP", "TLSA":
default: default:
if rec.Metadata["orig_custom_type"] != "" { if rec.Metadata["orig_custom_type"] != "" {
// it is a valid custom type. We perform no validation on target // it is a valid custom type. We perform no validation on target

View File

@ -33,7 +33,7 @@ import (
var features = providers.DocumentationNotes{ var features = providers.DocumentationNotes{
providers.CanUseCAA: providers.Can(), providers.CanUseCAA: providers.Can(),
providers.CanUsePTR: providers.Can(), providers.CanUsePTR: providers.Can(),
providers.CanUseNAPTR: providers.Can(), providers.CanUseNAPTR: providers.Can(),
providers.CanUseSRV: providers.Can(), providers.CanUseSRV: providers.Can(),
providers.CanUseSSHFP: providers.Can(), providers.CanUseSSHFP: providers.Can(),
providers.CanUseTLSA: 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)) panicInvalid(rc.SetTarget(v.Ns))
case *dns.PTR: case *dns.PTR:
panicInvalid(rc.SetTarget(v.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: case *dns.SOA:
oldSerial = v.Serial oldSerial = v.Serial
if oldSerial == 0 { if oldSerial == 0 {