From 3e1e7aeb8ee45cd987f1e78da76f5d447709f1a3 Mon Sep 17 00:00:00 2001 From: Florian Ritterhoff Date: Tue, 22 Aug 2023 11:09:50 +0200 Subject: [PATCH] fix: correct order for dhcid --- build/generate/featureMatrix.go | 8 ++++---- models/dnsrr.go | 4 ++-- models/record.go | 4 ++-- pkg/normalize/validate.go | 4 ++-- providers/bind/bindProvider.go | 2 +- providers/capabilities.go | 6 +++--- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/build/generate/featureMatrix.go b/build/generate/featureMatrix.go index c032d092f..e204728e0 100644 --- a/build/generate/featureMatrix.go +++ b/build/generate/featureMatrix.go @@ -182,6 +182,10 @@ func matrixData() *FeatureMatrix { DomainModifierCaa, providers.CanUseCAA, ) + setCapability( + DomainModifierDhcid, + providers.CanUseDHCID, + ) setCapability( DomainModifierDs, providers.CanUseDS, @@ -214,10 +218,6 @@ func matrixData() *FeatureMatrix { DomainModifierTlsa, providers.CanUseTLSA, ) - setCapability( - DomainModifierDhcid, - providers.CanUseDHCID, - ) setCapability( GetZones, providers.CanGetZones, diff --git a/models/dnsrr.go b/models/dnsrr.go index b7b73e264..1ef0f8212 100644 --- a/models/dnsrr.go +++ b/models/dnsrr.go @@ -74,6 +74,8 @@ func RRtoRC(rr dns.RR, origin string) (RecordConfig, error) { err = rc.SetTargetCAA(v.Flag, v.Tag, v.Value) case *dns.CNAME: err = rc.SetTarget(v.Target) + case *dns.DHCID: + err = rc.SetTarget(v.Digest) case *dns.DS: err = rc.SetTargetDS(v.KeyTag, v.Algorithm, v.DigestType, v.Digest) case *dns.LOC: @@ -96,8 +98,6 @@ func RRtoRC(rr dns.RR, origin string) (RecordConfig, error) { err = rc.SetTargetTLSA(v.Usage, v.Selector, v.MatchingType, v.Certificate) case *dns.TXT: err = rc.SetTargetTXTs(v.Txt) - case *dns.DHCID: - err = rc.SetTarget(v.Digest) default: return *rc, fmt.Errorf("rrToRecord: Unimplemented zone record type=%s (%v)", rc.Type, rr) } diff --git a/models/record.go b/models/record.go index fb2f7cccd..a8ebd9436 100644 --- a/models/record.go +++ b/models/record.go @@ -390,6 +390,8 @@ func (rc *RecordConfig) ToRR() dns.RR { rr.(*dns.CAA).Value = rc.GetTargetField() case dns.TypeCNAME: rr.(*dns.CNAME).Target = rc.GetTargetField() + case dns.TypeDHCID: + rr.(*dns.DHCID).Digest = rc.GetTargetField() case dns.TypeDS: rr.(*dns.DS).Algorithm = rc.DsAlgorithm rr.(*dns.DS).DigestType = rc.DsDigestType @@ -446,8 +448,6 @@ func (rc *RecordConfig) ToRR() dns.RR { rr.(*dns.TLSA).Certificate = rc.GetTargetField() case dns.TypeTXT: rr.(*dns.TXT).Txt = rc.TxtStrings - case dns.TypeDHCID: - rr.(*dns.DHCID).Digest = rc.GetTargetField() default: panic(fmt.Sprintf("ToRR: Unimplemented rtype %v", rc.Type)) // We panic so that we quickly find any switch statements diff --git a/pkg/normalize/validate.go b/pkg/normalize/validate.go index 23694c98c..998baeaf0 100644 --- a/pkg/normalize/validate.go +++ b/pkg/normalize/validate.go @@ -222,7 +222,7 @@ func checkTargets(rec *models.RecordConfig, domain string) (errs []error) { } case "SRV": check(checkTarget(target)) - case "TXT", "IMPORT_TRANSFORM", "CAA", "SSHFP", "TLSA", "DS", "DHCID": + case "CAA", "DHCID", "DS", "IMPORT_TRANSFORM", "SSHFP", "TLSA", "TXT": default: if rec.Metadata["orig_custom_type"] != "" { // it is a valid custom type. We perform no validation on target @@ -689,6 +689,7 @@ var providerCapabilityChecks = []pairTypeCapability{ capabilityCheck("AUTODNSSEC", providers.CanAutoDNSSEC), capabilityCheck("AZURE_ALIAS", providers.CanUseAzureAlias), capabilityCheck("CAA", providers.CanUseCAA), + capabilityCheck("DHCID", providers.CanUseDHCID), capabilityCheck("LOC", providers.CanUseLOC), capabilityCheck("NAPTR", providers.CanUseNAPTR), capabilityCheck("PTR", providers.CanUsePTR), @@ -697,7 +698,6 @@ var providerCapabilityChecks = []pairTypeCapability{ capabilityCheck("SRV", providers.CanUseSRV), capabilityCheck("SSHFP", providers.CanUseSSHFP), capabilityCheck("TLSA", providers.CanUseTLSA), - capabilityCheck("DHCID", providers.CanUseDHCID), // DS needs special record-level checks { diff --git a/providers/bind/bindProvider.go b/providers/bind/bindProvider.go index 21c98da64..444ce6d72 100644 --- a/providers/bind/bindProvider.go +++ b/providers/bind/bindProvider.go @@ -36,6 +36,7 @@ var features = providers.DocumentationNotes{ providers.CanAutoDNSSEC: providers.Can("Just writes out a comment indicating DNSSEC was requested"), providers.CanGetZones: providers.Can(), providers.CanUseCAA: providers.Can(), + providers.CanUseDHCID: providers.Can(), providers.CanUseDS: providers.Can(), providers.CanUseLOC: providers.Can(), providers.CanUseNAPTR: providers.Can(), @@ -44,7 +45,6 @@ var features = providers.DocumentationNotes{ providers.CanUseSRV: providers.Can(), providers.CanUseSSHFP: providers.Can(), providers.CanUseTLSA: providers.Can(), - providers.CanUseDHCID: providers.Can(), providers.CantUseNOPURGE: providers.Cannot(), providers.DocCreateDomains: providers.Can("Driver just maintains list of zone files. It should automatically add missing ones."), providers.DocDualHost: providers.Can(), diff --git a/providers/capabilities.go b/providers/capabilities.go index 972163391..5af2817ca 100644 --- a/providers/capabilities.go +++ b/providers/capabilities.go @@ -32,6 +32,9 @@ const ( // CanUseCAA indicates the provider can handle CAA records CanUseCAA + // CanUseDHCID indicates the provider can handle DHCID records + CanUseDHCID + // CanUseDS indicates that the provider can handle DS record types. This // implies CanUseDSForChildren without specifying the latter explicitly. CanUseDS @@ -78,9 +81,6 @@ const ( // DocOfficiallySupported means it is actively used and maintained by stack exchange DocOfficiallySupported - - // CanUseDHCID indicates the provider can handle DHCID records - CanUseDHCID ) var providerCapabilities = map[string]map[Capability]bool{}