X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib%2Fvserver.h;h=48b2c6892ba542004a37d115a85b935c287f3e11;hb=41eca8fc83aeeb5a6b63a034405d848690d2c04d;hp=785aaba0190ae2a6d9b3c1123a0c6adda4e1530a;hpb=c1445645517145b2aa4d704e05164aa912b06b90;p=util-vserver.git diff --git a/util-vserver/lib/vserver.h b/util-vserver/lib/vserver.h index 785aaba..48b2c68 100644 --- a/util-vserver/lib/vserver.h +++ b/util-vserver/lib/vserver.h @@ -1,32 +1,41 @@ -// $Id$ - -// Copyright (C) 2003 Enrico Scholz -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or (at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +/* $Id$ + +* Copyright (C) 2003 Enrico Scholz +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ #ifndef H_VSERVER_SYSCALL_H #define H_VSERVER_SYSCALL_H #include #include +#include #include -#ifndef VC_NOCTX -# define VC_NOCTX ((ctx_t)(-1)) -#endif +/** 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)) +/** the value which means the current ctx */ +#define VC_SAMECTX ((xid_t)(-2)) + +#define VC_LIM_INFINITY (~0ULL) +#define VC_LIM_KEEP (~1ULL) + #ifndef S_CTX_INFO_LOCK # define S_CTX_INFO_LOCK 1 #endif @@ -84,8 +93,11 @@ #define VC_CAP_SYS_TTY_CONFIG 26 #define VC_CAP_MKNOD 27 #define VC_CAP_LEASE 28 -#define VC_CAP_OPENDEV 29 +#define VC_CAP_QUOTACTL 29 +#define VC_IMMUTABLE_FILE_FL 0x00000010l +#define VC_IMMUTABLE_LINK_FL 0x00008000l +#define VC_IMMUTABLE_ALL (VC_IMMUTABLE_LINK_FL|VC_IMMUTABLE_FILE_FL) #ifdef __cplusplus extern "C" { @@ -102,27 +114,119 @@ extern "C" { /** Puts current process into context , removes the given caps and * sets flags. * Special values for ctx are - * - -2 which means the current context (just for changing caps and flags) - * - -1 which means the next free context; this value can be used by - * ordinary users also */ - int vc_new_s_context(ctx_t ctx, unsigned int remove_cap, unsigned int flags); + * - VC_SAMECTX which means the current context (just for changing caps and flags) + * - 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); /** Sets the ipv4root information. * \precondition: nb<16 */ int vc_set_ipv4root(uint32_t bcast, size_t nb, struct vc_ip_mask_pair const *ips); - int vc_chrootsafe(char const *dir); + /* rlimit related functions */ + typedef uint64_t vc_limit_t; + + + struct vc_rlimit { + vc_limit_t min; + vc_limit_t soft; + vc_limit_t hard; + }; + + struct vc_rlimit_mask { + uint32_t min; + uint32_t soft; + uint32_t hard; + }; + + int vc_get_rlimit(xid_t ctx, int resource, struct vc_rlimit *lim); + int vc_set_rlimit(xid_t ctx, int resource, struct vc_rlimit const *lim); + int vc_get_rlimit_mask(xid_t ctx, struct vc_rlimit_mask *lim); + + + /** sends a signal to a context/pid + Special values for pid are: + * -1 which means every process in ctx except the init-process + * 0 which means every process in ctx inclusive the init-process */ + int vc_ctx_kill(xid_t ctx, pid_t pid, int sig); /** Returns the context of the given process. pid==0 means the current process. */ - ctx_t vc_X_getctx(pid_t pid); + xid_t vc_X_getctx(pid_t pid); /** Returns the pid of the 'init' process */ pid_t vc_X_getinitpid(pid_t pid); + xid_t vc_X_get_filecontext(int fd); + int vc_X_set_filecontext(int fd, xid_t ctx); + + int vc_X_get_ext2flags(int fd, long *flags); + int vc_X_set_ext2flags(int fd, long set_flags, long del_flags); + + int vc_text2cap(char const *); char const * vc_cap2text(int); + + inline static int vc_get_securecaps() { + return ( (1<