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,