]> git.ipfire.org Git - pakfire.git/commitdiff
jail: Make it easier to configure the jail as interactive
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 6 Oct 2024 18:07:08 +0000 (18:07 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 6 Oct 2024 18:07:08 +0000 (18:07 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/jail.h
src/libpakfire/jail.c

index 9ab0028ce0e97913f4b4eccdca723562cb66decf..55fbfe9989198b85f78246cdccbd67d770ca92c5 100644 (file)
@@ -58,7 +58,7 @@ void pakfire_jail_set_stdout_callback(struct pakfire_jail* jail,
        pakfire_jail_stdout_callback callback, void* data);
 
 enum pakfire_jail_exec_flags {
-       PAKFIRE_JAIL_PTY_FORWARDING   = (1 << 0),
+       PAKFIRE_JAIL_INTERACTIVE      = (1 << 0),
        PAKFIRE_JAIL_HAS_NETWORKING   = (1 << 1),
        PAKFIRE_JAIL_NOENT_OK         = (1 << 2),
        PAKFIRE_JAIL_HAS_LOOP_DEVICES = (1 << 3),
index ec5d2ebcf06b745483e51ec29a3c076ac1a32c1e..b1ecc90e2e355dc8285851e44a5a570334923972 100644 (file)
@@ -1516,10 +1516,16 @@ PAKFIRE_EXPORT int pakfire_jail_exec(struct pakfire_jail* jail, const char* argv
                goto ERROR;
        }
 
-       // Enable networking in interactive mode
-       if (ctx.flags & PAKFIRE_JAIL_PTY_FORWARDING)
+       // Are we running in interactive mode?
+       if (pakfire_jail_exec_has_flag(&ctx, PAKFIRE_JAIL_INTERACTIVE)) {
+               // Enable networking
                ctx.flags |= PAKFIRE_JAIL_HAS_NETWORKING;
 
+       } else {
+               // Make the PTY read-only
+               pty_flags |= PAKFIRE_PTY_READ_ONLY;
+       }
+
        /*
                Setup a file descriptor which can be used to notify the client that the parent
                has completed configuration.
@@ -1669,7 +1675,7 @@ static int pakfire_jail_exec_interactive(
                struct pakfire_jail* jail, const char* argv[], int flags) {
        int r;
 
-       flags |= PAKFIRE_JAIL_PTY_FORWARDING;
+       flags |= PAKFIRE_JAIL_INTERACTIVE;
 
        // Setup interactive stuff
        r = pakfire_jail_setup_interactive_env(jail);