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