minor optimizations
[util-vserver.git] / util-vserver / kernel / xid.h
index 2edba25..ba52c25 100644 (file)
@@ -1,64 +1,94 @@
-#ifndef _LINUX_VXID_H_
-#define _LINUX_VXID_H_
+#ifndef _LINUX_XID_H_
+#define _LINUX_XID_H_
 
 #ifdef CONFIG_INOXID_NONE
 
-#define        INOXID_UID(uid, gid)            (uid)
-#define        INOXID_GID(uid, gid)            (gid)
-#define        INOXID_XID(uid, gid, xid)       (0)
+#define MAX_UID                0xFFFFFFFF
+#define MAX_GID                0xFFFFFFFF
 
-#define        XIDINO_UID(uid, xid)            (uid)
-#define        XIDINO_GID(gid, xid)            (gid)
+#define INOXID_XID(uid, gid, xid)      (0)
 
-#define        MAX_UID         0xFFFFFFFF
-#define        MAX_GID         0xFFFFFFFF
+#define XIDINO_UID(uid, xid)           (uid)
+#define XIDINO_GID(gid, xid)           (gid)
 
 #endif
 
+
 #ifdef CONFIG_INOXID_GID16
 
-#define        INOXID_UID(uid, gid)            (uid)
-#define        INOXID_GID(uid, gid)            ((gid) & 0xFFFF)
-#define        INOXID_XID(uid, gid, xid)       (((gid) >> 16) & 0xFFFF)
+#define MAX_UID                0xFFFFFFFF
+#define MAX_GID                0x0000FFFF
+
+#define INOXID_XID(uid, gid, xid)      (((gid) >> 16) & 0xFFFF)
 
-#define        XIDINO_UID(uid, xid)            (uid)
-#define        XIDINO_GID(gid, xid)            (((gid) & 0xFFFF) | ((xid) << 16))
+#define XIDINO_UID(uid, xid)           (uid)
+#define XIDINO_GID(gid, xid)           (((gid) & 0xFFFF) | ((xid) << 16))
 
-#define        MAX_UID         0xFFFFFFFF
-#define        MAX_GID         0x0000FFFF
 
 #endif
 
+
 #ifdef CONFIG_INOXID_GID24
 
-#define        INOXID_UID(uid, gid)            ((uid) & 0xFFFFFF)
-#define        INOXID_GID(uid, gid)            ((gid) & 0xFFFFFF)
-#define        INOXID_XID(uid, gid, xid)       ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF))
+#define MAX_UID                0x00FFFFFF
+#define MAX_GID                0x00FFFFFF
 
-#define        XIDINO_UID(uid, xid)            (((uid) & 0xFFFFFF) | (((xid) & 0xFF00) << 16))
-#define        XIDINO_GID(gid, xid)            (((gid) & 0xFFFFFF) | (((xid) & 0x00FF) << 24))
+#define INOXID_XID(uid, gid, xid)      ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF))
 
-#define        MAX_UID         0x00FFFFFF
-#define        MAX_GID         0x00FFFFFF
+#define XIDINO_UID(uid, xid)           (((uid) & 0xFFFFFF) | (((xid) & 0xFF00) << 16))
+#define XIDINO_GID(gid, xid)           (((gid) & 0xFFFFFF) | (((xid) & 0x00FF) << 24))
 
 #endif
 
+
 #ifdef CONFIG_INOXID_GID32
 
-#define        INOXID_UID(uid, gid)            (uid)
-#define        INOXID_GID(uid, gid)            (gid)
-#define        INOXID_XID(uid, gid, xid)       (xid)
+#define MAX_UID                0xFFFFFFFF
+#define MAX_GID                0xFFFFFFFF
+
+#define INOXID_XID(uid, gid, xid)      (xid)
+
+#define XIDINO_UID(uid, xid)           (uid)
+#define XIDINO_GID(gid, xid)           (gid)
+
+#endif
+
+
+#ifdef CONFIG_INOXID_RUNTIME
 
-#define        XIDINO_UID(uid, xid)            (uid)
-#define        XIDINO_GID(gid, xid)            (gid)
+#define MAX_UID                0xFFFFFFFF
+#define MAX_GID                0xFFFFFFFF
 
-#define        MAX_UID         0xFFFFFFFF
-#define        MAX_GID         0xFFFFFFFF
+#define INOXID_XID(uid, gid, xid)      (0)
+
+#define XIDINO_UID(uid, xid)           (uid)
+#define XIDINO_GID(gid, xid)           (gid)
 
 #endif
 
-#define        FIOC_GETXID     _IOR('x', 1, long)
-#define        FIOC_SETXID     _IOW('x', 2, long)
-#define        FIOC_SETXIDJ    _IOW('x', 3, long)
 
+#define INOXID_UID(uid, gid)           ((uid) & MAX_UID)
+#define INOXID_GID(uid, gid)           ((gid) & MAX_GID)
+
+static inline uid_t vx_map_uid(uid_t uid)
+{
+       if ((uid > MAX_UID) && (uid != -1))
+               uid = -2;
+       return (uid & MAX_UID);
+}
+
+static inline gid_t vx_map_gid(gid_t gid)
+{
+       if ((gid > MAX_GID) && (gid != -1))
+               gid = -2;
+       return (gid & MAX_GID);
+}
+
+
+#ifdef CONFIG_VSERVER_LEGACY           
+#define FIOC_GETXID    _IOR('x', 1, long)
+#define FIOC_SETXID    _IOW('x', 2, long)
+#define FIOC_SETXIDJ   _IOW('x', 3, long)
 #endif
+
+#endif /* _LINUX_XID_H_ */