wb-ndr: use winbindd_get_dc_info_async_child() to implement WINBINDD_DSGETDCNAME
authorStefan Metzmacher <metze@sernet.de>
Fri, 7 Dec 2007 23:25:26 +0000 (00:25 +0100)
committerStefan Metzmacher <metze@sernet.de>
Fri, 2 May 2008 14:12:33 +0000 (16:12 +0200)
metze

source/winbindd/winbindd_locator.c

index f1eebab612c211093e02c51c6016aba5695f368a..340c942b1845388f090869686f3db3f444f5ec97 100644 (file)
@@ -43,15 +43,48 @@ struct winbindd_child *locator_child(void)
        return &static_locator_child;
 }
 
+static void winbindd_dsgetdcname_recv(void *private_data,
+                                     bool success,
+                                     struct winbind_get_dc_info *r)
+{
+       struct winbindd_cli_state *state =
+               talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+       if (!success) {
+               request_error(state);
+               return;
+       }
+
+       fstrcpy(state->response.data.dc_name, r->out.dc_info->name);
+
+       request_ok(state);
+}
+
 void winbindd_dsgetdcname(struct winbindd_cli_state *state)
 {
+       struct winbind_get_dc_info *r;
+
        state->request.domain_name
                [sizeof(state->request.domain_name)-1] = '\0';
 
        DEBUG(3, ("[%5lu]: dsgetdcname for %s\n", (unsigned long)state->pid,
                  state->request.domain_name));
 
-       sendto_child(state, locator_child());
+       r = TALLOC_P(state->mem_ctx, struct winbind_get_dc_info);
+       if (!r) goto nomem;
+       r->in.level = TALLOC_P(r, enum winbind_dc_info_level);
+       if (!r->in.level) goto nomem;
+
+       *r->in.level            = WINBIND_DC_INFO_LEVEL_COMPAT_DS;
+       r->in.domain_name       = state->request.domain_name;
+       r->in.params.flags      = state->request.flags;
+
+       winbindd_get_dc_info_async_child(state->mem_ctx, locator_child(),
+                                        r, winbindd_dsgetdcname_recv, state);
+       return;
+nomem:
+       request_error(state);
+       return;
 }
 
 static enum winbindd_result dual_dsgetdcname(struct winbindd_domain *domain,