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:
Binary file not shown.
@ -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)
|
||||
|
@ -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:
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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":
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
Reference in New Issue
Block a user