lib: add recursive CNAME lookup support (#1677)

This commit is contained in:
danthegoodman1 2022-09-17 11:47:50 -04:00 committed by GitHub
parent 4c823ed3c0
commit fd8a9f86ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -179,10 +179,17 @@ func GetRecord(domain, keyAuth string) (fqdn, value string) {
fqdn = fmt.Sprintf("_acme-challenge.%s.", domain)
if ok, _ := strconv.ParseBool(os.Getenv("LEGO_EXPERIMENTAL_CNAME_SUPPORT")); ok {
r, err := dnsQuery(fqdn, dns.TypeCNAME, recursiveNameservers, true)
// Check if the domain has CNAME then return that
if err == nil && r.Rcode == dns.RcodeSuccess {
fqdn = updateDomainWithCName(r, fqdn)
// recursion counter so it doesn't spin out of control
for limit := 0; limit < 50; limit++ {
// Keep following CNAMEs
r, err := dnsQuery(fqdn, dns.TypeCNAME, recursiveNameservers, true)
// Check if the domain has CNAME then use that
if err == nil && r.Rcode == dns.RcodeSuccess {
fqdn = updateDomainWithCName(r, fqdn)
} else {
// No more CNAME records to follow, exit
return
}
}
}