19 #ifndef SBUILD_SESSION_H
20 #define SBUILD_SESSION_H
22 #include <sbuild/auth/auth.h>
23 #include <sbuild/chroot/chroot.h>
24 #include <sbuild/custom-error.h>
29 #include <sys/types.h>
108 typedef std::shared_ptr<session>
ptr;
117 session (
const std::string& service,
310 bool& in_root_groups)
const;
539 struct sigaction *saved_signal,
540 void (*handler)(
int));
551 struct sigaction *saved_signal);
void clear_sigterm_handler()
Restore the state of SIGTERM prior to setting the handler.
Definition: session.cc:1570
void set_sigint_handler()
Set the SIGINT handler.
Definition: session.cc:1552
Command must have an absolute path.
Definition: session.h:86
void set_auth(auth::auth::ptr &auth)
Set the authentication state associated with this session.
Definition: session.cc:231
void save_termios()
Save terminal state.
Definition: session.cc:333
void run_child(chroot::chroot::ptr &session_chroot)
Run a command or login shell as a child process in the specified chroot.
Definition: session.cc:1266
Child exited abnormally (reason unknown)
Definition: session.h:76
std::string alias
Name used to initially identify the chroot.
Definition: session.h:52
Run a command in an existing session.
Definition: session.h:67
int child_status
The child exit status.
Definition: session.h:562
void set_sigterm_handler()
Set the SIGTERM handler.
Definition: session.cc:1564
Debian source builder components.
Definition: ctty.cc:31
struct sigaction saved_sigint_signal
Signal saved while sigint handler is set.
Definition: session.h:572
Recover an existing (but inactive) session.
Definition: session.h:65
session(const std::string &service, operation operation, const chroot_list &chroots)
The constructor.
Definition: session.cc:190
End a session.
Definition: session.h:66
virtual std::string get_shell(chroot::chroot::ptr &session_chroot) const
Get the shell to run.
Definition: session.cc:896
Failed to lock chroot.
Definition: session.h:82
Shell not available.
Definition: session.h:96
std::string const & get_shell_override() const
Get user-specified login shell.
Definition: session.cc:297
PAM error.
Definition: session.h:93
auth::auth::ptr authstat
Authentication state.
Definition: session.h:554
bool force
The session force status.
Definition: session.h:568
struct sigaction saved_sighup_signal
Signal saved while sighup handler is set.
Definition: session.h:570
Session handler.
Definition: session.h:46
void set_shell_override(const std::string &shell)
Set user-specified login shell.
Definition: session.cc:303
Failed to get supplementary groups.
Definition: session.h:88
std::map< std::string, std::string > string_map
A string map.
Definition: types.h:44
No chroot found matching alias.
Definition: session.h:81
Child terminated by signal.
Definition: session.h:78
std::string verbosity
Message verbosity.
Definition: session.h:580
Container of environment variables.
Definition: environment.h:38
virtual void run_impl()
Run a session.
Definition: session.cc:607
bool get_preserve_environment() const
Check if the environment should be preserved in the chroot.
Definition: session.cc:285
Failed to get supplementary group count.
Definition: session.h:89
Begin, end and run a session automatically.
Definition: session.h:63
Chroot does not support setting a session ID.
Definition: session.h:95
void set_signal_handler(int signal, struct sigaction *saved_signal, void(*handler)(int))
Set a signal handler.
Definition: session.cc:1576
bool get_force() const
Get the force status of this session.
Definition: session.cc:321
chroot_list const & get_chroots() const
Get the chroots to use in this session.
Definition: session.cc:237
virtual void get_command(chroot::chroot::ptr &session_chroot, std::string &file, string_list &command, environment &env) const
Get the command to run.
Definition: session.cc:927
Failed to execute.
Definition: session.h:87
Caught signal.
Definition: session.h:98
bool lock_status
Lock status for locks acquired during chroot setup.
Definition: session.h:560
Chroot not found.
Definition: session.h:83
error_code
Error codes.
Definition: session.h:71
auth::auth::ptr const & get_auth() const
Get the authentication state associated with this session.
Definition: session.cc:225
void setup_chroot(chroot::chroot::ptr &session_chroot, chroot::chroot::setup_type setup_type)
Setup a chroot.
Definition: session.cc:1071
string_map user_options
User-defined options.
Definition: session.h:586
virtual string_list get_command_directories(chroot::chroot::ptr &session_chroot, const environment &env) const
Get a list of directories to change to when running a command Multiple directories are used as fallba...
Definition: session.cc:835
Failed to change to directory.
Definition: session.h:73
operation get_operation() const
Get the operation this session will perform.
Definition: session.cc:249
std::shared_ptr< session > ptr
A shared_ptr to a session object.
Definition: session.h:108
std::string const & get_verbosity() const
Get the message verbosity.
Definition: session.cc:273
bool termios_ok
Are the saved terminal settings valid?
Definition: session.h:578
void clear_sigint_handler()
Restore the state of SIGINT prior to setting the handler.
Definition: session.cc:1558
Failed to set user.
Definition: session.h:100
virtual ~session()
The destructor.
Definition: session.cc:220
std::vector< std::string > string_list
A string vector.
Definition: types.h:38
Failed to drop root permissions.
Definition: session.h:94
struct sigaction saved_sigterm_signal
Signal saved while sigterm handler is set.
Definition: session.h:574
void set_operation(operation operation)
Set the operation this session will perform.
Definition: session.cc:255
virtual auth::auth::status get_chroot_auth_status(auth::auth::status status, const chroot::chroot::ptr &chroot) const
Check if authentication is required for a single chroot, taking users, groups, root-users and root-gr...
Definition: session.cc:482
Custom error.
Definition: custom-error.h:31
Failed to fork child.
Definition: session.h:77
void set_force(bool force)
Set the force status of this session.
Definition: session.cc:327
void set_preserve_environment(bool preserve_environment)
Set if the environment should be preserved in the chroot.
Definition: session.cc:291
Failed to set supplementary groups.
Definition: session.h:91
void set_verbosity(const std::string &verbosity)
Set the message verbosity.
Definition: session.cc:279
std::string cwd
Current working directory.
Definition: session.h:590
std::shared_ptr< chroot > ptr
A shared_ptr to a chroot object.
Definition: chroot.h:103
void clear_sighup_handler()
Restore the state of SIGHUP prior to setting the handler.
Definition: session.cc:1546
void set_sighup_handler()
Set the SIGHUP handler.
Definition: session.cc:1540
void run_chroot(chroot::chroot::ptr &session_chroot)
Run command or login shell in the specified chroot.
Definition: session.cc:1503
custom_error< error_code > error
Exception type.
Definition: session.h:105
Wait for child failed.
Definition: session.h:79
operation session_operation
The session operation to perform.
Definition: session.h:564
string_map const & get_user_options() const
Get user options.
Definition: session.cc:309
virtual string_list get_shells(chroot::chroot::ptr &session_chroot) const
Get a list of candidate shells to run.
Definition: session.cc:852
Failed to change root to directory.
Definition: session.h:80
Failed to set group.
Definition: session.h:90
std::string shell
Login shell.
Definition: session.h:584
chroot_list chroots
The chroots to run the session operation in.
Definition: session.h:556
std::string session_id
The session identifier.
Definition: session.h:566
std::shared_ptr< auth > ptr
A shared_ptr to a auth object.
Definition: auth.h:102
virtual void get_user_command(chroot::chroot::ptr &session_chroot, std::string &file, string_list &command, const environment &env) const
Get the command to run a user command.
Definition: session.cc:1027
void restore_termios()
Restore terminal state.
Definition: session.cc:355
std::string const & get_session_id() const
Get the session identifier.
Definition: session.cc:261
void wait_for_child(pid_t pid, int &child_status)
Wait for a child process to complete, and check its exit status.
Definition: session.cc:1427
Falling back to directory.
Definition: session.h:74
std::vector< chroot_list_entry > chroot_list
A list of chroots.
Definition: session.h:58
virtual void get_login_command(chroot::chroot::ptr &session_chroot, std::string &file, string_list &command, environment &env) const
Get the command to run a login shell.
Definition: session.cc:941
Failed to unlock chroot.
Definition: session.h:85
status
Authentication status.
Definition: auth.h:78
Child dumped core.
Definition: session.h:75
chroot::chroot::ptr chroot
Pointer to chroot object.
Definition: session.h:54
Falling back to shell.
Definition: session.h:97
bool is_group_member(const std::string &groupname) const
Check group membership.
Definition: session.cc:385
virtual string_list get_login_directories(chroot::chroot::ptr &session_chroot, const environment &env) const
Get a list of directories to change to when running a login shell.
Definition: session.cc:800
Begin a session.
Definition: session.h:64
int get_child_status() const
Get the exit (wait) status of the last child process to run in this session.
Definition: session.cc:373
void set_user_options(const string_map &user_options)
Set user options.
Definition: session.cc:315
User switching is not permitted.
Definition: session.h:101
void run()
Run a session.
Definition: session.cc:552
Setup failed.
Definition: session.h:84
Failed to set signal handler.
Definition: session.h:99
virtual auth::auth::status get_auth_status() const
Check if authentication is required, taking users, groups, root-users and root-groups membership of a...
Definition: session.cc:527
int chroot_status
The current chroot status.
Definition: session.h:558
void get_chroot_membership(const chroot::chroot::ptr &chroot, bool &in_users, bool &in_root_users, bool &in_groups, bool &in_root_groups) const
Get the chroot authentication properties the user is included in.
Definition: session.cc:433
setup_type
Type of setup to perform.
Definition: chroot.h:54
void set_chroots(const chroot_list &chroots)
Set the chroots to use in this session.
Definition: session.cc:243
void clear_signal_handler(int signal, struct sigaction *saved_signal)
Restore the state of the signal prior to setting the handler.
Definition: session.cc:1590
operation
Session operations.
Definition: session.h:61
Group not found.
Definition: session.h:92
void set_session_id(const std::string &session_id)
Set the session identifier.
Definition: session.cc:267
bool preserve_environment
Preserve environment?
Definition: session.h:582
struct termios saved_termios
Saved terminal settings.
Definition: session.h:576