linux-old/ipc/util.c
<<
>>
Prefs
   1/*
   2 * linux/ipc/util.c
   3 * Copyright (C) 1992 Krishna Balasubramanian
   4 */
   5
   6#include <linux/config.h>
   7#include <linux/errno.h>
   8#include <asm/segment.h>
   9#include <linux/sched.h>
  10#include <linux/mm.h>
  11#include <linux/sem.h>
  12#include <linux/msg.h>
  13#include <linux/shm.h>
  14#include <linux/stat.h>
  15
  16#if defined(CONFIG_SYSVIPC) || defined(CONFIG_KERNELD)
  17
  18extern void sem_init (void), msg_init (void), shm_init (void);
  19
  20void ipc_init (void)
  21{
  22        sem_init();
  23        msg_init();
  24        shm_init();
  25        return;
  26}
  27
  28/* 
  29 * Check user, group, other permissions for access
  30 * to ipc resources. return 0 if allowed
  31 */
  32int ipcperms (struct ipc_perm *ipcp, short flag)
  33{       /* flag will most probably be 0 or S_...UGO from <linux/stat.h> */
  34        int requested_mode, granted_mode;
  35
  36        if (suser())
  37                return 0;
  38        requested_mode = (flag >> 6) | (flag >> 3) | flag;
  39        granted_mode = ipcp->mode;
  40        if (current->euid == ipcp->cuid || current->euid == ipcp->uid)
  41                granted_mode >>= 6;
  42        else if (in_group_p(ipcp->cgid) || in_group_p(ipcp->gid))
  43                granted_mode >>= 3;
  44        /* is there some bit set in requested_mode but not in granted_mode? */
  45        if (requested_mode & ~granted_mode & 0007)
  46                return -1;
  47        return 0;
  48}
  49
  50#else
  51/*
  52 * Dummy functions when SYSV IPC isn't configured
  53 */
  54
  55void sem_exit (void)
  56{
  57    return;
  58}
  59
  60int shm_swap (int prio, unsigned long limit)
  61{
  62    return 0;
  63}
  64
  65asmlinkage int sys_semget (key_t key, int nsems, int semflg)
  66{
  67        return -ENOSYS;
  68}
  69
  70asmlinkage int sys_semop (int semid, struct sembuf *sops, unsigned nsops)
  71{
  72        return -ENOSYS;
  73}
  74
  75asmlinkage int sys_semctl (int semid, int semnum, int cmd, union semun arg)
  76{
  77        return -ENOSYS;
  78}
  79
  80asmlinkage int sys_msgget (key_t key, int msgflg)
  81{
  82        return -ENOSYS;
  83}
  84
  85asmlinkage int sys_msgsnd (int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg)
  86{
  87        return -ENOSYS;
  88}
  89
  90asmlinkage int sys_msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp,
  91                       int msgflg)
  92{
  93        return -ENOSYS;
  94}
  95
  96asmlinkage int sys_msgctl (int msqid, int cmd, struct msqid_ds *buf)
  97{
  98        return -ENOSYS;
  99}
 100
 101asmlinkage int sys_shmget (key_t key, int size, int flag)
 102{
 103        return -ENOSYS;
 104}
 105
 106asmlinkage int sys_shmat (int shmid, char *shmaddr, int shmflg, ulong *addr)
 107{
 108        return -ENOSYS;
 109}
 110
 111asmlinkage int sys_shmdt (char *shmaddr)
 112{
 113        return -ENOSYS;
 114}
 115
 116asmlinkage int sys_shmctl (int shmid, int cmd, struct shmid_ds *buf)
 117{
 118        return -ENOSYS;
 119}
 120
 121void kerneld_exit(void)
 122{
 123}
 124#endif /* CONFIG_SYSVIPC */
 125
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.