X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib%2Fvserver.h;h=0d5e2935e6ed4e1f3d0924648559571a6e2885eb;hb=de7c77f60f210a6b06d98ad044cb6f8adb6e8732;hp=fc97570781ef5695821019e4e233d3de19dc068c;hpb=a18f4acc27eede603bbfc94a76be259dd2eaf3a0;p=util-vserver.git diff --git a/util-vserver/lib/vserver.h b/util-vserver/lib/vserver.h index fc97570..0d5e293 100644 --- a/util-vserver/lib/vserver.h +++ b/util-vserver/lib/vserver.h @@ -28,7 +28,7 @@ /** the value which is returned in error-case (no ctx found) */ #define VC_NOCTX ((xid_t)(-1)) /** the value which means a random (the next free) ctx */ -#define VC_RANDCTX ((xid_t)(-1)) +#define VC_DYNAMIC_XID ((xid_t)(-1)) /** the value which means the current ctx */ #define VC_SAMECTX ((xid_t)(-2)) @@ -64,6 +64,10 @@ # define S_CTX_INFO_ULIMIT 64 #endif +#ifndef S_CTX_INFO_NAMESPACE +# define S_CTX_INFO_NAMESPACE 128 +#endif + #define VC_CAP_CHOWN 0 #define VC_CAP_DAC_OVERRIDE 1 #define VC_CAP_DAC_READ_SEARCH 2 @@ -99,6 +103,16 @@ #define VC_IMMUTABLE_LINK_FL 0x00008000l #define VC_IMMUTABLE_ALL (VC_IMMUTABLE_LINK_FL|VC_IMMUTABLE_FILE_FL) +#define VC_IATTR_XID 0x01000000 + +#define VC_IATTR_ADMIN 0x00000001 +#define VC_IATTR_WATCH 0x00000002 +#define VC_IATTR_HIDE 0x00000004 + +#define VC_IATTR_BARRIER 0x00010000 +#define VC_IATTR_IUNLINK 0x00020000 + + #ifdef __cplusplus extern "C" { #endif @@ -108,8 +122,8 @@ extern "C" { uint32_t mask; }; - /** Returns version of the given API-category */ - int vc_get_version(int category); + /** Returns the version of the current kernel API. */ + int vc_get_version(); /** Puts current process into context , removes the given caps and * sets flags. @@ -118,16 +132,18 @@ extern "C" { * - VC_RANDCTX which means the next free context; this value can be used by * ordinary users also * See http://vserver.13thfloor.at/Stuff/Logic.txt for details */ - int vc_new_s_context(xid_t ctx, unsigned int remove_cap, unsigned int flags); + xid_t vc_new_s_context(xid_t ctx, unsigned int remove_cap, unsigned int flags); /** Sets the ipv4root information. * \precondition: nb<16 */ int vc_set_ipv4root(uint32_t bcast, size_t nb, struct vc_ip_mask_pair const *ips); + + xid_t vc_create_context(xid_t xid); + int vc_migrate_context(xid_t xid); /* rlimit related functions */ typedef uint64_t vc_limit_t; - - + struct vc_rlimit { vc_limit_t min; vc_limit_t soft; @@ -152,23 +168,77 @@ extern "C" { int vc_ctx_kill(xid_t ctx, pid_t pid, int sig); + + int vc_set_iattr(char const *filename, xid_t xid, uint32_t flags, uint32_t mask); + int vc_get_iattr(char const *filename, xid_t * /*@null@*/ xid, + uint32_t * /*@null@*/ flags, uint32_t * /*@null@*/ mask); + + struct vc_vx_info { + xid_t xid; + pid_t initpid; + }; + /** Returns the context of the given process. pid==0 means the current process. */ - xid_t vc_X_getctx(pid_t pid); + xid_t vc_get_task_xid(pid_t pid); + int vc_get_vx_info(xid_t xid, struct vc_vx_info *info); + - /** Returns the pid of the 'init' process */ - pid_t vc_X_getinitpid(pid_t pid); + typedef enum { vcVHI_CONTEXT, vcVHI_SYSNAME, vcVHI_NODENAME, + vcVHI_RELEASE, vcVHI_VERSION, vcVHI_MACHINE, + vcVHI_DOMAINNAME } vc_uts_type; + + int vc_set_vhi_name(xid_t xid, vc_uts_type type, char const *val, size_t len); + int vc_get_vhi_name(xid_t xid, vc_uts_type type, char *val, size_t len); - xid_t vc_X_get_filecontext(int fd); - int vc_X_set_filecontext(int fd, xid_t ctx); + int vc_enter_namespace(xid_t xid); + int vc_set_namespace(); + int vc_cleanup_namespace(); - int vc_X_get_ext2flags(int fd, long *flags); - int vc_X_set_ext2flags(int fd, long set_flags, long del_flags); + struct vc_ctx_flags { + uint64_t flagword; + uint64_t mask; + }; + int vc_get_flags(xid_t xid, struct vc_ctx_flags *); + int vc_set_flags(xid_t xid, struct vc_ctx_flags const *); + uint32_t vc_textlist2flag(char const *, size_t len, + char const **err_ptr, size_t *err_len); + uint32_t vc_text2flag(char const *, size_t len); + char const * vc_hiflag2text(unsigned int); + int vc_text2cap(char const *); - char const * vc_cap2text(int); + char const * vc_cap2text(unsigned int); + + inline static int vc_get_securecaps() { + return ( (1<