mirror of
https://github.com/samba-team/samba.git
synced 2025-08-26 01:49:31 +03:00
s3: libsmb: Add get_sorted_dc_list_talloc().
Talloc version of get_sorted_dc_list_talloc(). Makes use of dup_ip_service_array(). Now to move the callers. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Noel Power <npower@samba.org>
This commit is contained in:
committed by
Noel Power
parent
6deb23c618
commit
f305a140d1
@ -4013,6 +4013,85 @@ NTSTATUS get_sorted_dc_list( const char *domain,
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
Talloc version.
|
||||
Small wrapper function to get the DC list and sort it if neccessary.
|
||||
*********************************************************************/
|
||||
|
||||
NTSTATUS get_sorted_dc_list_talloc(TALLOC_CTX *ctx,
|
||||
const char *domain,
|
||||
const char *sitename,
|
||||
struct ip_service **ip_list_ret,
|
||||
size_t *ret_count,
|
||||
bool ads_only)
|
||||
{
|
||||
bool ordered = false;
|
||||
NTSTATUS status;
|
||||
enum dc_lookup_type lookup_type = DC_NORMAL_LOOKUP;
|
||||
struct ip_service *ip_list_malloc = NULL;
|
||||
struct ip_service *ip_list = NULL;
|
||||
int count = 0;
|
||||
|
||||
DBG_INFO("attempting lookup for name %s (sitename %s)\n",
|
||||
domain,
|
||||
sitename ? sitename : "NULL");
|
||||
|
||||
if (ads_only) {
|
||||
lookup_type = DC_ADS_ONLY;
|
||||
}
|
||||
|
||||
status = get_dc_list(domain,
|
||||
sitename,
|
||||
&ip_list_malloc,
|
||||
&count,
|
||||
lookup_type,
|
||||
&ordered);
|
||||
if (NT_STATUS_EQUAL(status, NT_STATUS_NO_LOGON_SERVERS)
|
||||
&& sitename) {
|
||||
DBG_NOTICE("no server for name %s available"
|
||||
" in site %s, fallback to all servers\n",
|
||||
domain,
|
||||
sitename);
|
||||
status = get_dc_list(domain,
|
||||
NULL,
|
||||
&ip_list_malloc,
|
||||
&count,
|
||||
lookup_type,
|
||||
&ordered);
|
||||
}
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Paranoia check. */
|
||||
if (count < 0) {
|
||||
status = NT_STATUS_INVALID_PARAMETER;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* only sort if we don't already have an ordered list */
|
||||
if (!ordered) {
|
||||
sort_service_list(ip_list_malloc, count);
|
||||
}
|
||||
|
||||
status = dup_ip_service_array(ctx,
|
||||
&ip_list,
|
||||
ip_list_malloc,
|
||||
(size_t)count);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
*ret_count = (size_t)count;
|
||||
*ip_list_ret = ip_list;
|
||||
|
||||
out:
|
||||
|
||||
SAFE_FREE(ip_list_malloc);
|
||||
return status;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
Talloc version.
|
||||
Get the KDC list - re-use all the logic in get_dc_list.
|
||||
|
@ -114,6 +114,12 @@ NTSTATUS get_sorted_dc_list( const char *domain,
|
||||
struct ip_service **ip_list,
|
||||
int *count,
|
||||
bool ads_only );
|
||||
NTSTATUS get_sorted_dc_list_talloc(TALLOC_CTX *ctx,
|
||||
const char *domain,
|
||||
const char *sitename,
|
||||
struct ip_service **ip_list_ret,
|
||||
size_t *ret_count,
|
||||
bool ads_only);
|
||||
NTSTATUS get_kdc_list(TALLOC_CTX *ctx,
|
||||
const char *realm,
|
||||
const char *sitename,
|
||||
|
Reference in New Issue
Block a user