showHelp(int fd, char const *cmd, int res)
{
VSERVER_DECLARE_CMD(cmd);
+
+#if !defined(VC_ENABLE_API_COMPAT) && !defined(VC_ENABLE_API_LEGACY)
+ WRITE_MSG(2, "ERROR: tools were built without legacy API support; capchroot will not work!\n\n");
+#endif
+
WRITE_MSG(fd, "Usage: ");
WRITE_STR(fd, cmd);
WRITE_MSG(fd,
exit(0);
}
-static void
+static UNUSED void
setUser(char const *user)
{
struct passwd *p = 0;
}
}
+#if defined(VC_ENABLE_API_COMPAT) || defined(VC_ENABLE_API_LEGACY)
if (optind==argc)
WRITE_MSG(2, "No directory specified; try '--help' for more information\n");
else if (optind+1==argc)
setUser(suid_user);
EexecvpD(argv[optind+1], argv+optind+1);
}
-
+#else
+ WRITE_MSG(2, "capchroot: tools were built without legacy API support; can not continue\n");
+#endif
+
return EXIT_FAILURE;
}
showHelp(int fd, char const *cmd, int res)
{
VSERVER_DECLARE_CMD(cmd);
+
+#if !defined(VC_ENABLE_API_COMPAT) && !defined(VC_ENABLE_API_LEGACY)
+ WRITE_MSG(2, "ERROR: tools were built without legacy API support; chcontext will not work!\n\n");
+#endif
WRITE_MSG(fd, "Usage: ");
WRITE_STR(fd, cmd);
exit(0);
}
+#if defined(VC_ENABLE_API_COMPAT) || defined(VC_ENABLE_API_LEGACY)
+
static inline void
setCap(char const *str, uint32_t *add_caps, uint32_t *remove_caps)
{
#include "context-sync.hc"
+#endif
+
+
int main (int argc, char *argv[])
{
struct Arguments args = {
.hostname = 0,
.domainname = 0
};
+
+#if defined(VC_ENABLE_API_COMPAT) || defined(VC_ENABLE_API_LEGACY)
xid_t newctx;
int xflags;
int p[2][2];
pid_t pid;
+#endif
global_args = &args;
signal(SIGCHLD, SIG_DFL);
case CMD_DOMAINNAME : args.domainname = optarg; break;
case CMD_HOSTNAME : args.hostname = optarg; break;
+#if defined(VC_ENABLE_API_COMPAT) || defined(VC_ENABLE_API_LEGACY)
case CMD_CAP :
setCap(optarg, &args.add_caps, &args.remove_caps);
break;
}
args.ctxs[args.nbctx++] = Evc_xidopt2xid(optarg, true);
break;
-
+#else
+ case CMD_CAP :
+ case CMD_SECURE :
+ case CMD_FLAG :
+ case CMD_CTX : break;
+#endif
default :
WRITE_MSG(2, "Try '");
}
}
+#if defined(VC_ENABLE_API_COMPAT) || defined(VC_ENABLE_API_LEGACY)
if (optind>=argc) {
WRITE_MSG(2, "No command given; use '--help' for more information.\n");
exit(255);
waitOnSync(pid, p, args.ctxs[0]!=VC_DYNAMIC_XID);
return EXIT_SUCCESS;
+#else
+ WRITE_MSG(2, "chcontext: tools were built without legacy API support; can not continue\n");
+ return EXIT_FAILURE;
+#endif
}
+#if defined(VC_ENABLE_API_COMPAT) || defined(VC_ENABLE_API_LEGACY)
+
#ifdef ENSC_TESTSUITE
#define FLAG_TEST(STR,EXP) \
{ \
CAP_TEST("!CAP_CHOWN", 0, 1);
}
#endif
+
+#else
+void test() {}
+#endif
static void
showHelp(int fd, char const *cmd, int res)
{
+#if !defined(VC_ENABLE_API_COMPAT) && !defined(VC_ENABLE_API_LEGACY)
+ WRITE_MSG(2, "ERROR: tools were built without legacy API support; reducecap will not work!\n\n");
+#endif
+
WRITE_MSG(fd, "Usage:\n ");
WRITE_STR(fd, cmd);
WRITE_MSG(fd,
printReducecap(&user);
}
+#if defined(VC_ENABLE_API_COMPAT) || defined(VC_ENABLE_API_LEGACY)
+
static uint32_t
getCap(char const *cap)
{
return (1<<bit);
}
+#endif
+
int main (int argc, char *argv[])
{
uint32_t remove = 0;
switch (c) {
case CMD_HELP : showHelp(1, argv[0], 0);
case CMD_VERSION : showVersion();
- case CMD_SECURE : remove = vc_get_insecurebcaps(); break;
case CMD_SHOW : do_show = true; break;
case CMD_PID : pid = atoi(optarg); break;
+#if defined(VC_ENABLE_API_COMPAT) || defined(VC_ENABLE_API_LEGACY)
+ case CMD_SECURE : remove = vc_get_insecurebcaps(); break;
case CMD_CAP : remove = getCap(optarg); break;
case CMD_FLAG : {
struct vc_err_listparser err;
}
break;
}
+#else
+ case CMD_SECURE :
+ case CMD_CAP :
+ case CMD_FLAG : flags = 0; remove = 0; break;
+#endif
}
}
if (do_show && optind==argc)
show(pid);
+#if defined(VC_ENABLE_API_COMPAT) || defined(VC_ENABLE_API_LEGACY)
else {
Evc_new_s_context(VC_SAMECTX, remove, flags);
if (do_show) show(pid);
WRITE_MSG(2, "Executing\n");
Eexecvp(argv[optind], argv+optind);
}
-
+#else
+ else if (do_show)
+ show(pid);
+ else {
+ WRITE_MSG(2, "reducecap: tools were built without legacy API support; can not continue\n");
+ exit(wrapper_exit_code);
+ }
+#endif
+
return EXIT_SUCCESS;
}