rewrote some parts to cope better with '-o' options (required for -bme
[util-vserver.git] / util-vserver / lib / vserver.h
index dcf2e6b..57946fb 100644 (file)
 #if defined(__GNUC__)
 #  define VC_ATTR_UNUSED                __attribute__((__unused__))
 #  define VC_ATTR_NORETURN              __attribute__((__noreturn__))
-#  if __GNUC__>3 || (__GNUC__==3 && __GNUC_MINOR__>=3)
+#  define VC_ATTR_CONST                        __attribute__((__const__))
+#  if __GNUC__*0x10000 + __GNUC_MINOR__*0x100 + __GNUC_PATCHLEVEL__ >= 0x30300
 #    define VC_ATTR_NONNULL(ARGS)      __attribute__((__nonnull__ ARGS))
 #    define VC_ATTR_ALWAYSINLINE        __attribute__((__always_inline__))
 #  else
 #    define VC_ATTR_NONNULL(ARGS)
 #    define VC_ATTR_ALWAYSINLINE
 #  endif
-#  if __GNUC__>3
+#  if __GNUC__*0x10000 + __GNUC_MINOR__*0x100 + __GNUC_PATCHLEVEL__ >= 0x30303
 #    define VC_ATTR_PURE               __attribute__((__pure__))
 #  else
 #    define VC_ATTR_PURE
@@ -51,6 +52,7 @@
 #  define VC_ATTR_NORETURN
 #  define VC_ATTR_ALWAYSINLINE
 #  define VC_ATTR_PURE
+#  define VC_ATTR_CONST
 #endif
 #endif // IS_DOXYGEN
 
@@ -218,6 +220,14 @@ extern "C" {
   int  vc_set_ipv4root(uint32_t  bcast, size_t nb,
                        struct vc_ip_mask_pair const *ips) VC_ATTR_NONNULL((3));
 
+    /** \brief  Returns the value of NB_IPV4ROOT.
+     *  \ingroup helper
+     *
+     *  This function returns the value of NB_IPV4ROOT which was used when the
+     *  library was built, but \b not the value which is used by the currently
+     *  running kernel. */
+  size_t       vc_get_nb_ipv4root() VC_ATTR_CONST VC_ATTR_PURE;
+
     /** \brief   Creates a context without starting it.
      *  \ingroup syscalls
      *
@@ -248,8 +258,7 @@ extern "C" {
      *                        modified by the vc_set_rlimit() operation.
      *
      *  Else, the interpretation of the value depends on the corresponding
-     *  resource; it might be bytes, pages, seconds or litres of beer.
-     */
+     *  resource; it might be bytes, pages, seconds or litres of beer. */
   typedef uint_least64_t       vc_limit_t;
 
     /** \brief  The limits of a resources.
@@ -347,6 +356,8 @@ extern "C" {
   int          vc_get_vhi_name(xid_t xid, vc_uts_type type,
                                char *val, size_t len)       VC_ATTR_NONNULL((3));
 
+    /** Returns true iff \a xid is a dynamic xid */
+  bool         vc_is_dynamic_xid(xid_t xid);
 
   int          vc_enter_namespace(xid_t xid);
   int          vc_set_namespace();
@@ -359,6 +370,7 @@ extern "C" {
   
   struct  vc_ctx_caps {
       uint_least64_t   bcaps;
+      uint_least64_t   bmask;
       uint_least64_t   ccaps;
       uint_least64_t   cmask;
   };
@@ -396,26 +408,17 @@ extern "C" {
                                            struct vc_err_listparser *err);
   uint_least32_t       vc_text2flag_compat(char const *, size_t len);
   char const *         vc_hiflag2text_compat(uint_least32_t);
-  
-  int          vc_text2cap(char const *);
-  char const * vc_cap2text(unsigned int);
-
-  inline static uint_least32_t vc_get_securecaps() {
-    return ( (1<<VC_CAP_LINUX_IMMUTABLE) | (1<<VC_CAP_NET_BROADCAST) |
-            (1<<VC_CAP_NET_ADMIN) | (1<<VC_CAP_NET_RAW) |
-            (1<<VC_CAP_IPC_LOCK) | (1<<VC_CAP_IPC_OWNER) |
-            (1<<VC_CAP_SYS_MODULE) | (1<<VC_CAP_SYS_RAWIO) |
-            (1<<VC_CAP_SYS_PACCT) | (1<<VC_CAP_SYS_ADMIN) |
-            (1<<VC_CAP_SYS_BOOT) | (1<<VC_CAP_SYS_NICE) |
-            (1<<VC_CAP_SYS_RESOURCE) | (1<<VC_CAP_SYS_TIME) |
-            (1<<VC_CAP_MKNOD) | (1<<VC_CAP_QUOTACTL) );
-  }
 
-  inline static int            vc_setfilecontext(char const *filename, xid_t xid) {
+  uint_least32_t       vc_get_insecurecaps() VC_ATTR_CONST;
+  int                  vc_text2cap(char const *);
+  char const *         vc_cap2text(unsigned int);
+
+
+  inline static int    vc_setfilecontext(char const *filename, xid_t xid) {
     return vc_set_iattr(filename, xid, 0, VC_IATTR_XID);
   }
   
-  inline static xid_t          vc_getfilecontext(char const *filename) {
+  inline static xid_t  vc_getfilecontext(char const *filename) {
     xid_t      res;
     if (vc_get_iattr(filename, &res, 0,0)==-1) return VC_NOCTX;
     return res;
@@ -436,12 +439,13 @@ extern "C" {
   
   typedef enum { vcFEATURE_VKILL,  vcFEATURE_IATTR,   vcFEATURE_RLIMIT,
                 vcFEATURE_COMPAT, vcFEATURE_MIGRATE, vcFEATURE_NAMESPACE,
-                vcFEATURE_SCHED,  vcFEATURE_VINFO,   vcFEATURE_VHI }
+                vcFEATURE_SCHED,  vcFEATURE_VINFO,   vcFEATURE_VHI,
+                 vcFEATURE_VSHELPER }
     vcFeatureSet;
 
-  bool         vc_isSupported(vcFeatureSet);
+  bool         vc_isSupported(vcFeatureSet) VC_ATTR_CONST;
   bool         vc_isSupportedString(char const *);
-  
+
   /* The management part */
 
 #define VC_LIMIT_VSERVER_NAME_LEN      1024
@@ -451,6 +455,10 @@ extern "C" {
                 vcCFG_RECENT_SHORT,
                 vcCFG_RECENT_FULL }            vcCfgStyle;
 
+
+  /** Maps an xid given at '--xid' options to an xid_t */
+  xid_t                vc_xidopt2xid(char const *, bool honor_static, char const **err_info);
+
   vcCfgStyle   vc_getVserverCfgStyle(char const *id);
   
   /** Resolves the name of the vserver. The result will be allocated and must