diff options
| author | Ray Strode <rstrode@redhat.com> | 2007-10-21 19:49:44 -0400 |
|---|---|---|
| committer | Ray Strode <rstrode@redhat.com> | 2007-10-21 19:49:44 -0400 |
| commit | 431924effec5a2d028e08bf1d12be631ffafb26d (patch) | |
| tree | 7193bf78e5117774203f91f2092305980c3bd28b /src/libply | |
| parent | 78302f06c38f4ada1100fee6a2f319a194f7c2ad (diff) | |
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
Diffstat (limited to 'src/libply')
| -rw-r--r-- | src/libply/ply-terminal-session.c | 11 | ||||
| -rw-r--r-- | src/libply/ply-terminal-session.h | 3 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/libply/ply-terminal-session.c b/src/libply/ply-terminal-session.c index c0a71c8..f0dc4e7 100644 --- a/src/libply/ply-terminal-session.c +++ b/src/libply/ply-terminal-session.c @@ -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; diff --git a/src/libply/ply-terminal-session.h b/src/libply/ply-terminal-session.h index 8d474ea..d30d436 100644 --- a/src/libply/ply-terminal-session.h +++ b/src/libply/ply-terminal-session.h @@ -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 |
