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