dns/ddclient: add all-inkl.com KAS API DynDNS provider - #5339
Conversation
Adds a new Python provider for all-inkl.com hosting using the KAS SOAP API (KasApi.wsdl). Supports A and AAAA records, including root (@) and wildcard (*) entries. Credentials are passed per-request (no separate auth step). - allinkl.py: new provider class AllInkl, service key 'allinkl' - dialogAccount.xml: show Zone field for service_allinkl - DynDNS.xml: add allinkl to static service list (ddclient backend fallback) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AdSchellevis
left a comment
There was a problem hiding this comment.
@cakallie although I'm not a huge fan fan of the home grown soap string concat, but since this is rather isolated I don't mind that much adding the helper anyway. If you only need a very limited nearly static string to push to the server, it might be better to isolate that in a template file and use normal xml parsing (xml.etree.ElementTree) to parse the responses.
The DynDNS.xml change is the only one that should be applied to prevent offering the option to ddclient.
| <woima>Woima</woima> | ||
| <yandex>Yandex</yandex> | ||
| <zoneedit1>Zoneedit</zoneedit1> | ||
| <allinkl>all-inkl.com (KAS API)</allinkl> |
There was a problem hiding this comment.
this shouldn't be needed for the python implementation as it uses known_services() to figure out the options.
There was a problem hiding this comment.
Thanks for the review!
I've addressed both points:
- DynDNS.xml: Removed the allinkl entry — you're right, known_services() handles the registration automatically.
- XML parsing: Replaced all regex-based response parsing with xml.etree.ElementTree. The SOAP envelope construction remains as string concatenation. Specifically:
- Fault detection in _kas_api() now uses root.find('.//{}Fault') and also catches ET.ParseError for malformed responses
- _find_record_id() now navigates the XML tree instead of splitting on regex boundaries
- The update success check uses findall('.//{}value') instead of a regex search
- Remove allinkl entry from DynDNS.xml; known_services() handles registration automatically for Python providers - Replace regex-based XML parsing with xml.etree.ElementTree: fault detection, record lookup and update success check - Also catches ET.ParseError for malformed responses - Fix German comments in docstring to English Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
@cakallie ok, main concern is addressed, as this is a rather low risk change, let's try to add this to a release so others can test and offer feedback as well. |
* dns/ddclient: add all-inkl.com KAS API DynDNS provider Adds a new Python provider for all-inkl.com hosting using the KAS SOAP API (KasApi.wsdl). Supports A and AAAA records, including root (@) and wildcard (*) entries. Credentials are passed per-request (no separate auth step). - allinkl.py: new provider class AllInkl, service key 'allinkl' - dialogAccount.xml: show Zone field for service_allinkl - DynDNS.xml: add allinkl to static service list (ddclient backend fallback) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * dns/ddclient: address review feedback for all-inkl.com provider - Remove allinkl entry from DynDNS.xml; known_services() handles registration automatically for Python providers - Replace regex-based XML parsing with xml.etree.ElementTree: fault detection, record lookup and update success check - Also catches ET.ParseError for malformed responses - Fix German comments in docstring to English Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Carsten <carsten@kallies-net.de> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a new Python provider for all-inkl.com hosting using the KAS SOAP API (KasApi.wsdl). Supports A and AAAA records, including root (@) and wildcard (*) entries. Credentials are passed per-request (no separate auth step).
Important notices
Before you submit a pull request, we ask you kindly to acknowledge the following:
If AI was used, please disclose:
Related issue
No prior issue — this is a self-contained new provider.
Describe the problem
all-inkl.com offers a pure DNS package without a built-in DynDNS feature. Customers who need to keep a DNS A record updated with their current public IP have no native option within OPNsense to do so via the all-inkl.com KAS API.
Describe the proposed solution
Implements a new ddclient provider (allinkl) that uses the all-inkl.com KAS SOAP API (KasApi.wsdl) to update DNS A/AAAA records directly. Authentication and DNS updates are performed in a single API call per record. The zone is automatically derived from the configured hostname if not explicitly set.