* XXX: proc->p_acflag to suser()
*/
+/*
+ * Returns: 0 Success
+ * EPERM
+ * EACCES
+ */
int
ipcperm(kauth_cred_t cred, struct ipc_perm *perm, int mode)
{
/* Check for group match. */
mode >>= 3;
if ((kauth_cred_ismember_gid(cred, perm->gid, &is_member) || !is_member) &&
- (kauth_cred_ismember_gid(cred, perm->cgid, &is_member) || !is_member))
+ (kauth_cred_ismember_gid(cred, perm->cgid, &is_member) || !is_member)) {
/* Check for `other' match. */
mode >>= 3;
}
+ }
if (mode & IPC_M)
return (0);
+
return ((mode & perm->mode) == mode ? 0 : EACCES);
}