From: Volker Lendecke Date: Sat, 13 Jun 2026 07:49:40 +0000 (+0200) Subject: addns: Add a "timeout" parameter to ads_dns_lookup_ns() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e82c26a799d0c1ed7be9b54fbf9de875f837aaa;p=thirdparty%2Fsamba.git addns: Add a "timeout" parameter to ads_dns_lookup_ns() Will be used as a timeout for subrequests to be triggered for A/AAAA records like ads_dns_query_srv_send() already does it. Use uint32_t, tevent_timeout_current_ofs wants that. Signed-off-by: Volker Lendecke Reviewed-by: Stefan Metzmacher --- diff --git a/lib/addns/dnsquery.c b/lib/addns/dnsquery.c index b0c7b40275b..77178d39f61 100644 --- a/lib/addns/dnsquery.c +++ b/lib/addns/dnsquery.c @@ -266,6 +266,7 @@ static bool ads_dns_add_ns_ip(struct dns_rr_ns *nss, } struct ads_dns_lookup_ns_state { + uint32_t timeout; struct dns_rr_ns *nss; size_t num_nss; }; @@ -274,7 +275,8 @@ static void ads_dns_lookup_ns_done(struct tevent_req *subreq); struct tevent_req *ads_dns_lookup_ns_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, - const char *name) + const char *name, + uint32_t timeout) { struct tevent_req *req, *subreq; struct ads_dns_lookup_ns_state *state; @@ -284,6 +286,7 @@ struct tevent_req *ads_dns_lookup_ns_send(TALLOC_CTX *mem_ctx, if (req == NULL) { return NULL; } + state->timeout = timeout; subreq = dns_lookup_send(state, ev, NULL, name, DNS_QCLASS_IN, DNS_QTYPE_NS); @@ -384,9 +387,10 @@ NTSTATUS ads_dns_lookup_ns_recv(struct tevent_req *req, *********************************************************************/ NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx, - const char *dnsdomain, - struct dns_rr_ns **nslist, - size_t *numns) + const char *dnsdomain, + uint32_t timeout, + struct dns_rr_ns **nslist, + size_t *numns) { struct tevent_context *ev; struct tevent_req *req; @@ -397,7 +401,7 @@ NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx, if (ev == NULL) { goto fail; } - req = ads_dns_lookup_ns_send(ev, ev, dnsdomain); + req = ads_dns_lookup_ns_send(ev, ev, dnsdomain, timeout); if (req == NULL) { goto fail; } diff --git a/lib/addns/dnsquery.h b/lib/addns/dnsquery.h index 9a8df42521e..97ad250f765 100644 --- a/lib/addns/dnsquery.h +++ b/lib/addns/dnsquery.h @@ -42,15 +42,17 @@ NTSTATUS ads_dns_lookup_srv(TALLOC_CTX *ctx, size_t *numdcs); struct tevent_req *ads_dns_lookup_ns_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, - const char *name); + const char *name, + uint32_t timeout); NTSTATUS ads_dns_lookup_ns_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, struct dns_rr_ns **nss, size_t *num_nss); NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx, - const char *dnsdomain, - struct dns_rr_ns **nslist, - size_t *numns); + const char *dnsdomain, + uint32_t timeout, + struct dns_rr_ns **nslist, + size_t *numns); struct tevent_req *ads_dns_lookup_in_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, diff --git a/source3/utils/net_ads_join_dns.c b/source3/utils/net_ads_join_dns.c index 26c2b77797c..e35635f2bd0 100644 --- a/source3/utils/net_ads_join_dns.c +++ b/source3/utils/net_ads_join_dns.c @@ -81,6 +81,7 @@ static NTSTATUS net_update_dns_internal(struct net_context *c, status = ads_dns_lookup_ns(ctx, dnsdomain, + lp_get_async_dns_timeout(), &nameservers, &ns_count); if ( !NT_STATUS_IS_OK(status) || (ns_count == 0)) { @@ -125,6 +126,7 @@ static NTSTATUS net_update_dns_internal(struct net_context *c, status = ads_dns_lookup_ns(ctx, root_domain, + lp_get_async_dns_timeout(), &nameservers, &ns_count);