dnscontrol/documentation/testing-txt-records.md
tomf c69bd43678
Doc fixes noticed while writing a provider (#2530)
Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
2023-08-24 10:31:04 -04:00

2.7 KiB

TXT record testing

We recently discovered a strange bug with processing TXT records and double-quotes. Sadly we haven't been able to determine a way to test this automatically. Therefore, I've written up this methodology.

The problem

The problem relates to TXT records that have a string with quotes in them.

If a user creates a TXT record whose contents are "something" (yes, with double quotes), some APIs get confused.

This bug is most likely to appear in a provider that uses RecordConfig.PopulateFromString() (see models/t_parse.go) to create TXT records. That function assumes the string should always have the quotes stripped, though it is more likely that the string should be taken verbatim.

The test

To complete this test, you will need a test domain that you can add records to. It won't be modified otherwise.

This bug has to do with double-quotes at the start and end of TXT records. If your provider doesn't permit double-quotes in TXT records (you'd be surprised!) you don't have to worry about this bug because those records are banned in your auditrecords.go file.

Step 1: Create the test records

Log into your DNS provider's web UI (portal) and create these 4 TXT records. (Don't use DNSControl!) Yes, include the double-quotes on test 2 and 3!

Hostname TXT
t0 test0
t1 test1
t2 "test2"
t3 "test3"

Step 2: Update dnsconfig.js

Now in your dnsconfig.js file, add these records to the domain:

TXT("t0", "test0"),
TXT("t1", "\"test1\""),
TXT("t2", "test2"),
TXT("t3", "\"test3\""),

Step 3: Preview

When you do a dnscontrol preview, you should see changes for t1 and t2.

#1: MODIFY TXT t1.example.com: ("test1" ttl=1) -> ("\"test1\"" ttl=1)
#2: MODIFY TXT t2.example.com: ("\"test2\"" ttl=1) -> ("test2" ttl=1)

If you don't see those changes, that's a bug. For example, we found that Cloudflare left t2 alone but would try to add double-quotes to t3! This was fixed in PR#1543.

Step 4: Push

Let's assume you DO see the changes. Push them using dnscontrol push then check the webui to see that the changes are correct.

2 corrections
#1: MODIFY TXT t1.stackoverflow.help: ("test1" ttl=1) -> ("\"test1\"" ttl=1)
SUCCESS!
#2: MODIFY TXT t2.stackoverflow.help: ("\"test2\"" ttl=1) -> ("test2" ttl=1)
SUCCESS!

Refresh your provider's web UI and you should see the changes as expected: t1 should have double-quotes and t2 shouldn't. If the change wasn't correctly done, that's a bug.

Step 5: That's it!

Remove the lines from dnsconfig.js and run dnscontrol push to clean up.