dnscontrol/pkg/js/parse_tests/029-dextendsub.json
Tom Limoncelli 1b2f5d4d34
BUGFIX: IDN support is broken for domain names (#3845)
# Issue

Fixes https://github.com/StackExchange/dnscontrol/issues/3842

CC @das7pad

# Resolution

Convert domain.Name to IDN earlier in the pipeline. Hack the --domains
processing to convert everything to IDN.

* Domain names are now stored 3 ways: The original input from
dnsconfig.js, canonical IDN format (`xn--...`), and Unicode format. All
are downcased. Providers that haven't been updated will receive the IDN
format instead of the original input format. This might break some
providers but only for users with unicode in their D("domain.tld").
PLEASE TEST YOUR PROVIDER.
* BIND filename formatting options have been added to access the new
formats.

# Breaking changes

* BIND zonefiles may change. The default used the name input in the D()
statement. It now defaults to the IDN name + "!tag" if there is a tag.
* Providers that are not IDN-aware may break (hopefully only if they
weren't processing IDN already)

---------

Co-authored-by: Jakob Ackermann <das7pad@outlook.com>
2025-11-29 12:17:44 -05:00

532 lines
12 KiB
JSON

{
"dns_providers": [
{
"name": "Cloudflare",
"type": "CLOUDFLAREAPI"
}
],
"domains": [
{
"dnsProviders": {
"Cloudflare": -1
},
"meta": {
"dnscontrol_uniquename": "foo.net"
},
"name": "foo.net",
"records": [
{
"filepos": "[line:7:5]",
"name": "@",
"target": "10.1.1.1",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:11:5]",
"name": "bar",
"subdomain": "bar",
"target": "10.3.3.3",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:12:5]",
"name": "www.bar",
"subdomain": "bar",
"target": "10.4.4.4",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:70:5]",
"name": "a.long.path.of.sub.domains",
"subdomain": "a.long.path.of.sub.domains",
"target": "10.25.25.25",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:71:5]",
"name": "www.a.long.path.of.sub.domains",
"subdomain": "a.long.path.of.sub.domains",
"target": "10.26.26.26",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:8:5]",
"name": "www",
"target": "10.2.2.2",
"ttl": 300,
"type": "A"
}
],
"registrar": "Third-Party"
},
{
"dnsProviders": {
"Cloudflare": -1
},
"meta": {
"dnscontrol_uniquename": "foo.tld"
},
"name": "foo.tld",
"records": [
{
"filepos": "[line:18:5]",
"name": "@",
"target": "20.5.5.5",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:30:5]",
"name": "a",
"target": "20.10.10.10",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:19:5]",
"name": "www",
"target": "20.6.6.6",
"ttl": 300,
"type": "A"
}
],
"registrar": "Third-Party"
},
{
"dnsProviders": {
"Cloudflare": -1
},
"meta": {
"dnscontrol_uniquename": "bar.foo.tld"
},
"name": "bar.foo.tld",
"records": [
{
"filepos": "[line:23:5]",
"name": "@",
"target": "30.7.7.7",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:27:5]",
"name": "a",
"target": "30.9.9.9",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:24:5]",
"name": "www",
"target": "30.8.8.8",
"ttl": 300,
"type": "A"
}
],
"registrar": "Third-Party"
},
{
"dnsProviders": {
"Cloudflare": -1
},
"meta": {
"dnscontrol_uniquename": "foo.help"
},
"name": "foo.help",
"records": [
{
"filepos": "[line:36:5]",
"name": "@",
"target": "40.12.12.12",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:49:5]",
"name": "morty",
"subdomain": "morty",
"target": "40.17.17.17",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:50:5]",
"name": "www.morty",
"subdomain": "morty",
"target": "40.18.18.18",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:37:5]",
"name": "www",
"target": "40.12.12.12",
"ttl": 300,
"type": "A"
}
],
"registrar": "Third-Party"
},
{
"dnsProviders": {
"Cloudflare": -1
},
"meta": {
"dnscontrol_uniquename": "bar.foo.help"
},
"name": "bar.foo.help",
"records": [
{
"filepos": "[line:41:5]",
"name": "@",
"target": "50.13.13.13",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:42:5]",
"name": "www",
"target": "50.14.14.14",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:45:5]",
"name": "zip",
"subdomain": "zip",
"target": "50.15.15.15",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:46:5]",
"name": "www.zip",
"subdomain": "zip",
"target": "50.16.16.16",
"ttl": 300,
"type": "A"
}
],
"registrar": "Third-Party"
},
{
"dnsProviders": {
"Cloudflare": -1
},
"meta": {
"dnscontrol_uniquename": "foo.here"
},
"name": "foo.here",
"records": [
{
"filepos": "[line:56:5]",
"name": "@",
"target": "60.19.19.19",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:60:5]",
"name": "bar",
"subdomain": "bar",
"target": "60.21.21.21",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:64:5]",
"name": "baz.bar",
"subdomain": "baz.bar",
"target": "60.23.23.23",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:65:5]",
"name": "www.baz.bar",
"subdomain": "baz.bar",
"target": "60.24.24.24",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:61:5]",
"name": "www.bar",
"subdomain": "bar",
"target": "60.22.22.22",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:57:5]",
"name": "www",
"target": "60.20.20.20",
"ttl": 300,
"type": "A"
}
],
"registrar": "Third-Party"
},
{
"dnsProviders": {
"Cloudflare": -1
},
"meta": {
"dnscontrol_uniquename": "example.com"
},
"name": "example.com",
"records": [
{
"filepos": "[line:77:5]",
"name": "@",
"target": "10.0.0.1",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:82:5]",
"name": "d\u00fcsseldorf",
"subdomain": "d\u00fcsseldorf",
"target": "10.0.0.3",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:83:5]",
"name": "www.d\u00fcsseldorf",
"subdomain": "d\u00fcsseldorf",
"target": "10.0.0.4",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:78:5]",
"name": "www",
"target": "10.0.0.2",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:87:5]",
"name": "\u00fc",
"subdomain": "\u00fc",
"target": "10.0.0.5",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:88:5]",
"name": "www.\u00fc",
"subdomain": "\u00fc",
"target": "10.0.0.6",
"ttl": 300,
"type": "A"
}
],
"registrar": "Third-Party"
},
{
"dnsProviders": {
"Cloudflare": -1
},
"meta": {
"dnscontrol_uniquename": "xn--dsseldorf-q9a.example.net"
},
"name": "xn--dsseldorf-q9a.example.net",
"records": [
{
"filepos": "[line:94:5]",
"name": "@",
"target": "10.0.0.7",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:104:5]",
"name": "d\u00fcsseltal",
"subdomain": "d\u00fcsseltal",
"target": "10.0.0.11",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:105:5]",
"name": "www.d\u00fcsseltal",
"subdomain": "d\u00fcsseltal",
"target": "10.0.0.12",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:99:5]",
"name": "subdomain",
"subdomain": "subdomain",
"target": "10.0.0.9",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:100:5]",
"name": "www.subdomain",
"subdomain": "subdomain",
"target": "10.0.0.10",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:95:5]",
"name": "www",
"target": "10.0.0.8",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:109:5]",
"name": "\u00fc",
"subdomain": "\u00fc",
"target": "10.0.0.13",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:110:5]",
"name": "www.\u00fc",
"subdomain": "\u00fc",
"target": "10.0.0.14",
"ttl": 300,
"type": "A"
}
],
"registrar": "Third-Party"
},
{
"dnsProviders": {
"Cloudflare": -1
},
"meta": {
"dnscontrol_uniquename": "xn--tda.example.net"
},
"name": "xn--tda.example.net",
"records": [
{
"filepos": "[line:116:5]",
"name": "@",
"target": "10.0.0.15",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:126:5]",
"name": "d\u00fcsseldorf",
"subdomain": "d\u00fcsseldorf",
"target": "10.0.0.19",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:127:5]",
"name": "www.d\u00fcsseldorf",
"subdomain": "d\u00fcsseldorf",
"target": "10.0.0.20",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:121:5]",
"name": "subdomain",
"subdomain": "subdomain",
"target": "10.0.0.17",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:122:5]",
"name": "www.subdomain",
"subdomain": "subdomain",
"target": "10.0.0.18",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:117:5]",
"name": "www",
"target": "10.0.0.16",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:131:5]",
"name": "\u00fc",
"subdomain": "\u00fc",
"target": "10.0.0.21",
"ttl": 300,
"type": "A"
},
{
"filepos": "[line:132:5]",
"name": "www.\u00fc",
"subdomain": "\u00fc",
"target": "10.0.0.22",
"ttl": 300,
"type": "A"
}
],
"registrar": "Third-Party"
},
{
"dnsProviders": {
"Cloudflare": -1
},
"meta": {
"dnscontrol_uniquename": "example.tld"
},
"name": "example.tld",
"records": [
{
"filepos": "[line:138:5]",
"name": "a.sub",
"subdomain": "sub",
"target": "b.sub.example.tld.",
"ttl": 300,
"type": "CNAME"
},
{
"filepos": "[line:139:5]",
"name": "b.sub",
"subdomain": "sub",
"target": "sub.example.tld.",
"ttl": 300,
"type": "CNAME"
},
{
"filepos": "[line:140:5]",
"name": "c.sub",
"subdomain": "sub",
"target": "sub.example.tld.",
"ttl": 300,
"type": "CNAME"
},
{
"filepos": "[line:142:5]",
"name": "e.sub",
"subdomain": "sub",
"target": "otherdomain.tld.",
"ttl": 300,
"type": "CNAME"
}
],
"registrar": "Third-Party"
}
],
"registrars": [
{
"name": "Third-Party",
"type": "NONE"
}
]
}