summaryrefslogtreecommitdiff
path: root/resolver.c
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2026-05-22 13:37:52 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2026-05-22 13:37:52 +0000
commit5eb18e8576462f5bb33fbd60fcbd752fe5791f33 (patch)
tree1df0f35c7c4d1a30393064d3eda05cd642b0b1a7 /resolver.c
parent3dcfa5af412125cd1bad1d383ff7c18c5effbd77 (diff)
Diffstat (limited to 'resolver.c')
-rw-r--r--resolver.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/resolver.c b/resolver.c
index a426b82c034e..0f2fdb52e5d0 100644
--- a/resolver.c
+++ b/resolver.c
@@ -1062,6 +1062,8 @@ ldns_resolver_search_status(ldns_pkt** pkt,
/* query as-is */
return ldns_resolver_query_status(pkt, r, name, t, c, flags);
} else if (ldns_resolver_dnsrch(r)) {
+ ldns_pkt *return_pkt = NULL;
+
search_list = ldns_resolver_searchlist(r);
for (i = 0; i <= ldns_resolver_searchlist_count(r); i++) {
if (i == ldns_resolver_searchlist_count(r)) {
@@ -1072,21 +1074,25 @@ ldns_resolver_search_status(ldns_pkt** pkt,
search_list[i]);
}
- s = ldns_resolver_query_status(pkt, r,
+ s = ldns_resolver_query_status(&return_pkt, r,
new_name, t, c, flags);
ldns_rdf_deep_free(new_name);
- if (pkt && *pkt) {
+ if (return_pkt) {
if (s == LDNS_STATUS_OK &&
- ldns_pkt_get_rcode(*pkt) ==
- LDNS_RCODE_NOERROR) {
+ ldns_pkt_get_rcode(return_pkt)
+ == LDNS_RCODE_NOERROR) {
return LDNS_STATUS_OK;
+ } else if (i < ldns_resolver_searchlist_count(r)) {
+ ldns_pkt_free(return_pkt);
+ return_pkt = NULL;
}
- ldns_pkt_free(*pkt);
- *pkt = NULL;
}
}
+ if (pkt && return_pkt) {
+ *pkt = return_pkt;
+ }
}
return s;
}