diff --git a/source3/libsmb/clidgram.c b/source3/libsmb/clidgram.c index 7b10f2601c6..bed507626c1 100644 --- a/source3/libsmb/clidgram.c +++ b/source3/libsmb/clidgram.c @@ -299,6 +299,8 @@ struct tevent_req *nbt_getdc_send(TALLOC_CTX *mem_ctx, const struct sockaddr_storage *dc_addr, const char *domain_name, const struct dom_sid *sid, + const char *account_name, + uint32_t account_flags, uint32_t nt_version) { struct tevent_req *req, *subreq; @@ -335,20 +337,10 @@ struct tevent_req *nbt_getdc_send(TALLOC_CTX *mem_ctx, generate_random_buffer((uint8_t *)(void *)&dgm_id, sizeof(dgm_id)); - { - size_t len = strlen(lp_netbios_name()); - char my_acct_name[len+2]; - - snprintf(my_acct_name, - sizeof(my_acct_name), - "%s$", - lp_netbios_name()); - - ok = prep_getdc_request(dc_addr, my_acct_name, ACB_WSTRUST, - domain_name, sid, nt_version, - state->my_mailslot, dgm_id & 0x7fff, - &state->p); - } + ok = prep_getdc_request(dc_addr, account_name, account_flags, + domain_name, sid, nt_version, + state->my_mailslot, dgm_id & 0x7fff, + &state->p); if (!ok) { DEBUG(3, ("prep_getdc_request failed\n")); @@ -452,6 +444,8 @@ NTSTATUS nbt_getdc(struct messaging_context *msg_ctx, const struct sockaddr_storage *dc_addr, const char *domain_name, const struct dom_sid *sid, + const char *account_name, + uint32_t account_flags, uint32_t nt_version, TALLOC_CTX *mem_ctx, uint32_t *pnt_version, @@ -468,7 +462,7 @@ NTSTATUS nbt_getdc(struct messaging_context *msg_ctx, goto fail; } req = nbt_getdc_send(ev, ev, msg_ctx, dc_addr, domain_name, - sid, nt_version); + sid, account_name, account_flags, nt_version); if (req == NULL) { goto fail; } diff --git a/source3/libsmb/clidgram.h b/source3/libsmb/clidgram.h index 6cd6222df68..46e11f42676 100644 --- a/source3/libsmb/clidgram.h +++ b/source3/libsmb/clidgram.h @@ -32,6 +32,8 @@ struct tevent_req *nbt_getdc_send(TALLOC_CTX *mem_ctx, const struct sockaddr_storage *dc_addr, const char *domain_name, const struct dom_sid *sid, + const char *account_name, + uint32_t account_flags, uint32_t nt_version); NTSTATUS nbt_getdc_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, uint32_t *nt_version, const char **dc_name, @@ -41,6 +43,8 @@ NTSTATUS nbt_getdc(struct messaging_context *msg_ctx, const struct sockaddr_storage *dc_addr, const char *domain_name, const struct dom_sid *sid, + const char *account_name, + uint32_t account_flags, uint32_t nt_version, TALLOC_CTX *mem_ctx, uint32_t *pnt_version, diff --git a/source3/libsmb/dsgetdcname.c b/source3/libsmb/dsgetdcname.c index 3afe6a85b91..bf96a243379 100644 --- a/source3/libsmb/dsgetdcname.c +++ b/source3/libsmb/dsgetdcname.c @@ -911,6 +911,8 @@ static NTSTATUS process_dc_netbios(TALLOC_CTX *mem_ctx, uint32_t nt_version = NETLOGON_NT_VERSION_1 | NETLOGON_NT_VERSION_5 | NETLOGON_NT_VERSION_5EX_WITH_IP; + size_t len = strlen(lp_netbios_name()); + char my_acct_name[len+2]; if (msg_ctx == NULL) { return NT_STATUS_INVALID_PARAMETER; @@ -922,6 +924,11 @@ static NTSTATUS process_dc_netbios(TALLOC_CTX *mem_ctx, nt_version |= map_ds_flags_to_nt_version(flags); + snprintf(my_acct_name, + sizeof(my_acct_name), + "%s$", + lp_netbios_name()); + DEBUG(10,("process_dc_netbios\n")); for (i=0; iname, - &domain->sid, nt_version, mem_ctx, &nt_version, - &dc_name, NULL); + { + size_t len = strlen(lp_netbios_name()); + char my_acct_name[len+2]; + + snprintf(my_acct_name, + sizeof(my_acct_name), + "%s$", + lp_netbios_name()); + + status = nbt_getdc(server_messaging_context(), 10, pss, + domain->name, &domain->sid, + my_acct_name, ACB_WSTRUST, + nt_version, mem_ctx, &nt_version, + &dc_name, NULL); + } if (NT_STATUS_IS_OK(status)) { *name = talloc_strdup(mem_ctx, dc_name); if (*name == NULL) {