mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
dsgetdcname: make use of nbt_cldap_netlogon_15.
Guenther
(This used to be commit 5b0eda98f3
)
This commit is contained in:
parent
8af909301c
commit
d59cf703ba
@ -291,7 +291,7 @@ bool pull_mailslot_cldap_reply(TALLOC_CTX *mem_ctx,
|
|||||||
uint32_t *nt_version)
|
uint32_t *nt_version)
|
||||||
{
|
{
|
||||||
enum ndr_err_code ndr_err;
|
enum ndr_err_code ndr_err;
|
||||||
uint32_t nt_version_query = ((*nt_version) & 0x000000ff);
|
uint32_t nt_version_query = ((*nt_version) & 0x0000001f);
|
||||||
uint16_t command = 0;
|
uint16_t command = 0;
|
||||||
|
|
||||||
ndr_err = ndr_pull_struct_blob(blob, mem_ctx, &command,
|
ndr_err = ndr_pull_struct_blob(blob, mem_ctx, &command,
|
||||||
|
@ -206,10 +206,12 @@ static NTSTATUS map_logon29_from_cldap_reply(TALLOC_CTX *mem_ctx,
|
|||||||
p->dc_sock_addr.sa_family = 2;
|
p->dc_sock_addr.sa_family = 2;
|
||||||
p->dc_sock_addr.pdc_ip = talloc_strdup(mem_ctx, addr);
|
p->dc_sock_addr.pdc_ip = talloc_strdup(mem_ctx, addr);
|
||||||
|
|
||||||
switch (nt_version & 0x000000ff) {
|
switch (nt_version & 0x0000001f) {
|
||||||
case 0:
|
case 0:
|
||||||
return NT_STATUS_INVALID_PARAMETER;
|
return NT_STATUS_INVALID_PARAMETER;
|
||||||
case 1:
|
case 1:
|
||||||
|
case 16:
|
||||||
|
case 17:
|
||||||
p->pdc_name = SET_STRING(r->logon1.pdc_name);
|
p->pdc_name = SET_STRING(r->logon1.pdc_name);
|
||||||
p->domain = SET_STRING(r->logon1.domain_name);
|
p->domain = SET_STRING(r->logon1.domain_name);
|
||||||
|
|
||||||
@ -220,6 +222,8 @@ static NTSTATUS map_logon29_from_cldap_reply(TALLOC_CTX *mem_ctx,
|
|||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
|
case 18:
|
||||||
|
case 19:
|
||||||
p->pdc_name = SET_STRING(r->logon3.pdc_name);
|
p->pdc_name = SET_STRING(r->logon3.pdc_name);
|
||||||
p->domain = SET_STRING(r->logon3.domain_name);
|
p->domain = SET_STRING(r->logon3.domain_name);
|
||||||
p->pdc_dns_name = SET_STRING(r->logon3.pdc_dns_name);
|
p->pdc_dns_name = SET_STRING(r->logon3.pdc_dns_name);
|
||||||
@ -263,7 +267,29 @@ static NTSTATUS map_logon29_from_cldap_reply(TALLOC_CTX *mem_ctx,
|
|||||||
p->client_site = SET_STRING(r->logon13.client_site);
|
p->client_site = SET_STRING(r->logon13.client_site);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
case 20:
|
||||||
|
case 21:
|
||||||
|
case 22:
|
||||||
|
case 23:
|
||||||
|
case 24:
|
||||||
|
case 25:
|
||||||
|
case 26:
|
||||||
|
case 27:
|
||||||
|
case 28:
|
||||||
|
p->pdc_name = SET_STRING(r->logon15.pdc_name);
|
||||||
|
p->domain = SET_STRING(r->logon15.domain);
|
||||||
|
p->pdc_dns_name = SET_STRING(r->logon15.pdc_dns_name);
|
||||||
|
p->dns_domain = SET_STRING(r->logon15.dns_domain);
|
||||||
|
p->server_type = r->logon15.server_type;
|
||||||
|
p->forest = SET_STRING(r->logon15.forest);
|
||||||
|
p->domain_uuid = r->logon15.domain_uuid;
|
||||||
|
p->server_site = SET_STRING(r->logon15.server_site);
|
||||||
|
p->client_site = SET_STRING(r->logon15.client_site);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 29:
|
||||||
|
case 30:
|
||||||
|
case 31:
|
||||||
p->pdc_name = SET_STRING(r->logon29.pdc_name);
|
p->pdc_name = SET_STRING(r->logon29.pdc_name);
|
||||||
p->domain = SET_STRING(r->logon29.domain);
|
p->domain = SET_STRING(r->logon29.domain);
|
||||||
p->pdc_dns_name = SET_STRING(r->logon29.pdc_dns_name);
|
p->pdc_dns_name = SET_STRING(r->logon29.pdc_dns_name);
|
||||||
@ -276,6 +302,8 @@ static NTSTATUS map_logon29_from_cldap_reply(TALLOC_CTX *mem_ctx,
|
|||||||
p->next_closest_site = SET_STRING(r->logon29.next_closest_site);
|
p->next_closest_site = SET_STRING(r->logon29.next_closest_site);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
return NT_STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NT_STATUS_OK;
|
return NT_STATUS_OK;
|
||||||
@ -354,12 +382,16 @@ static NTSTATUS dsgetdcname_cache_refresh(TALLOC_CTX *mem_ctx,
|
|||||||
static uint32_t get_cldap_reply_server_flags(union nbt_cldap_netlogon *r,
|
static uint32_t get_cldap_reply_server_flags(union nbt_cldap_netlogon *r,
|
||||||
uint32_t nt_version)
|
uint32_t nt_version)
|
||||||
{
|
{
|
||||||
switch (nt_version & 0x000000ff) {
|
switch (nt_version & 0x0000001f) {
|
||||||
case 0:
|
case 0:
|
||||||
case 1:
|
case 1:
|
||||||
|
case 16:
|
||||||
|
case 17:
|
||||||
return 0;
|
return 0;
|
||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
|
case 18:
|
||||||
|
case 19:
|
||||||
return r->logon3.server_type;
|
return r->logon3.server_type;
|
||||||
case 4:
|
case 4:
|
||||||
case 5:
|
case 5:
|
||||||
@ -375,8 +407,22 @@ static uint32_t get_cldap_reply_server_flags(union nbt_cldap_netlogon *r,
|
|||||||
case 14:
|
case 14:
|
||||||
case 15:
|
case 15:
|
||||||
return r->logon13.server_type;
|
return r->logon13.server_type;
|
||||||
default:
|
case 20:
|
||||||
|
case 21:
|
||||||
|
case 22:
|
||||||
|
case 23:
|
||||||
|
case 24:
|
||||||
|
case 25:
|
||||||
|
case 26:
|
||||||
|
case 27:
|
||||||
|
case 28:
|
||||||
|
return r->logon15.server_type;
|
||||||
|
case 29:
|
||||||
|
case 30:
|
||||||
|
case 31:
|
||||||
return r->logon29.server_type;
|
return r->logon29.server_type;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -466,7 +512,7 @@ static NTSTATUS dsgetdcname_cache_fetch(TALLOC_CTX *mem_ctx,
|
|||||||
p.logon29 = r;
|
p.logon29 = r;
|
||||||
|
|
||||||
status = make_dc_info_from_cldap_reply(mem_ctx, flags, NULL,
|
status = make_dc_info_from_cldap_reply(mem_ctx, flags, NULL,
|
||||||
NETLOGON_VERSION_WITH_CLOSEST_SITE,
|
29,
|
||||||
&p, &info);
|
&p, &info);
|
||||||
if (!NT_STATUS_IS_OK(status)) {
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
return status;
|
return status;
|
||||||
@ -878,10 +924,11 @@ static NTSTATUS make_dc_info_from_cldap_reply(TALLOC_CTX *mem_ctx,
|
|||||||
dc_address_type = DS_ADDRESS_TYPE_INET;
|
dc_address_type = DS_ADDRESS_TYPE_INET;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (nt_version & 0x000000ff) {
|
switch (nt_version & 0x0000001f) {
|
||||||
case 0:
|
case 0:
|
||||||
return NT_STATUS_INVALID_PARAMETER;
|
|
||||||
case 1:
|
case 1:
|
||||||
|
case 16:
|
||||||
|
case 17:
|
||||||
if (!ss) {
|
if (!ss) {
|
||||||
dc_address = r->logon1.pdc_name;
|
dc_address = r->logon1.pdc_name;
|
||||||
dc_address_type = DS_ADDRESS_TYPE_NETBIOS;
|
dc_address_type = DS_ADDRESS_TYPE_NETBIOS;
|
||||||
@ -902,6 +949,8 @@ static NTSTATUS make_dc_info_from_cldap_reply(TALLOC_CTX *mem_ctx,
|
|||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
|
case 18:
|
||||||
|
case 19:
|
||||||
if (!ss) {
|
if (!ss) {
|
||||||
dc_address = r->logon3.pdc_ip;
|
dc_address = r->logon3.pdc_ip;
|
||||||
dc_address_type = DS_ADDRESS_TYPE_INET;
|
dc_address_type = DS_ADDRESS_TYPE_INET;
|
||||||
@ -975,7 +1024,39 @@ static NTSTATUS make_dc_info_from_cldap_reply(TALLOC_CTX *mem_ctx,
|
|||||||
dc_client_site = r->logon13.client_site;
|
dc_client_site = r->logon13.client_site;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
case 20:
|
||||||
|
case 21:
|
||||||
|
case 22:
|
||||||
|
case 23:
|
||||||
|
case 24:
|
||||||
|
case 25:
|
||||||
|
case 26:
|
||||||
|
case 27:
|
||||||
|
case 28:
|
||||||
|
if (!ss) {
|
||||||
|
dc_address = r->logon15.pdc_name;
|
||||||
|
dc_address_type = DS_ADDRESS_TYPE_NETBIOS;
|
||||||
|
}
|
||||||
|
|
||||||
|
map_dc_and_domain_names(flags,
|
||||||
|
r->logon15.pdc_name,
|
||||||
|
r->logon15.domain,
|
||||||
|
r->logon15.pdc_dns_name,
|
||||||
|
r->logon15.dns_domain,
|
||||||
|
&dc_flags,
|
||||||
|
&dc_hostname,
|
||||||
|
&dc_domain_name);
|
||||||
|
|
||||||
|
dc_flags |= r->logon15.server_type;
|
||||||
|
dc_forest = r->logon15.forest;
|
||||||
|
dc_domain_guid = &r->logon15.domain_uuid;
|
||||||
|
dc_server_site = r->logon15.server_site;
|
||||||
|
dc_client_site = r->logon15.client_site;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 29:
|
||||||
|
case 30:
|
||||||
|
case 31:
|
||||||
if (!ss) {
|
if (!ss) {
|
||||||
dc_address = r->logon29.dc_sock_addr.pdc_ip;
|
dc_address = r->logon29.dc_sock_addr.pdc_ip;
|
||||||
dc_address_type = DS_ADDRESS_TYPE_INET;
|
dc_address_type = DS_ADDRESS_TYPE_INET;
|
||||||
@ -997,6 +1078,8 @@ static NTSTATUS make_dc_info_from_cldap_reply(TALLOC_CTX *mem_ctx,
|
|||||||
dc_client_site = r->logon29.client_site;
|
dc_client_site = r->logon29.client_site;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
return NT_STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
return make_domain_controller_info(mem_ctx,
|
return make_domain_controller_info(mem_ctx,
|
||||||
|
Loading…
Reference in New Issue
Block a user