Skip to content

INWX: Fix INWX provider after their unexpected data-type breaking-change#3855

Merged
tlimoncelli merged 3 commits intoStackExchange:mainfrom
patschi:fix-inwx
Nov 29, 2025
Merged

INWX: Fix INWX provider after their unexpected data-type breaking-change#3855
tlimoncelli merged 3 commits intoStackExchange:mainfrom
patschi:fix-inwx

Conversation

@patschi
Copy link
Copy Markdown
Collaborator

@patschi patschi commented Nov 27, 2025

Fixes #3854

Unfortunately I couldn't run the integrationTests properly as INWX doesn't seem to have properly updated their sandbox environment (it still presents int instead of string like production). Hence, the tests do fail. I don't want to run this against my own production account, to be frank.

See:

$ curl -X POST https://api.ote.domrobot.com/xmlrpc/ -H "Content-Type: application/xml" -d '<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
   <methodName>nameserver.info</methodName>
   <params>
      <param>
         <value>
            <struct>
               <member>
                  <name>user</name>
                  <value>
                     <string>[USER]</string>
                  </value>
               </member>
               <member>
                  <name>lang</name>
                  <value>
                     <string>en</string>
                  </value>
               </member>
               <member>
                  <name>pass</name>
                  <value>
                     <string>[PASS]</string>
                  </value>
               </member>
               <member>
                  <name>domain</name>
                  <value>
                     <string>[DOMAIN]</string>
                  </value>
               </member>
            </struct>
         </value>
      </param>
   </params>
</methodCall>' | xmllint --format - | grep -iE "id|roId" -C3
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3968    0  2971  100   997  13375   4488 --:--:-- --:--:-- --:--:-- 17954
            <value>
              <struct>
                <member>
                  <name>roId</name>
                  <value>
                    <int>9677</int>
                  </value>
--
                        <value>
                          <struct>
                            <member>
                              <name>id</name>
                              <value>
                                <int>118057</int>
                              </value>
--
                        <value>
                          <struct>
                            <member>
                              <name>id</name>
                              <value>
                                <int>118060</int>
                              </value>
--
                        <value>
                          <struct>
                            <member>
                              <name>id</name>
                              <value>
                                <int>79610</int>
                              </value>
--
                        <value>
                          <struct>
                            <member>
                              <name>id</name>
                              <value>
                                <int>77243</int>
                              </value>
--
            </value>
          </member>
          <member>
            <name>svTRID</name>
            <value>
              <string>20251127--ote</string>
            </value>

Hence, only done manualy tests via dnscontrol push --domains <example.com>:
(tested create, delete and modify)

CONCURRENTLY checking for 0 zone(s)
SERIALLY checking for 1 zone(s)
Serially checking for zone: "example.tld"
CONCURRENTLY gathering records of 0 zone(s)
SERIALLY gathering records of 1 zone(s)
Serially Gathering: "example.tld"
******************** Domain: example.tld
3 corrections (PK-INWX)
#1: - DELETE _test1.example.tld TXT "123" ttl=43200
SUCCESS!
#2: ± MODIFY _test2.example.tld TXT ("1234" ttl=43200) -> ("12345" ttl=43200)
SUCCESS!
#3: + CREATE _test4.example.tld TXT "123" ttl=43200
SUCCESS!
Done. 3 corrections.

@patschi
Copy link
Copy Markdown
Collaborator Author

patschi commented Nov 28, 2025

Couldn't run the entire test unfortunately, as the sandbox is sporadically offline/running into timeouts...
But at first glance, it works fine:

$ go test -v -verbose -profile INWX
=== RUN   TestDNSProviders
Testing Profile="INWX" (TYPE="INWX")
=== RUN   TestDNSProviders/dnscontrol-inwx.com
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty
    helpers_integration_test.go:169:
        - DELETE 4.dnscontrol-inwx.com PTR foo.example.com. ttl=3600
    helpers_integration_test.go:169:
        ± MODIFY-TTL dnscontrol-inwx.com NS ns.ote.inwx.de. ttl=(86400->300)
    helpers_integration_test.go:169:
        ± MODIFY-TTL dnscontrol-inwx.com NS ns2.ote.inwx.de. ttl=(86400->300)
=== RUN   TestDNSProviders/dnscontrol-inwx.com/00:A:Create_A
    helpers_integration_test.go:169:
        + CREATE testa.dnscontrol-inwx.com A 1.1.1.1 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/00:A:Change_A_target
    helpers_integration_test.go:169:
        ± MODIFY testa.dnscontrol-inwx.com A (1.1.1.1 ttl=300) -> (3.3.3.3 ttl=300)
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#01
    helpers_integration_test.go:169:
        - DELETE testa.dnscontrol-inwx.com A 3.3.3.3 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/01:Apex:Create_A
    helpers_integration_test.go:169:
        + CREATE dnscontrol-inwx.com A 2.2.2.2 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/01:Apex:Change_A_target
    helpers_integration_test.go:169:
        ± MODIFY dnscontrol-inwx.com A (2.2.2.2 ttl=300) -> (4.4.4.4 ttl=300)
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#02
    helpers_integration_test.go:169:
        - DELETE dnscontrol-inwx.com A 4.4.4.4 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/02:Protocol-Wildcard:Create_wildcard
    helpers_integration_test.go:169:
        + CREATE *.dnscontrol-inwx.com A 3.3.3.3 ttl=300
    helpers_integration_test.go:169:
        + CREATE www.dnscontrol-inwx.com A 5.5.5.5 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/02:Protocol-Wildcard:Delete_wildcard
    helpers_integration_test.go:169:
        - DELETE *.dnscontrol-inwx.com A 3.3.3.3 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#03
    helpers_integration_test.go:169:
        - DELETE www.dnscontrol-inwx.com A 5.5.5.5 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/03:AAAA:Create_AAAA
    helpers_integration_test.go:169:
        + CREATE testaaaa.dnscontrol-inwx.com AAAA 2607:f8b0:4006:820::2006 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/03:AAAA:Change_AAAA_target
    helpers_integration_test.go:169:
        ± MODIFY testaaaa.dnscontrol-inwx.com AAAA (2607:f8b0:4006:820::2006 ttl=300) -> (2607:f8b0:4006:820::2013 ttl=300)
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#04
    helpers_integration_test.go:169:
        - DELETE testaaaa.dnscontrol-inwx.com AAAA 2607:f8b0:4006:820::2013 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/04:CNAME:Create_a_CNAME
    helpers_integration_test.go:169:
        + CREATE testcname.dnscontrol-inwx.com CNAME www.google.com. ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/04:CNAME:Change_CNAME_target
    helpers_integration_test.go:169:
        ± MODIFY testcname.dnscontrol-inwx.com CNAME (www.google.com. ttl=300) -> (www.yahoo.com. ttl=300)
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#05
    helpers_integration_test.go:169:
        - DELETE testcname.dnscontrol-inwx.com CNAME www.yahoo.com. ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/05:CNAME-short:Create_a_CNAME
    helpers_integration_test.go:169:
        + CREATE foo.dnscontrol-inwx.com A 1.2.3.4 ttl=300
    helpers_integration_test.go:169:
        + CREATE testcname.dnscontrol-inwx.com CNAME foo.dnscontrol-inwx.com. ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#06
    helpers_integration_test.go:169:
        - DELETE testcname.dnscontrol-inwx.com CNAME foo.dnscontrol-inwx.com. ttl=300
    helpers_integration_test.go:169:
        - DELETE foo.dnscontrol-inwx.com A 1.2.3.4 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/06:MX:Create_MX_apex
    helpers_integration_test.go:169:
        + CREATE dnscontrol-inwx.com MX 5 foo.com. ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/06:MX:Change_MX_apex
    helpers_integration_test.go:169:
        ± MODIFY dnscontrol-inwx.com MX (5 foo.com. ttl=300) -> (5 bar.com. ttl=300)
=== RUN   TestDNSProviders/dnscontrol-inwx.com/06:MX:Create_MX
    helpers_integration_test.go:169:
        - DELETE dnscontrol-inwx.com MX 5 bar.com. ttl=300
    helpers_integration_test.go:169:
        + CREATE testmx.dnscontrol-inwx.com MX 5 foo.com. ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/06:MX:Change_MX_target
    helpers_integration_test.go:169:
        ± MODIFY testmx.dnscontrol-inwx.com MX (5 foo.com. ttl=300) -> (5 bar.com. ttl=300)
=== RUN   TestDNSProviders/dnscontrol-inwx.com/06:MX:Change_MX_p
    helpers_integration_test.go:169:
        ± MODIFY testmx.dnscontrol-inwx.com MX (5 bar.com. ttl=300) -> (100 bar.com. ttl=300)
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#07
    helpers_integration_test.go:169:
        - DELETE testmx.dnscontrol-inwx.com MX 100 bar.com. ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/07:TXT:Create_TXT
    helpers_integration_test.go:169:
        + CREATE testtxt.dnscontrol-inwx.com TXT "simple" ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/07:TXT:Change_TXT_target
    helpers_integration_test.go:169:
        ± MODIFY testtxt.dnscontrol-inwx.com TXT ("simple" ttl=300) -> ("changed" ttl=300)
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#08
    helpers_integration_test.go:169:
        - DELETE testtxt.dnscontrol-inwx.com TXT "changed" ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/08:ManyAtOnce:CreateManyAtLabel
    helpers_integration_test.go:169:
        + CREATE www.dnscontrol-inwx.com A 1.1.1.1 ttl=300
    helpers_integration_test.go:169:
        + CREATE www.dnscontrol-inwx.com A 2.2.2.2 ttl=300
    helpers_integration_test.go:169:
        + CREATE www.dnscontrol-inwx.com A 3.3.3.3 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/08:ManyAtOnce:Empty
    helpers_integration_test.go:169:
        - DELETE www.dnscontrol-inwx.com A 1.1.1.1 ttl=300
    helpers_integration_test.go:169:
        - DELETE www.dnscontrol-inwx.com A 2.2.2.2 ttl=300
    helpers_integration_test.go:169:
        - DELETE www.dnscontrol-inwx.com A 3.3.3.3 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/08:ManyAtOnce:Create_an_A_record
    helpers_integration_test.go:169:
        + CREATE www.dnscontrol-inwx.com A 1.1.1.1 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/08:ManyAtOnce:Add_at_label1
    helpers_integration_test.go:169:
        + CREATE www.dnscontrol-inwx.com A 2.2.2.2 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/08:ManyAtOnce:Add_at_label2
    helpers_integration_test.go:169:
        + CREATE www.dnscontrol-inwx.com A 3.3.3.3 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#09
    helpers_integration_test.go:169:
        - DELETE www.dnscontrol-inwx.com A 1.1.1.1 ttl=300
    helpers_integration_test.go:169:
        - DELETE www.dnscontrol-inwx.com A 2.2.2.2 ttl=300
    helpers_integration_test.go:169:
        - DELETE www.dnscontrol-inwx.com A 3.3.3.3 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/09:manyTypesAtOnce:CreateManyTypesAtLabel
    helpers_integration_test.go:169:
        + CREATE testmx.dnscontrol-inwx.com MX 100 bar.com. ttl=300
    helpers_integration_test.go:169:
        + CREATE testmx.dnscontrol-inwx.com MX 5 foo.com. ttl=300
    helpers_integration_test.go:169:
        + CREATE www.dnscontrol-inwx.com A 1.1.1.1 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/09:manyTypesAtOnce:Empty
    helpers_integration_test.go:169:
        - DELETE testmx.dnscontrol-inwx.com MX 100 bar.com. ttl=300
    helpers_integration_test.go:169:
        - DELETE testmx.dnscontrol-inwx.com MX 5 foo.com. ttl=300
    helpers_integration_test.go:169:
        - DELETE www.dnscontrol-inwx.com A 1.1.1.1 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/09:manyTypesAtOnce:Create_an_A_record
    helpers_integration_test.go:169:
        + CREATE www.dnscontrol-inwx.com A 1.1.1.1 ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/09:manyTypesAtOnce:Add_Type_At_Label
    helpers_integration_test.go:169:
        + CREATE testmx.dnscontrol-inwx.com MX 5 foo.com. ttl=300
=== RUN   TestDNSProviders/dnscontrol-inwx.com/09:manyTypesAtOnce:Add_Type_At_Label#01
    helpers_integration_test.go:169:
        + CREATE testmx.dnscontrol-inwx.com MX 100 bar.com. ttl=300
    helpers_integration_test.go:174: Post "https://api.ote.domrobot.com/xmlrpc/": dial tcp 185.181.104.52:443: i/o timeout
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#10
    helpers_integration_test.go:154: runTests: Post "https://api.ote.domrobot.com/xmlrpc/": dial tcp 185.181.104.52:443: i/o timeout
=== RUN   TestDNSProviders/dnscontrol-inwx.com/10:Attl:Create_Arc
    helpers_integration_test.go:154: runTests: Post "https://api.ote.domrobot.com/xmlrpc/": dial tcp 185.181.104.52:443: i/o timeout
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#11
    helpers_integration_test.go:154: runTests: Post "https://api.ote.domrobot.com/xmlrpc/": dial tcp 185.181.104.52:443: i/o timeout
=== RUN   TestDNSProviders/dnscontrol-inwx.com/11:TTL:Start
    helpers_integration_test.go:154: runTests: Post "https://api.ote.domrobot.com/xmlrpc/": dial tcp 185.181.104.52:443: i/o timeout
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#12
    helpers_integration_test.go:154: runTests: Post "https://api.ote.domrobot.com/xmlrpc/": dial tcp 185.181.104.52:443: i/o timeout
=== RUN   TestDNSProviders/dnscontrol-inwx.com/12:add_to_label_and_change_orig_ttl:Setup
    helpers_integration_test.go:154: runTests: Post "https://api.ote.domrobot.com/xmlrpc/": dial tcp 185.181.104.52:443: i/o timeout
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#13
    helpers_integration_test.go:154: runTests: Post "https://api.ote.domrobot.com/xmlrpc/": dial tcp 185.181.104.52:443: i/o timeout
=== RUN   TestDNSProviders/dnscontrol-inwx.com/13:TypeChange:Create_A
    helpers_integration_test.go:154: runTests: Post "https://api.ote.domrobot.com/xmlrpc/": dial tcp 185.181.104.52:443: i/o timeout
=== RUN   TestDNSProviders/dnscontrol-inwx.com/Clean_Slate:Empty#14
    helpers_integration_test.go:154: runTests: Post "https://api.ote.domrobot.com/xmlrpc/": dial tcp 185.181.104.52:443: i/o timeout
=== RUN   TestDNSProviders/dnscontrol-inwx.com/14:TypeChangeHard:Create_a_CNAME
^Csignal: interrupt
FAIL    github.com/StackExchange/dnscontrol/v4/integrationTest  338.105s

@patschi
Copy link
Copy Markdown
Collaborator Author

patschi commented Nov 28, 2025

@tlimoncelli It's ready to be merged to fix INWX.

@tlimoncelli
Copy link
Copy Markdown
Contributor

yay! thanks for fixing this! it was a great group effort!

@tlimoncelli tlimoncelli merged commit 9aad292 into StackExchange:main Nov 29, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

dnscontrol stopped working with INWX

2 participants