/* See if 2 SIDs are in the same domain this just compares the leading sub-auths */ int dom_sid_compare_domain(const struct dom_sid *sid1, const struct dom_sid *sid2) { int n, i; n = MIN(sid1->num_auths, sid2->num_auths); for (i = n-1; i >= 0; --i) if (sid1->sub_auths[i] != sid2->sub_auths[i]) return sid1->sub_auths[i] - sid2->sub_auths[i]; return dom_sid_compare_auth(sid1, sid2); }
int dom_sid_compare(const struct dom_sid *sid1, const struct dom_sid *sid2) { int i; if (sid1 == sid2) return 0; if (!sid1) return -1; if (!sid2) return 1; /* Compare most likely different rids, first: i.e start at end */ if (sid1->num_auths != sid2->num_auths) return sid1->num_auths - sid2->num_auths; for (i = sid1->num_auths-1; i >= 0; --i) if (sid1->sub_auths[i] != sid2->sub_auths[i]) return sid1->sub_auths[i] - sid2->sub_auths[i]; return dom_sid_compare_auth(sid1, sid2); }
/* return true if the 2nd sid is in the domain given by the first sid */ bool dom_sid_in_domain(const struct dom_sid *domain_sid, const struct dom_sid *sid) { int i; if (!domain_sid || !sid) { return false; } if (domain_sid->num_auths > sid->num_auths) { return false; } for (i = domain_sid->num_auths-1; i >= 0; --i) { if (domain_sid->sub_auths[i] != sid->sub_auths[i]) { return false; } } return dom_sid_compare_auth(domain_sid, sid) == 0; }