diff --git a/models/t_parse.go b/models/t_parse.go index 1cbfeea63..cccfdef37 100644 --- a/models/t_parse.go +++ b/models/t_parse.go @@ -3,6 +3,8 @@ package models import ( "fmt" "net" + + "github.com/StackExchange/dnscontrol/v4/pkg/txtutil" ) // PopulateFromString populates a RecordConfig given a type and string. Many @@ -70,10 +72,11 @@ func (rc *RecordConfig) PopulateFromString(rtype, contents, origin string) error case "SOA": return rc.SetTargetSOAString(contents) case "SPF", "TXT": - // Parsing the contents may be unexpected. If your provider gives you a - // string that needs no further parsing, special case TXT and use - // rc.SetTargetTXT(target) like in the example above. - return rc.SetTargetTXTs(ParseQuotedTxt(contents)) + t, err := txtutil.ParseQuoted(contents) + if err != nil { + return err + } + return rc.SetTargetTXT(t) case "SRV": return rc.SetTargetSRVString(contents) case "SSHFP": diff --git a/providers/gcloud/gcloudProvider.go b/providers/gcloud/gcloudProvider.go index d0835ba77..b6b693c98 100644 --- a/providers/gcloud/gcloudProvider.go +++ b/providers/gcloud/gcloudProvider.go @@ -312,10 +312,10 @@ func (g *gcloudProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, exis //printer.Printf("DEBUG: gcloud txt chunks=%+v\n", chunks) //newRRs.Rrdatas = append(newRRs.Rrdatas, chunks[0:]...) t := r.GetTargetField() - printer.Printf("DEBUG: gcloud outboundv=%v\n", t) + //printer.Printf("DEBUG: gcloud outboundv=%v\n", t) //tc := txtutil.RFC1035ChunkedAndQuoted(t) tc := txtutil.EncodeQuoted(t) - printer.Printf("DEBUG: gcloud encodedv=%v\n", tc) + //printer.Printf("DEBUG: gcloud encodedv=%v\n", tc) newRRs.Rrdatas = append(newRRs.Rrdatas, tc) } else { newRRs.Rrdatas = append(newRRs.Rrdatas, r.GetTargetCombined()) @@ -416,23 +416,7 @@ func nativeToRecord(set *gdns.ResourceRecordSet, rec, origin string) (*models.Re r.SetLabelFromFQDN(set.Name, origin) r.TTL = uint32(set.Ttl) rtype := set.Type - var err error - switch rtype { - case "TXT": - //t := r - //te := models.ParseQuotedTxt(rec) - t := rec - td, err := txtutil.ParseQuoted(t) - if err != nil { - return nil, fmt.Errorf("gcloud TXT parse error: %w", err) - } - printer.Printf("DEBUG: gcloud txt inboundv=%v\n", t) - printer.Printf("DEBUG: gcloud txt decodedv=%v\n", td) - err = r.SetTargetTXT(td) - //err = r.SetTargetTXTs(te) - default: - err = r.PopulateFromString(rtype, rec, origin) - } + err := r.PopulateFromString(rtype, rec, origin) if err != nil { return nil, fmt.Errorf("unparsable record %q received from GCLOUD: %w", rtype, err) } diff --git a/providers/hedns/hednsProvider.go b/providers/hedns/hednsProvider.go index 038dee47d..226754293 100644 --- a/providers/hedns/hednsProvider.go +++ b/providers/hedns/hednsProvider.go @@ -17,6 +17,7 @@ import ( "github.com/PuerkitoBio/goquery" "github.com/StackExchange/dnscontrol/v4/models" "github.com/StackExchange/dnscontrol/v4/pkg/diff2" + "github.com/StackExchange/dnscontrol/v4/pkg/txtutil" "github.com/StackExchange/dnscontrol/v4/providers" "github.com/pquerna/otp/totp" ) @@ -322,7 +323,10 @@ func (c *hednsProvider) GetZoneRecords(domain string, meta map[string]string) (m rc.Type = "TXT" fallthrough case "TXT": - err = rc.SetTargetTXTs(models.ParseQuotedTxt(data)) + //err = rc.SetTargetTXTs(models.ParseQuotedTxt(data)) + var t string + t, err = txtutil.ParseQuoted(data) + err = rc.SetTargetTXT(t) default: err = rc.PopulateFromString(rc.Type, data, domain) }