]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
addns: Add a "timeout" parameter to ads_dns_lookup_ns()
authorVolker Lendecke <vl@samba.org>
Sat, 13 Jun 2026 07:49:40 +0000 (09:49 +0200)
committerVolker Lendecke <vl@samba.org>
Fri, 3 Jul 2026 08:08:36 +0000 (08:08 +0000)
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 <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
lib/addns/dnsquery.c
lib/addns/dnsquery.h
source3/utils/net_ads_join_dns.c

index b0c7b40275bd1247583d89a2c867488ace89b531..77178d39f611030e2d5ed2bfec630ee94ae01c47 100644 (file)
@@ -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;
        }
index 9a8df42521ef02455df38ddcdbf710c7b1325b5e..97ad250f765182d06693eb3ccdcc9791882a3c92 100644 (file)
@@ -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,
index 26c2b77797c5d07583c5c871870a3ae4394cba52..e35635f2bd0e646c61db863300621c63b54b0a5c 100644 (file)
@@ -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);