Zbigniew Jędrzejewski-Szmek 794d16
From 5103e16f5e12e1754a2dcfabafb7618eb15ccf98 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 794d16
From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= <vpavlin@redhat.com>
Zbigniew Jędrzejewski-Szmek 794d16
Date: Wed, 2 Oct 2013 16:42:42 +0200
Zbigniew Jędrzejewski-Szmek 794d16
Subject: [PATCH] systemctl: fix name mangling for sysv units
Zbigniew Jędrzejewski-Szmek 794d16
Zbigniew Jędrzejewski-Szmek 794d16
---
Zbigniew Jędrzejewski-Szmek 794d16
 src/systemctl/systemctl.c | 45 ++++++++++++++++++---------------------------
Zbigniew Jędrzejewski-Szmek 794d16
 1 file changed, 18 insertions(+), 27 deletions(-)
Zbigniew Jędrzejewski-Szmek 794d16
Zbigniew Jędrzejewski-Szmek 794d16
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
Zbigniew Jędrzejewski-Szmek 794d16
index bb7ada9..d75281f 100644
Zbigniew Jędrzejewski-Szmek 794d16
--- a/src/systemctl/systemctl.c
Zbigniew Jędrzejewski-Szmek 794d16
+++ b/src/systemctl/systemctl.c
Zbigniew Jędrzejewski-Szmek 794d16
@@ -4218,11 +4218,10 @@ static int set_environment(DBusConnection *bus, char **args) {
Zbigniew Jędrzejewski-Szmek 794d16
         return 0;
Zbigniew Jędrzejewski-Szmek 794d16
 }
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-static int enable_sysv_units(char **args) {
Zbigniew Jędrzejewski-Szmek 794d16
+static int enable_sysv_units(const char *verb, char **args) {
Zbigniew Jędrzejewski-Szmek 794d16
         int r = 0;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
 #if defined(HAVE_SYSV_COMPAT) && defined(HAVE_CHKCONFIG)
Zbigniew Jędrzejewski-Szmek 794d16
-        const char *verb = args[0];
Zbigniew Jędrzejewski-Szmek 794d16
         unsigned f = 1, t = 1;
Zbigniew Jędrzejewski-Szmek 794d16
         LookupPaths paths = {};
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
@@ -4242,7 +4241,7 @@ static int enable_sysv_units(char **args) {
Zbigniew Jędrzejewski-Szmek 794d16
                 return r;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         r = 0;
Zbigniew Jędrzejewski-Szmek 794d16
-        for (f = 1; args[f]; f++) {
Zbigniew Jędrzejewski-Szmek 794d16
+        for (f = 0; args[f]; f++) {
Zbigniew Jędrzejewski-Szmek 794d16
                 const char *name;
Zbigniew Jędrzejewski-Szmek 794d16
                 _cleanup_free_ char *p = NULL, *q = NULL;
Zbigniew Jędrzejewski-Szmek 794d16
                 bool found_native = false, found_sysv;
Zbigniew Jędrzejewski-Szmek 794d16
@@ -4365,7 +4364,7 @@ finish:
Zbigniew Jędrzejewski-Szmek 794d16
         lookup_paths_free(&paths);
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         /* Drop all SysV units */
Zbigniew Jędrzejewski-Szmek 794d16
-        for (f = 1, t = 1; args[f]; f++) {
Zbigniew Jędrzejewski-Szmek 794d16
+        for (f = 0, t = 0; args[f]; f++) {
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
                 if (isempty(args[f]))
Zbigniew Jędrzejewski-Szmek 794d16
                         continue;
Zbigniew Jędrzejewski-Szmek 794d16
@@ -4423,16 +4422,16 @@ static int enable_unit(DBusConnection *bus, char **args) {
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         dbus_error_init(&error);
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-        r = enable_sysv_units(args);
Zbigniew Jędrzejewski-Szmek 794d16
-        if (r < 0)
Zbigniew Jędrzejewski-Szmek 794d16
-                return r;
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
         if (!args[1])
Zbigniew Jędrzejewski-Szmek 794d16
                 return 0;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         r = mangle_names(args+1, &mangled_names);
Zbigniew Jędrzejewski-Szmek 794d16
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 794d16
-                goto finish;
Zbigniew Jędrzejewski-Szmek 794d16
+                return r;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        r = enable_sysv_units(verb, mangled_names);
Zbigniew Jędrzejewski-Szmek 794d16
+        if (r < 0)
Zbigniew Jędrzejewski-Szmek 794d16
+                return r;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         if (!bus || avoid_bus()) {
Zbigniew Jędrzejewski-Szmek 794d16
                 if (streq(verb, "enable")) {
Zbigniew Jędrzejewski-Szmek 794d16
@@ -4624,11 +4623,15 @@ static int unit_is_enabled(DBusConnection *bus, char **args) {
Zbigniew Jędrzejewski-Szmek 794d16
         _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
Zbigniew Jędrzejewski-Szmek 794d16
         bool enabled;
Zbigniew Jędrzejewski-Szmek 794d16
         char **name;
Zbigniew Jędrzejewski-Szmek 794d16
-        char *n;
Zbigniew Jędrzejewski-Szmek 794d16
+        _cleanup_strv_free_ char **mangled_names = NULL;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         dbus_error_init(&error);
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-        r = enable_sysv_units(args);
Zbigniew Jędrzejewski-Szmek 794d16
+        r = mangle_names(args+1, &mangled_names);
Zbigniew Jędrzejewski-Szmek 794d16
+        if (r < 0)
Zbigniew Jędrzejewski-Szmek 794d16
+                return r;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        r = enable_sysv_units(args[0], mangled_names);
Zbigniew Jędrzejewski-Szmek 794d16
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 794d16
                 return r;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
@@ -4636,16 +4639,10 @@ static int unit_is_enabled(DBusConnection *bus, char **args) {
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         if (!bus || avoid_bus()) {
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-                STRV_FOREACH(name, args+1) {
Zbigniew Jędrzejewski-Szmek 794d16
+                STRV_FOREACH(name, mangled_names) {
Zbigniew Jędrzejewski-Szmek 794d16
                         UnitFileState state;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-                        n = unit_name_mangle(*name);
Zbigniew Jędrzejewski-Szmek 794d16
-                        if (!n)
Zbigniew Jędrzejewski-Szmek 794d16
-                                return log_oom();
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-                        state = unit_file_get_state(arg_scope, arg_root, n);
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-                        free(n);
Zbigniew Jędrzejewski-Szmek 794d16
+                        state = unit_file_get_state(arg_scope, arg_root, *name);
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
                         if (state < 0)
Zbigniew Jędrzejewski-Szmek 794d16
                                 return state;
Zbigniew Jędrzejewski-Szmek 794d16
@@ -4660,13 +4657,9 @@ static int unit_is_enabled(DBusConnection *bus, char **args) {
Zbigniew Jędrzejewski-Szmek 794d16
                 }
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         } else {
Zbigniew Jędrzejewski-Szmek 794d16
-                STRV_FOREACH(name, args+1) {
Zbigniew Jędrzejewski-Szmek 794d16
+                STRV_FOREACH(name, mangled_names) {
Zbigniew Jędrzejewski-Szmek 794d16
                         const char *s;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-                        n = unit_name_mangle(*name);
Zbigniew Jędrzejewski-Szmek 794d16
-                        if (!n)
Zbigniew Jędrzejewski-Szmek 794d16
-                                return log_oom();
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
                         r = bus_method_call_with_reply (
Zbigniew Jędrzejewski-Szmek 794d16
                                         bus,
Zbigniew Jędrzejewski-Szmek 794d16
                                         "org.freedesktop.systemd1",
Zbigniew Jędrzejewski-Szmek 794d16
@@ -4675,11 +4668,9 @@ static int unit_is_enabled(DBusConnection *bus, char **args) {
Zbigniew Jędrzejewski-Szmek 794d16
                                         "GetUnitFileState",
Zbigniew Jędrzejewski-Szmek 794d16
                                         &reply,
Zbigniew Jędrzejewski-Szmek 794d16
                                         NULL,
Zbigniew Jędrzejewski-Szmek 794d16
-                                        DBUS_TYPE_STRING, &n,
Zbigniew Jędrzejewski-Szmek 794d16
+                                        DBUS_TYPE_STRING, name,
Zbigniew Jędrzejewski-Szmek 794d16
                                         DBUS_TYPE_INVALID);
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-                        free(n);
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
                         if (r)
Zbigniew Jędrzejewski-Szmek 794d16
                                 return r;
Zbigniew Jędrzejewski-Szmek 794d16