File pacemaker-systemd-list-socket-units.patch of Package pacemaker.3577

commit ef8a5a799da250af058c8dfc8921d8aee25fc50c
Author: Ken Gaillot <kgaillot@redhat.com>
Date:   Fri Jun 24 15:20:19 2016 -0500

    Feature: libservices: include socket units when listing all systemd agents
    
    Socket unit support was added in e693d75, so they should be included in list

diff --git a/lib/services/systemd.c b/lib/services/systemd.c
index e1d5a82..050f740 100644
--- a/lib/services/systemd.c
+++ b/lib/services/systemd.c
@@ -106,16 +106,35 @@ systemd_cleanup(void)
     }
 }
 
+/*!
+ * \internal
+ * \brief Check whether a file name represents a systemd unit
+ *
+ * \param[in] name  File name to check
+ *
+ * \return Pointer to "dot" before filename extension if so, NULL otherwise
+ */
+static const char *
+systemd_unit_extension(const char *name)
+{
+    if (name) {
+        const char *dot = strrchr(name, '.');
+
+        if (dot && (!strcmp(dot, ".service") || !strcmp(dot, ".socket"))) {
+            return dot;
+        }
+    }
+    return NULL;
+}
+
 static char *
 systemd_service_name(const char *name)
 {
     if (name == NULL) {
         return NULL;
+    }
 
-    } else if (strstr(name, ".service")) {
-        return strdup(name);
-
-    } else if (strstr(name, ".socket")) {
+    if (systemd_unit_extension(name)) {
         return strdup(name);
     }
 
@@ -360,15 +379,21 @@ systemd_unit_listall(void)
         }
 
         dbus_message_iter_get_basic(&elem, &value);
-        crm_trace("Got: %s", value.str);
+        crm_trace("DBus ListUnits listed: %s", value.str);
         if(value.str) {
-            char *match = strstr(value.str, ".service");
+            const char *match = systemd_unit_extension(value.str);
 
             if (match) {
+                char *unit_name;
+
+                if (!strcmp(match, ".service")) {
+                    /* service is the "default" unit type, so strip it */
+                    unit_name = strndup(value.str, match - value.str);
+                } else {
+                    unit_name = strdup(value.str);
+                }
                 lpc++;
-                match[0] = 0;
-
-                units = g_list_append(units, strdup(value.str));
+                units = g_list_append(units, unit_name);
             }
         }
         dbus_message_iter_next (&unit);
openSUSE Build Service is sponsored by