]> git.ipfire.org Git - people/ms/pakfire.git/commitdiff
jail: Make PTY forwarding a flag and remove interactive bool
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 19 Dec 2023 12:00:30 +0000 (12:00 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 19 Dec 2023 12:00:30 +0000 (12:00 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/jail.h
src/libpakfire/jail.c

index 380cc150411dd5a93546b5b606bd5938dcc22dd8..d5d2feb2a3d836675d2dda3b42289e7459add413 100644 (file)
@@ -59,9 +59,10 @@ typedef int (*pakfire_jail_communicate_out)
        (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(
index 1547ff9dc4e38dd67df3c8e9637d4119edcb1f3d..b42594cf76e254ce7021324ad1d305e811044882 100644 (file)
@@ -2248,7 +2248,6 @@ static int pakfire_jail_child(struct pakfire_jail* jail, struct pakfire_jail_exe
 
 // 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) {
@@ -2300,7 +2299,7 @@ static int __pakfire_jail_exec(struct pakfire_jail* jail, const char* argv[],
        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;
 
        /*
@@ -2457,19 +2456,21 @@ PAKFIRE_EXPORT int pakfire_jail_exec(
                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,