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