X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Fvs_base.h;h=c49e62c01cc02cabec0a353b7636cf703e3b65bd;hb=e0ff8aa1acd079b70e796571917ae0449b7c465b;hp=ed23add3a930cf1bd475e1428375cfbc6c20e419;hpb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;p=linux-2.6.git diff --git a/include/linux/vs_base.h b/include/linux/vs_base.h index ed23add3a..c49e62c01 100644 --- a/include/linux/vs_base.h +++ b/include/linux/vs_base.h @@ -8,6 +8,9 @@ #define vx_current_xid() vx_task_xid(current) +#define current_vx_info() (current->vx_info) + + #define vx_check(c,m) __vx_check(vx_current_xid(),c,m) #define vx_weak_check(c,m) ((m) ? vx_check(c,m) : 1) @@ -15,9 +18,9 @@ /* * check current context for ADMIN/WATCH and - * optionally agains supplied argument + * optionally against supplied argument */ -static __inline__ int __vx_check(xid_t cid, xid_t id, unsigned int mode) +static inline int __vx_check(xid_t cid, xid_t id, unsigned int mode) { if (mode & VX_ARG_MASK) { if ((mode & VX_IDENT) && @@ -34,7 +37,8 @@ static __inline__ int __vx_check(xid_t cid, xid_t id, unsigned int mode) return 1; } return (((mode & VX_ADMIN) && (cid == 0)) || - ((mode & VX_WATCH) && (cid == 1))); + ((mode & VX_WATCH) && (cid == 1)) || + ((mode & VX_HOSTID) && (id == 0))); } @@ -51,6 +55,8 @@ static __inline__ int __vx_check(xid_t cid, xid_t id, unsigned int mode) #define vx_mask_mask(v,f,m) (((v) & ~(m)) | ((v) & (f) & (m))) +#define vx_check_bit(v,n) ((v) & (1LL << (n))) + /* context flags */ @@ -78,6 +84,13 @@ static __inline__ int __vx_check(xid_t cid, xid_t id, unsigned int mode) #define vx_ccaps(c) vx_info_ccaps(current->vx_info,(c)) +#define __vx_mcaps(v) ((v) ? (v)->vx_ccaps >> 32UL : ~0 ) + +#define vx_info_mcaps(v,c) (__vx_mcaps(v) & (c)) + +#define vx_mcaps(c) vx_info_mcaps(current->vx_info,(c)) + + #define vx_current_bcaps() \ (((current->vx_info) && !vx_flags(VXF_STATE_SETUP, 0)) ? \ current->vx_info->vx_bcaps : cap_bset) @@ -87,5 +100,10 @@ static __inline__ int __vx_check(xid_t cid, xid_t id, unsigned int mode) (current->vx_info && \ (current->vx_info->vx_initpid == (n))) +#define vx_capable(b,c) (capable(b) || \ + ((current->euid == 0) && vx_ccaps(c))) + +#else +#warning duplicate inclusion #endif