mirror of
https://gitlab.freedesktop.org/plymouth/plymouth.git
synced 2026-05-07 20:08:17 +02:00
call chroot right before exec instead of right after fork
This is because we still need access to /dev/pts/1 until right before exec
This commit is contained in:
parent
78302f06c3
commit
431924effe
3 changed files with 14 additions and 9 deletions
|
|
@ -54,6 +54,7 @@ struct _ply_terminal_session
|
|||
|
||||
uint32_t is_running : 1;
|
||||
uint32_t console_is_redirected : 1;
|
||||
uint32_t change_root_to_current_directory : 1;
|
||||
};
|
||||
|
||||
static bool ply_terminal_session_open_console (ply_terminal_session_t *session);
|
||||
|
|
@ -109,6 +110,12 @@ ply_terminal_session_execute (ply_terminal_session_t *session,
|
|||
if (!ply_terminal_session_open_console (session))
|
||||
return false;
|
||||
|
||||
if (session->change_root_to_current_directory)
|
||||
{
|
||||
if (chroot (".") < 0)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (look_in_path)
|
||||
execvp (session->argv[0], session->argv);
|
||||
else
|
||||
|
|
@ -132,6 +139,7 @@ ply_terminal_session_new (const char * const *argv)
|
|||
session->logger = ply_logger_new ();
|
||||
session->is_running = false;
|
||||
session->console_is_redirected = false;
|
||||
session->change_root_to_current_directory = false;
|
||||
|
||||
return session;
|
||||
}
|
||||
|
|
@ -237,6 +245,9 @@ ply_terminal_session_run (ply_terminal_session_t *session,
|
|||
should_redirect_console =
|
||||
(flags & PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE) != 0;
|
||||
|
||||
session->change_root_to_current_directory =
|
||||
(flags & PLY_TERMINAL_SESSION_FLAGS_CHANGE_ROOT_TO_CURRENT_DIRECTORY) != 0;
|
||||
|
||||
ply_trace ("creating terminal device");
|
||||
if (!ply_terminal_create_device (session->terminal))
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -41,7 +41,8 @@ typedef enum
|
|||
PLY_TERMINAL_SESSION_FLAGS_NONE = 0x0,
|
||||
PLY_TERMINAL_SESSION_FLAGS_RUN_IN_PARENT = 0x1,
|
||||
PLY_TERMINAL_SESSION_FLAGS_LOOK_IN_PATH = 0x2,
|
||||
PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE = 0x4
|
||||
PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE = 0x4,
|
||||
PLY_TERMINAL_SESSION_FLAGS_CHANGE_ROOT_TO_CURRENT_DIRECTORY = 0x8,
|
||||
} ply_terminal_session_flags_t;
|
||||
|
||||
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
|
||||
|
|
|
|||
|
|
@ -62,14 +62,6 @@ on_session_start (state_t *state)
|
|||
"to start session: %m");
|
||||
return;
|
||||
}
|
||||
|
||||
if (chroot (".") < 0)
|
||||
{
|
||||
ply_trace ("Could not change root back to original directory "
|
||||
"to start session: %m");
|
||||
return;
|
||||
}
|
||||
ply_trace ("changed to original root fs");
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -165,6 +157,7 @@ spawn_session (state_t *state,
|
|||
flags |= PLY_TERMINAL_SESSION_FLAGS_RUN_IN_PARENT;
|
||||
flags |= PLY_TERMINAL_SESSION_FLAGS_LOOK_IN_PATH;
|
||||
flags |= PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE;
|
||||
flags |= PLY_TERMINAL_SESSION_FLAGS_CHANGE_ROOT_TO_CURRENT_DIRECTORY;
|
||||
|
||||
ply_trace ("opening terminal session for '%s'", argv[0]);
|
||||
session = ply_terminal_session_new ((const char * const *) argv);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue