mirror of
https://github.com/samba-team/samba.git
synced 2025-03-23 06:50:21 +03:00
s3:auth: fill the sids array of the info3 in wbcAuthUserInfo_to_netr_SamInfo3() (bug #8739)
Originally, only the rid array was filled and foreign domain sids were omitted. Pair-Programmed-With: Michael Adam <obnox@samba.org> metze Autobuild-User: Stefan Metzmacher <metze@samba.org> Autobuild-Date: Thu Feb 2 12:59:32 CET 2012 on sn-devel-104
This commit is contained in:
parent
adbab7710d
commit
dab7b0e717
@ -545,6 +545,48 @@ static NTSTATUS wbcsids_to_samr_RidWithAttributeArray(
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
static NTSTATUS wbcsids_to_netr_SidAttrArray(
|
||||
const struct dom_sid *domain_sid,
|
||||
const struct wbcSidWithAttr *sids,
|
||||
size_t num_sids,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
struct netr_SidAttr **_info3_sids,
|
||||
uint32_t *info3_num_sids)
|
||||
{
|
||||
unsigned int i, j = 0;
|
||||
struct netr_SidAttr *info3_sids;
|
||||
|
||||
info3_sids = talloc_array(mem_ctx, struct netr_SidAttr, num_sids);
|
||||
if (info3_sids == NULL) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
/* a wbcDomainSid is the same as a dom_sid */
|
||||
for (i = 0; i < num_sids; i++) {
|
||||
const struct dom_sid *sid;
|
||||
|
||||
sid = (const struct dom_sid *)&sids[i].sid;
|
||||
|
||||
if (dom_sid_in_domain(domain_sid, sid)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
info3_sids[j].sid = dom_sid_dup(info3_sids, sid);
|
||||
if (info3_sids[j].sid == NULL) {
|
||||
talloc_free(info3_sids);
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
info3_sids[j].attributes = SE_GROUP_MANDATORY |
|
||||
SE_GROUP_ENABLED_BY_DEFAULT |
|
||||
SE_GROUP_ENABLED;
|
||||
j++;
|
||||
}
|
||||
|
||||
*info3_num_sids = j;
|
||||
*_info3_sids = info3_sids;
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
struct netr_SamInfo3 *wbcAuthUserInfo_to_netr_SamInfo3(TALLOC_CTX *mem_ctx,
|
||||
const struct wbcAuthUserInfo *info)
|
||||
{
|
||||
@ -627,6 +669,17 @@ struct netr_SamInfo3 *wbcAuthUserInfo_to_netr_SamInfo3(TALLOC_CTX *mem_ctx,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
status = wbcsids_to_netr_SidAttrArray(&domain_sid,
|
||||
&info->sids[1],
|
||||
info->num_sids - 1,
|
||||
info3,
|
||||
&info3->sids,
|
||||
&info3->sidcount);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
TALLOC_FREE(info3);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
info3->base.user_flags = info->user_flags;
|
||||
memcpy(info3->base.key.key, info->user_session_key, 16);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user