From: Volker Lendecke Date: Thu, 28 May 2026 08:44:18 +0000 (+0200) Subject: libdns: Change struct dns_rr_srv to samba_sockaddr X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=72f12448d5ad2a23b040faccf46b593aab6a76b2;p=thirdparty%2Fsamba.git libdns: Change struct dns_rr_srv to samba_sockaddr One call to sockaddr_storage_to_samba_sockaddr less ... Signed-off-by: Volker Lendecke Reviewed-by: Anoop C S --- diff --git a/lib/addns/dnsquery.c b/lib/addns/dnsquery.c index bc00ebf370d..93a0d15081d 100644 --- a/lib/addns/dnsquery.c +++ b/lib/addns/dnsquery.c @@ -149,7 +149,7 @@ static void ads_dns_lookup_srv_done(struct tevent_req *subreq) for (j=0; jnum_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; } } diff --git a/lib/addns/dnsquery_srv.c b/lib/addns/dnsquery_srv.c index b36d9f01fab..dc9ddf4dd6a 100644 --- a/lib/addns/dnsquery_srv.c +++ b/lib/addns/dnsquery_srv.c @@ -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; diff --git a/libcli/dns/dns.h b/libcli/dns/dns.h index 34a6cf5aa94..6e5b888d657 100644 --- a/libcli/dns/dns.h +++ b/libcli/dns/dns.h @@ -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 */ diff --git a/source3/libsmb/dsgetdcname.c b/source3/libsmb/dsgetdcname.c index 871a8285a25..66bab6d094c 100644 --- a/source3/libsmb/dsgetdcname.c +++ b/source3/libsmb/dsgetdcname.c @@ -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; } } } diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c index 3d222f32e5c..a13a0449205 100644 --- a/source3/libsmb/namequery.c +++ b/source3/libsmb/namequery.c @@ -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; } diff --git a/source3/utils/net_lookup.c b/source3/utils/net_lookup.c index 9211fa4a797..33433830b4f 100644 --- a/source3/utils/net_lookup.c +++ b/source3/utils/net_lookup.c @@ -83,7 +83,7 @@ static void print_ldap_srvlist(struct dns_rr_srv *dclist, size_t numdcs) size_t j; for (j=0; jnum_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);