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);
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
session->logger = ply_logger_new ();
session->is_running = false;
session->console_is_redirected = false;
+ session->change_root_to_current_directory = false;
return 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;
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
"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
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);