[GH-ISSUE #1827] AsyncResolver not preserving intermediates for TXT records #782

Closed
opened 2026-03-16 00:13:55 +03:00 by kerem · 0 comments
Owner

Originally created by @schultetwin1 on GitHub (Nov 11, 2022).
Original GitHub issue: https://github.com/hickory-dns/hickory-dns/issues/1827

Describe the bug
When the AsyncResolver attempts to resolve the TXT records of a host name, it will not follow the preserve_intermediates options in ResolverOpts. Instead, it will just return the final lookup.

To Reproduce
Here is a snippit of code that will reproduce this behavior

use trust_dns_resolver::config::{ResolverConfig, ResolverOpts};
use trust_dns_resolver::proto::rr::RecordType;
use trust_dns_resolver::TokioAsyncResolver;

#[tokio::main(flavor = "current_thread")]
async fn main() {
    tracing_subscriber::fmt::fmt().init();

    let name = "inb._domainkey.dressbarn.com.";

    let resolver =
        TokioAsyncResolver::tokio(ResolverConfig::cloudflare(), ResolverOpts::default()).unwrap();
    let result = resolver.lookup(name, RecordType::TXT).await.unwrap();

    for (pos, record) in result.record_iter().enumerate() {
        println!("{}: {}", pos, record);
    }
}

It outputs the following

0: inb.dkim.netcoreglobal.com. 3428 IN TXT v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkr1ggSjYdev/HYWswrZIAkwLXC0oRw7ngS8NsRVZ1vb+tETUoPCp8pcAzN1CDCZd6i2MciBPnSYiXqREi1ebaMDBd0fuYTRut8BO5NwshLhIv/h2chuq17kR0R6U5KbcEXw2gvfjiwWzAGud4ieQ4KOTXcIla7jhtcrJPKvZnH8Ta9nVqAq7RMLBFervjx6EBPpjYodDX46O0Zokm/Af8xakWHpmxk/syYf8RxAb9dnRNkjpZzqZi086zhXov/Ap6nMOnV/EQ7/dJJq+1rXSmeRQ5Wjim573JYVN7wAu+RycAX4p5POkBkhpckscHqm6mPz+emLUDT9OWfsocABixwIDAQAB

Expected behavior
I'd expect the above code to output

0: inb._domainkey.dressbarn.com. 300 IN CNAME inb.dkim.netcoreglobal.com.
1: inb.dkim.netcoreglobal.com. 3600 IN TXT v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkr1ggSjYdev/HYWswrZIAkwLXC0oRw7ngS8NsRVZ1vb+tETUoPCp8pcAzN1CDCZd6i2MciBPnSYiXqREi1ebaMDBd0fuYTRut8BO5NwshLhIv/h2chuq17kR0R6U5KbcEXw2gvfjiwWzAGud4ieQ4KOTXcIla7jhtcrJPKvZnH8Ta9nVqAq7RMLBFervjx6EBPpjYodDX46O0Zokm/Af8xakWHpmxk/syYf8RxAb9dnRNkjpZzqZi086zhXov/Ap6nMOnV/EQ7/dJJq+1rXSmeRQ5Wjim573JYVN7wAu+RycAX4p5POkBkhpckscHqm6mPz+emLUDT9OWfsocABixwIDAQAB

Which matches the dig output

dig -t TXT inb._domainkey.dressbarn.com @1.1.1.1

; <<>> DiG 9.10.6 <<>> -t TXT inb._domainkey.dressbarn.com @1.1.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24092
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;inb._domainkey.dressbarn.com.	IN	TXT

;; ANSWER SECTION:
inb._domainkey.dressbarn.com. 300 IN	CNAME	inb.dkim.netcoreglobal.com.
inb.dkim.netcoreglobal.com. 3600 IN	TXT	"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBC" "gKCAQEAkr1ggSjYdev/HYWswrZIAkwLXC0oRw7ngS8NsRVZ1vb+tETUoPCp8pcAzN1CDCZd6i2MciBPnSYiXqREi1ebaMDBd0fuYTRut8B" "O5NwshLhIv/h2chuq17kR0R6U5KbcEXw2gvfjiwWzAGud4ieQ4KOTXcIla7jhtcrJPKvZnH8Ta9nVqAq7RMLBFervjx6EBPpjYodDX46O0Z" "okm/Af8xakWHpmxk/syYf8RxAb9dnRNkjpZzqZi086zhXov/Ap6nMOnV/EQ7/dJJq+1rXSmeRQ5Wjim573JYVN7wAu+RycAX4p5POkBkhpc" "kscHqm6mPz+emLUDT9OWfsocABixwIDAQAB"

;; Query time: 310 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Thu Nov 10 23:20:20 PST 2022
;; MSG SIZE  rcvd: 521

System:

  • OS: Any
  • Architecture: Any
  • Version Any
  • rustc version: Any

Version:
Crate: resolver
Version: v0.22.0

Originally created by @schultetwin1 on GitHub (Nov 11, 2022). Original GitHub issue: https://github.com/hickory-dns/hickory-dns/issues/1827 **Describe the bug** When the AsyncResolver attempts to resolve the TXT records of a host name, it will not follow the `preserve_intermediates` options in `ResolverOpts`. Instead, it will just return the final lookup. **To Reproduce** Here is a snippit of code that will reproduce this behavior ```rust use trust_dns_resolver::config::{ResolverConfig, ResolverOpts}; use trust_dns_resolver::proto::rr::RecordType; use trust_dns_resolver::TokioAsyncResolver; #[tokio::main(flavor = "current_thread")] async fn main() { tracing_subscriber::fmt::fmt().init(); let name = "inb._domainkey.dressbarn.com."; let resolver = TokioAsyncResolver::tokio(ResolverConfig::cloudflare(), ResolverOpts::default()).unwrap(); let result = resolver.lookup(name, RecordType::TXT).await.unwrap(); for (pos, record) in result.record_iter().enumerate() { println!("{}: {}", pos, record); } } ``` It outputs the following ``` 0: inb.dkim.netcoreglobal.com. 3428 IN TXT v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkr1ggSjYdev/HYWswrZIAkwLXC0oRw7ngS8NsRVZ1vb+tETUoPCp8pcAzN1CDCZd6i2MciBPnSYiXqREi1ebaMDBd0fuYTRut8BO5NwshLhIv/h2chuq17kR0R6U5KbcEXw2gvfjiwWzAGud4ieQ4KOTXcIla7jhtcrJPKvZnH8Ta9nVqAq7RMLBFervjx6EBPpjYodDX46O0Zokm/Af8xakWHpmxk/syYf8RxAb9dnRNkjpZzqZi086zhXov/Ap6nMOnV/EQ7/dJJq+1rXSmeRQ5Wjim573JYVN7wAu+RycAX4p5POkBkhpckscHqm6mPz+emLUDT9OWfsocABixwIDAQAB ``` **Expected behavior** I'd expect the above code to output ``` 0: inb._domainkey.dressbarn.com. 300 IN CNAME inb.dkim.netcoreglobal.com. 1: inb.dkim.netcoreglobal.com. 3600 IN TXT v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkr1ggSjYdev/HYWswrZIAkwLXC0oRw7ngS8NsRVZ1vb+tETUoPCp8pcAzN1CDCZd6i2MciBPnSYiXqREi1ebaMDBd0fuYTRut8BO5NwshLhIv/h2chuq17kR0R6U5KbcEXw2gvfjiwWzAGud4ieQ4KOTXcIla7jhtcrJPKvZnH8Ta9nVqAq7RMLBFervjx6EBPpjYodDX46O0Zokm/Af8xakWHpmxk/syYf8RxAb9dnRNkjpZzqZi086zhXov/Ap6nMOnV/EQ7/dJJq+1rXSmeRQ5Wjim573JYVN7wAu+RycAX4p5POkBkhpckscHqm6mPz+emLUDT9OWfsocABixwIDAQAB ``` Which matches the `dig` output ``` dig -t TXT inb._domainkey.dressbarn.com @1.1.1.1 ; <<>> DiG 9.10.6 <<>> -t TXT inb._domainkey.dressbarn.com @1.1.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24092 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;inb._domainkey.dressbarn.com. IN TXT ;; ANSWER SECTION: inb._domainkey.dressbarn.com. 300 IN CNAME inb.dkim.netcoreglobal.com. inb.dkim.netcoreglobal.com. 3600 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBC" "gKCAQEAkr1ggSjYdev/HYWswrZIAkwLXC0oRw7ngS8NsRVZ1vb+tETUoPCp8pcAzN1CDCZd6i2MciBPnSYiXqREi1ebaMDBd0fuYTRut8B" "O5NwshLhIv/h2chuq17kR0R6U5KbcEXw2gvfjiwWzAGud4ieQ4KOTXcIla7jhtcrJPKvZnH8Ta9nVqAq7RMLBFervjx6EBPpjYodDX46O0Z" "okm/Af8xakWHpmxk/syYf8RxAb9dnRNkjpZzqZi086zhXov/Ap6nMOnV/EQ7/dJJq+1rXSmeRQ5Wjim573JYVN7wAu+RycAX4p5POkBkhpc" "kscHqm6mPz+emLUDT9OWfsocABixwIDAQAB" ;; Query time: 310 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Thu Nov 10 23:20:20 PST 2022 ;; MSG SIZE rcvd: 521 ``` **System:** - OS: Any - Architecture: Any - Version Any - rustc version: Any **Version:** Crate: resolver Version: v0.22.0
kerem closed this issue 2026-03-16 00:14:00 +03:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/hickory-dns#782
No description provided.