return ret;
}
+
+struct id_map **id_map_ptrs_init(TALLOC_CTX *mem_ctx, size_t num_ids)
+{
+ struct id_map **ptrs;
+ struct id_map *maps;
+ struct dom_sid *sids;
+ size_t i;
+
+ ptrs = talloc_array(mem_ctx, struct id_map *, num_ids+1);
+ if (ptrs == NULL) {
+ return NULL;
+ }
+ maps = talloc_array(ptrs, struct id_map, num_ids);
+ if (maps == NULL) {
+ TALLOC_FREE(ptrs);
+ return NULL;
+ }
+ sids = talloc_zero_array(ptrs, struct dom_sid, num_ids);
+ if (sids == NULL) {
+ TALLOC_FREE(ptrs);
+ return NULL;
+ }
+
+ for (i=0; i<num_ids; i++) {
+ maps[i] = (struct id_map) { .sid = &sids[i] };
+ ptrs[i] = &maps[i];
+ }
+ ptrs[num_ids] = NULL;
+
+ return ptrs;
+}
struct wbint_TransID *ids;
uint32_t num_ids;
- struct id_map *id_maps = NULL;
struct id_map **id_map_ptrs = NULL;
- struct dom_sid *sids = NULL;
struct idmap_domain *dom;
NTSTATUS status = NT_STATUS_NO_MEMORY;
return NT_STATUS_OK;
}
- id_maps = talloc_array(talloc_tos(), struct id_map, num_ids);
- if (id_maps == NULL) {
- goto nomem;
- }
- id_map_ptrs = talloc_array(talloc_tos(), struct id_map *, num_ids+1);
+ id_map_ptrs = id_map_ptrs_init(talloc_tos(), num_ids);
if (id_map_ptrs == NULL) {
goto nomem;
}
- sids = talloc_array(talloc_tos(), struct dom_sid, num_ids);
- if (sids == NULL) {
- goto nomem;
- }
/*
* Convert the input data into a list of id_map structs
*/
for (i=0; i<num_ids; i++) {
+ struct id_map *m = id_map_ptrs[i];
- sid_compose(&sids[i], d->sid, ids[i].rid);
-
- id_maps[i] = (struct id_map) {
- .sid = &sids[i],
- .xid.type = ids[i].type,
- .status = ID_UNKNOWN
- };
-
- id_map_ptrs[i] = &id_maps[i];
+ sid_compose(m->sid, d->sid, ids[i].rid);
+ m->status = ID_UNKNOWN;
+ m->xid = (struct unixid) { .type = ids[i].type };
}
- id_map_ptrs[num_ids] = NULL;
status = dom->methods->sids_to_unixids(dom, id_map_ptrs);
*/
for (i=0; i<num_ids; i++) {
+ struct id_map *m = id_map_ptrs[i];
- if (id_maps[i].status == ID_MAPPED) {
- ids[i].xid = id_maps[i].xid;
+ if (m->status == ID_MAPPED) {
+ ids[i].xid = m->xid;
} else {
ids[i].xid.id = UINT32_MAX;
ids[i].xid.type = ID_TYPE_NOT_SPECIFIED;
nomem:
status = NT_STATUS_NO_MEMORY;
done:
- TALLOC_FREE(id_maps);
TALLOC_FREE(id_map_ptrs);
- TALLOC_FREE(sids);
return status;
}