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} |