vserver 1.9.5.x5
[linux-2.6.git] / include / linux / vserver / xid.h
1 #ifndef _VX_XID_H
2 #define _VX_XID_H
3
4 #ifndef CONFIG_VSERVER
5 #warning config options missing
6 #endif
7
8 #define XID_TAG(in)     (!(in) || \
9         (((struct inode *)in)->i_sb && \
10         (((struct inode *)in)->i_sb->s_flags & MS_TAGXID)))
11
12
13 #ifdef CONFIG_INOXID_NONE
14
15 #define MAX_UID         0xFFFFFFFF
16 #define MAX_GID         0xFFFFFFFF
17
18 #define INOXID_XID(tag, uid, gid, xid)  (0)
19
20 #define XIDINO_UID(tag, uid, xid)       (uid)
21 #define XIDINO_GID(tag, gid, xid)       (gid)
22
23 #endif
24
25
26 #ifdef CONFIG_INOXID_GID16
27
28 #define MAX_UID         0xFFFFFFFF
29 #define MAX_GID         0x0000FFFF
30
31 #define INOXID_XID(tag, uid, gid, xid)  \
32         ((tag) ? (((gid) >> 16) & 0xFFFF) : 0)
33
34 #define XIDINO_UID(tag, uid, xid)       (uid)
35 #define XIDINO_GID(tag, gid, xid)       \
36         ((tag) ? (((gid) & 0xFFFF) | ((xid) << 16)) : (gid))
37
38 #endif
39
40
41 #ifdef CONFIG_INOXID_UGID24
42
43 #define MAX_UID         0x00FFFFFF
44 #define MAX_GID         0x00FFFFFF
45
46 #define INOXID_XID(tag, uid, gid, xid)  \
47         ((tag) ? ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) : 0)
48
49 #define XIDINO_UID(tag, uid, xid)       \
50         ((tag) ? (((uid) & 0xFFFFFF) | (((xid) & 0xFF00) << 16)) : (uid))
51 #define XIDINO_GID(tag, gid, xid)       \
52         ((tag) ? (((gid) & 0xFFFFFF) | (((xid) & 0x00FF) << 24)) : (gid))
53
54 #endif
55
56
57 #ifdef CONFIG_INOXID_UID16
58
59 #define MAX_UID         0x0000FFFF
60 #define MAX_GID         0xFFFFFFFF
61
62 #define INOXID_XID(tag, uid, gid, xid)  \
63         ((tag) ? (((uid) >> 16) & 0xFFFF) : 0)
64
65 #define XIDINO_UID(tag, uid, xid)       \
66         ((tag) ? (((uid) & 0xFFFF) | ((xid) << 16)) : (uid))
67 #define XIDINO_GID(tag, gid, xid)       (gid)
68
69 #endif
70
71
72 #ifdef CONFIG_INOXID_INTERN
73
74 #define MAX_UID         0xFFFFFFFF
75 #define MAX_GID         0xFFFFFFFF
76
77 #define INOXID_XID(tag, uid, gid, xid)  \
78         ((tag) ? (xid) : 0)
79
80 #define XIDINO_UID(tag, uid, xid)       (uid)
81 #define XIDINO_GID(tag, gid, xid)       (gid)
82
83 #endif
84
85
86 #ifdef CONFIG_INOXID_RUNTIME
87
88 #define MAX_UID         0xFFFFFFFF
89 #define MAX_GID         0xFFFFFFFF
90
91 #define INOXID_XID(tag, uid, gid, xid)  (0)
92
93 #define XIDINO_UID(tag, uid, xid)       (uid)
94 #define XIDINO_GID(tag, gid, xid)       (gid)
95
96 #endif
97
98
99 #define INOXID_UID(tag, uid, gid)       \
100         ((tag) ? ((uid) & MAX_UID) : (uid))
101 #define INOXID_GID(tag, uid, gid)       \
102         ((tag) ? ((gid) & MAX_GID) : (gid))
103
104
105 static inline uid_t vx_map_uid(uid_t uid)
106 {
107         if ((uid > MAX_UID) && (uid != -1))
108                 uid = -2;
109         return (uid & MAX_UID);
110 }
111
112 static inline gid_t vx_map_gid(gid_t gid)
113 {
114         if ((gid > MAX_GID) && (gid != -1))
115                 gid = -2;
116         return (gid & MAX_GID);
117 }
118
119
120 #ifdef  CONFIG_VSERVER_LEGACY
121 #define FIOC_GETXID     _IOR('x', 1, long)
122 #define FIOC_SETXID     _IOW('x', 2, long)
123 #define FIOC_SETXIDJ    _IOW('x', 3, long)
124 #endif
125
126 int vx_parse_xid(char *string, xid_t *xid, int remove);
127 void vx_propagate_xid(struct nameidata *nd, struct inode *inode);
128
129 #endif /* _VX_XID_H */