Hello community,

here is the log from the commit of package insserv for openSUSE:Factory checked 
in at 2012-11-17 07:24:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/insserv (Old)
 and      /work/SRC/openSUSE:Factory/.insserv.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "insserv", Maintainer is "[email protected]"

Changes:
--------
--- /work/SRC/openSUSE:Factory/insserv/insserv.changes  2012-11-15 
10:57:29.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.insserv.new/insserv.changes     2012-11-17 
07:24:42.000000000 +0100
@@ -1,0 +2,13 @@
+Fri Nov 16 14:47:39 UTC 2012 - [email protected]
+
+- Check if systemd has to reload its dependency chains before using
+  systemclt to enable or disable units 
+
+-------------------------------------------------------------------
+Fri Nov 16 13:54:36 UTC 2012 - [email protected]
+
+- Check if systemd has to reload its dependency chains 
+- Check existence of /sys/fs/cgroup/systemd only once
+- Do not throw fatal messages if service is known by systemd
+
+-------------------------------------------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ insserv-1.16.0.dif ++++++
--- /var/tmp/diff_new_pack.Uis1Pp/_old  2012-11-17 07:24:43.000000000 +0100
+++ /var/tmp/diff_new_pack.Uis1Pp/_new  2012-11-17 07:24:43.000000000 +0100
@@ -1,6 +1,157 @@
 --- insserv.c
-+++ insserv.c  2012-11-15 08:54:32.110344983 +0000
-@@ -2942,33 +2942,11 @@ int main (int argc, char *argv[])
++++ insserv.c  2012-11-16 14:46:39.606344797 +0000
+@@ -1,10 +1,10 @@
+ /*
+  * insserv(.c)
+  *
+- * Copyright 2000-2009 Werner Fink, 2000 SuSE GmbH Nuernberg, Germany,
++ * Copyright 2000-2012 Werner Fink, 2000 SuSE GmbH Nuernberg, Germany,
+  *                                2003 SuSE Linux AG, Germany.
+  *                                2004 SuSE LINUX AG, Germany.
+- *                           2005-2009 SUSE LINUX Products GmbH, Germany.
++ *                           2005-2012 SUSE LINUX Products GmbH, Germany.
+  * Copyright 2005,2008,2009 Petter Reinholdtsen
+  *
+  * This program is free software; you can redistribute it and/or modify
+@@ -23,12 +23,6 @@
+  *
+  */
+ 
+-/*
+- * Systemd integration
+- */
+-#define SYSTEMD_SERVICE_PATH  "/lib/systemd/system"
+-#define SYSTEMD_BINARY_PATH   "/bin/systemd"
+-
+ #define MINIMAL_MAKE  1       /* Remove disabled scripts from .depend.boot,
+                                * .depend.start, .depend.halt, and 
.depend.stop */
+ #define MINIMAL_RULES 1       /* ditto */
+@@ -437,7 +431,7 @@ static boolean chkrequired(service_t *re
+       must = req->serv;
+       must = getorig(must);
+ 
+-      if ((must->attr.flags & (SERV_CMDLINE|SERV_ENABLED)) == 0) {
++      if ((must->attr.flags & (SERV_CMDLINE|SERV_SYSTEMD|SERV_ENABLED)) == 0) 
{
+           if (recursive) {
+               must->attr.flags |= SERV_ENFORCE;
+               continue;       /* Enabled this later even if not on command 
line */
+@@ -455,7 +449,7 @@ static boolean chkrequired(service_t *re
+      * Once we may use REQ_MUST for X-Start-Before and/or
+      * X-Stop-After we may enable this, see reversereq()
+      */
+-    if (serv->attr.flags & (SERV_CMDLINE|SERV_ENABLED))
++    if (serv->attr.flags & (SERV_CMDLINE|SERV_SYSTEMD|SERV_ENABLED))
+       goto out;
+     np_list_for_each(pos, &serv->sort.rev) {
+       req_t *rev = getreq(pos);
+@@ -512,7 +506,7 @@ static boolean chkdependencies(service_t
+           if (strcmp(req->serv->name, name) != 0)
+               continue;
+ 
+-          if ((cur->attr.flags & SERV_CMDLINE) && (flags & SERV_CMDLINE))
++          if ((cur->attr.flags & SERV_CMDLINE) && (flags & 
(SERV_CMDLINE|SERV_SYSTEMD)))
+               continue;
+ 
+           warn("FATAL: service %s has to be enabled to use service %s\n",
+@@ -2376,9 +2370,11 @@ static void import_systemd_facilities(vo
+ /*
+  *  Here the systemd servies are imported as services
+  */
+-static void import_systemd_services(void)
++static boolean import_systemd_services(void)
+ {
++    boolean reload = false;
+     list_t *ptr;
++
+     list_for_each(ptr, &sdservs) {
+       sdserv_t *sdserv = list_entry(ptr, sdserv_t, s_list);
+       const char *this;
+@@ -2388,6 +2384,9 @@ static void import_systemd_services(void
+       if (*sdserv->name == '$')
+           continue;
+ 
++      if (sdserv->flags & SDREL_RELOAD)
++          reload = true;
++
+       this = sdserv->name;
+       for (n = 0; n < (int)(sizeof(sdmap)/sizeof(sdmap[0])); n += 2) {
+           if (strcmp(sdmap[n], this) == 0) {
+@@ -2418,6 +2417,7 @@ static void import_systemd_services(void
+           service->attr.flags |= SERV_SYSTEMD;
+       }
+     }
++    return reload;
+ }
+ 
+ static void expand_faci(list_t *restrict rlist, list_t *restrict head,
+@@ -2617,7 +2617,8 @@ out:
+ /*
+  * Systemd integration
+  */
+-static boolean is_overridden_by_systemd(const char *service) {
++static boolean is_overridden_by_systemd(const char *service)
++{
+     char *p;
+     boolean ret = false;
+ 
+@@ -2630,7 +2631,8 @@ static boolean is_overridden_by_systemd(
+     return ret;
+ }
+ 
+-static void forward_to_systemd (const char *initscript, const char *verb, 
boolean alternative_root) {
++static void forward_to_systemd (const char *initscript, const char *verb, 
boolean alternative_root, boolean native)
++{
+     const char *name;
+ 
+     if (initscript == NULL)
+@@ -2648,10 +2650,7 @@ static void forward_to_systemd (const ch
+       if (alternative_root && root)
+           err = asprintf (&p, "/bin/systemctl --quiet --no-reload --root %s 
%s %s.service", root, verb, name);
+       else {
+-          struct statfs stfs;
+-          if (statfs("/sys/fs/cgroup/systemd", &stfs) < 0 && errno != ENOENT)
+-              error("statfs(): %s\n", strerror(errno));
+-          if (errno == 0 && stfs.f_type == CGROUP_SUPER_MAGIC)
++          if (native)
+               err = asprintf (&p, "/bin/systemctl --quiet %s %s.service", 
verb, name);
+           else
+               err = asprintf (&p, "/bin/systemctl --quiet --no-reload %s 
%s.service", verb, name);
+@@ -2921,14 +2920,28 @@ int main (int argc, char *argv[])
+     /*
+      * Systemd support
+      */
+-    if (access(SYSTEMD_BINARY_PATH, F_OK) == 0 && (sbus = 
systemd_open_conn())) {
++    if (access(SYSTEMD_BINARY_PATH, F_OK) == 0) {
++      boolean alternative_root = (path != ipath);
++      boolean native;
+ 
+-      for (c = 0; c < argc; c++)
+-          forward_to_systemd (argv[c], del ? "disable": "enable", path != 
ipath);
++      native = false;
++      if (!alternative_root) {
++          struct statfs stfs;
++          if (statfs("/sys/fs/cgroup/systemd", &stfs) < 0 && errno != ENOENT)
++              error("statfs(): %m\n");
++          if (errno == 0 && stfs.f_type == CGROUP_SUPER_MAGIC) {
++              native = true;
++              if ((sbus = systemd_open_conn())) {
++                  boolean reload = systemd_get_tree(sbus);
++                  if (reload)
++                      systemd_daemon_reload(sbus);
++                  systemd = true;
++              }
++          }
++      }
+ 
+-      (void)systemd_get_tree(sbus);
+-      systemd_close_conn(sbus);
+-      systemd = true;
++      for (c = 0; c < argc; c++)
++          forward_to_systemd (argv[c], del ? "disable": "enable", 
alternative_root, native);
+     }
+ 
+     /*
+@@ -2942,39 +2955,21 @@ int main (int argc, char *argv[])
      if (systemd)
        import_systemd_facilities();
  
@@ -34,9 +185,125 @@
      /*
       * Handle Systemd services (<name>.service -> <name>)
       */
+     if (systemd) {
+-      import_systemd_services();
+-      systemd_free();         /* Not used anymore */
++      boolean reload = import_systemd_services();
++      systemd_free();         /* List of systemd services not used anymore */
++      if (!reload) {
++          systemd_close_conn(sbus);
++          systemd = false;
++      }
+     }
+ 
+     /*
+@@ -4222,6 +4217,14 @@ int main (int argc, char *argv[])
+ #endif  /* !DEBUG */
+ 
+     /*
++     * If required cause systemd daemon to reload its dependency chains
++     */
++    if (systemd) {
++      systemd_daemon_reload(sbus);
++      systemd_close_conn(sbus);
++    }
++
++    /*
+      * Do the makedep
+      */
+     makedep();
 --- systemd.c
-+++ systemd.c  2012-11-15 09:23:26.866345317 +0000
-@@ -404,7 +404,8 @@ DBusConnection * systemd_open_conn(void)
++++ systemd.c  2012-11-16 14:44:23.094346444 +0000
+@@ -104,14 +104,18 @@ static void addally(sdserv_t *restrict s
+     this->flags = flags;
+ }
+ 
+-static void systemd_strip_dot(void)
++static boolean systemd_strip_dot(void)
+ {
++    boolean reload;
+     list_t *ptr;
+ 
++    reload = false;
+     list_for_each_prev(ptr, &sdservs) {
+       sdserv_t *sdserv = list_entry(ptr, sdserv_t, s_list);
+       char *dot = strrchr(sdserv->unit, '.');
+       const char *tag;
++      if (sdserv->flags & SDREL_RELOAD)
++          reload = true;
+       if (dot == (char*)0 || *dot == '\0')
+           continue;
+       tag = dot+1;
+@@ -120,6 +124,7 @@ static void systemd_strip_dot(void)
+       else
+           *dot = '_';
+     }
++    return reload;
+ }
+ 
+ static int iter_get_and_next(DBusMessageIter *iter, int type, void *data)
+@@ -150,6 +155,7 @@ static int handle_one_property(sdserv_t
+       { "Conflicts",                  SDREL_CONFLICTS },
+       { "Before",                     SDREL_BEFORE    },
+       { "After",                      SDREL_AFTER     },
++      { "NeedDaemonReload",           SDREL_RELOAD    },
+       { (const char*)0,               0               }
+     };
+     const relation_t *relation = (relation_t*)0;
+@@ -189,7 +195,7 @@ static int handle_one_property(sdserv_t
+               // services are somehow scripts
+               // Wants -> Optional
+               // Requires/Requisite -> Requires
+-              // After -> ??
++              // After -> Start this one After ally
+ 
+               if ((dot = strrchr(ally, '.'))) {
+                   dot++;
+@@ -207,6 +213,17 @@ static int handle_one_property(sdserv_t
+ 
+           } while (TRUE);
+       }
++      break;
++    case DBUS_TYPE_BOOLEAN:
++      {
++          dbus_bool_t bool;
++          dbus_message_iter_get_basic(iter, &bool);
++#if 0
++          printf("\tboolean (%s)\t: \"%s\" -> \"%s (%d)\"\n", relation->tag, 
one->unit, prop, bool);
++#endif
++          if (bool) one->flags |= relation->flag;
++      }
++      break;
+     }
+     return 1;
+ failed:
+@@ -290,12 +307,12 @@ err:
+     return ret;
+ }
+ 
+-int systemd_get_tree(DBusConnection *bus)
++boolean systemd_get_tree(DBusConnection *bus)
+ {
+     DBusError error;
+     DBusMessage *reply, *send;
+     DBusMessageIter iter, isub;
+-    int ret = 0;
++    boolean ret = false;
+ 
+     dbus_error_init(&error);
+     send = dbus_message_new_method_call("org.freedesktop.systemd1",
+@@ -376,9 +393,8 @@ printf("id=%s ls=%s as=%s subs=%s fl=%s
+ 
+     } while (TRUE);
+ 
+-    systemd_strip_dot();
++    ret = systemd_strip_dot();
+ 
+-    ret = 1;
+     goto unref;
+ failed:
+     warn ("failed to parse reply from systemd\n");
+@@ -404,7 +420,8 @@ DBusConnection * systemd_open_conn(void)
        bus = dbus_bus_get_private(DBUS_BUS_SYSTEM, &error);
  
      if (!bus) {
@@ -46,7 +313,7 @@
        goto err;
      }
      dbus_connection_set_exit_on_disconnect(bus, FALSE);
-@@ -425,9 +426,9 @@ DBusConnection * systemd_open_conn(void)
+@@ -425,14 +442,75 @@ DBusConnection * systemd_open_conn(void)
      return bus;
  perm:
      warn ("can not connect to systemd: %m\n");
@@ -57,3 +324,100 @@
      if (dbus_error_is_set(&error))
        dbus_error_free(&error);
      return (DBusConnection*)0;
+ }
+ 
++void systemd_daemon_reload(DBusConnection *bus)
++{
++    DBusError error;
++    const char *command = "Reload";
++    DBusMessage *reply = (DBusMessage*)0, *send;
++
++    dbus_error_init(&error);
++    send = dbus_message_new_method_call("org.freedesktop.systemd1",
++                                      "/org/freedesktop/systemd1",
++                                      "org.freedesktop.systemd1.Manager",
++                                       command);
++    if (!send)
++      goto err;
++    dbus_message_set_auto_start(send, TRUE);
++    if (!dbus_message_set_destination(send, "org.freedesktop.systemd1"))
++      goto err;
++
++    reply = dbus_connection_send_with_reply_and_block(bus, send, -1, &error);
++    if (!reply)
++      goto err;
++    if (dbus_message_get_type(reply) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
++      goto err;
++    printf("Reload done\n");
++    dbus_message_unref(reply);
++    return;
++err:
++    if (reply)
++      dbus_message_unref(reply);
++    if (dbus_error_is_set(&error)) {
++      warn ("can not perfom systemd reload: %s\n", error.message);
++      dbus_error_free(&error);
++    }
++}
++
++#if 0
++void systemd_unit_handle(DBusConnection *bus, sdctl what, int argc, char 
*argv[])
++{
++    DBusError error;
++    DBusMessage *reply, *send;
++    DBusMessageIter iter;
++    const char *command;
++    const char *name;
++
++    if (what == enable)
++      command = "EnableUnitFiles";
++    else
++      command = "DisableUnitFiles";
++
++    dbus_error_init(&error);
++    send = dbus_message_new_method_call("org.freedesktop.systemd1",
++                                      "/org/freedesktop/systemd1",
++                                      "org.freedesktop.systemd1.Manager",
++                                       command);
++    if (!send)
++      goto err;
++    dbus_message_set_auto_start(send, TRUE);
++    if (!dbus_message_set_destination(send, "org.freedesktop.systemd1"))
++      goto err;
++}
++#endif
++
+ void systemd_close_conn(DBusConnection *bus)
+ {
+     if (bus) {
+--- systemd.h
++++ systemd.h  2012-11-16 14:44:43.702344315 +0000
+@@ -20,8 +20,12 @@
+  */
+ 
+ #include <dbus/dbus.h>
+-extern int systemd_get_tree(DBusConnection *bus);
++#define SYSTEMD_SERVICE_PATH      "/lib/systemd/system"
++#define SYSTEMD_BINARY_PATH       "/bin/systemd"
++
++extern boolean systemd_get_tree(DBusConnection *bus);
+ extern DBusConnection * systemd_open_conn(void);
++extern void systemd_daemon_reload(DBusConnection *bus);
+ extern void systemd_close_conn(DBusConnection *bus);
+ extern void systemd_free(void);
+ 
+@@ -39,6 +43,7 @@ typedef struct {
+ struct sdserv {
+     list_t    s_list;
+     list_t    a_list;
++    ushort     flags;
+     char       *unit;
+     char       *name;
+ };
+@@ -52,3 +57,6 @@ extern list_t sdservs;
+ #define       SDREL_BEFORE            (1<<4)      /* Before           */
+ #define SDREL_AFTER           (1<<5)      /* After            */
+ 
++#define SDREL_RELOAD          (1<<0)      /* Needs Daemon Reload      */
++
++typedef enum _sdctl {disable, enable} sdctl;

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to