diff --git a/dnsutil.go b/dnsutil.go index 2573cb96..1fe7911b 100644 --- a/dnsutil.go +++ b/dnsutil.go @@ -214,21 +214,11 @@ 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 8cdaeaf8..fff27fb1 100644 --- a/solvers.go +++ b/solvers.go @@ -252,6 +252,11 @@ type DNS01Solver struct { // Preferred DNS resolver(s) to use when doing DNS lookups. Resolvers []string + // Override the domain to set the TXT record on. This is + // to delegate the chanllenge to a different domain. Note + // that the solver doesn't follow CNAME/NS record. + OverrideDomain string + txtRecords map[string]dnsPresentMemory // keyed by domain name txtRecordsMu sync.Mutex } @@ -259,6 +264,9 @@ type DNS01Solver struct { // Present creates the DNS TXT record for the given ACME challenge. func (s *DNS01Solver) Present(ctx context.Context, challenge acme.Challenge) error { dnsName := challenge.DNS01TXTRecordName() + if s.OverrideDomain != "" { + dnsName = s.OverrideDomain + } keyAuth := challenge.DNS01KeyAuthorization() // multiple identifiers can have the same ACME challenge @@ -304,6 +312,9 @@ func (s *DNS01Solver) Present(ctx context.Context, challenge acme.Challenge) err // timeout, whichever is first. func (s *DNS01Solver) Wait(ctx context.Context, challenge acme.Challenge) error { dnsName := challenge.DNS01TXTRecordName() + if s.OverrideDomain != "" { + dnsName = s.OverrideDomain + } keyAuth := challenge.DNS01KeyAuthorization() timeout := s.PropagationTimeout