#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
# define VC_ATTR_NORETURN
# define VC_ATTR_ALWAYSINLINE
# define VC_ATTR_PURE
+# define VC_ATTR_CONST
#endif
#endif // IS_DOXYGEN
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
*
* 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.
struct vc_ctx_caps {
uint_least64_t bcaps;
+ uint_least64_t bmask;
uint_least64_t ccaps;
uint_least64_t cmask;
};
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;
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
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