struct passwd *user, /* I - System user info */
const char *groupname) /* I - Group name */
{
- int i; /* Looping var */
- struct group *group; /* System group info */
- char junk[33]; /* MD5 password (not used) */
+ int i; /* Looping var */
+ struct group *group; /* System group info */
+ char junk[33]; /* MD5 password (not used) */
#ifdef HAVE_MBR_UID_TO_UUID
- uuid_t useruuid, /* UUID for username */
- groupuuid; /* UUID for groupname */
- int is_member; /* True if user is a member of group */
+ uuid_t useruuid, /* UUID for username */
+ groupuuid; /* UUID for groupname */
+ int is_member; /* True if user is a member of group */
#endif /* HAVE_MBR_UID_TO_UUID */
* Check group membership through MacOS X membership API...
*/
- if (group)
- {
- if (mbr_gid_to_uuid(group->gr_gid, groupuuid))
- uuid_clear(groupuuid);
- }
- else if (groupname[0] == '#')
+ if (!mbr_uid_to_uuid(user->pw_uid, useruuid))
{
- if (uuid_parse((char *)groupname + 1, groupuuid))
- uuid_clear(groupuuid);
- }
- else
- uuid_clear(groupuuid);
+ if (group)
+ {
+ /*
+ * Map group name to UUID and check membership...
+ */
+
+ if (!mbr_gid_to_uuid(group->gr_gid, groupuuid))
+ if (!mbr_check_membership(useruuid, groupuuid, &is_member))
+ if (is_member)
+ return (1);
+ }
+ else if (groupname[0] == '#')
+ {
+ /*
+ * Use UUID directly and check for equality (user UUID) and
+ * membership (group UUID)...
+ */
- if (user && !uuid_is_null(groupuuid))
- if (!mbr_uid_to_uuid(user->pw_uid, useruuid))
- if (!mbr_check_membership(useruuid, groupuuid, &is_member))
- if (is_member)
+ if (!uuid_parse((char *)groupname + 1, groupuuid))
+ {
+ if (!uuid_compare(useruuid, groupuuid))
return (1);
+ else if (!mbr_check_membership(useruuid, groupuuid, &is_member))
+ if (is_member)
+ return (1);
+ }
+
+ return (0);
+ }
+ }
+ else if (groupname[0] == '#')
+ return (0);
#endif /* HAVE_MBR_UID_TO_UUID */
/*