mirror of
https://github.com/samba-team/samba.git
synced 2025-08-26 01:49:31 +03:00
idmap_hash: split out a idmap_hash_id_to_sid() helper function
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15319
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
(cherry picked from commit 57150b463f
)
This commit is contained in:
committed by
Jule Anger
parent
54e872cdf0
commit
31cedf58e6
@ -183,6 +183,32 @@ done:
|
||||
/*********************************************************************
|
||||
********************************************************************/
|
||||
|
||||
static NTSTATUS idmap_hash_id_to_sid(struct sid_hash_table *hashed_domains,
|
||||
struct idmap_domain *dom,
|
||||
struct id_map *id)
|
||||
{
|
||||
uint32_t h_domain = 0, h_rid = 0;
|
||||
|
||||
id->status = ID_UNMAPPED;
|
||||
|
||||
separate_hashes(id->xid.id, &h_domain, &h_rid);
|
||||
|
||||
/*
|
||||
* If the domain hash doesn't find a SID in the table,
|
||||
* skip it
|
||||
*/
|
||||
if (hashed_domains[h_domain].sid == NULL) {
|
||||
/* keep ID_UNMAPPED */
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
id->xid.type = ID_TYPE_BOTH;
|
||||
sid_compose(id->sid, hashed_domains[h_domain].sid, h_rid);
|
||||
id->status = ID_MAPPED;
|
||||
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
static NTSTATUS unixids_to_sids(struct idmap_domain *dom,
|
||||
struct id_map **ids)
|
||||
{
|
||||
@ -199,22 +225,20 @@ static NTSTATUS unixids_to_sids(struct idmap_domain *dom,
|
||||
}
|
||||
|
||||
for (i=0; ids[i]; i++) {
|
||||
uint32_t h_domain, h_rid;
|
||||
NTSTATUS ret;
|
||||
|
||||
ids[i]->status = ID_UNMAPPED;
|
||||
ret = idmap_hash_id_to_sid(hashed_domains, dom, ids[i]);
|
||||
if (!NT_STATUS_IS_OK(ret)) {
|
||||
/* some fatal error occurred, log it */
|
||||
DBG_NOTICE("Unexpected error resolving an ID "
|
||||
"(%d): %s\n", ids[i]->xid.id,
|
||||
nt_errstr(ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
separate_hashes(ids[i]->xid.id, &h_domain, &h_rid);
|
||||
|
||||
/* If the domain hash doesn't find a SID in the table,
|
||||
skip it */
|
||||
|
||||
if (!hashed_domains[h_domain].sid)
|
||||
continue;
|
||||
|
||||
ids[i]->xid.type = ID_TYPE_BOTH;
|
||||
sid_compose(ids[i]->sid, hashed_domains[h_domain].sid, h_rid);
|
||||
ids[i]->status = ID_MAPPED;
|
||||
num_mapped++;
|
||||
if (ids[i]->status == ID_MAPPED) {
|
||||
num_mapped++;
|
||||
}
|
||||
}
|
||||
|
||||
if (num_tomap == num_mapped) {
|
||||
|
Reference in New Issue
Block a user