|
|
1.1 root 1: /*
2: * Inter-Process Communication common access routine.
3: *
4: * $Log: ipc.c,v $
5: * Revision 2.2 93/07/26 15:28:59 nigel
6: * Nigel's R80
7: *
8: * Revision 1.3 93/04/14 10:11:48 root
9: * r75
10: *
11: * Revision 1.1 88/03/24 17:05:02 src
12: * Initial revision
13: *
14: */
15: #include <sys/coherent.h>
16: #include <sys/ipc.h>
17:
18: /*
19: * Determine Inter-Process Communication Access Permissions.
20: *
21: * Input: p = pointer to inter-process communication permission struct.
22: *
23: * Action: If super user, permissions are 0600.
24: * If uid is that of the creator or owner of the message id,
25: * use user permissions.
26: * If gid is that of the creator or owner of the message id,
27: * use group permissions.
28: * Otherwise, use others permissions.
29: *
30: * Output: 0600 = Read/Alter permission.
31: * 0400 = Read permission.
32: * 0200 = Alter permission.
33: * 0 = No permission.
34: */
35: int
36: ipcaccess(p)
37: register struct ipc_perm * p;
38: {
39: if (u.u_uid == 0)
40: return 0600;
41:
42: if ((u.u_uid == p->uid) || (u.u_uid == p->cuid))
43: return p->mode & 0600;
44:
45: if ((u.u_gid == p->gid) || (u.u_gid == p->cgid))
46: return (p->mode << 3) & 0600;
47:
48: return (p->mode << 6) & 0600;
49: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.