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