diff options
Diffstat (limited to 'dchroot/dchroot-session.cc')
-rw-r--r-- | dchroot/dchroot-session.cc | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/dchroot/dchroot-session.cc b/dchroot/dchroot-session.cc new file mode 100644 index 00000000..09c5e8aa --- /dev/null +++ b/dchroot/dchroot-session.cc @@ -0,0 +1,123 @@ +/* Copyright © 2005-2006 Roger Leigh <rleigh@debian.org> + * + * schroot is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * schroot is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + *********************************************************************/ + +#include <config.h> + +#include "dchroot-session.h" + +#include <cassert> +#include <cerrno> +#include <cstdlib> +#include <cstring> +#include <iostream> +#include <memory> + +#include <unistd.h> + +#include <syslog.h> + +#include <boost/format.hpp> + +#include <uuid/uuid.h> + +using std::cout; +using std::endl; +using boost::format; +using sbuild::string_list; +using namespace dchroot; + +session::session (std::string const& service, + config_ptr& config, + operation operation, + string_list const& chroots, + bool compat): + session_base(service, config, operation, chroots, compat) +{ +} + +session::~session () +{ +} + +sbuild::auth::status +session::get_chroot_auth_status (sbuild::auth::status status, + sbuild::chroot::ptr const& chroot) const +{ + if (get_compat() == true) + status = change_auth(status, auth::STATUS_NONE); + else + status = change_auth(status, + sbuild::session::get_chroot_auth_status(status, + chroot)); + + return status; +} + +string_list +session::get_login_directories () const +{ + string_list ret; + + // Set current working directory only if preserving environment. + // Only change to home if not preserving the environment. + if (!get_environment().empty()) + ret.push_back(this->sbuild::session::cwd); + else + ret.push_back(get_home()); + + // Final fallback to root. + if (std::find(ret.begin(), ret.end(), "/") == ret.end()) + ret.push_back("/"); + + return ret; +} + +void +session::get_user_command (sbuild::chroot::ptr& session_chroot, + std::string& file, + string_list& command) const +{ + std::string programstring = command[0]; + + command.clear(); + command.push_back(get_shell()); + command.push_back("-c"); + command.push_back(programstring); + + file = command[0]; + + sbuild::log_debug(sbuild::DEBUG_NOTICE) << "file=" << file << endl; + + std::string commandstring = sbuild::string_list_to_string(command, " "); + sbuild::log_debug(sbuild::DEBUG_NOTICE) + << format("Running command: %1%") % commandstring << endl; + syslog(LOG_USER|LOG_NOTICE, "[%s chroot] (%s->%s) Running command: \"%s\"", + session_chroot->get_name().c_str(), get_ruser().c_str(), get_user().c_str(), commandstring.c_str()); + + if (get_verbosity() != auth::VERBOSITY_QUIET) + { + std::string format_string; + format_string = (_("[%1% chroot] Running command: \"%2%\"")); + + format fmt(format_string); + fmt % session_chroot->get_name() + % programstring; + sbuild::log_info() << fmt << endl; + } +} |