X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fsrc%2Fvattribute.c;h=566125b9a3e7e5607ac883cd5567b5f84d0ba1b0;hb=a917f24ef7b003dcef54a3db2644cf9cb4bc2db2;hp=cf882e4a6aed59d24fd7cb832b832ddefedd04c4;hpb=e73b17e825176eb6f82d028d6dca28ab7595ae0a;p=util-vserver.git diff --git a/util-vserver/src/vattribute.c b/util-vserver/src/vattribute.c index cf882e4..566125b 100644 --- a/util-vserver/src/vattribute.c +++ b/util-vserver/src/vattribute.c @@ -70,6 +70,9 @@ showHelp(int fd, char const *cmd, int res) WRITE_MSG(fd, " --set [--xid ] [--bcap [~!]] [--ccap [~!]] [--flag [~!]] [--secure] -- [ *]\n" "\n" + " --bcap ... system capability to be added\n" + " --cap ... context capability to be added\n" + "\n" "Please report bugs to " PACKAGE_BUGREPORT "\n"); exit(res); @@ -87,7 +90,7 @@ showVersion() } static void -setFlags(char const *str, struct vc_ctx_flags *flags) +parseFlags(char const *str, struct vc_ctx_flags *flags) { struct vc_err_listparser err; int rc; @@ -103,7 +106,7 @@ setFlags(char const *str, struct vc_ctx_flags *flags) } static void -setBCaps(char const *str, struct vc_ctx_caps *caps) +parseBCaps(char const *str, struct vc_ctx_caps *caps) { struct vc_err_listparser err; int rc; @@ -119,7 +122,7 @@ setBCaps(char const *str, struct vc_ctx_caps *caps) } static void -setCCaps(char const *str, struct vc_ctx_caps *caps) +parseCCaps(char const *str, struct vc_ctx_caps *caps) { struct vc_err_listparser err; int rc; @@ -135,12 +138,13 @@ setCCaps(char const *str, struct vc_ctx_caps *caps) } static void -setSecure(struct vc_ctx_flags UNUSED * flags, - struct vc_ctx_caps UNUSED * caps) +parseSecure(struct vc_ctx_flags UNUSED * flags, + struct vc_ctx_caps UNUSED * caps) { - caps->ccaps = ~vc_get_securecaps(); - caps->cmask = ~0; - caps->bcaps = ~0; + caps->ccaps = ~0ull; + caps->cmask = ~0ull; + caps->bcaps = ~vc_get_insecurecaps(); + caps->bmask = ~0ull; } int main(int argc, char *argv[]) @@ -148,7 +152,7 @@ int main(int argc, char *argv[]) struct Arguments args = { .xid = VC_NOCTX, .flags = { .flagword = 0, .mask = 0 }, - .caps = { .bcaps = 0, .ccaps = 0, .cmask = 0 }, + .caps = { .bcaps = 0, .bmask = 0,.ccaps = 0, .cmask = 0 }, }; while (1) { @@ -159,11 +163,11 @@ int main(int argc, char *argv[]) case CMD_HELP : showHelp(1, argv[0], 0); case CMD_VERSION : showVersion(); case CMD_SET : break; // default op currently - case CMD_XID : args.xid = atoi(optarg); break; - case CMD_FLAG : setFlags(optarg, &args.flags); break; - case CMD_CCAP : setCCaps(optarg, &args.caps); break; - case CMD_BCAP : setBCaps(optarg, &args.caps); break; - case CMD_SECURE : setSecure(&args.flags, &args.caps); break; + case CMD_XID : args.xid = Evc_xidopt2xid(optarg,true); break; + case CMD_FLAG : parseFlags(optarg, &args.flags); break; + case CMD_CCAP : parseCCaps(optarg, &args.caps); break; + case CMD_BCAP : parseBCaps(optarg, &args.caps); break; + case CMD_SECURE : parseSecure(&args.flags, &args.caps); break; default : WRITE_MSG(2, "Try '"); WRITE_STR(2, argv[0]); @@ -175,10 +179,12 @@ int main(int argc, char *argv[]) if (args.xid==VC_NOCTX) args.xid = Evc_get_task_xid(0); - if (vc_set_flags(args.xid, &args.flags)==-1) - perror("vc_set_flags()"); - else if (vc_set_ccaps(args.xid, &args.caps)==-1) - perror("vc_set_ccaps()"); + if ((args.caps.cmask || args.caps.bmask) && + vc_set_ccaps(args.xid, &args.caps)==-1) + perror(ENSC_WRAPPERS_PREFIX "vc_set_ccaps()"); + else if (args.flags.mask && + vc_set_flags(args.xid, &args.flags)==-1) + perror(ENSC_WRAPPERS_PREFIX "vc_set_flags()"); else if (optind