X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib%2Fbcaps-v13.c;h=6a0a6dbaebb913f3492add951430f918b21f50a4;hb=3eb1b2279739d0f16391a3724a9897c686f030d3;hp=607d5e3bad125c532303322558b353be9481b82c;hpb=1c010b3d5c9603345a6c2f27aa5e8cab5ff6b28d;p=util-vserver.git diff --git a/util-vserver/lib/bcaps-v13.c b/util-vserver/lib/bcaps-v13.c index 607d5e3..6a0a6db 100644 --- a/util-vserver/lib/bcaps-v13.c +++ b/util-vserver/lib/bcaps-v13.c @@ -23,20 +23,68 @@ #include "vserver.h" #include "internal.h" #include +#include #include +#include #include -#define DECL(STR, VAL) { STR, sizeof(STR)-1, VAL } +#ifndef CAP_QUOTACTL +# define CAP_QUOTACTL VC_CAP_QUOTACTL +#endif + +#define DECL(VAL) { #VAL, sizeof(#VAL)-1, 1 << (CAP_ ## VAL) } static struct Mapping_uint64 const VALUES[] = { -#warning Add the 'bcap' values here + DECL(CHOWN), + DECL(DAC_OVERRIDE), + DECL(DAC_READ_SEARCH), + DECL(FOWNER), + DECL(FSETID), + DECL(KILL), + DECL(SETGID), + DECL(SETUID), + DECL(SETPCAP), + DECL(LINUX_IMMUTABLE), + DECL(NET_BIND_SERVICE), + DECL(NET_BROADCAST), + DECL(NET_ADMIN), + DECL(NET_RAW), + DECL(IPC_LOCK), + DECL(IPC_OWNER), + DECL(SYS_MODULE), + DECL(SYS_RAWIO), + DECL(SYS_CHROOT), + DECL(SYS_PTRACE), + DECL(SYS_PACCT), + DECL(SYS_ADMIN), + DECL(SYS_BOOT), + DECL(SYS_NICE), + DECL(SYS_RESOURCE), + DECL(SYS_TIME), + DECL(SYS_TTY_CONFIG), + DECL(MKNOD), + DECL(LEASE), + DECL(QUOTACTL), }; +inline static char const * +removePrefix(char const *str, size_t *len) +{ + if ((len==0 || *len==0 || *len>4) && + strncasecmp("cap_", str, 4)==0) { + if (len && *len>4) *len -= 4; + return str+4; + } + else + return str; +} + uint_least64_t vc_text2bcap(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;