1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00

Fix TXT docs, remove AUTOSPLIT (#1083)

This commit is contained in:
Tom Limoncelli
2021-03-07 14:34:00 -05:00
committed by GitHub
parent 8dea9edc34
commit 50a24605e6
3 changed files with 186 additions and 157 deletions

View File

@ -10,11 +10,7 @@ TXT adds an TXT record To a domain. The name should be the relative
label for the record. Use `@` for the domain apex. label for the record. Use `@` for the domain apex.
The contents is either a single or multiple strings. To The contents is either a single or multiple strings. To
specify multiple strings, include them in an array. specify multiple strings, specify them as 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 Each string is a JavaScript string (quoted using single or double
quotes). The (somewhat complex) quoting rules of the DNS protocol quotes). The (somewhat complex) quoting rules of the DNS protocol
@ -30,46 +26,82 @@ Modifiers can be any number of [record modifiers](#record-modifiers) or json obj
TXT('multiple', ['one', 'two', 'three']), // Multiple strings TXT('multiple', ['one', 'two', 'three']), // Multiple strings
TXT('quoted', 'any "quotes" and escapes? ugh; no worries!'), TXT('quoted', 'any "quotes" and escapes? ugh; no worries!'),
TXT('_domainkey', 't=y; o=-;'), // Escapes are done for you automatically. TXT('_domainkey', 't=y; o=-;'), // Escapes are done for you automatically.
TXT('long', '#'.repeat(10), AUTOSPLIT) // Escapes are done for you automatically. TXT('long', 'X'.repeat(300)) // Long strings are split automatically.
); );
{%endhighlight%} {%endhighlight%}
{% include endExample.html %} {% include endExample.html %}
NOTE: In the past, long strings had to be annotated with the keyword
`AUTOSPLIT`. This is no longer required. The keyword is now a no-op.
# Long and multiple strings # Long strings
DNS RFCs limit TXT strings to 255 bytes, but you can have multiple Strings that are longer than 255 octets (bytes) will be quietly
such strings. Most applications blindly concatenate the strings but split into 255-octets chunks or the provider may report an error
some services that use TXT records join them with a space between each if it does not handle multiple strings.
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 # TXT record edge cases.
should be split.
Here are some examples: Most providers do not support the full possibilities of what a TXT
record can store. DNSControl can not handle all the edge cases
and incompatibles that providers have introduced. Instead, it
stores the string(s) that you provide and passes them to the provider
verbatim. The provider may opt to accept the data, fix it, or
reject it. This happens early in the processing, long before
the DNSControl talks to the provider's API.
VERY_LONG_STRING = 'Z'.repeat(300) The RFCs specify that a TXT record stores one or more strings,
each is up to 255 octets (bytes) long. We call these individual
strings *chunks*. Each chunk may be zero to 255 octets long.
There is no limit to the number of chunks in a TXT record,
other than IP packet length restrictions. The contents of each chunk
may be octets of value from 0x00 to 0xff.
// This will produce a validation-time error: In reality DNS Service Providers (DSPs) place many restrictions on TXT
TXT('long1', VERY_LONG_STRING), records.
// String will be split on 255-byte boundaries: Some DSPs only support a single string of 255 octets or fewer.
TXT('long', VERY_LONG_STRING, AUTOSPLIT), Multiple strings, or any one string being longer than 255 octets will
result in an error. One provider limits the string to 254 octets,
which makes me think they're code has an off-by-one error.
// String split manually: Some DSPs only support one string, but it may be of any length.
TXT('long', ['part1', 'part2', 'part3']), Behind the scenes the provider splits it into 255-octet chunks
(except the last one, of course).
NOTE: Old releases of DNSControl blindly sent long strings to Some DSPs support multiple strings, but API requests must be 512-bytes
providers. Some gave an error at that time, others quietly truncated or fewer, and with quoting, escaping, and other encoding mishegoss
the strings, and some silently split them into multiple short you can't be sure what will be permitted until you actually try it.
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: Regardless of the quantity and length of strings, some providers ban
double quotes, back-ticks, or other chars.
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..." # Testing the support of a provider
## How can you tell if a provider will support a particular `TXT()` record?
Include the `TXT()` record in a `D()` as usual, along
with the `DnsProvider()` for that provider. Run `dnscontrol check` to
see if any errors are produced. The check command does not talk to
the provider's API, thus permitting you to do this without having an
account at that provider.
## What if the provider rejects a string that is supported?
Suppose I can create the TXT record using the DSP's web portal but
DNSControl rejects the string?
It is possible that the provider code in DNSControl rejects strings
that the DSP accepts. This is because the test is done in code, not
by querying the provider's API. It is possible that the code was
written to work around a bug (such as rejecting a string with a
back-tick) but now that bug has been fixed.
All such checks are in `providers/${providername}/auditrecords.go`.
You can try removing the check that you feel is in error and see if
the provider's API accepts the record. You can do this by running the
integration tests, or by simply adding that record to an existing
`dnsconfig.js` and seeing if `dnscontrol push` is able to push that
record into production. (Be careful if you are testing this on a
domain used in production.)

View File

@ -842,7 +842,6 @@ function SPF_BUILDER(value) {
// Only add the raw spf record if it isn't an empty string // Only add the raw spf record if it isn't an empty string
if (value.raw !== '') { if (value.raw !== '') {
rp = {}; rp = {};
rp.txtSplitAlgorithm = 'multistring'; // Split the target if needed.
if (value.ttl) { if (value.ttl) {
r.push(TXT(value.raw, rawspf, rp, TTL(value.ttl))); r.push(TXT(value.raw, rawspf, rp, TTL(value.ttl)));
} else { } else {
@ -864,8 +863,6 @@ function SPF_BUILDER(value) {
p.txtMaxSize = value.txtMaxSize; p.txtMaxSize = value.txtMaxSize;
} }
p.txtSplitAlgorithm = 'multistring'; // Split the target if needed.
// Generate a TXT record with the metaparameters. // Generate a TXT record with the metaparameters.
if (value.ttl) { if (value.ttl) {
r.push(TXT(value.label, rawspf, p, TTL(value.ttl))); r.push(TXT(value.label, rawspf, p, TTL(value.ttl)));

View File

@ -212,131 +212,131 @@ var _escData = map[string]*_escFile{
"/helpers.js": { "/helpers.js": {
name: "helpers.js", name: "helpers.js",
local: "pkg/js/helpers.js", local: "pkg/js/helpers.js",
size: 28050, size: 27896,
modtime: 0, modtime: 0,
compressed: ` compressed: `
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 AA==
`, `,
}, },
} }