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