pdns: fix TXT record cleanup for wildcard domains (#2500)

Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
This commit is contained in:
fries1234 2025-03-30 16:49:24 -07:00 committed by GitHub
commit 3f795d6ab1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 10 deletions

View file

@ -7,6 +7,7 @@ import (
"fmt"
"net/http"
"net/url"
"strconv"
"time"
"github.com/go-acme/lego/v4/challenge"
@ -150,7 +151,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
}
rec := internal.Record{
Content: "\"" + info.Value + "\"",
Content: strconv.Quote(info.Value),
Disabled: false,
// pre-v1 API
@ -202,17 +203,27 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
return fmt.Errorf("pdns: no existing record found for %s", info.EffectiveFQDN)
}
rrSets := internal.RRSets{
RRSets: []internal.RRSet{
{
Name: set.Name,
Type: set.Type,
ChangeType: "DELETE",
},
},
var records []internal.Record
for _, r := range set.Records {
if r.Content != strconv.Quote(info.Value) {
records = append(records, r)
}
}
err = d.client.UpdateRecords(ctx, zone, rrSets)
rrSet := internal.RRSet{
Name: set.Name,
Type: set.Type,
}
if len(records) > 0 {
rrSet.ChangeType = "REPLACE"
rrSet.TTL = d.config.TTL
rrSet.Records = records
} else {
rrSet.ChangeType = "DELETE"
}
err = d.client.UpdateRecords(ctx, zone, internal.RRSets{RRSets: []internal.RRSet{rrSet}})
if err != nil {
return fmt.Errorf("pdns: %w", err)
}

View file

@ -141,9 +141,13 @@ func TestLivePresentAndCleanup(t *testing.T) {
err = provider.Present(envTest.GetDomain(), "", "123d==")
require.NoError(t, err)
err = provider.Present(envTest.GetDomain(), "", "123e==")
require.NoError(t, err)
err = provider.CleanUp(envTest.GetDomain(), "", "123d==")
require.NoError(t, err)
err = provider.CleanUp(envTest.GetDomain(), "", "123e==")
require.NoError(t, err)
}
func mustParse(rawURL string) *url.URL {