(struct pakfire* pakfire, void* data, int priority, const char* line, const size_t length);
enum pakfire_jail_exec_flags {
- PAKFIRE_JAIL_HAS_NETWORKING = (1 << 0),
- PAKFIRE_JAIL_NOENT_OK = (1 << 1),
- PAKFIRE_JAIL_HAS_LOOP_DEVICES = (1 << 2),
+ PAKFIRE_JAIL_PTY_FORWARDING = (1 << 0),
+ PAKFIRE_JAIL_HAS_NETWORKING = (1 << 1),
+ PAKFIRE_JAIL_NOENT_OK = (1 << 2),
+ PAKFIRE_JAIL_HAS_LOOP_DEVICES = (1 << 3),
};
int pakfire_jail_exec(
// Run a command in the jail
static int __pakfire_jail_exec(struct pakfire_jail* jail, const char* argv[],
- const int interactive,
pakfire_jail_communicate_in communicate_in,
pakfire_jail_communicate_out communicate_out,
void* data, int flags) {
DEBUG(jail->pakfire, "Executing jail...\n");
// Enable networking in interactive mode
- if (interactive)
+ if (ctx.flags & PAKFIRE_JAIL_PTY_FORWARDING)
ctx.flags |= PAKFIRE_JAIL_HAS_NETWORKING;
/*
pakfire_jail_communicate_in callback_in,
pakfire_jail_communicate_out callback_out,
void* data, int flags) {
- return __pakfire_jail_exec(jail, argv, 0, callback_in, callback_out, data, flags);
+ return __pakfire_jail_exec(jail, argv, callback_in, callback_out, data, flags);
}
static int pakfire_jail_exec_interactive(
struct pakfire_jail* jail, const char* argv[], int flags) {
int r;
+ flags |= PAKFIRE_JAIL_PTY_FORWARDING;
+
// Setup interactive stuff
r = pakfire_jail_setup_interactive_env(jail);
if (r)
return r;
- return __pakfire_jail_exec(jail, argv, 1, NULL, NULL, NULL, flags);
+ return __pakfire_jail_exec(jail, argv, NULL, NULL, NULL, flags);
}
int pakfire_jail_exec_script(struct pakfire_jail* jail,