let winbindd_set_mapping() use WINBIND_SET_IDMAP_LEVEL_SET_MAPPING...
authorStefan Metzmacher <metze@sernet.de>
Wed, 12 Dec 2007 18:35:49 +0000 (19:35 +0100)
committerStefan Metzmacher <metze@sernet.de>
Fri, 2 May 2008 14:12:46 +0000 (16:12 +0200)
source/winbindd/winbindd_sid.c

index 0d8f7a94cf445c5d69b6e72b482e69818e173191..cf7953a7b3793beee7c30008d93b7a596a4c6a6f 100644 (file)
@@ -309,13 +309,26 @@ void winbindd_sid_to_gid(struct winbindd_cli_state *state)
        winbindd_lookupsid_async( state->mem_ctx, &sid, sid2gid_lookupsid_recv, state );        
 }
 
-static void set_mapping_recv(void *private_data, bool success)
+static void winbindd_set_mapping_recv(TALLOC_CTX *mem_ctx, bool success,
+                                     struct winbindd_ndr_call *c,
+                                     void *private_data,
+                                     void *_cont,
+                                     void *_cont_private)
 {
        struct winbindd_cli_state *state =
                talloc_get_type_abort(private_data, struct winbindd_cli_state);
+       struct winbind_set_idmap *r =
+               talloc_get_type_abort(c->ndr.r, struct winbind_set_idmap);
 
        if (!success) {
-               DEBUG(5, ("Could not set sid mapping\n"));
+               DEBUG(5, ("Could not set_idmap(set_mapping)\n"));
+               request_error(state);
+               return;
+       }
+
+       if (r->out.result != WINBIND_STATUS_OK) {
+               DEBUG(5, ("set_idmap(set_mapping) returned an error:0x%08X\n",
+                       r->out.result));
                request_error(state);
                return;
        }
@@ -325,8 +338,7 @@ static void set_mapping_recv(void *private_data, bool success)
 
 void winbindd_set_mapping(struct winbindd_cli_state *state)
 {
-       struct id_map map;
-       DOM_SID sid;
+       struct winbind_set_idmap *r = NULL;
 
        DEBUG(3, ("[%5lu]: set id map\n", (unsigned long)state->pid));
 
@@ -336,19 +348,31 @@ void winbindd_set_mapping(struct winbindd_cli_state *state)
                return;
        }
 
-       if (!string_to_sid(&sid, state->request.data.dual_idmapset.sid)) {
+       r = TALLOC_P(state->mem_ctx, struct winbind_set_idmap);
+       if (!r) goto nomem;
+       r->in.level = TALLOC_P(r, enum winbind_set_idmap_level);
+       if (!r->in.level) goto nomem;
+
+       *r->in.level = WINBIND_SET_IDMAP_LEVEL_SET_MAPPING;
+       r->in.req.mapping.sid = string_sid_talloc(r,
+                                       state->request.data.dual_idmapset.sid);
+       if (!r->in.req.mapping.sid) {
                DEBUG(1, ("Could not get convert sid %s from string\n",
-                         state->request.data.sid));
-               request_error(state);
-               return;
+                         state->request.data.dual_idmapset.sid));
+               goto nomem;
        }
+       r->in.req.mapping.xid.id = state->request.data.dual_idmapset.id;
+       r->in.req.mapping.xid.type = state->request.data.dual_idmapset.type;
+       r->in.req.mapping.status = ID_MAPPED;
 
-       map.sid = &sid;
-       map.xid.id = state->request.data.dual_idmapset.id;
-       map.xid.type = state->request.data.dual_idmapset.type;
-
-       winbindd_set_mapping_async(state->mem_ctx, &map,
-                       set_mapping_recv, state);
+       do_async_ndr(state->mem_ctx, idmap_child(),
+                    NDR_WINBIND_SET_IDMAP, r,
+                    winbindd_set_mapping_recv, state,
+                    NULL, NULL);
+       return;
+nomem:
+       request_error(state);
+       return;
 }
 
 static void set_hwm_recv(void *private_data, bool success)