mirror of
https://github.com/go-acme/lego
synced 2026-03-14 14:35:48 +01:00
pdns: fix TXT record cleanup for wildcard domains (#2500)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
This commit is contained in:
parent
24a46d0c15
commit
3f795d6ab1
2 changed files with 25 additions and 10 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue