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;
}
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));
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)