From ac97f151ed18351bf648b00e358cfb127f261826 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 23 Mar 2012 17:30:34 +1100 Subject: s3-passdb: Use struct unixid in sids_to_unix_ids This avoids the union in the struct wbcUnixId and moves us to using only struct unixid internally. Andrew Bartlett Signed-off-by: Michael Adam --- source3/passdb/lookup_sid.c | 48 +++++++++++++++++++++++++++++---------------- source3/passdb/lookup_sid.h | 2 +- 2 files changed, 32 insertions(+), 18 deletions(-) (limited to 'source3/passdb') diff --git a/source3/passdb/lookup_sid.c b/source3/passdb/lookup_sid.c index a70d31791f..a4af677714 100644 --- a/source3/passdb/lookup_sid.c +++ b/source3/passdb/lookup_sid.c @@ -1253,7 +1253,7 @@ void gid_to_sid(struct dom_sid *psid, gid_t gid) } bool sids_to_unix_ids(const struct dom_sid *sids, uint32_t num_sids, - struct wbcUnixId *ids) + struct unixid *ids) { struct wbcDomainSid *wbc_sids = NULL; struct wbcUnixId *wbc_ids = NULL; @@ -1274,29 +1274,29 @@ bool sids_to_unix_ids(const struct dom_sid *sids, uint32_t num_sids, if (sid_peek_check_rid(&global_sid_Unix_Users, &sids[i], &rid)) { - ids[i].type = WBC_ID_TYPE_UID; - ids[i].id.uid = rid; + ids[i].type = ID_TYPE_UID; + ids[i].id = rid; continue; } if (sid_peek_check_rid(&global_sid_Unix_Groups, &sids[i], &rid)) { - ids[i].type = WBC_ID_TYPE_GID; - ids[i].id.gid = rid; + ids[i].type = ID_TYPE_GID; + ids[i].id = rid; continue; } - if (idmap_cache_find_sid2uid(&sids[i], &ids[i].id.uid, + if (idmap_cache_find_sid2uid(&sids[i], &ids[i].id, &expired) && !expired) { - ids[i].type = WBC_ID_TYPE_UID; + ids[i].type = ID_TYPE_UID; continue; } - if (idmap_cache_find_sid2gid(&sids[i], &ids[i].id.gid, + if (idmap_cache_find_sid2gid(&sids[i], &ids[i].id, &expired) && !expired) { - ids[i].type = WBC_ID_TYPE_GID; + ids[i].type = ID_TYPE_GID; continue; } - ids[i].type = WBC_ID_TYPE_NOT_SPECIFIED; + ids[i].type = ID_TYPE_NOT_SPECIFIED; memcpy(&wbc_sids[num_not_cached], &sids[i], ndr_size_dom_sid(&sids[i], 0)); num_not_cached += 1; @@ -1320,22 +1320,36 @@ bool sids_to_unix_ids(const struct dom_sid *sids, uint32_t num_sids, num_not_cached = 0; for (i=0; i id is a union anyway */ + ids[i].type = wbc_ids[num_not_cached].type; + ids[i].id = wbc_ids[num_not_cached].id.gid; + break; + } num_not_cached += 1; } } for (i=0; i