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>
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
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;
}
}
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;
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;
}
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;
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 */
* 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;
}
}
}
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;
}
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);