diff --git a/dnsutil.go b/dnsutil.go index 1fe7911b..2573cb96 100644 --- a/dnsutil.go +++ b/dnsutil.go @@ -214,11 +214,21 @@ func checkDNSPropagation(fqdn, value string, resolvers []string) (bool, error) { fqdn += "." } + // Initial attempt to resolve at the recursive NS + r, err := dnsQuery(fqdn, dns.TypeTXT, resolvers, true) + if err != nil { + return false, err + } + // TODO: make this configurable, maybe // if !p.requireCompletePropagation { // return true, nil // } + if r.Rcode == dns.RcodeSuccess { + fqdn = updateDomainWithCName(r, fqdn) + } + authoritativeNss, err := lookupNameservers(fqdn, resolvers) if err != nil { return false, err diff --git a/solvers.go b/solvers.go index 409e5741..287d2be6 100644 --- a/solvers.go +++ b/solvers.go @@ -334,7 +334,11 @@ func (s *DNS01Solver) Wait(ctx context.Context, challenge acme.Challenge) error return ctx.Err() } var ready bool - ready, err = checkDNSPropagation(dnsName, keyAuth, resolvers) + if s.OverrideDomain == "" { + ready, err = checkDNSPropagation(dnsName, keyAuth, resolvers) + } else { + ready, err = checkAuthoritativeNss(dnsName, keyAuth, resolvers) + } if err != nil { return fmt.Errorf("checking DNS propagation of %s: %w", dnsName, err) }