From 5d9b82e917c363a676f3e374b076fb7b77069a72 Mon Sep 17 00:00:00 2001 From: Brian Hartvigsen Date: Thu, 17 Aug 2023 09:41:52 -0600 Subject: [PATCH] CLOUDFLARE: Support unicode domains (#2466) Co-authored-by: Tom Limoncelli --- providers/cloudflare/cloudflareProvider.go | 9 ++++++++- providers/cloudflare/rest.go | 5 +++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/providers/cloudflare/cloudflareProvider.go b/providers/cloudflare/cloudflareProvider.go index 53f2f4596..7b7560b06 100644 --- a/providers/cloudflare/cloudflareProvider.go +++ b/providers/cloudflare/cloudflareProvider.go @@ -3,6 +3,7 @@ package cloudflare import ( "encoding/json" "fmt" + "golang.org/x/net/idna" "net" "os" "strconv" @@ -485,8 +486,14 @@ func (c *cloudflareProvider) mkDeleteCorrection(recType string, origRec any, dom func checkNSModifications(dc *models.DomainConfig) { newList := make([]*models.RecordConfig, 0, len(dc.Records)) + + punyRoot, err := idna.ToASCII(dc.Name) + if err != nil { + punyRoot = dc.Name + } + for _, rec := range dc.Records { - if rec.Type == "NS" && rec.GetLabelFQDN() == dc.Name { + if rec.Type == "NS" && rec.GetLabelFQDN() == punyRoot { if !strings.HasSuffix(rec.GetTargetField(), ".ns.cloudflare.com.") { printer.Warnf("cloudflare does not support modifying NS records on base domain. %s will not be added.\n", rec.GetTargetField()) } diff --git a/providers/cloudflare/rest.go b/providers/cloudflare/rest.go index b3de4b614..614be8aac 100644 --- a/providers/cloudflare/rest.go +++ b/providers/cloudflare/rest.go @@ -3,6 +3,7 @@ package cloudflare import ( "context" "fmt" + "golang.org/x/net/idna" "strconv" "strings" @@ -20,6 +21,10 @@ func (c *cloudflareProvider) fetchDomainList() error { } for _, zone := range zones { + if encoded, err := idna.ToASCII(zone.Name); err == nil && encoded != zone.Name { + c.domainIndex[encoded] = zone.ID + c.nameservers[encoded] = append(c.nameservers[encoded], zone.NameServers...) + } c.domainIndex[zone.Name] = zone.ID c.nameservers[zone.Name] = append(c.nameservers[zone.Name], zone.NameServers...) }