WRITE_MSG(fd,
" --set [--xid <xid>] [--bcap [~!]<cap>] [--ccap [~!]<cap>] [--flag [~!]<flag>] [--secure] -- [<program> <args>*]\n"
"\n"
+ " --bcap <cap> ... system capability to be added\n"
+ " --cap <cap> ... context capability to be added\n"
+ "\n"
"Please report bugs to " PACKAGE_BUGREPORT "\n");
exit(res);
}
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;
- rc = vc_list2flag(str,0, &err, flags);
+ rc = vc_list2cflag(str,0, &err, flags);
if (rc==-1) {
WRITE_MSG(2, "Unknown flag '");
- write(2, err.ptr, err.len);
+ Vwrite(2, err.ptr, err.len);
WRITE_MSG(2, "'\n");
exit(wrapper_exit_code);
}
}
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;
if (rc==-1) {
WRITE_MSG(2, "Unknown bcap '");
- write(2, err.ptr, err.len);
+ Vwrite(2, err.ptr, err.len);
WRITE_MSG(2, "'\n");
exit(wrapper_exit_code);
}
}
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;
if (rc==-1) {
WRITE_MSG(2, "Unknown ccap '");
- write(2, err.ptr, err.len);
+ Vwrite(2, err.ptr, err.len);
WRITE_MSG(2, "'\n");
exit(wrapper_exit_code);
}
}
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 = ~vc_get_insecureccaps();
+ caps->cmask = ~0ull;
+ caps->bcaps = ~vc_get_insecurebcaps();
+ caps->bmask = ~0ull;
+
+ // TODO: generalize this
+ flags->flagword = VC_VXF_HIDE_NETIF;
+ flags->mask = VC_VXF_HIDE_NETIF;
}
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) {
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]);
if (args.xid==VC_NOCTX) args.xid = Evc_get_task_xid(0);
- if (vc_set_ccaps(args.xid, &args.caps)==-1)
+ if ((args.caps.cmask || args.caps.bmask) &&
+ vc_set_ccaps(args.xid, &args.caps)==-1)
perror(ENSC_WRAPPERS_PREFIX "vc_set_ccaps()");
- else if (vc_set_flags(args.xid, &args.flags)==-1)
+ else if (args.flags.mask &&
+ vc_set_cflags(args.xid, &args.flags)==-1)
perror(ENSC_WRAPPERS_PREFIX "vc_set_flags()");
else if (optind<argc)
EexecvpD(argv[optind], argv+optind);