diff --git a/docs/_includes/matrix.html b/docs/_includes/matrix.html
index c20ebd0ba..c295659e0 100644
--- a/docs/_includes/matrix.html
+++ b/docs/_includes/matrix.html
@@ -301,7 +301,9 @@
|
- |
+
+
+ |
|
diff --git a/models/dns.go b/models/dns.go
index 92f6e1b87..c4f9e6c4d 100644
--- a/models/dns.go
+++ b/models/dns.go
@@ -443,6 +443,22 @@ func SplitCombinedSrvValue(s string) (priority, weight, port uint16, target stri
return uint16(priorityconv), uint16(weightconv), uint16(portconv), parts[3], nil
}
+// CombineCAAs will merge the tags and flags into the target field for all CAA records.
+// Useful for providers that desire them as one field.
+func (dc *DomainConfig) CombineCAAs() {
+ for _, rec := range dc.Records {
+ if rec.Type == "CAA" {
+ if rec.CombinedTarget {
+ pm := strings.Join([]string{"CombineCAAs: Already collapsed: ", rec.Name, rec.Target}, " ")
+ panic(pm)
+ }
+ rec.Target = rec.Content()
+ fmt.Printf("DEBUG: NEW TARGET: %v\n", rec.Target)
+ rec.CombinedTarget = true
+ }
+ }
+}
+
func SplitCombinedCaaValue(s string) (tag string, flag uint8, value string, err error) {
splitData := strings.SplitN(s, " ", 3)
diff --git a/providers/gandi/gandiProvider.go b/providers/gandi/gandiProvider.go
index 131765f5c..f316dbebe 100644
--- a/providers/gandi/gandiProvider.go
+++ b/providers/gandi/gandiProvider.go
@@ -32,8 +32,13 @@ var docNotes = providers.DocumentationNotes{
}
func init() {
- providers.RegisterDomainServiceProviderType("GANDI", newDsp, providers.CanUsePTR,
- providers.CanUseSRV, docNotes, providers.CantUseNOPURGE)
+ providers.RegisterDomainServiceProviderType("GANDI", newDsp,
+ providers.CanUseCAA,
+ providers.CanUsePTR,
+ providers.CanUseSRV,
+ providers.CantUseNOPURGE,
+ docNotes,
+ )
providers.RegisterRegistrarType("GANDI", newReg)
}
@@ -74,6 +79,7 @@ func (c *GandiApi) GetNameservers(domain string) ([]*models.Nameserver, error) {
func (c *GandiApi) GetDomainCorrections(dc *models.DomainConfig) ([]*models.Correction, error) {
dc.Punycode()
dc.CombineSRVs()
+ dc.CombineCAAs()
dc.CombineMXs()
domaininfo, err := c.getDomainInfo(dc.Name)
if err != nil {
diff --git a/providers/gandi/protocol.go b/providers/gandi/protocol.go
index 28581a05f..de95e618d 100644
--- a/providers/gandi/protocol.go
+++ b/providers/gandi/protocol.go
@@ -193,13 +193,19 @@ func convert(r *gandirecord.RecordInfo, origin string) *models.RecordConfig {
}
switch r.Type {
case "A", "AAAA", "NS", "CNAME", "PTR", "TXT":
+ // no-op
+ case "CAA":
+ var err error
+ rc.CaaTag, rc.CaaFlag, rc.Target, err = models.SplitCombinedCaaValue(r.Value)
+ if err != nil {
+ panic(fmt.Sprintf("gandi.convert bad caa value format: %#v (%s)", r.Value, err))
+ }
case "SRV":
var err error
rc.SrvPriority, rc.SrvWeight, rc.SrvPort, rc.Target, err = models.SplitCombinedSrvValue(r.Value)
if err != nil {
panic(fmt.Sprintf("gandi.convert bad srv value format: %#v (%s)", r.Value, err))
}
- // no-op
case "MX":
var err error
rc.MxPreference, rc.Target, err = models.SplitCombinedMxValue(r.Value)