Annotation of XNU/bsd/kern/sysv_ipc.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*     $NetBSD: sysv_ipc.c,v 1.7 1994/06/29 06:33:11 cgd Exp $ */
                     23: 
                     24: /*
                     25:  * Copyright (c) 1994 Herb Peyerl <[email protected]>
                     26:  * All rights reserved.
                     27:  *
                     28:  * Redistribution and use in source and binary forms, with or without
                     29:  * modification, are permitted provided that the following conditions
                     30:  * are met:
                     31:  * 1. Redistributions of source code must retain the above copyright
                     32:  *    notice, this list of conditions and the following disclaimer.
                     33:  * 2. Redistributions in binary form must reproduce the above copyright
                     34:  *    notice, this list of conditions and the following disclaimer in the
                     35:  *    documentation and/or other materials provided with the distribution.
                     36:  * 3. All advertising materials mentioning features or use of this software
                     37:  *    must display the following acknowledgement:
                     38:  *      This product includes software developed by Herb Peyerl.
                     39:  * 4. The name of Herb Peyerl may not be used to endorse or promote products
                     40:  *    derived from this software without specific prior written permission.
                     41:  *
                     42:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     43:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     44:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     45:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     46:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     47:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     48:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     49:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     50:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     51:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     52:  */
                     53: 
                     54: 
                     55: #include <sys/param.h>
                     56: #include <sys/ipc.h>
                     57: #include <sys/ucred.h>
                     58: 
                     59: 
                     60: /*
                     61:  * Check for ipc permission
                     62:  *
                     63:  * XXX: Should pass proc argument so that we can pass 
                     64:  * XXX: proc->p_acflag to suser()
                     65:  */
                     66: 
                     67: int
                     68: ipcperm(cred, perm, mode)
                     69:        struct ucred *cred;
                     70:        struct ipc_perm *perm;
                     71:        int mode;
                     72: {
                     73: 
                     74:        if (suser(cred, (u_short *)NULL))
                     75:                return (0);
                     76: 
                     77:        /* Check for user match. */
                     78:        if (cred->cr_uid != perm->cuid && cred->cr_uid != perm->uid) {
                     79:                if (mode & IPC_M)
                     80:                        return (EPERM);
                     81:                /* Check for group match. */
                     82:                mode >>= 3;
                     83:                if (!groupmember(perm->gid, cred) &&
                     84:                    !groupmember(perm->cgid, cred))
                     85:                        /* Check for `other' match. */
                     86:                        mode >>= 3;
                     87:        }
                     88: 
                     89:        if (mode & IPC_M)
                     90:                return (0);
                     91:        return ((mode & perm->mode) == mode ? 0 : EACCES);
                     92: }
                     93: 
                     94: 
                     95: 
                     96: 
                     97: /*
                     98:  * SYSVSEM stubs
                     99:  */
                    100: 
                    101: int
                    102: semsys(p, uap)
                    103:        struct proc *p;
                    104: #if 0
                    105:        struct semsys_args *uap;
                    106: #else
                    107:        void *uap;
                    108: #endif
                    109: {
                    110:        return(EOPNOTSUPP);
                    111: };
                    112: 
                    113: int
                    114: semconfig(p, uap)
                    115:        struct proc *p;
                    116: #if 0
                    117:        struct semconfig_args *uap;
                    118: #else
                    119:        void *uap;
                    120: #endif
                    121: {
                    122:        return(EOPNOTSUPP);
                    123: };
                    124: 
                    125: int
                    126: semctl(p, uap)
                    127:        struct proc *p;
                    128: #if 0
                    129:        register struct semctl_args *uap;
                    130: #else
                    131:        void *uap;
                    132: #endif
                    133: {
                    134:        return(EOPNOTSUPP);
                    135: };
                    136: 
                    137: int
                    138: semget(p, uap)
                    139:        struct proc *p;
                    140: #if 0
                    141:        register struct semget_args *uap;
                    142: #else
                    143:        void *uap;
                    144: #endif
                    145: {
                    146:        return(EOPNOTSUPP);
                    147: };
                    148: 
                    149: int
                    150: semop(p, uap)
                    151:        struct proc *p;
                    152: #if 0
                    153:        register struct semop_args *uap;
                    154: #else
                    155:        void *uap;
                    156: #endif
                    157: {
                    158:        return(EOPNOTSUPP);
                    159: };
                    160: 
                    161: /* called from kern_exit.c */
                    162: void
                    163: semexit(p)
                    164:        struct proc *p;
                    165: {
                    166:        return;
                    167: }
                    168: 
                    169: 
                    170: 
                    171: 
                    172: /*
                    173:  * SYSVMSG stubs
                    174:  */
                    175: 
                    176: int
                    177: msgsys(p, uap)
                    178:        struct proc *p;
                    179:        /* XXX actually varargs. */
                    180: #if 0
                    181:        struct msgsys_args *uap;
                    182: #else
                    183:        void *uap;
                    184: #endif
                    185: {
                    186:        return(EOPNOTSUPP);
                    187: };
                    188: 
                    189: int
                    190: msgctl(p, uap)
                    191:        struct proc *p;
                    192: #if 0
                    193:        register struct msgctl_args *uap;
                    194: #else
                    195:        void *uap;
                    196: #endif
                    197: {
                    198:        return(EOPNOTSUPP);
                    199: };
                    200: 
                    201: int
                    202: msgget(p, uap)
                    203:        struct proc *p;
                    204: #if 0
                    205:        register struct msgget_args *uap;
                    206: #else
                    207:        void *uap;
                    208: #endif
                    209: {
                    210:        return(EOPNOTSUPP);
                    211: };
                    212: 
                    213: int
                    214: msgsnd(p, uap)
                    215:        struct proc *p;
                    216: #if 0
                    217:        register struct msgsnd_args *uap;
                    218: #else
                    219:        void *uap;
                    220: #endif
                    221: {
                    222:        return(EOPNOTSUPP);
                    223: };
                    224: 
                    225: int
                    226: msgrcv(p, uap)
                    227:        struct proc *p;
                    228: #if 0
                    229:        register struct msgrcv_args *uap;
                    230: #else
                    231:        void *uap;
                    232: #endif
                    233: {
                    234:        return(EOPNOTSUPP);
                    235: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.