+int mbr_check_membership_refresh(uuid_t user, uuid_t group, int* ismember)
+{
+ struct kauth_identity_extlookup request;
+ kern_return_t result;
+ int error = 0;
+
+ request.el_seqno = 1; // used as byte order field
+ request.el_flags = KAUTH_EXTLOOKUP_VALID_UGUID | KAUTH_EXTLOOKUP_VALID_GGUID |
+ KAUTH_EXTLOOKUP_WANT_MEMBERSHIP | (1<<15);
+ memcpy(&request.el_uguid, user, sizeof(guid_t));
+ memcpy(&request.el_gguid, group, sizeof(guid_t));
+ result = _mbr_DoMembershipCall(GetServerPort(), &request);
+ if (result != KERN_SUCCESS)
+ return EIO;
+
+ if ((request.el_flags & KAUTH_EXTLOOKUP_VALID_MEMBERSHIP) != 0)
+ {
+ *ismember = ((request.el_flags & KAUTH_EXTLOOKUP_ISMEMBER) != 0);
+ }
+ else
+ error = ENOENT;
+
+ return error;
+}
+