[buildd-tools-devel] [PATCH 09/11] [chroot-source] Cleanup clonable handling
Jan-Marek Glogowski
glogow at fbihome.de
Mon Aug 10 18:12:18 UTC 2009
Currently we have a facet "source", a facet "source-clonable",
which also has a "source_clonable" member and a get/set pair -
to much redundant information about the clonable status.
As a solution we define: the facet "source" is always clonable.
(a non-clonable source doesn't make any sense).
Therefore a chroot with the source face is clonable and a
cloned chroot can simply drop the facet if it's not clonable
itself.
As a result this patch renames the facet "source-clonable" to
"source" and fixes all clonable handling.
---
sbuild/Makefile.am | 2 -
sbuild/sbuild-chroot-block-device-base.cc | 5 +-
sbuild/sbuild-chroot-config.cc | 6 +-
sbuild/sbuild-chroot-facet-session-clonable.cc | 4 +-
sbuild/sbuild-chroot-facet-session.cc | 4 +-
sbuild/sbuild-chroot-facet-source-clonable.cc | 224 ------------------------
sbuild/sbuild-chroot-facet-source-clonable.h | 198 ---------------------
sbuild/sbuild-chroot-facet-source.cc | 103 +++++++++++-
sbuild/sbuild-chroot-facet-source.h | 90 ++++++++++
sbuild/sbuild-chroot-facet-union.cc | 29 +---
sbuild/sbuild-chroot-facet-union.h | 3 -
sbuild/sbuild-chroot-file.cc | 8 +-
sbuild/sbuild-chroot-lvm-snapshot.cc | 8 +-
test/test-sbuild-chroot.h | 27 ++--
14 files changed, 230 insertions(+), 481 deletions(-)
delete mode 100644 sbuild/sbuild-chroot-facet-source-clonable.cc
delete mode 100644 sbuild/sbuild-chroot-facet-source-clonable.h
diff --git a/sbuild/Makefile.am b/sbuild/Makefile.am
index d7df89a..3715453 100644
--- a/sbuild/Makefile.am
+++ b/sbuild/Makefile.am
@@ -39,7 +39,6 @@ sbuild_public_h_sources = \
sbuild-chroot-facet-session.h \
sbuild-chroot-facet-session-clonable.h \
sbuild-chroot-facet-source.h \
- sbuild-chroot-facet-source-clonable.h \
sbuild-chroot-file.h \
sbuild-chroot-plain.h \
sbuild-chroot-config.h \
@@ -113,7 +112,6 @@ sbuild_public_cc_sources = \
sbuild-chroot-facet-session.cc \
sbuild-chroot-facet-session-clonable.cc \
sbuild-chroot-facet-source.cc \
- sbuild-chroot-facet-source-clonable.cc \
sbuild-chroot-file.cc \
sbuild-chroot-plain.cc \
sbuild-chroot-config.cc \
diff --git a/sbuild/sbuild-chroot-block-device-base.cc b/sbuild/sbuild-chroot-block-device-base.cc
index 4fcc5f2..026e280 100644
--- a/sbuild/sbuild-chroot-block-device-base.cc
+++ b/sbuild/sbuild-chroot-block-device-base.cc
@@ -23,6 +23,7 @@
#include "sbuild-chroot-facet-mountable.h"
#ifdef SBUILD_FEATURE_UNION
#include "sbuild-chroot-facet-union.h"
+#include "sbuild-chroot-facet-source.h"
#endif // SBUILD_FEATURE_UNION
#include "sbuild-format-detail.h"
#include "sbuild-lock.h"
@@ -140,7 +141,9 @@ chroot_block_device_base::setup_lock (chroot::setup_type type,
chroot_facet_union::const_ptr puni
(base->get_facet<chroot_facet_union>());
assert(puni);
- if (puni->get_union_configured())
+ chroot_facet_source::const_ptr psrc
+ (base->get_facet<chroot_facet_source>());
+ if (puni->get_union_configured() && psrc)
return;
#endif
diff --git a/sbuild/sbuild-chroot-config.cc b/sbuild/sbuild-chroot-config.cc
index a35a261..d9e5249 100644
--- a/sbuild/sbuild-chroot-config.cc
+++ b/sbuild/sbuild-chroot-config.cc
@@ -19,7 +19,7 @@
#include <config.h>
#include "sbuild-chroot.h"
-#include "sbuild-chroot-facet-source-clonable.h"
+#include "sbuild-chroot-facet-source.h"
#include "sbuild-chroot-config.h"
#include "sbuild-dirstream.h"
#include "sbuild-lock.h"
@@ -519,8 +519,8 @@ chroot_config::load_keyfile (keyfile& kconfig,
add(chroot, kconfig);
{
- chroot_facet_source_clonable::const_ptr psrc
- (chroot->get_facet<sbuild::chroot_facet_source_clonable>());
+ chroot_facet_source::const_ptr psrc
+ (chroot->get_facet<sbuild::chroot_facet_source>());
if (psrc && !chroot->get_active())
{
diff --git a/sbuild/sbuild-chroot-facet-session-clonable.cc b/sbuild/sbuild-chroot-facet-session-clonable.cc
index 0b82edc..1554588 100644
--- a/sbuild/sbuild-chroot-facet-session-clonable.cc
+++ b/sbuild/sbuild-chroot-facet-session-clonable.cc
@@ -21,7 +21,7 @@
#include "sbuild-chroot.h"
#include "sbuild-chroot-facet-session.h"
#include "sbuild-chroot-facet-session-clonable.h"
-#include "sbuild-chroot-facet-source-clonable.h"
+#include "sbuild-chroot-facet-source.h"
#include "sbuild-chroot-plain.h"
#ifdef SBUILD_FEATURE_LVMSNAP
#include "sbuild-chroot-lvm-snapshot.h"
@@ -92,7 +92,7 @@ chroot_facet_session_clonable::clone_session_setup (chroot::ptr& clone,
% clone->get_name() << endl;
// Disable source cloning.
- clone->remove_facet<chroot_facet_source_clonable>();
+ clone->remove_facet<chroot_facet_source>();
/* If a chroot mount location has not yet been set, and the
chroot is not a plain chroot, set a mount location with the
diff --git a/sbuild/sbuild-chroot-facet-session.cc b/sbuild/sbuild-chroot-facet-session.cc
index a689c9b..c404a96 100644
--- a/sbuild/sbuild-chroot-facet-session.cc
+++ b/sbuild/sbuild-chroot-facet-session.cc
@@ -20,7 +20,7 @@
#include "sbuild-chroot.h"
#include "sbuild-chroot-facet-session.h"
-#include "sbuild-chroot-facet-source-clonable.h"
+#include "sbuild-chroot-facet-source.h"
#include "sbuild-chroot-plain.h"
#ifdef SBUILD_FEATURE_LVMSNAP
#include "sbuild-chroot-lvm-snapshot.h"
@@ -87,7 +87,7 @@ chroot_facet_session::clone_session_setup (chroot::ptr& clone,
% clone->get_name() << endl;
// Disable source cloning.
- clone->remove_facet<chroot_facet_source_clonable>();
+ clone->remove_facet<chroot_facet_source>();
/* If a chroot mount location has not yet been set, and the
chroot is not a plain chroot, set a mount location with the
diff --git a/sbuild/sbuild-chroot-facet-source-clonable.cc b/sbuild/sbuild-chroot-facet-source-clonable.cc
deleted file mode 100644
index c807d8b..0000000
--- a/sbuild/sbuild-chroot-facet-source-clonable.cc
+++ /dev/null
@@ -1,224 +0,0 @@
-/* Copyright © 2005-2009 Roger Leigh <rleigh at 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 3 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, see
- * <http://www.gnu.org/licenses/>.
- *
- *********************************************************************/
-
-#include <config.h>
-
-#include "sbuild-chroot.h"
-#include "sbuild-chroot-facet-source-clonable.h"
-#include "sbuild-chroot-facet-source.h"
-
-#include <cassert>
-
-using boost::format;
-using std::endl;
-using namespace sbuild;
-
-chroot_facet_source_clonable::chroot_facet_source_clonable ():
- chroot_facet(),
- source_clonable(true),
- source_users(),
- source_groups(),
- source_root_users(),
- source_root_groups()
-{
-}
-
-chroot_facet_source_clonable::~chroot_facet_source_clonable ()
-{
-}
-
-chroot_facet_source_clonable::ptr
-chroot_facet_source_clonable::create ()
-{
- return ptr(new chroot_facet_source_clonable());
-}
-
-chroot_facet::ptr
-chroot_facet_source_clonable::clone () const
-{
- return ptr(new chroot_facet_source_clonable(*this));
-}
-
-std::string const&
-chroot_facet_source_clonable::get_name () const
-{
- static const std::string name("source-clonable");
-
- return name;
-}
-
-void
-chroot_facet_source_clonable::clone_source_setup (chroot::ptr& clone) const
-{
- clone->set_name(clone->get_name() + "-source");
- clone->set_description
- (clone->get_description() + ' ' + _("(source chroot)"));
- clone->set_original(false);
- clone->set_users(this->get_source_users());
- clone->set_groups(this->get_source_groups());
- clone->set_root_users(this->get_source_root_users());
- clone->set_root_groups(this->get_source_root_groups());
- string_list const& aliases = clone->get_aliases();
- string_list source_aliases;
- for (string_list::const_iterator alias = aliases.begin();
- alias != aliases.end();
- ++alias)
- source_aliases.push_back(*alias + "-source");
- clone->set_aliases(source_aliases);
-
- clone->remove_facet<chroot_facet_source_clonable>();
- clone->add_facet(chroot_facet_source::create());
-}
-
-bool
-chroot_facet_source_clonable::get_source_clonable () const
-{
- return this->source_clonable;
-}
-
-void
-chroot_facet_source_clonable::set_source_clonable (bool clonable)
-{
- this->source_clonable = clonable;
-}
-
-string_list const&
-chroot_facet_source_clonable::get_source_users () const
-{
- return this->source_users;
-}
-
-void
-chroot_facet_source_clonable::set_source_users (string_list const& source_users)
-{
- this->source_users = source_users;
-}
-
-string_list const&
-chroot_facet_source_clonable::get_source_groups () const
-{
- return this->source_groups;
-}
-
-void
-chroot_facet_source_clonable::set_source_groups (string_list const& source_groups)
-{
- this->source_groups = source_groups;
-}
-
-string_list const&
-chroot_facet_source_clonable::get_source_root_users () const
-{
- return this->source_root_users;
-}
-
-void
-chroot_facet_source_clonable::set_source_root_users (string_list const& users)
-{
- this->source_root_users = users;
-}
-
-string_list const&
-chroot_facet_source_clonable::get_source_root_groups () const
-{
- return this->source_root_groups;
-}
-
-void
-chroot_facet_source_clonable::set_source_root_groups (string_list const& groups)
-{
- this->source_root_groups = groups;
-}
-
-void
-chroot_facet_source_clonable::setup_env (chroot const& chroot,
- environment& env) const
-{
-}
-
-chroot::session_flags
-chroot_facet_source_clonable::get_session_flags (chroot const& chroot) const
-{
- // Cloning is only possible for non-source and inactive chroots.
- if (chroot.get_active())
- return chroot::SESSION_NOFLAGS;
- else
- return chroot::SESSION_CLONE;
-}
-
-void
-chroot_facet_source_clonable::get_details (chroot const& chroot,
- format_detail& detail) const
-{
- detail
- .add(_("Source Users"), get_source_users())
- .add(_("Source Groups"), get_source_groups())
- .add(_("Source Root Users"), get_source_root_users())
- .add(_("Source Root Groups"), get_source_root_groups());
-}
-
-void
-chroot_facet_source_clonable::get_keyfile (chroot const& chroot,
- keyfile& keyfile) const
-{
- keyfile::set_object_list_value(*this, &chroot_facet_source_clonable::get_source_users,
- keyfile, chroot.get_keyfile_name(),
- "source-users");
-
- keyfile::set_object_list_value(*this, &chroot_facet_source_clonable::get_source_groups,
- keyfile, chroot.get_keyfile_name(),
- "source-groups");
-
- keyfile::set_object_list_value(*this, &chroot_facet_source_clonable::get_source_root_users,
- keyfile, chroot.get_keyfile_name(),
- "source-root-users");
-
- keyfile::set_object_list_value(*this, &chroot_facet_source_clonable::get_source_root_groups,
- keyfile, chroot.get_keyfile_name(),
- "source-root-groups");
-}
-
-void
-chroot_facet_source_clonable::set_keyfile (chroot& chroot,
- keyfile const& keyfile,
- string_list& used_keys)
-{
- keyfile::get_object_list_value(*this, &chroot_facet_source_clonable::set_source_users,
- keyfile, chroot.get_keyfile_name(),
- "source-users",
- keyfile::PRIORITY_OPTIONAL);
- used_keys.push_back("source_clonable-users");
-
- keyfile::get_object_list_value(*this, &chroot_facet_source_clonable::set_source_groups,
- keyfile, chroot.get_keyfile_name(),
- "source-groups",
- keyfile::PRIORITY_OPTIONAL);
- used_keys.push_back("source-groups");
-
- keyfile::get_object_list_value(*this, &chroot_facet_source_clonable::set_source_root_users,
- keyfile, chroot.get_keyfile_name(),
- "source-root-users",
- keyfile::PRIORITY_OPTIONAL);
- used_keys.push_back("source-root-users");
-
- keyfile::get_object_list_value(*this, &chroot_facet_source_clonable::set_source_root_groups,
- keyfile, chroot.get_keyfile_name(),
- "source-root-groups",
- keyfile::PRIORITY_OPTIONAL);
- used_keys.push_back("source-root-groups");
-}
diff --git a/sbuild/sbuild-chroot-facet-source-clonable.h b/sbuild/sbuild-chroot-facet-source-clonable.h
deleted file mode 100644
index 36aee9b..0000000
--- a/sbuild/sbuild-chroot-facet-source-clonable.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/* Copyright © 2005-2009 Roger Leigh <rleigh at 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 3 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, see
- * <http://www.gnu.org/licenses/>.
- *
- *********************************************************************/
-
-#ifndef SBUILD_CHROOT_FACET_SOURCE_CLONABLE_H
-#define SBUILD_CHROOT_FACET_SOURCE_CLONABLE_H
-
-#include <sbuild/sbuild-chroot-facet.h>
-
-namespace sbuild
-{
-
- /**
- * Chroot support for kernel personalities (execution domains).
- */
- class chroot_facet_source_clonable : public chroot_facet
- {
- public:
- /// A shared_ptr to a chroot facet object.
- typedef std::tr1::shared_ptr<chroot_facet_source_clonable> ptr;
-
- /// A shared_ptr to a const chroot facet object.
- typedef std::tr1::shared_ptr<const chroot_facet_source_clonable> const_ptr;
-
- private:
- /// The constructor.
- chroot_facet_source_clonable ();
-
- public:
- /// The destructor.
- virtual ~chroot_facet_source_clonable ();
-
- /**
- * Create a chroot facet.
- *
- * @returns a shared_ptr to the new chroot facet.
- */
- static ptr
- create ();
-
- virtual chroot_facet::ptr
- clone () const;
-
- virtual std::string const&
- get_name () const;
-
- /**
- * Set the defaults in the cloned sourceg chroot.
- *
- * @param clone the chroot to set up.
- */
- virtual void
- clone_source_setup (chroot::ptr& clone) const;
-
- /**
- * Get the users allowed to access the source chroot.
- *
- * @returns a list of users.
- */
- virtual string_list const&
- get_source_users () const;
-
- /**
- * Set the users allowed to access the source chroot.
- *
- * @param users a list of users.
- */
- virtual void
- set_source_users (string_list const& users);
-
- /**
- * Get the groups allowed to access the source chroot.
- *
- * @returns a list of groups.
- */
- virtual string_list const&
- get_source_groups () const;
-
- /**
- * Set the groups allowed to access the source chroot.
- *
- * @param groups a list of groups.
- */
- virtual void
- set_source_groups (string_list const& groups);
-
- /**
- * Get the users allowed to access the source chroot as root.
- * Members of these users can switch to root without
- * authenticating themselves.
- *
- * @returns a list of users.
- */
- virtual string_list const&
- get_source_root_users () const;
-
- /**
- * Set the users allowed to access the source chroot as root.
- * Members of these users can switch to root without
- * authenticating themselves.
- *
- * @param users a list of users.
- */
- virtual void
- set_source_root_users (string_list const& users);
-
- /**
- * Get the groups allowed to access the source chroot as root.
- * Members of these groups can switch to root without
- * authenticating themselves.
- *
- * @returns a list of groups.
- */
- virtual string_list const&
- get_source_root_groups () const;
-
- /**
- * Set the groups allowed to access the source chroot as root.
- * Members of these groups can switch to root without
- * authenticating themselves.
- *
- * @param groups a list of groups.
- */
- virtual void
- set_source_root_groups (string_list const& groups);
-
- /**
- * Get if the chroot is a clonable source chroot or not.
- *
- * @returns true if the chroot is a clonable source chroot, otherwise false.
- */
- virtual bool
- get_source_clonable () const;
-
- /**
- * Set if the chroot is a clonable source chroot or not.
- *
- * @param clonable true if a clonable source chroot, or false if not.
- */
- virtual void
- set_source_clonable (bool clonable);
-
- virtual void
- setup_env (chroot const& chroot,
- environment& env) const;
-
- virtual chroot::session_flags
- get_session_flags (chroot const& chroot) const;
-
- virtual void
- get_details (chroot const& chroot,
- format_detail& detail) const;
-
- virtual void
- get_keyfile (chroot const& chroot,
- keyfile& keyfile) const;
-
- virtual void
- set_keyfile (chroot& chroot,
- keyfile const& keyfile,
- string_list& used_keys);
-
- private:
- /// Is the chroot source or clone?
- bool source_clonable;
- /// Users allowed to access the source chroot.
- string_list source_users;
- /// Groups allowed to access the source chroot.
- string_list source_groups;
- /// Users allowed to access the source chroot as root.
- string_list source_root_users;
- /// Groups allowed to access the source chroot as root.
- string_list source_root_groups;
- };
-
-}
-
-#endif /* SBUILD_CHROOT_FACET_SOURCE_CLONABLE_H */
-
-/*
- * Local Variables:
- * mode:C++
- * End:
- */
diff --git a/sbuild/sbuild-chroot-facet-source.cc b/sbuild/sbuild-chroot-facet-source.cc
index ece5e17..71c338c 100644
--- a/sbuild/sbuild-chroot-facet-source.cc
+++ b/sbuild/sbuild-chroot-facet-source.cc
@@ -28,7 +28,11 @@ using std::endl;
using namespace sbuild;
chroot_facet_source::chroot_facet_source ():
- chroot_facet()
+ chroot_facet(),
+ source_users(),
+ source_groups(),
+ source_root_users(),
+ source_root_groups()
{
}
@@ -57,27 +61,120 @@ chroot_facet_source::get_name () const
}
void
+chroot_facet_source::clone_source_setup (chroot::ptr& clone) const
+{
+ clone->set_name(clone->get_name() + "-source");
+ clone->set_description
+ (clone->get_description() + ' ' + _("(source chroot)"));
+ clone->set_original(false);
+ clone->set_users(this->get_source_users());
+ clone->set_groups(this->get_source_groups());
+ clone->set_root_users(this->get_source_root_users());
+ clone->set_root_groups(this->get_source_root_groups());
+ string_list const& aliases = clone->get_aliases();
+ string_list source_aliases;
+ for (string_list::const_iterator alias = aliases.begin();
+ alias != aliases.end();
+ ++alias)
+ source_aliases.push_back(*alias + "-source");
+ clone->set_aliases(source_aliases);
+ clone->remove_facet<chroot_facet_source>();
+}
+
+string_list const&
+chroot_facet_source::get_source_users () const
+{
+ return this->source_users;
+}
+
+void
+chroot_facet_source::set_source_users (string_list const& source_users)
+{
+ this->source_users = source_users;
+}
+
+string_list const&
+chroot_facet_source::get_source_groups () const
+{
+ return this->source_groups;
+}
+
+void
+chroot_facet_source::set_source_groups (string_list const& source_groups)
+{
+ this->source_groups = source_groups;
+}
+
+string_list const&
+chroot_facet_source::get_source_root_users () const
+{
+ return this->source_root_users;
+}
+
+void
+chroot_facet_source::set_source_root_users (string_list const& users)
+{
+ this->source_root_users = users;
+}
+
+string_list const&
+chroot_facet_source::get_source_root_groups () const
+{
+ return this->source_root_groups;
+}
+
+void
+chroot_facet_source::set_source_root_groups (string_list const& groups)
+{
+ this->source_root_groups = groups;
+}
+
+void
chroot_facet_source::setup_env (chroot const& chroot,
- environment& env) const
+ environment& env) const
{
}
chroot::session_flags
chroot_facet_source::get_session_flags (chroot const& chroot) const
{
- return chroot::SESSION_NOFLAGS;
+ // Cloning is only possible for non-source and inactive chroots.
+ if (chroot.get_active())
+ return chroot::SESSION_NOFLAGS;
+ else
+ return chroot::SESSION_CLONE;
}
void
chroot_facet_source::get_details (chroot const& chroot,
format_detail& detail) const
{
+ detail
+ .add(_("Source Users"), get_source_users())
+ .add(_("Source Groups"), get_source_groups())
+ .add(_("Source Root Users"), get_source_root_users())
+ .add(_("Source Root Groups"), get_source_root_groups());
}
void
chroot_facet_source::get_keyfile (chroot const& chroot,
keyfile& keyfile) const
{
+ keyfile::set_object_list_value(*this, &chroot_facet_source::get_source_users,
+ keyfile, chroot.get_keyfile_name(),
+ "source-users");
+
+ keyfile::set_object_list_value(*this, &chroot_facet_source::get_source_groups,
+ keyfile, chroot.get_keyfile_name(),
+ "source-groups");
+
+ keyfile::set_object_list_value(*this, &chroot_facet_source::get_source_root_users,
+ keyfile, chroot.get_keyfile_name(),
+ "source-root-users");
+
+ keyfile::set_object_list_value(*this, &chroot_facet_source::get_source_root_groups,
+ keyfile, chroot.get_keyfile_name(),
+ "source-root-groups");
}
void
diff --git a/sbuild/sbuild-chroot-facet-source.h b/sbuild/sbuild-chroot-facet-source.h
index bc1961c..1fe0867 100644
--- a/sbuild/sbuild-chroot-facet-source.h
+++ b/sbuild/sbuild-chroot-facet-source.h
@@ -58,6 +58,86 @@ namespace sbuild
virtual std::string const&
get_name () const;
+ /**
+ * Set the defaults in the cloned sourceg chroot.
+ *
+ * @param clone the chroot to set up.
+ */
+ virtual void
+ clone_source_setup (chroot::ptr& clone) const;
+
+ /**
+ * Get the users allowed to access the source chroot.
+ *
+ * @returns a list of users.
+ */
+ virtual string_list const&
+ get_source_users () const;
+
+ /**
+ * Set the users allowed to access the source chroot.
+ *
+ * @param users a list of users.
+ */
+ virtual void
+ set_source_users (string_list const& users);
+
+ /**
+ * Get the groups allowed to access the source chroot.
+ *
+ * @returns a list of groups.
+ */
+ virtual string_list const&
+ get_source_groups () const;
+
+ /**
+ * Set the groups allowed to access the source chroot.
+ *
+ * @param groups a list of groups.
+ */
+ virtual void
+ set_source_groups (string_list const& groups);
+
+ /**
+ * Get the users allowed to access the source chroot as root.
+ * Members of these users can switch to root without
+ * authenticating themselves.
+ *
+ * @returns a list of users.
+ */
+ virtual string_list const&
+ get_source_root_users () const;
+
+ /**
+ * Set the users allowed to access the source chroot as root.
+ * Members of these users can switch to root without
+ * authenticating themselves.
+ *
+ * @param users a list of users.
+ */
+ virtual void
+ set_source_root_users (string_list const& users);
+
+ /**
+ * Get the groups allowed to access the source chroot as root.
+ * Members of these groups can switch to root without
+ * authenticating themselves.
+ *
+ * @returns a list of groups.
+ */
+ virtual string_list const&
+ get_source_root_groups () const;
+
+ /**
+ * Set the groups allowed to access the source chroot as root.
+ * Members of these groups can switch to root without
+ * authenticating themselves.
+ *
+ * @param groups a list of groups.
+ */
+ virtual void
+ set_source_root_groups (string_list const& groups);
+
virtual void
setup_env (chroot const& chroot,
environment& env) const;
@@ -77,6 +157,16 @@ namespace sbuild
set_keyfile (chroot& chroot,
keyfile const& keyfile,
string_list& used_keys);
+
+ private:
+ /// Users allowed to access the source chroot.
+ string_list source_users;
+ /// Groups allowed to access the source chroot.
+ string_list source_groups;
+ /// Users allowed to access the source chroot as root.
+ string_list source_root_users;
+ /// Groups allowed to access the source chroot as root.
+ string_list source_root_groups;
};
}
diff --git a/sbuild/sbuild-chroot-facet-union.cc b/sbuild/sbuild-chroot-facet-union.cc
index 2535e13..fca5d7c 100644
--- a/sbuild/sbuild-chroot-facet-union.cc
+++ b/sbuild/sbuild-chroot-facet-union.cc
@@ -21,7 +21,7 @@
#include "sbuild-chroot.h"
#include "sbuild-chroot-facet-union.h"
-#include "sbuild-chroot-facet-source-clonable.h"
+#include "sbuild-chroot-facet-source.h"
#include <cassert>
@@ -90,8 +90,8 @@ chroot_facet_union::clone_source_setup (chroot::ptr& clone) const
const chroot *base = dynamic_cast<const chroot *>(this->owner);
assert(base);
- chroot_facet_source_clonable::const_ptr psrc
- (base->get_facet<chroot_facet_source_clonable>());
+ chroot_facet_source::const_ptr psrc
+ (base->get_facet<chroot_facet_source>());
if (psrc)
psrc->clone_source_setup(clone);
@@ -102,19 +102,6 @@ chroot_facet_union::clone_source_setup (chroot::ptr& clone) const
}
bool
-chroot_facet_union::get_source_clonable () const
-{
- const chroot *base = dynamic_cast<const chroot *>(this);
- assert(base);
- chroot_facet_source_clonable::const_ptr psrc
- (base->get_facet<chroot_facet_source_clonable>());
- assert(psrc);
-
- return psrc->get_source_clonable() &&
- get_union_configured();
-}
-
-bool
chroot_facet_union::get_union_configured () const
{
return get_union_type() != "none";
@@ -173,11 +160,11 @@ chroot_facet_union::set_union_type (std::string const& type)
if (this->union_type != "none")
{
- if (!base->get_facet<chroot_facet_source_clonable>())
- base->add_facet(chroot_facet_source_clonable::create());
+ if (!base->get_facet<chroot_facet_source>())
+ base->add_facet(chroot_facet_source::create());
}
else
- base->remove_facet<chroot_facet_source_clonable>();
+ base->remove_facet<chroot_facet_source>();
}
std::string const&
@@ -276,8 +263,8 @@ chroot_facet_union::set_keyfile (chroot& chroot,
used_keys.push_back("union-type");
// If we are a union, add specific source options here.
- chroot_facet_source_clonable::ptr psrc
- (chroot.get_facet<chroot_facet_source_clonable>());
+ chroot_facet_source::ptr psrc
+ (chroot.get_facet<chroot_facet_source>());
if (psrc)
psrc->set_keyfile(chroot, keyfile, used_keys);
diff --git a/sbuild/sbuild-chroot-facet-union.h b/sbuild/sbuild-chroot-facet-union.h
index f7871b7..442f183 100644
--- a/sbuild/sbuild-chroot-facet-union.h
+++ b/sbuild/sbuild-chroot-facet-union.h
@@ -79,9 +79,6 @@ namespace sbuild
void
clone_source_setup (chroot::ptr& clone) const;
- bool
- get_source_clonable () const;
-
/**
* Get fs union configured state.
*
diff --git a/sbuild/sbuild-chroot-file.cc b/sbuild/sbuild-chroot-file.cc
index a12db42..34906a6 100644
--- a/sbuild/sbuild-chroot-file.cc
+++ b/sbuild/sbuild-chroot-file.cc
@@ -20,7 +20,7 @@
#include "sbuild-chroot-file.h"
#include "sbuild-chroot-facet-session-clonable.h"
-#include "sbuild-chroot-facet-source-clonable.h"
+#include "sbuild-chroot-facet-source.h"
#include "sbuild-format-detail.h"
#include "sbuild-lock.h"
@@ -38,7 +38,7 @@ chroot_file::chroot_file ():
file(),
repack(false)
{
- add_facet(sbuild::chroot_facet_source_clonable::create());
+ add_facet(sbuild::chroot_facet_source::create());
}
chroot_file::chroot_file (const chroot_file& rhs):
@@ -77,8 +77,8 @@ chroot_file::clone_source () const
chroot_file *clone_file = new chroot_file(*this);
ptr clone(clone_file);
- chroot_facet_source_clonable::const_ptr psrc
- (get_facet<chroot_facet_source_clonable>());
+ chroot_facet_source::const_ptr psrc
+ (get_facet<chroot_facet_source>());
assert(psrc);
psrc->clone_source_setup(clone);
diff --git a/sbuild/sbuild-chroot-lvm-snapshot.cc b/sbuild/sbuild-chroot-lvm-snapshot.cc
index 040ca9e..2583ef7 100644
--- a/sbuild/sbuild-chroot-lvm-snapshot.cc
+++ b/sbuild/sbuild-chroot-lvm-snapshot.cc
@@ -21,7 +21,7 @@
#include "sbuild-chroot-lvm-snapshot.h"
#include "sbuild-chroot-block-device.h"
#include "sbuild-chroot-facet-session-clonable.h"
-#include "sbuild-chroot-facet-source-clonable.h"
+#include "sbuild-chroot-facet-source.h"
#include "sbuild-chroot-facet-mountable.h"
#include "sbuild-format-detail.h"
#include "sbuild-lock.h"
@@ -40,7 +40,7 @@ chroot_lvm_snapshot::chroot_lvm_snapshot ():
snapshot_device(),
snapshot_options()
{
- add_facet(sbuild::chroot_facet_source_clonable::create());
+ add_facet(sbuild::chroot_facet_source::create());
}
chroot_lvm_snapshot::chroot_lvm_snapshot (const chroot_lvm_snapshot& rhs):
@@ -78,8 +78,8 @@ chroot_lvm_snapshot::clone_source () const
{
ptr clone(new chroot_block_device(*this));
- chroot_facet_source_clonable::const_ptr psrc
- (get_facet<chroot_facet_source_clonable>());
+ chroot_facet_source::const_ptr psrc
+ (get_facet<chroot_facet_source>());
assert(psrc);
psrc->clone_source_setup(clone);
diff --git a/test/test-sbuild-chroot.h b/test/test-sbuild-chroot.h
index 6257d27..fca3c98 100644
--- a/test/test-sbuild-chroot.h
+++ b/test/test-sbuild-chroot.h
@@ -25,7 +25,6 @@
#include <sbuild/sbuild-chroot-facet-session.h>
#include <sbuild/sbuild-chroot-facet-session-clonable.h>
#include <sbuild/sbuild-chroot-facet-source.h>
-#include <sbuild/sbuild-chroot-facet-source-clonable.h>
#include <sbuild/sbuild-chroot-facet-union.h>
#include <sbuild/sbuild-i18n.h>
#include <sbuild/sbuild-util.h>
@@ -87,20 +86,17 @@ public:
}
}
- sbuild::chroot_facet_source_clonable::const_ptr psrc
+ sbuild::chroot_facet_source::const_ptr psrc
(this->chroot->
- template get_facet<sbuild::chroot_facet_source_clonable>());
+ template get_facet<sbuild::chroot_facet_source>());
if (psrc)
this->source = this->chroot->clone_source();
if (this->source)
{
- sbuild::chroot_facet_source_clonable::const_ptr ssrc
+ sbuild::chroot_facet_source::const_ptr ssrc
(this->source->
- template get_facet<sbuild::chroot_facet_source_clonable>());
- if (ssrc)
- {
- CPPUNIT_ASSERT(ssrc->get_source_clonable() == true);
- }
+ template get_facet<sbuild::chroot_facet_source>());
+ CPPUNIT_ASSERT(!ssrc);
}
this->chroot_union = sbuild::chroot::ptr(new T);
@@ -124,11 +120,14 @@ public:
this->session_union =
this->chroot_union->clone_session("test-union-session-name");
- this->source_union = chroot_union->clone_source();
-
CPPUNIT_ASSERT(this->session_union);
- CPPUNIT_ASSERT(this->session_union->get_active() == true);
+
+ this->source_union = chroot_union->clone_source();
CPPUNIT_ASSERT(this->source_union);
+ sbuild::chroot_facet_source::const_ptr ssrc
+ (this->source_union->
+ template get_facet<sbuild::chroot_facet_source>());
+ CPPUNIT_ASSERT(!ssrc);
}
}
@@ -151,8 +150,8 @@ public:
pfac->set_persona(sbuild::personality("undefined"));
chroot->set_priority(3);
- sbuild::chroot_facet_source_clonable::ptr usrc
- (chroot->template get_facet<sbuild::chroot_facet_source_clonable>());
+ sbuild::chroot_facet_source::ptr usrc
+ (chroot->template get_facet<sbuild::chroot_facet_source>());
if (usrc)
{
usrc->set_source_users(sbuild::split_string("suser1,suser2", ","));
--
1.6.4
More information about the Buildd-tools-devel
mailing list