1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00
Tom Limoncelli 6fe4ca6996 Document TXT AUTOSPLIT (#957)
* Document TXT AUTOSPLIT

* Update docs/_functions/domain/TXT.md

Co-authored-by: Jakob Ackermann <das7pad@outlook.com>

Co-authored-by: Jakob Ackermann <das7pad@outlook.com>
2020-11-22 09:16:56 -05:00

2.6 KiB

name parameters
TXT
name
contents
modifiers...

TXT adds an TXT record To a domain. The name should be the relative label for the record. Use @ for the domain apex.

The contents is either a single or multiple strings. To specify multiple strings, include them in an array.

TXT records with multiple strings are only supported by some providers. DNSControl will produce a validation error if the provider does not support multiple strings.

Each string is a JavaScript string (quoted using single or double quotes). The (somewhat complex) quoting rules of the DNS protocol will be done for you.

Modifiers can be any number of record modifiers or json objects, which will be merged into the record's metadata.

{% include startExample.html %} {% highlight js %} D("example.com", REGISTRAR, ...., TXT('@', '598611146-3338560'), TXT('listserve', 'google-site-verification=12345'), TXT('multiple', ['one', 'two', 'three']), // Multiple strings TXT('quoted', 'any "quotes" and escapes? ugh; no worries!'), TXT('_domainkey', 't=y; o=-;'), // Escapes are done for you automatically. TXT('long', '#'.repeat(10), AUTOSPLIT) // Escapes are done for you automatically. ); {%endhighlight%} {% include endExample.html %}

Long and multiple strings

DNS RFCs limit TXT strings to 255 bytes, but you can have multiple such strings. Most applications blindly concatenate the strings but some services that use TXT records join them with a space between each substring (citation needed!).

Not all providers support multiple strings and those that do often put limits on them.

Therefore, DNSControl requires you to explicitly mark TXT records that should be split.

Here are some examples:

VERY_LONG_STRING = 'Z'.repeat(300)

// This will produce a validation-time error:
TXT('long1', VERY_LONG_STRING),

// String will be split on 255-byte boundaries:
TXT('long', VERY_LONG_STRING, AUTOSPLIT),

// String split manually:
TXT('long', ['part1', 'part2', 'part3']),

NOTE: Old releases of DNSControl blindly sent long strings to providers. Some gave an error at that time, others quietly truncated the strings, and some silently split them into multiple short strings. If you see an error that mentions ERROR: txt target >255 bytes and AUTOSPLIT not set this means you need to add AUTOSPLIT to explicitly split the string manually.

An example error might look like this:

2020/11/21 00:03:21 printIR.go:94: ERROR: txt target >255 bytes and AUTOSPLIT not set: label="20201._domainkey" index=0 len=424 string[:50]="v=DKIM1; k=rsa; t=s; s=email; p=MIIBIjANBgkqhkiG9w..."