X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Fvserver%2Fxid.h;h=3472defa59967145ffd927c1b44f014b78dd80b2;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=ba52c2588965a8b421e6dc798964a83907f1264e;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/include/linux/vserver/xid.h b/include/linux/vserver/xid.h index ba52c2588..3472defa5 100644 --- a/include/linux/vserver/xid.h +++ b/include/linux/vserver/xid.h @@ -1,15 +1,21 @@ -#ifndef _LINUX_XID_H_ -#define _LINUX_XID_H_ +#ifndef _VX_XID_H +#define _VX_XID_H + + +#define XID_TAG(in) (!(in) || \ + (((struct inode *)in)->i_sb && \ + (((struct inode *)in)->i_sb->s_flags & MS_TAGXID))) + #ifdef CONFIG_INOXID_NONE #define MAX_UID 0xFFFFFFFF #define MAX_GID 0xFFFFFFFF -#define INOXID_XID(uid, gid, xid) (0) +#define INOXID_XID(tag, uid, gid, xid) (0) -#define XIDINO_UID(uid, xid) (uid) -#define XIDINO_GID(gid, xid) (gid) +#define XIDINO_UID(tag, uid, xid) (uid) +#define XIDINO_GID(tag, gid, xid) (gid) #endif @@ -19,37 +25,57 @@ #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 INOXID_XID(tag, uid, gid, xid) \ + ((tag) ? (((gid) >> 16) & 0xFFFF) : 0) +#define XIDINO_UID(tag, uid, xid) (uid) +#define XIDINO_GID(tag, gid, xid) \ + ((tag) ? (((gid) & 0xFFFF) | ((xid) << 16)) : (gid)) #endif -#ifdef CONFIG_INOXID_GID24 +#ifdef CONFIG_INOXID_UGID24 #define MAX_UID 0x00FFFFFF #define MAX_GID 0x00FFFFFF -#define INOXID_XID(uid, gid, xid) ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) +#define INOXID_XID(tag, uid, gid, xid) \ + ((tag) ? ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) : 0) -#define XIDINO_UID(uid, xid) (((uid) & 0xFFFFFF) | (((xid) & 0xFF00) << 16)) -#define XIDINO_GID(gid, xid) (((gid) & 0xFFFFFF) | (((xid) & 0x00FF) << 24)) +#define XIDINO_UID(tag, uid, xid) \ + ((tag) ? (((uid) & 0xFFFFFF) | (((xid) & 0xFF00) << 16)) : (uid)) +#define XIDINO_GID(tag, gid, xid) \ + ((tag) ? (((gid) & 0xFFFFFF) | (((xid) & 0x00FF) << 24)) : (gid)) #endif -#ifdef CONFIG_INOXID_GID32 +#ifdef CONFIG_INOXID_UID16 + +#define MAX_UID 0x0000FFFF +#define MAX_GID 0xFFFFFFFF + +#define INOXID_XID(tag, uid, gid, xid) \ + ((tag) ? ((uid) >> 16) & 0xFFFF) : 0) + +#define XIDINO_UID(tag, uid, xid) \ + ((tag) ? (((uid) & 0xFFFF) | ((xid) << 16)) : (uid)) +#define XIDINO_GID(tag, gid, xid) (gid) + +#endif + + +#ifdef CONFIG_INOXID_INTERN #define MAX_UID 0xFFFFFFFF #define MAX_GID 0xFFFFFFFF -#define INOXID_XID(uid, gid, xid) (xid) +#define INOXID_XID(tag, uid, gid, xid) \ + ((tag) ? (xid) : 0) -#define XIDINO_UID(uid, xid) (uid) -#define XIDINO_GID(gid, xid) (gid) +#define XIDINO_UID(tag, uid, xid) (uid) +#define XIDINO_GID(tag, gid, xid) (gid) #endif @@ -59,16 +85,19 @@ #define MAX_UID 0xFFFFFFFF #define MAX_GID 0xFFFFFFFF -#define INOXID_XID(uid, gid, xid) (0) +#define INOXID_XID(tag, uid, gid, xid) (0) -#define XIDINO_UID(uid, xid) (uid) -#define XIDINO_GID(gid, xid) (gid) +#define XIDINO_UID(tag, uid, xid) (uid) +#define XIDINO_GID(tag, gid, xid) (gid) #endif -#define INOXID_UID(uid, gid) ((uid) & MAX_UID) -#define INOXID_GID(uid, gid) ((gid) & MAX_GID) +#define INOXID_UID(tag, uid, gid) \ + ((tag) ? ((uid) & MAX_UID) : (uid)) +#define INOXID_GID(tag, uid, gid) \ + ((tag) ? ((gid) & MAX_GID) : (gid)) + static inline uid_t vx_map_uid(uid_t uid) { @@ -91,4 +120,4 @@ static inline gid_t vx_map_gid(gid_t gid) #define FIOC_SETXIDJ _IOW('x', 3, long) #endif -#endif /* _LINUX_XID_H_ */ +#endif /* _VX_XID_H */