static NTSTATUS get_dc_list(TALLOC_CTX *ctx,
const char *domain,
const char *sitename,
- struct ip_service **ip_list,
+ struct samba_sockaddr **sa_list_ret,
size_t *ret_count,
enum dc_lookup_type lookup_type,
bool *ordered)
size_t i;
struct ip_service *return_iplist = NULL;
struct ip_service *auto_ip_list = NULL;
+ struct samba_sockaddr *sa_list = NULL;
bool done_auto_lookup = false;
size_t auto_count = 0;
NTSTATUS status;
out:
- if (NT_STATUS_IS_OK(status)) {
- *ip_list = return_iplist;
- *ret_count = local_count;
- } else {
+ /*
+ * This uglyness will go away
+ * once internal_resolve_name() is changed
+ * to return a samba_sockaddr array.
+ */
+ if (!(NT_STATUS_IS_OK(status))) {
TALLOC_FREE(return_iplist);
+ TALLOC_FREE(auto_ip_list);
+ TALLOC_FREE(frame);
+ return status;
}
+ status = ip_service_to_samba_sockaddr(ctx,
+ &sa_list,
+ return_iplist,
+ local_count);
+ TALLOC_FREE(return_iplist);
+
+ if (NT_STATUS_IS_OK(status)) {
+ *sa_list_ret = sa_list;
+ *ret_count = local_count;
+ }
TALLOC_FREE(auto_ip_list);
TALLOC_FREE(frame);
return status;
bool ordered = false;
NTSTATUS status;
enum dc_lookup_type lookup_type = DC_NORMAL_LOOKUP;
- struct ip_service *ip_list = NULL;
struct samba_sockaddr *sa_list = NULL;
size_t count = 0;
status = get_dc_list(ctx,
domain,
sitename,
- &ip_list,
+ &sa_list,
&count,
lookup_type,
&ordered);
status = get_dc_list(ctx,
domain,
NULL,
- &ip_list,
+ &sa_list,
&count,
lookup_type,
&ordered);
return status;
}
- status = ip_service_to_samba_sockaddr(ctx,
- &sa_list,
- ip_list,
- count);
-
- TALLOC_FREE(ip_list);
-
- if (!NT_STATUS_IS_OK(status)) {
- return status;
- }
-
/* only sort if we don't already have an ordered list */
if (!ordered) {
sort_sa_list(sa_list, count);
size_t *ret_count)
{
size_t count = 0;
- struct ip_service *ip_list = NULL;
struct samba_sockaddr *sa_list = NULL;
bool ordered = false;
NTSTATUS status;
status = get_dc_list(ctx,
realm,
sitename,
- &ip_list,
+ &sa_list,
&count,
DC_KDC_ONLY,
&ordered);
return status;
}
- status = ip_service_to_samba_sockaddr(ctx,
- &sa_list,
- ip_list,
- count);
-
- TALLOC_FREE(ip_list);
-
- if (!NT_STATUS_IS_OK(status)) {
- return status;
- }
-
/* only sort if we don't already have an ordered list */
if (!ordered ) {
sort_sa_list(sa_list, count);