Deleted Added
full compact
sysv_ipc.c (88715) sysv_ipc.c (91406)
1/* $FreeBSD: head/sys/kern/sysv_ipc.c 88715 2001-12-30 18:55:09Z alc $ */
1/* $FreeBSD: head/sys/kern/sysv_ipc.c 91406 2002-02-27 18:32:23Z jhb $ */
2/* $NetBSD: sysv_ipc.c,v 1.7 1994/06/29 06:33:11 cgd Exp $ */
3
4/*
5 * Copyright (c) 1994 Herb Peyerl <hpeyerl@novatel.ca>
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions

--- 61 unchanged lines hidden (view full) ---

71 */
72
73int
74ipcperm(td, perm, mode)
75 struct thread *td;
76 struct ipc_perm *perm;
77 int mode;
78{
2/* $NetBSD: sysv_ipc.c,v 1.7 1994/06/29 06:33:11 cgd Exp $ */
3
4/*
5 * Copyright (c) 1994 Herb Peyerl <hpeyerl@novatel.ca>
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions

--- 61 unchanged lines hidden (view full) ---

71 */
72
73int
74ipcperm(td, perm, mode)
75 struct thread *td;
76 struct ipc_perm *perm;
77 int mode;
78{
79 struct ucred *cred = td->td_proc->p_ucred;
79 struct ucred *cred = td->td_ucred;
80
81 /* Check for user match. */
82 if (cred->cr_uid != perm->cuid && cred->cr_uid != perm->uid) {
83 if (mode & IPC_M)
84 return (suser_td(td) == 0 ? 0 : EPERM);
85 /* Check for group match. */
86 mode >>= 3;
87 if (!groupmember(perm->gid, cred) &&
88 !groupmember(perm->cgid, cred))
89 /* Check for `other' match. */
90 mode >>= 3;
91 }
92
93 if (mode & IPC_M)
94 return (0);
95 return ((mode & perm->mode) == mode ||
96 suser_td(td) == 0 ? 0 : EACCES);
97}
80
81 /* Check for user match. */
82 if (cred->cr_uid != perm->cuid && cred->cr_uid != perm->uid) {
83 if (mode & IPC_M)
84 return (suser_td(td) == 0 ? 0 : EPERM);
85 /* Check for group match. */
86 mode >>= 3;
87 if (!groupmember(perm->gid, cred) &&
88 !groupmember(perm->cgid, cred))
89 /* Check for `other' match. */
90 mode >>= 3;
91 }
92
93 if (mode & IPC_M)
94 return (0);
95 return ((mode & perm->mode) == mode ||
96 suser_td(td) == 0 ? 0 : EACCES);
97}