]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
libdns: Change struct dns_rr_srv to samba_sockaddr
authorVolker Lendecke <vl@samba.org>
Thu, 28 May 2026 08:44:18 +0000 (10:44 +0200)
committerAnoop C S <anoopcs@samba.org>
Wed, 17 Jun 2026 08:28:32 +0000 (08:28 +0000)
One call to sockaddr_storage_to_samba_sockaddr less ...

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Anoop C S <anoopcs@samba.org>
lib/addns/dnsquery.c
lib/addns/dnsquery_srv.c
libcli/dns/dns.h
source3/libsmb/dsgetdcname.c
source3/libsmb/namequery.c
source3/utils/net_lookup.c

index bc00ebf370d86aa1d770a51910d319ce745ee0ef..93a0d15081d71d1ce17ba9d3d79a3c8d8ed3fbcb 100644 (file)
@@ -149,7 +149,7 @@ static void ads_dns_lookup_srv_done(struct tevent_req *subreq)
 
                for (j=0; j<state->num_srvs; j++) {
                        struct dns_rr_srv *srv = &state->srvs[j];
-                       struct sockaddr_storage *tmp;
+                       struct samba_sockaddr *tmp = NULL;
 
                        /*
                         * sometimes the name gets messed up
@@ -159,18 +159,17 @@ static void ads_dns_lookup_srv_done(struct tevent_req *subreq)
                                continue;
                        }
                        /* uint16_t can't wrap here. */
-                       tmp = talloc_realloc(
-                               state->srvs,
-                               srv->ss_s,
-                               struct sockaddr_storage,
-                               srv->num_ips+1);
+                       tmp = talloc_realloc(state->srvs,
+                                            srv->ss_s,
+                                            struct samba_sockaddr,
+                                            srv->num_ips + 1);
 
                        if (tevent_req_nomem(tmp, req)) {
                                return;
                        }
                        srv->ss_s = tmp;
 
-                       srv->ss_s[srv->num_ips] = addr.u.ss;
+                       srv->ss_s[srv->num_ips] = addr;
                        srv->num_ips += 1;
                }
        }
index b36d9f01fabc09aad77202dc775016e740612013..dc9ddf4dd6a155760f3be6875390833d44266e55 100644 (file)
@@ -113,7 +113,7 @@ static void dns_rr_srv_fill_done(
        size_t num_subreqs = talloc_array_length(state->subreqs);
        struct dns_rr_srv *srv = NULL;
        size_t num_ips;
-       struct sockaddr_storage *tmp = NULL;
+       struct samba_sockaddr *tmp = NULL;
        char **hostnames_out = NULL;
        struct samba_sockaddr *addrs = NULL;
        size_t num_addrs = 0;
@@ -172,11 +172,10 @@ static void dns_rr_srv_fill_done(
                goto done;
        }
 
-       tmp = talloc_realloc(
-               state->srvs,
-               srv->ss_s,
-               struct sockaddr_storage,
-               num_ips + num_addrs);
+       tmp = talloc_realloc(state->srvs,
+                            srv->ss_s,
+                            struct samba_sockaddr,
+                            num_ips + num_addrs);
        if (tmp == NULL) {
                goto done;
        }
@@ -189,7 +188,7 @@ static void dns_rr_srv_fill_done(
                         i,
                         hostnames_out[i],
                         print_sockaddr(addr, sizeof(addr), &addrs[i].u.ss));
-               tmp[num_ips + i] = addrs[i].u.ss;
+               tmp[num_ips + i] = addrs[i];
        }
        srv->num_ips = num_ips + num_addrs;
 
index 34a6cf5aa9487deb1da502fe21b402fb0bff7408..6e5b888d6570ea707ab440845e918bf760b2b584 100644 (file)
@@ -51,7 +51,7 @@ struct dns_rr_srv {
        uint16_t weight;
        uint16_t port;
        size_t num_ips;
-       struct sockaddr_storage *ss_s;  /* support multi-homed hosts */
+       struct samba_sockaddr *ss_s; /* support multi-homed hosts */
 };
 
 /* NS records */
index 871a8285a258f7dc70439e1246c25a665d11e370..66bab6d094ce53d8a681021b79ebf201820148cd 100644 (file)
@@ -337,28 +337,33 @@ static NTSTATUS discover_dc_dns(TALLOC_CTX *mem_ctx,
                 * Too complex to maintain :-(.
                 */
                for (j = 0; j < dcs[i].num_ips; j++) {
-                       if ((dcs[i].ss_s[j].ss_family == AF_INET && !have_v4_addr) ||
-                           (dcs[i].ss_s[j].ss_family == AF_INET6 && !have_v6_addr)) {
-                               bool ok;
-                               dclist[ret_count].hostname =
-                                       talloc_strdup(dclist, dcs[i].hostname);
-                               ok = sockaddr_storage_to_samba_sockaddr(
-                                       &dclist[ret_count].sa,
-                                       &dcs[i].ss_s[j]);
-                               if (!ok) {
-                                       TALLOC_FREE(dcs);
-                                       TALLOC_FREE(dclist);
-                                       return NT_STATUS_INVALID_PARAMETER;
-                               }
-                               ret_count++;
-                               if (dcs[i].ss_s[j].ss_family == AF_INET) {
-                                       have_v4_addr = true;
-                               } else {
-                                       have_v6_addr = true;
-                               }
-                               if (have_v4_addr && have_v6_addr) {
-                                       break;
-                               }
+                       struct samba_sockaddr *addr = &dcs[i].ss_s[j];
+                       sa_family_t family = addr->u.ss.ss_family;
+
+                       if ((family == AF_INET) && have_v4_addr) {
+                               continue;
+                       }
+                       if ((family == AF_INET6) && have_v6_addr) {
+                               continue;
+                       }
+
+                       dclist[ret_count].sa = *addr;
+                       dclist[ret_count].hostname = talloc_strdup(
+                               dclist, dcs[i].hostname);
+                       if (dclist[ret_count].hostname == NULL) {
+                               TALLOC_FREE(dclist);
+                               TALLOC_FREE(dcs);
+                               return NT_STATUS_NO_MEMORY;
+                       }
+                       ret_count++;
+
+                       if (family == AF_INET) {
+                               have_v4_addr = true;
+                       } else {
+                               have_v6_addr = true;
+                       }
+                       if (have_v4_addr && have_v6_addr) {
+                               break;
                        }
                }
        }
index 3d222f32e5cf70c1236e2b908bb8f242c54826cb..a13a0449205ef4b798084d4848f7014957d829f1 100644 (file)
@@ -2630,7 +2630,7 @@ static NTSTATUS resolve_ads(TALLOC_CTX *ctx,
                for (j = 0; j < dcs[i].num_ips; j++) {
                        char addr[INET6_ADDRSTRLEN];
 
-                       srv_addrs[num_srv_addrs] = dcs[i].ss_s[j];
+                       srv_addrs[num_srv_addrs] = dcs[i].ss_s[j].u.ss;
                        if (is_zero_addr(&srv_addrs[num_srv_addrs])) {
                                continue;
                        }
index 9211fa4a79707bb9b06bfce70b511d4c9fa3432e..33433830b4f70b0dd39dd97c179d80988807938c 100644 (file)
@@ -83,7 +83,7 @@ static void print_ldap_srvlist(struct dns_rr_srv *dclist, size_t numdcs)
                size_t j;
 
                for (j=0; j<dc->num_ips; j++) {
-                       struct sockaddr_storage *ss = &dc->ss_s[j];
+                       struct sockaddr_storage *ss = &dc->ss_s[j].u.ss;
                        char addr[INET6_ADDRSTRLEN];
 
                        print_sockaddr(addr, sizeof(addr), ss);