proc->thread stage 4: rework the VFS and DEVICE subsystems to take thread
[dragonfly.git] / sys / kern / sysv_ipc.c
index 02b7118..95703db 100644 (file)
@@ -1,5 +1,5 @@
 /* $FreeBSD: src/sys/kern/sysv_ipc.c,v 1.13.2.2 2000/07/01 14:33:49 bsd Exp $ */
-/* $DragonFly: src/sys/kern/sysv_ipc.c,v 1.2 2003/06/17 04:28:41 dillon Exp $ */
+/* $DragonFly: src/sys/kern/sysv_ipc.c,v 1.4 2003/06/25 03:55:57 dillon Exp $ */
 /*     $NetBSD: sysv_ipc.c,v 1.7 1994/06/29 06:33:11 cgd Exp $ */
 
 /*
  */
 
 int
-ipcperm(p, perm, mode)
-       struct proc *p;
-       struct ipc_perm *perm;
-       int mode;
+ipcperm(struct proc *p, struct ipc_perm *perm, int mode)
 {
        struct ucred *cred = p->p_ucred;
 
        /* Check for user match. */
        if (cred->cr_uid != perm->cuid && cred->cr_uid != perm->uid) {
                if (mode & IPC_M)
-                       return (suser(p) == 0 ? 0 : EPERM);
+                       return (suser_cred(cred, 0) == 0 ? 0 : EPERM);
                /* Check for group match. */
                mode >>= 3;
                if (!groupmember(perm->gid, cred) &&
@@ -67,7 +64,8 @@ ipcperm(p, perm, mode)
 
        if (mode & IPC_M)
                return (0);
-       return ((mode & perm->mode) == mode || suser(p) == 0 ? 0 : EACCES);
+       return ((mode & perm->mode) == mode || 
+               suser_cred(cred, 0) == 0 ? 0 : EACCES);
 }
 
 #endif /* defined(SYSVSEM) || defined(SYSVSHM) || defined(SYSVMSG) */