1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00

s3: libsmb: Add get_kdc_list_talloc().

Talloc version of get_kdc_list(). 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:
Jeremy Allison 2020-08-26 11:26:33 -07:00 committed by Noel Power
parent 02016acb2d
commit e8a491691d
2 changed files with 61 additions and 3 deletions

View File

@ -64,7 +64,6 @@ bool sockaddr_storage_to_samba_sockaddr(struct samba_sockaddr *sa,
return true;
}
#if 0
/*
* Utility function to convert a MALLOC'ed struct ip_serivce array
* to a talloc'ed one. This function will go away once all ip_service
@ -87,7 +86,6 @@ static NTSTATUS dup_ip_service_array(TALLOC_CTX *ctx,
*array_out = array_copy;
return NT_STATUS_OK;
}
#endif
/****************************
* SERVER AFFINITY ROUTINES *
@ -4046,3 +4044,59 @@ NTSTATUS get_kdc_list( const char *realm,
return NT_STATUS_OK;
}
/*********************************************************************
Talloc version.
Get the KDC list - re-use all the logic in get_dc_list.
*********************************************************************/
NTSTATUS get_kdc_list_talloc(TALLOC_CTX *ctx,
const char *realm,
const char *sitename,
struct ip_service **ip_list_ret,
size_t *ret_count)
{
int count = 0;
struct ip_service *ip_list_malloc = NULL;
struct ip_service *ip_list = NULL;
bool ordered = false;
NTSTATUS status;
status = get_dc_list(realm,
sitename,
&ip_list_malloc,
&count,
DC_KDC_ONLY,
&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;
}

View File

@ -118,5 +118,9 @@ NTSTATUS get_kdc_list( const char *realm,
const char *sitename,
struct ip_service **ip_list,
int *count);
NTSTATUS get_kdc_list_talloc(TALLOC_CTX *ctx,
const char *realm,
const char *sitename,
struct ip_service **ip_list_ret,
size_t *ret_count);
#endif