tags 329403 + confirmed fixed-upstream pending
thanks

Roger Leigh <[EMAIL PROTECTED]> writes:

> Daniel Jacobowitz <[EMAIL PROTECTED]> writes:
>
>> Enabling the scripts on a per-chroot basis in schroot.conf perhaps?
>
> That's even better, thanks.

I've installed the following changes into CVS to fix this.  This will
be uploaded to Debian in a few days, pending some other changes.


Regards,
Roger


Index: ChangeLog
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/ChangeLog,v
retrieving revision 1.53
diff -u -r1.53 ChangeLog
--- ChangeLog   20 Sep 2005 21:21:11 -0000      1.53
+++ ChangeLog   21 Sep 2005 20:02:26 -0000
@@ -1,4 +1,24 @@
-2005-09-20  Roger Leigh  <[EMAIL PROTECTED]>
+2005-09-21  Roger Leigh  <[EMAIL PROTECTED]>
+
+       * debian/changelog: Bump version to 0.1.6.  Document run-setup
+       changes for Debian Bug #329403.
+
+       * schroot/schroot.conf.5.in: Document "run-setup" configuration
+       option.
+
+       * schroot/sbuild-session.c (sbuild_session_run): Only run setup
+       scripts if enabled in the chroot configuration.
+
+       * schroot/sbuild-chroot.c
+       (sbuild_chroot_class_init): Add "run-setup" property, and
+       associated accessors.
+       (sbuild_chroot_new_from_keyfile): Add support for G_TYPE_BOOLEAN
+       properties as configuration options.
+
+       * schroot/sbuild-chroot.h (struct _SbuildChroot): Add run_setup
+       member.
+
+2005-09-20  Roger Leigh  <[EMAIL PROTECTED]>
 
        * schroot/sbuild-chroot.c
        (sbuild_chroot_new_from_keyfile): Fix a memory leak during chroot
Index: debian/changelog
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/debian/changelog,v
retrieving revision 1.11
diff -u -r1.11 changelog
--- debian/changelog    11 Sep 2005 15:39:20 -0000      1.11
+++ debian/changelog    21 Sep 2005 20:02:27 -0000
@@ -1,3 +1,14 @@
+schroot (0.1.6-1) unstable; urgency=low
+
+  * New upstream release.
+  * Don't run setup scripts by default, because this can cause
+    data loss with custom chroot setups.  A "run-setup" chroot
+    option has been added to configure the running of setup
+    scripts, which are disabled by default for safety
+    (Closes: #329403).
+
+ -- Roger Leigh <[EMAIL PROTECTED]>  Wed, 21 Sep 2005 20:46:30 +0100
+
 schroot (0.1.5-1) unstable; urgency=low
 
   * New upstream release.
Index: doc/schroot/tmpl/sbuild-chroot.sgml
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/doc/schroot/tmpl/sbuild-chroot.sgml,v
retrieving revision 1.11
diff -u -r1.11 sbuild-chroot.sgml
--- doc/schroot/tmpl/sbuild-chroot.sgml 18 Sep 2005 20:57:52 -0000      1.11
+++ doc/schroot/tmpl/sbuild-chroot.sgml 21 Sep 2005 20:02:27 -0000
@@ -78,6 +78,11 @@
 
 </para>
 
+<!-- ##### ARG SbuildChroot:run-setup ##### -->
+<para>
+
+</para>
+
 <!-- ##### STRUCT SbuildChrootClass ##### -->
 <para>
 SbuildChroot class.
Index: schroot/sbuild-chroot.c
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/schroot/sbuild-chroot.c,v
retrieving revision 1.16
diff -u -r1.16 sbuild-chroot.c
--- schroot/sbuild-chroot.c     20 Sep 2005 21:21:11 -0000      1.16
+++ schroot/sbuild-chroot.c     21 Sep 2005 20:02:27 -0000
@@ -62,7 +62,8 @@
   PROP_MOUNT_DEVICE,
   PROP_CURRENT_USERS,
   PROP_MAX_USERS,
-  PROP_ACTIVE
+  PROP_ACTIVE,
+  PROP_RUN_SETUP
 };
 
 static GObjectClass *parent_class;
@@ -194,7 +195,24 @@
              params = g_renew (GParameter, params, n_alloc_params);
            }
 
-         if (G_PARAM_SPEC_VALUE_TYPE(pspec) == G_TYPE_UINT)
+         if (G_PARAM_SPEC_VALUE_TYPE(pspec) == G_TYPE_BOOLEAN)
+           {
+             gboolean value =
+               g_key_file_get_boolean(keyfile, group, key, &error);
+
+             if (error != NULL)
+               g_clear_error(&error);
+             else
+               {
+                 params[n_params].name = key;
+                 params[n_params].value.g_type = 0;
+                 g_value_init (&params[n_params].value,
+                               G_PARAM_SPEC_VALUE_TYPE (pspec));
+                 g_value_set_boolean(&params[n_params].value, value);
+                 ++n_params;
+               }
+           }
+         else if (G_PARAM_SPEC_VALUE_TYPE(pspec) == G_TYPE_UINT)
            {
              gint num =
                g_key_file_get_integer(keyfile, group, key, &error);
@@ -659,6 +677,39 @@
 }
 
 /**
+ * sbuild_chroot_get_run_setup:
+ * @chroot: an #SbuildChroot
+ *
+ * Check if chroot setup scripts will be run.
+ *
+ * Returns TRUE if setup scripts will be run, otherwise FALSE.
+ */
+gboolean
+sbuild_chroot_get_run_setup (const SbuildChroot *restrict chroot)
+{
+  g_return_val_if_fail(SBUILD_IS_CHROOT(chroot), FALSE);
+
+  return chroot->run_setup;
+}
+
+/**
+ * sbuild_chroot_set_run_setup:
+ * @chroot: an #SbuildChroot.
+ * @run_setup: TRUE to run setup scripts, otherwise FALSE.
+ *
+ * Set whether chroot setup scripts should be run or not.
+ */
+void
+sbuild_chroot_set_run_setup (SbuildChroot *chroot,
+                            gboolean      run_setup)
+{
+  g_return_if_fail(SBUILD_IS_CHROOT(chroot));
+
+  chroot->run_setup = run_setup;
+  g_object_notify(G_OBJECT(chroot), "run-setup");
+}
+
+/**
  * sbuild_chroot_get_chroot_type:
  * @chroot: an #SbuildChroot
  *
@@ -721,6 +772,8 @@
   g_free(alias_list);
 
   g_fprintf(file, _("  %-22s%u\n"), _("Maximum Users"), chroot->max_users);
+  g_fprintf(file, _("  %-22s%s\n"), _("Run Setup"),
+           (chroot->run_setup == TRUE) ? "true" : "false");
 
   SbuildChrootClass *klass = SBUILD_CHROOT_GET_CLASS(chroot);
   if (klass->print_details)
@@ -777,6 +830,8 @@
     }
 
   g_fprintf(file, "max-users=%u\n", chroot->max_users);
+  g_fprintf(file, _("run-setup=%s\n"),
+           (chroot->run_setup == TRUE) ? "true" : "false");
 
   SbuildChrootClass *klass = SBUILD_CHROOT_GET_CLASS(chroot);
   if (klass->print_config)
@@ -851,6 +906,7 @@
   chroot->current_users = 0;
   chroot->max_users = 0;
   chroot->active = FALSE;
+  chroot->run_setup = FALSE;
 }
 
 static void
@@ -943,6 +999,9 @@
     case PROP_MAX_USERS:
       sbuild_chroot_set_max_users(chroot, g_value_get_uint(value));
       break;
+    case PROP_RUN_SETUP:
+      sbuild_chroot_set_run_setup(chroot, g_value_get_boolean(value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
       break;
@@ -997,6 +1056,9 @@
     case PROP_ACTIVE:
       g_value_set_boolean(value, chroot->active);
       break;
+    case PROP_RUN_SETUP:
+      g_value_set_boolean(value, chroot->run_setup);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
       break;
@@ -1105,6 +1167,14 @@
                           "Is the chroot currently in use?",
                           FALSE,
                           (G_PARAM_READABLE)));
+
+  g_object_class_install_property
+    (gobject_class,
+     PROP_RUN_SETUP,
+     g_param_spec_boolean ("run-setup", "Run Setup",
+                          "Run chroot setup scripts?",
+                          FALSE,
+                          (G_PARAM_READABLE | G_PARAM_WRITABLE | 
G_PARAM_CONSTRUCT)));
 }
 
 /*
Index: schroot/sbuild-chroot.h
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/schroot/sbuild-chroot.h,v
retrieving revision 1.7
diff -u -r1.7 sbuild-chroot.h
--- schroot/sbuild-chroot.h     18 Sep 2005 20:57:52 -0000      1.7
+++ schroot/sbuild-chroot.h     21 Sep 2005 20:02:27 -0000
@@ -58,6 +58,7 @@
   guint     current_users;
   guint     max_users;
   gboolean  active;
+  gboolean  run_setup;
 };
 
 struct _SbuildChrootClass
@@ -151,6 +152,13 @@
 sbuild_chroot_set_max_users (SbuildChroot *chroot,
                             guint         max_users);
 
+gboolean
+sbuild_chroot_get_run_setup (const SbuildChroot *restrict chroot);
+
+void
+sbuild_chroot_set_run_setup (SbuildChroot *chroot,
+                            gboolean      run_setup);
+
 const gchar *
 sbuild_chroot_get_chroot_type (const SbuildChroot  *chroot);
 
Index: schroot/sbuild-session.c
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/schroot/sbuild-session.c,v
retrieving revision 1.33
diff -u -r1.33 sbuild-session.c
--- schroot/sbuild-session.c    18 Sep 2005 20:57:52 -0000      1.33
+++ schroot/sbuild-session.c    21 Sep 2005 20:02:28 -0000
@@ -874,18 +874,20 @@
       else
        {
          /* Run chroot setup scripts. */
-         sbuild_session_setup_chroot(session, chroot,
-                                     SBUILD_SESSION_CHROOT_SETUP_START,
-                                     &tmp_error);
+         if (sbuild_chroot_get_run_setup(chroot) == TRUE)
+           sbuild_session_setup_chroot(session, chroot,
+                                       SBUILD_SESSION_CHROOT_SETUP_START,
+                                       &tmp_error);
 
          /* Run session if setup succeeded. */
          if (tmp_error == NULL)
            sbuild_session_run_chroot(session, chroot, &tmp_error);
 
          /* Run clean up scripts whether or not there was an error. */
-         sbuild_session_setup_chroot(session, chroot,
-                                     SBUILD_SESSION_CHROOT_SETUP_STOP,
-                                     (tmp_error != NULL) ? NULL : &tmp_error);
+         if (sbuild_chroot_get_run_setup(chroot) == TRUE)
+           sbuild_session_setup_chroot(session, chroot,
+                                       SBUILD_SESSION_CHROOT_SETUP_STOP,
+                                       (tmp_error != NULL) ? NULL : 
&tmp_error);
        }
 
       if (tmp_error != NULL)
Index: schroot/schroot.conf.5.in
===================================================================
RCS file: /cvsroot/buildd-tools/schroot/schroot/schroot.conf.5.in,v
retrieving revision 1.12
diff -u -r1.12 schroot.conf.5.in
--- schroot/schroot.conf.5.in   18 Sep 2005 20:57:52 -0000      1.12
+++ schroot/schroot.conf.5.in   21 Sep 2005 20:02:28 -0000
@@ -76,6 +76,10 @@
 .B max-users=\fInumber\fP
 Set the maximum number of users allowed to use the chroot.  The default is 1
 user, and the minimum is also 1.
+.TP
+.B run-setup=\fItrue\fP|\fIfalse\fP
+Set whether chroot setup scripts will be run.  The default is not to run setup
+scripts (\[lq]false\[rq]).
 .SS
 Plain chroots
 .PP



-- 
Roger Leigh
                Printing on GNU/Linux?  http://gimp-print.sourceforge.net/
                Debian GNU/Linux        http://www.debian.org/
                GPG Public Key: 0x25BFB848.  Please sign and encrypt your mail.


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to