libsmb: Pass "account_name/flags" through nb_getdc
authorVolker Lendecke <vl@samba.org>
Sat, 10 Mar 2018 17:06:03 +0000 (18:06 +0100)
committerJeremy Allison <jra@samba.org>
Tue, 10 Apr 2018 23:06:39 +0000 (01:06 +0200)
Don't hardcode values that we might want to change later

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/libsmb/clidgram.c
source3/libsmb/clidgram.h
source3/libsmb/dsgetdcname.c
source3/winbindd/winbindd_cm.c

index 7b10f2601c6f98d5cf010afb548646406001d01c..bed507626c1ec1d073c714b555871a87c020347b 100644 (file)
@@ -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;
        }
index 6cd6222df68bdf44ea2ee3bc1fbd5c91959af580..46e11f42676589486a5b70b92b3a387e9dbc5956 100644 (file)
@@ -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,
index 3afe6a85b919f01aa34118ac5d4b223b544677c7..bf96a2433790b7ff04edae69054ba0bf16625811 100644 (file)
@@ -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; i<num_dcs; i++) {
@@ -937,7 +944,7 @@ static NTSTATUS process_dc_netbios(TALLOC_CTX *mem_ctx,
                }
 
                status = nbt_getdc(msg_ctx, 10, &dclist[i].ss, domain_name,
-                                  NULL, nt_version,
+                                  NULL, my_acct_name, ACB_WSTRUST, nt_version,
                                   mem_ctx, &nt_version, &dc_name, &r);
                if (NT_STATUS_IS_OK(status)) {
                        store_cache = true;
index 30f65c66bc42a47bb8d66a16ba97a4fc7283dfda..9c2773d5d670e0f165e0f376617cdd8a0f4a0084 100644 (file)
@@ -1466,9 +1466,21 @@ static bool dcip_check_name(TALLOC_CTX *mem_ctx,
        }
 #endif
 
-       status = nbt_getdc(server_messaging_context(), 10, pss, domain->name,
-                          &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) {