sbuild::session Class Reference

Session handler. More...

#include <sbuild-session.h>

Inheritance diagram for sbuild::session:

Inheritance graph
[legend]
Collaboration diagram for sbuild::session:

Collaboration graph
[legend]
List of all members.

Public Types

typedef runtime_error_custom<
session
error
 Exception type.
typedef std::tr1::shared_ptr<
chroot_config
config_ptr
 A shared_ptr to a chroot_config object.
typedef std::tr1::shared_ptr<
session
ptr
 A shared_ptr to a session object.
enum  operation {
  OPERATION_AUTOMATIC, OPERATION_BEGIN, OPERATION_RECOVER, OPERATION_END,
  OPERATION_RUN
}
 Session operations. More...

Public Member Functions

 session (std::string const &service, config_ptr &config, operation operation, string_list const &chroots)
 The constructor.
virtual ~session ()
 The destructor.
config_ptrget_config ()
 Get the configuration associated with this session.
void set_config (config_ptr &config)
 Set the configuration associated with this session.
string_list const & get_chroots () const
 Get the chroots to use in this session.
void set_chroots (string_list const &chroots)
 Set the chroots to use in this session.
operation get_operation () const
 Get the operation this session will perform.
void set_operation (operation operation)
 Set the operation this session will perform.
std::string const & get_session_id () const
 Get the session identifier.
void set_session_id (std::string const &session_id)
 Set the session identifier.
bool get_force () const
 Get the force status of this session.
void set_force (bool force)
 Set the force status of this session.
int get_child_status () const
 Get the exit (wait) status of the last child process to run in this session.
virtual sbuild::auth::status get_auth_status () const
 Check if authentication is required, taking groups and root-groups membership or all chroots specified into account.
virtual void run_impl ()
 Run a session.

Private Member Functions

int exec (std::string const &file, string_list const &command, environment const &env)
 execve wrapper.
void setup_chroot (chroot::ptr &session_chroot, chroot::setup_type setup_type)
 Setup a chroot.
void run_chroot (chroot::ptr &session_chroot)
 Run command or login shell in the specified chroot.
void run_child (chroot::ptr &session_chroot)
 Run a command or login shell as a child process in the specified chroot.
void wait_for_child (int pid, int &child_status)
 Wait for a child process to complete, and check its exit status.
void set_sighup_handler ()
 Set the SIGHUP handler.
void clear_sighup_handler ()
 Restore the state of SIGHUP prior to setting the handler.

Private Attributes

config_ptr config
 The chroot configuration.
string_list chroots
 The chroots to run the session operation in.
int chroot_status
 The current chroot status.
int child_status
 The child exit status.
operation session_operation
 The session operation to perform.
std::string session_id
 The session identifier.
bool force
 The session force status.
sigaction saved_signals
 Signals saved while sighup handler is set.

Detailed Description

Session handler.

This class provides the session handling for schroot. It derives from auth, which performs all the necessary PAM actions, specialising it by overriding its virtual functions. This allows more sophisticated handling of user authorisation (groups and root-groups membership in the configuration file) and session management (setting up the session, entering the chroot and running the requested command or shell).


Member Typedef Documentation

typedef std::tr1::shared_ptr<chroot_config> sbuild::session::config_ptr
 

A shared_ptr to a chroot_config object.

typedef runtime_error_custom<session> sbuild::session::error
 

Exception type.

Reimplemented from sbuild::auth.

typedef std::tr1::shared_ptr<session> sbuild::session::ptr
 

A shared_ptr to a session object.


Member Enumeration Documentation

enum sbuild::session::operation
 

Session operations.

Enumerator:
OPERATION_AUTOMATIC  Begin, end and run a session automatically.
OPERATION_BEGIN  Begin a session.
OPERATION_RECOVER  Recover an existing (but inactive) session.
OPERATION_END  End a session.
OPERATION_RUN  Run a command in an existing session.


Constructor & Destructor Documentation

session::session std::string const &  service,
config_ptr config,
operation  operation,
string_list const &  chroots
 

The constructor.

Parameters:
service the PAM service name.
config a shared_ptr to the chroot configuration.
operation the session operation to perform.
chroots the chroots to act upon.

session::~session  )  [virtual]
 

The destructor.

Reimplemented in dchroot::session.


Member Function Documentation

void session::clear_sighup_handler  )  [private]
 

Restore the state of SIGHUP prior to setting the handler.

int session::exec std::string const &  file,
string_list const &  command,
environment const &  env
[private]
 

execve wrapper.

Run the command specified by file (an absolute pathname), using command and env as the argv and environment, respectively.

Parameters:
file the program to execute.
command the arguments to pass to the executable.
env the environment.
Returns:
the return value of the execve system call on failure.

auth::status session::get_auth_status  )  const [virtual]
 

Check if authentication is required, taking groups and root-groups membership or all chroots specified into account.

Reimplemented from sbuild::auth.

Reimplemented in dchroot::session.

int session::get_child_status  )  const
 

Get the exit (wait) status of the last child process to run in this session.

Returns:
the exit status.

string_list const & session::get_chroots  )  const
 

Get the chroots to use in this session.

Returns:
a list of chroots.

session::config_ptr & session::get_config  ) 
 

Get the configuration associated with this session.

Returns:
a shared_ptr to the configuration.

bool session::get_force  )  const
 

Get the force status of this session.

Returns:
true if operation will be forced, otherwise false.

session::operation session::get_operation  )  const
 

Get the operation this session will perform.

Returns:
the operation.

std::string const & session::get_session_id  )  const
 

Get the session identifier.

The session identifier is a unique string to identify a session.

Returns:
the session id.

void session::run_child chroot::ptr session_chroot  )  [private]
 

Run a command or login shell as a child process in the specified chroot.

This method is only ever to be run in a child process, and will never return.

Parameters:
session_chroot the chroot to setup. This must be present in the chroot list and the chroot configuration object.

void session::run_chroot chroot::ptr session_chroot  )  [private]
 

Run command or login shell in the specified chroot.

An error will be thrown on failure.

Parameters:
session_chroot the chroot to setup. This must be present in the chroot list and the chroot configuration object.

void session::run_impl  )  [virtual]
 

Run a session.

If a command has been specified, this will be run in each of the specified chroots. If no command has been specified, a login shell will run in the specified chroot.

An error will be thrown on failure.

Implements sbuild::auth.

Reimplemented in dchroot::session.

void session::set_chroots string_list const &  chroots  ) 
 

Set the chroots to use in this session.

Parameters:
chroots a list of chroots.

void session::set_config config_ptr config  ) 
 

Set the configuration associated with this session.

Parameters:
config a shared_ptr to the configuration.

void session::set_force bool  force  ) 
 

Set the force status of this session.

Parameters:
force true to force operation, otherwise false.

void session::set_operation operation  operation  ) 
 

Set the operation this session will perform.

Parameters:
operation the operation.

void session::set_session_id std::string const &  session_id  ) 
 

Set the session identifier.

The session identifier is a unique string to identify a session.

Parameters:
session_id the session id.

void session::set_sighup_handler  )  [private]
 

Set the SIGHUP handler.

An error will be thrown on failure.

void session::setup_chroot chroot::ptr session_chroot,
chroot::setup_type  setup_type
[private]
 

Setup a chroot.

This runs all of the commands in setup.d or run.d.

The environment variables CHROOT_NAME, CHROOT_DESCRIPTION, CHROOT_LOCATION, AUTH_USER and AUTH_VERBOSITY are set for use in setup scripts. See schroot-setup(5) for a complete list.

An error will be thrown on failure.

Parameters:
session_chroot the chroot to setup. This must be present in the chroot list and the chroot configuration object.
setup_type the type of setup to perform.

void session::wait_for_child int  pid,
int &  child_status
[private]
 

Wait for a child process to complete, and check its exit status.

An error will be thrown on failure.

Parameters:
pid the pid to wait for.
child_status the place to store the child exit status.


Member Data Documentation

int sbuild::session::child_status [private]
 

The child exit status.

int sbuild::session::chroot_status [private]
 

The current chroot status.

string_list sbuild::session::chroots [private]
 

The chroots to run the session operation in.

config_ptr sbuild::session::config [private]
 

The chroot configuration.

bool sbuild::session::force [private]
 

The session force status.

struct sigaction sbuild::session::saved_signals [private]
 

Signals saved while sighup handler is set.

std::string sbuild::session::session_id [private]
 

The session identifier.

operation sbuild::session::session_operation [private]
 

The session operation to perform.


The documentation for this class was generated from the following files:
Generated on Sun Mar 19 12:08:57 2006 for schroot by  doxygen 1.4.6