Releases: libdns/all-inkl
Release list
v0.2.5
v0.2.5
Fixed
-
Deleting a record could remove the wrong one when multiple records shared the same name (#2).
Record lookups for deletion previously matched onrecord_nameonly. When a zone had two records with the same name but different values — for example, two_acme-challengeTXT records created while solving DNS-01 challenges for a certificate and its wildcard counterpart at the same time —DeleteRecordcould match and delete the wrong one, leaving a stale record behind and breaking ACME validation.
Deletion now matches on name, type, and value together, so it uniquely identifies the exact record to remove. -
AppendRecordfailed with an unhelpfulinvalid response formaterror, hiding the real cause (caddy-dns/all-inkl#2).
SOAP fault detection previously only recognized a bareFaultelement. Faults returned with a namespace prefix (e.g.soap:Fault,SOAP-ENV:Fault) — which can happen under conditions like KAS's flood/rate-limit protection — went undetected and fell through to a generic, undiagnosable error.
Fault detection now searches the full response for a fault message regardless of namespace, and if the response still doesn't parse as expected, the error now includes the raw API response so the actual cause is visible.
Changed
- All KAS API calls (
GetAllRecords,AppendRecord,SetRecord,DeleteRecord) are now serialized with a mutex around the full request/response round trip. Previously, concurrent calls (e.g. Caddy solving several DNS-01 challenges in parallel) could each pass the flood-delay check at nearly the same instant and then hit KAS simultaneously, tripping its flood protection. SetRecordnow updates its in-memory cache entry after a successful update, so a subsequentDeleteRecordtargeting the new value works against fresh data instead of a stale cached one.
Tests
- Added an integration test that creates two records with the same name but different values, deletes one, and verifies only the targeted record is removed.
- Added an integration test that fires several
AppendRecordcalls concurrently to guard against regressions in call serialization. - Added unit tests for the fault-detection helper covering bare and namespace-prefixed SOAP faults.
Upgrade notes
No configuration or API changes. If you were relying on DeleteRecord matching by name alone, note that a delete call now requires the record's value to match exactly what's stored — this is the intended fix and matches standard libdns semantics.