lib: Pass mem_ctx to state_path()
[amitay/samba.git] / source3 / winbindd / winbindd_locator.c
index 7db2e2ada0668e963b27e1df5d75970b1d378595..55b64555376cebfe74d78d332f4bb1fb96f95393 100644 (file)
 #define DBGC_CLASS DBGC_WINBIND
 
 
-static const struct winbindd_child_dispatch_table locator_dispatch_table[];
-
 static struct winbindd_child static_locator_child;
 
-void init_locator_child(void)
-{
-       setup_domain_child(NULL,
-                          &static_locator_child,
-                          locator_dispatch_table,
-                          "locator");
-}
-
 struct winbindd_child *locator_child(void)
 {
        return &static_locator_child;
 }
 
-void winbindd_dsgetdcname(struct winbindd_cli_state *state)
+struct dcerpc_binding_handle *locator_child_handle(void)
 {
-       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());
+       return static_locator_child.binding_handle;
 }
 
-static enum winbindd_result dual_dsgetdcname(struct winbindd_domain *domain,
-                                            struct winbindd_cli_state *state)
-{
-       NTSTATUS result;
-       struct DS_DOMAIN_CONTROLLER_INFO *info = NULL;
-       const char *dc = NULL;
-
-       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));
-
-       result = DsGetDcName(state->mem_ctx, NULL, state->request.domain_name,
-                            NULL, NULL, state->request.flags, &info);
-
-       if (!NT_STATUS_IS_OK(result)) {
-               return WINBINDD_ERROR;
-       }
-
-       if (info->domain_controller_address) {
-               dc = info->domain_controller_address;
-               if ((dc[0] == '\\') && (dc[1] == '\\')) {
-                       dc += 2;
-               }
-       }
-
-       if ((!dc || !is_ipaddress_v4(dc)) && info->domain_controller_name) {
-               dc = info->domain_controller_name;
-       }
-
-       if (!dc || !*dc) {
-               return WINBINDD_ERROR;
+static const struct winbindd_child_dispatch_table locator_dispatch_table[] = {
+       {
+               .name           = "PING",
+               .struct_cmd     = WINBINDD_PING,
+               .struct_fn      = winbindd_dual_ping,
+       },{
+               .name           = "NDRCMD",
+               .struct_cmd     = WINBINDD_DUAL_NDRCMD,
+               .struct_fn      = winbindd_dual_ndrcmd,
+       },{
+               .name           = NULL,
        }
+};
 
-       fstrcpy(state->response.data.dc_name, dc);
-
-       return WINBINDD_OK;
+void init_locator_child(void)
+{
+       setup_child(NULL, &static_locator_child,
+                   locator_dispatch_table,
+                   "log.winbindd", "locator");
 }
-
-static const struct winbindd_child_dispatch_table locator_dispatch_table[] = {
-       { WINBINDD_DSGETDCNAME, dual_dsgetdcname, "DSGETDCNAME" },
-
-       { WINBINDD_NUM_CMDS, NULL, "NONE" }
-};