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