mirror of
https://github.com/samba-team/samba.git
synced 2025-11-07 12:23:51 +03:00
dsgetdcname: use make_dc_info_from_cldap_reply() for cldap replies.
Guenther
This commit is contained in:
@@ -254,6 +254,10 @@ static uint32_t get_cldap_reply_server_flags(union nbt_cldap_netlogon *r,
|
|||||||
static bool check_cldap_reply_required_flags(uint32_t ret_flags,
|
static bool check_cldap_reply_required_flags(uint32_t ret_flags,
|
||||||
uint32_t req_flags)
|
uint32_t req_flags)
|
||||||
{
|
{
|
||||||
|
if (ret_flags == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (req_flags & DS_PDC_REQUIRED)
|
if (req_flags & DS_PDC_REQUIRED)
|
||||||
RETURN_ON_FALSE(ret_flags & NBT_SERVER_PDC);
|
RETURN_ON_FALSE(ret_flags & NBT_SERVER_PDC);
|
||||||
|
|
||||||
@@ -844,23 +848,26 @@ static NTSTATUS process_dc_dns(TALLOC_CTX *mem_ctx,
|
|||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
bool valid_dc = false;
|
bool valid_dc = false;
|
||||||
struct nbt_cldap_netlogon_5 r;
|
union nbt_cldap_netlogon *r = NULL;
|
||||||
const char *dc_hostname, *dc_domain_name;
|
uint32_t nt_version = NETLOGON_VERSION_5 |
|
||||||
const char *dc_address;
|
NETLOGON_VERSION_5EX;
|
||||||
uint32_t dc_address_type;
|
uint32_t ret_flags = 0;
|
||||||
uint32_t dc_flags;
|
|
||||||
|
|
||||||
for (i=0; i<num_dcs; i++) {
|
for (i=0; i<num_dcs; i++) {
|
||||||
|
|
||||||
ZERO_STRUCT(r);
|
|
||||||
|
|
||||||
DEBUG(10,("LDAP ping to %s\n", dclist[i].hostname));
|
DEBUG(10,("LDAP ping to %s\n", dclist[i].hostname));
|
||||||
|
|
||||||
if ((ads_cldap_netlogon(mem_ctx, dclist[i].hostname,
|
if (ads_cldap_netlogon(mem_ctx, dclist[i].hostname,
|
||||||
domain_name, &r)) &&
|
domain_name,
|
||||||
(check_cldap_reply_required_flags(r.server_type, flags))) {
|
&nt_version,
|
||||||
valid_dc = true;
|
&r))
|
||||||
break;
|
{
|
||||||
|
ret_flags = get_cldap_reply_server_flags(r, nt_version);
|
||||||
|
|
||||||
|
if (check_cldap_reply_required_flags(ret_flags, flags)) {
|
||||||
|
valid_dc = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
@@ -870,57 +877,8 @@ static NTSTATUS process_dc_dns(TALLOC_CTX *mem_ctx,
|
|||||||
return NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
|
return NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
dc_flags = r.server_type;
|
return make_dc_info_from_cldap_reply(mem_ctx, flags, &dclist[i].ss,
|
||||||
|
nt_version, r, info);
|
||||||
if (flags & DS_RETURN_FLAT_NAME) {
|
|
||||||
if (!strlen(r.pdc_name) || !strlen(r.domain)) {
|
|
||||||
return NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
|
|
||||||
}
|
|
||||||
dc_hostname = r.pdc_name;
|
|
||||||
dc_domain_name = r.domain;
|
|
||||||
} else if (flags & DS_RETURN_DNS_NAME) {
|
|
||||||
if (!strlen(r.pdc_dns_name) || !strlen(r.dns_domain)) {
|
|
||||||
return NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
|
|
||||||
}
|
|
||||||
dc_hostname = r.pdc_dns_name;
|
|
||||||
dc_domain_name = r.dns_domain;
|
|
||||||
dc_flags |= DS_DNS_DOMAIN | DS_DNS_CONTROLLER;
|
|
||||||
} else {
|
|
||||||
/* FIXME */
|
|
||||||
dc_hostname = r.pdc_dns_name;
|
|
||||||
dc_domain_name = r.dns_domain;
|
|
||||||
dc_flags |= DS_DNS_DOMAIN | DS_DNS_CONTROLLER;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & DS_IP_REQUIRED) {
|
|
||||||
char addr[INET6_ADDRSTRLEN];
|
|
||||||
print_sockaddr(addr, sizeof(addr), &dclist[i].ss);
|
|
||||||
dc_address = talloc_asprintf(mem_ctx, "\\\\%s",
|
|
||||||
addr);
|
|
||||||
dc_address_type = DS_ADDRESS_TYPE_INET;
|
|
||||||
} else {
|
|
||||||
dc_address = talloc_asprintf(mem_ctx, "\\\\%s",
|
|
||||||
r.pdc_name);
|
|
||||||
dc_address_type = DS_ADDRESS_TYPE_NETBIOS;
|
|
||||||
}
|
|
||||||
NT_STATUS_HAVE_NO_MEMORY(dc_address);
|
|
||||||
|
|
||||||
if (r.forest) {
|
|
||||||
dc_flags |= DS_DNS_FOREST;
|
|
||||||
}
|
|
||||||
|
|
||||||
return make_domain_controller_info(mem_ctx,
|
|
||||||
dc_hostname,
|
|
||||||
dc_address,
|
|
||||||
dc_address_type,
|
|
||||||
&r.domain_uuid,
|
|
||||||
dc_domain_name,
|
|
||||||
r.forest,
|
|
||||||
dc_flags,
|
|
||||||
r.server_site,
|
|
||||||
r.client_site,
|
|
||||||
info);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
|
|||||||
Reference in New Issue
Block a user