summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2012-11-18 13:51:13 +0100
committerStefan Metzmacher <metze@samba.org>2012-12-03 08:48:22 +0100
commit28e7d73bdcdf1a3d588e92eee982ff01db53d65d (patch)
tree2ed0ec82b779cedb857bbe276c46675e9944af28
parentda8d0263806260fdb4973f22fc874710bd490421 (diff)
downloadsamba-28e7d73bdcdf1a3d588e92eee982ff01db53d65d.tar.gz
samba-28e7d73bdcdf1a3d588e92eee982ff01db53d65d.tar.bz2
samba-28e7d73bdcdf1a3d588e92eee982ff01db53d65d.zip
s3:winbindd: use struct unixid instead of uint64 in Sids2Xids parent<->child
This implicitly also hands the type of the resulting unix-id that the idmap backend has created back to the caller. This is important for backends that would set a broader type than the requested one, e.g. rid backend returning BOTH instead of UID or GID. Signed-off-by: Michael Adam <obnox@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
-rw-r--r--source3/librpc/idl/wbint.idl2
-rw-r--r--source3/winbindd/wb_sids2xids.c6
-rw-r--r--source3/winbindd/winbindd_dual_srv.c5
3 files changed, 8 insertions, 5 deletions
diff --git a/source3/librpc/idl/wbint.idl b/source3/librpc/idl/wbint.idl
index 159af76a82..c836f0faf2 100644
--- a/source3/librpc/idl/wbint.idl
+++ b/source3/librpc/idl/wbint.idl
@@ -53,7 +53,7 @@ interface wbint
id_type type;
uint32 domain_index;
uint32 rid;
- hyper unix_id;
+ unixid xid;
} wbint_TransID;
typedef struct {
diff --git a/source3/winbindd/wb_sids2xids.c b/source3/winbindd/wb_sids2xids.c
index 7a198c18ce..cbd4444566 100644
--- a/source3/winbindd/wb_sids2xids.c
+++ b/source3/winbindd/wb_sids2xids.c
@@ -169,7 +169,8 @@ static void wb_sids2xids_lookupsids_done(struct tevent_req *subreq)
t->type = lsa_SidType_to_id_type(n->sid_type);
t->domain_index = n->sid_index;
sid_peek_rid(&state->non_cached[i], &t->rid);
- t->unix_id = (uint64_t)-1;
+ t->xid.id = UINT32_MAX;
+ t->xid.type = t->type;
}
child = idmap_child();
@@ -246,8 +247,7 @@ NTSTATUS wb_sids2xids_recv(struct tevent_req *req,
if (state->cached[i].sid != NULL) {
xid = state->cached[i].xid;
} else {
- xid.id = state->ids.ids[num_non_cached].unix_id;
- xid.type = state->ids.ids[num_non_cached].type;
+ xid = state->ids.ids[num_non_cached].xid;
idmap_cache_set_sid2unixid(
&state->non_cached[num_non_cached],
diff --git a/source3/winbindd/winbindd_dual_srv.c b/source3/winbindd/winbindd_dual_srv.c
index 9fb29115cd..35d9451177 100644
--- a/source3/winbindd/winbindd_dual_srv.c
+++ b/source3/winbindd/winbindd_dual_srv.c
@@ -222,9 +222,12 @@ NTSTATUS _wbint_Sids2UnixIDs(struct pipes_struct *p,
struct wbint_TransID *id = &r->in.ids->ids[id_idx[j]];
if (ids[j].status != ID_MAPPED) {
+ id->xid.id = UINT32_MAX;
+ id->xid.type = ID_TYPE_NOT_SPECIFIED;
continue;
}
- id->unix_id = ids[j].xid.id;
+
+ id->xid = ids[j].xid;
}
}
status = NT_STATUS_OK;