static bool is_base_sid(const struct auth_SidAttr *sid,
const struct dom_sid *domain_sid)
{
+ if (sid->origin == AUTH_SID_ORIGIN_BASE) {
+ goto check_domain;
+ }
+
+ if (sid->origin != AUTH_SID_ORIGIN_UNKNOWN) {
+ return false;
+ }
+
if (sid->attrs & SE_GROUP_RESOURCE) {
/*
* Resource groups don't belong in the base
return false;
}
+check_domain:
/*
* This SID belongs in the base structure only if it's in the account's
* domain.
const uint32_t allocated_resource_groups,
const enum auth_group_inclusion group_inclusion)
{
+ if (sid->origin == AUTH_SID_ORIGIN_BASE) {
+ return NT_STATUS_OK;
+ }
+ if (sid->origin == AUTH_SID_ORIGIN_EXTRA) {
+ goto store_in_extra;
+ }
+
/* See if it's a resource SID. */
if (sid->attrs & SE_GROUP_RESOURCE) {
/*
return NT_STATUS_INVALID_PARAMETER;
}
}
-
+store_in_extra:
/* Just store the SID in Extra SIDs. */
return store_extra_sid(sids,
sidcount,
user_info_dc->sids[PRIMARY_USER_SID_INDEX] = (struct auth_SidAttr) {
.sid = tmpsid,
.attrs = SE_GROUP_DEFAULT_FLAGS,
+ .origin = AUTH_SID_ORIGIN_BASE,
};
tmpsid = *base->domain_sid;
user_info_dc->sids[PRIMARY_GROUP_SID_INDEX] = (struct auth_SidAttr) {
.sid = tmpsid,
.attrs = SE_GROUP_DEFAULT_FLAGS,
+ .origin = AUTH_SID_ORIGIN_BASE,
};
user_info_dc->num_sids = PRIMARY_SIDS_COUNT;
bgrps[user_info_dc->num_sids] = (struct auth_SidAttr) {
.sid = tmpsid,
.attrs = base->groups.rids[i].attributes,
+ .origin = AUTH_SID_ORIGIN_BASE,
};
user_info_dc->num_sids++;
}
dgrps[user_info_dc->num_sids] = (struct auth_SidAttr) {
.sid = *sids[i].sid,
.attrs = sids[i].attributes,
+ .origin = AUTH_SID_ORIGIN_EXTRA,
};
user_info_dc->num_sids++;
}
rgrps[user_info_dc->num_sids] = (struct auth_SidAttr) {
.sid = tmpsid,
.attrs = rg->groups.rids[i].attributes,
+ .origin = AUTH_SID_ORIGIN_RESOURCE,
};
user_info_dc->num_sids++;
}
AUTH_EXCLUDE_RESOURCE_GROUPS = 4
} auth_group_inclusion;
+ typedef [nopush,nopull] enum {
+ AUTH_SID_ORIGIN_UNKNOWN = 0,
+ AUTH_SID_ORIGIN_BASE = 1,
+ AUTH_SID_ORIGIN_EXTRA = 2,
+ AUTH_SID_ORIGIN_RESOURCE = 3
+ } auth_sid_origin;
+
typedef [nopush,nopull] struct {
dom_sid sid;
security_GroupAttrs attrs;
+ auth_sid_origin origin;
} auth_SidAttr;
/* This is the interim product of the auth subsystem, before
#
^samba.tests.krb5.device_tests.samba.tests.krb5.device_tests.DeviceTests.test_device_info_add_transitive_domain_local_groups_to_service_compressed.ad_dc
^samba.tests.krb5.device_tests.samba.tests.krb5.device_tests.DeviceTests.test_device_info_add_transitive_domain_local_groups_to_service_uncompressed.ad_dc
-^samba.tests.krb5.device_tests.samba.tests.krb5.device_tests.DeviceTests.test_device_info_base_sid_resource_attrs_to_krbtgt.ad_dc
-^samba.tests.krb5.device_tests.samba.tests.krb5.device_tests.DeviceTests.test_device_info_base_sid_resource_attrs_to_service.ad_dc
-^samba.tests.krb5.device_tests.samba.tests.krb5.device_tests.DeviceTests.test_device_info_extra_sids_to_krbtgt.ad_dc
-^samba.tests.krb5.device_tests.samba.tests.krb5.device_tests.DeviceTests.test_device_info_extra_sids_to_service.ad_dc