From: Daniel Hokka Zakrisson Date: Thu, 23 Nov 2006 18:30:29 +0000 (+0000) Subject: Support the prefixes for all types of flags and capabilities. X-Git-Tag: release-0.30.212~30 X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9fd81ffc8ad3800fe8e309cd9121b33d4cafae3d;p=util-vserver.git Support the prefixes for all types of flags and capabilities. Add NXF_INFO_PRIVATE. Add NXF_HIDE_NETIF. Add aliases for the legacy flags/caps so using the kernel's names will work. Add alias for VXC_SET_RLIMIT. git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2393 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- diff --git a/lib/ccaps-v13.c b/lib/ccaps-v13.c index 7d457e7..2c34d3f 100644 --- a/lib/ccaps-v13.c +++ b/lib/ccaps-v13.c @@ -25,13 +25,14 @@ #include #include +#include #include #define DECL(STR, VAL) { STR, sizeof(STR)-1, VAL } static struct Mapping_uint64 const VALUES[] = { DECL("set_utsname", VC_VXC_SET_UTSNAME), - DECL("rlimit", VC_VXC_SET_RLIMIT), + DECL("set_rlimit", VC_VXC_SET_RLIMIT), DECL("raw_icmp", VC_VXC_RAW_ICMP), DECL("syslog", VC_VXC_SYSLOG), DECL("secure_mount", VC_VXC_SECURE_MOUNT), @@ -46,12 +47,26 @@ static struct Mapping_uint64 const VALUES[] = { DECL("icmp", VC_VXC_RAW_ICMP), DECL("ping", VC_VXC_RAW_ICMP), DECL("utsname", VC_VXC_SET_UTSNAME), + DECL("rlimit", VC_VXC_SET_RLIMIT), }; +inline static char const * +removePrefix(char const *str, size_t *len) +{ + if ((len==0 || *len==0 || *len>4) && + strncasecmp("vxc_", str, 4)==0) { + if (len && *len>4) *len -= 4; + return str+4; + } + else + return str; +} + uint_least64_t vc_text2ccap(char const *str, size_t len) { - ssize_t idx = utilvserver_value2text_uint64(str, len, + char const * tmp = removePrefix(str, &len); + ssize_t idx = utilvserver_value2text_uint64(tmp, len, VALUES, DIM_OF(VALUES)); if (idx==-1) return 0; else return VALUES[idx].val; diff --git a/lib/cflags-v13.c b/lib/cflags-v13.c index 89fca5f..e9c6a9d 100644 --- a/lib/cflags-v13.c +++ b/lib/cflags-v13.c @@ -25,6 +25,7 @@ #include #include +#include #include #define DECL(STR, VAL) { STR, sizeof(STR)-1, VAL } @@ -68,12 +69,37 @@ static struct Mapping_uint64 const VALUES[] = { // Some pseudo flags DECL("secure", VC_VXF_HIDE_NETIF), DECL("default", VC_VXF_VIRT_UPTIME), + + // Aliases for the legacy flags + DECL("info_lock", VC_VXF_INFO_LOCK), + DECL("info_nproc", VC_VXF_INFO_NPROC), + DECL("info_private", VC_VXF_INFO_PRIVATE), + DECL("info_init", VC_VXF_INFO_INIT), + + DECL("info_hideinfo", VC_VXF_INFO_HIDEINFO), + DECL("info_ulimit", VC_VXF_INFO_ULIMIT), + DECL("info_namespace", VC_VXF_INFO_NAMESPACE), + // 2.6 name + DECL("info_nspace", VC_VXF_INFO_NAMESPACE), }; +inline static char const * +removePrefix(char const *str, size_t *len) +{ + if ((len==0 || *len==0 || *len>4) && + strncasecmp("vxf_", str, 4)==0) { + if (len && *len>4) *len -= 4; + return str+4; + } + else + return str; +} + uint_least64_t vc_text2cflag(char const *str, size_t len) { - ssize_t idx = utilvserver_value2text_uint64(str, len, + char const * tmp = removePrefix(str, &len); + ssize_t idx = utilvserver_value2text_uint64(tmp, len, VALUES, DIM_OF(VALUES)); if (idx==-1) return 0; else return VALUES[idx].val; diff --git a/lib/ncaps-net.c b/lib/ncaps-net.c index 9154cb7..be8ce9c 100644 --- a/lib/ncaps-net.c +++ b/lib/ncaps-net.c @@ -25,6 +25,7 @@ #include #include +#include #include #define DECL(STR, VAL) { STR, sizeof(STR)-1, VAL } @@ -34,10 +35,23 @@ static struct Mapping_uint64 const VALUES[] = { DECL("", 0) }; +inline static char const * +removePrefix(char const *str, size_t *len) +{ + if ((len==0 || *len==0 || *len>4) && + strncasecmp("nxc_", str, 4)==0) { + if (len && *len>4) *len -= 4; + return str+4; + } + else + return str; +} + uint_least64_t vc_text2ncap(char const *str, size_t len) { - ssize_t idx = utilvserver_value2text_uint64(str, len, + char const * tmp = removePrefix(str, &len); + ssize_t idx = utilvserver_value2text_uint64(tmp, len, VALUES, DIM_OF(VALUES)); if (idx==-1) return 0; else return VALUES[idx].val; diff --git a/lib/nflags-net.c b/lib/nflags-net.c index b7be887..a5e2ab8 100644 --- a/lib/nflags-net.c +++ b/lib/nflags-net.c @@ -25,24 +25,45 @@ #include #include +#include #include #define DECL(STR, VAL) { STR, sizeof(STR)-1, VAL } static struct Mapping_uint64 const VALUES[] = { DECL("lock", VC_NXF_INFO_LOCK), + DECL("private", VC_NXF_INFO_PRIVATE), + + DECL("hide_netif", VC_NXF_HIDE_NETIF), DECL("state_setup", VC_NXF_STATE_SETUP), DECL("state_admin", VC_NXF_STATE_ADMIN), DECL("sc_helper", VC_NXF_SC_HELPER), DECL("persistent", VC_NXF_PERSISTENT), + + // Aliases for the legacy flags + DECL("info_lock", VC_NXF_INFO_LOCK), + DECL("info_private", VC_NXF_INFO_PRIVATE), }; +inline static char const * +removePrefix(char const *str, size_t *len) +{ + if ((len==0 || *len==0 || *len>4) && + strncasecmp("nxf_", str, 4)==0) { + if (len && *len>4) *len -= 4; + return str+4; + } + else + return str; +} + uint_least64_t vc_text2nflag(char const *str, size_t len) { - ssize_t idx = utilvserver_value2text_uint64(str, len, + char const * tmp = removePrefix(str, &len); + ssize_t idx = utilvserver_value2text_uint64(tmp, len, VALUES, DIM_OF(VALUES)); if (idx==-1) return 0; else return VALUES[idx].val; diff --git a/lib/vserver.h b/lib/vserver.h index a265d30..20b35f0 100644 --- a/lib/vserver.h +++ b/lib/vserver.h @@ -230,6 +230,9 @@ // the network flags #define VC_NXF_INFO_LOCK 0x00000001ull +#define VC_NXF_INFO_PRIVATE 0x00000008ull + +#define VC_NXF_HIDE_NETIF 0x02000000ull #define VC_NXF_STATE_SETUP (1ULL<<32) #define VC_NXF_STATE_ADMIN (1ULL<<34)