X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsystemctl%2Fsystemctl.c;h=729d4dd324ea1848f419da30e167f3dc3404880e;hb=d39b034af6f9795c4f17a8ddd186f026bb74193c;hp=17a8497dccd7174c3a15aa32068c7c6b3a986a29;hpb=67f3c40265471056d1e532c6d6e36a521b0a780a;p=elogind.git diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 17a8497dc..729d4dd32 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -63,6 +63,7 @@ #include "install.h" #include "logs-show.h" #include "path-util.h" +#include "socket-util.h" static const char *arg_type = NULL; static const char *arg_load_state = NULL; @@ -1321,7 +1322,10 @@ static int wait_for_jobs(DBusConnection *bus, Set *s) { return -ECONNREFUSED; } - if (!arg_quiet && d.result) { + if (!d.result) + goto free_name; + + if (!arg_quiet) { if (streq(d.result, "timeout")) log_error("Job for %s timed out.", strna(d.name)); else if (streq(d.result, "canceled")) @@ -1342,11 +1346,12 @@ static int wait_for_jobs(DBusConnection *bus, Set *s) { free(d.result); d.result = NULL; + free_name: free(d.name); d.name = NULL; } - /* This is slightly dirty, since we don't undo the filter registration. */ + dbus_connection_remove_filter(bus, wait_filter, &d); return r; } @@ -1440,22 +1445,26 @@ static void check_triggering_units( DBusConnection *bus, const char *unit_name) { - DBusMessage *reply = NULL; + DBusMessage _cleanup_dbus_msg_unref_ *reply = NULL; DBusMessageIter iter, sub; char *service_trigger = NULL; const char *interface = "org.freedesktop.systemd1.Unit", *triggered_by_property = "TriggeredBy"; - char *unit_path = NULL, *n = NULL; + char _cleanup_free_ *unit_path = NULL, *n = NULL; bool print_warning_label = true; int r; n = unit_name_mangle(unit_name); - unit_path = unit_dbus_path_from_name(n ? n : unit_name); - free(n); + if (!n) { + log_oom(); + return; + } + + unit_path = unit_dbus_path_from_name(n); if (!unit_path) { - log_error("Could not allocate dbus path."); - goto finish; + log_oom(); + return; } r = bus_method_call_with_reply ( @@ -1470,13 +1479,12 @@ static void check_triggering_units( DBUS_TYPE_STRING, &triggered_by_property, DBUS_TYPE_INVALID); if (r) - goto finish; + return; if (!dbus_message_iter_init(reply, &iter) || dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) { log_error("Failed to parse reply."); - goto finish; - + return; } dbus_message_iter_recurse(&iter, &sub); @@ -1487,14 +1495,14 @@ static void check_triggering_units( if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) { log_error("Failed to parse reply."); - goto finish; + return; } dbus_message_iter_get_basic(&sub, &service_trigger); r = check_one_unit(bus, service_trigger, true); if (r < 0) - goto finish; + return; if (r == 0) { if (print_warning_label) { log_warning("Warning: Stopping %s, but it can still be activated by:", unit_name); @@ -1505,11 +1513,6 @@ static void check_triggering_units( dbus_message_iter_next(&sub); } -finish: - if (reply) - dbus_message_unref(reply); - - free(unit_path); } static int start_unit_one( @@ -1520,7 +1523,7 @@ static int start_unit_one( DBusError *error, Set *s) { - DBusMessage *reply = NULL; + DBusMessage _cleanup_dbus_msg_unref_ *reply = NULL; const char *path; int r; _cleanup_free_ char *n, *p = NULL; @@ -1553,15 +1556,14 @@ static int start_unit_one( else log_error("Failed to issue method call: %s", bus_error_message(error)); - goto finish; + return r; } if (!dbus_message_get_args(reply, error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { log_error("Failed to parse reply: %s", bus_error_message(error)); - r = -EIO; - goto finish; + return -EIO; } if (need_daemon_reload(bus, n)) @@ -1570,15 +1572,13 @@ static int start_unit_one( if (s) { p = strdup(path); - if (!p) { - r = log_oom(); - goto finish; - } + if (!p) + return log_oom(); r = set_put(s, p); if (r < 0) { log_error("Failed to add path to set."); - goto finish; + return r; } p = NULL; @@ -1589,13 +1589,7 @@ static int start_unit_one( if (!arg_quiet && streq(method, "StopUnit")) check_triggering_units(bus, name); - r = 0; - -finish: - if (reply) - dbus_message_unref(reply); - - return r; + return 0; } static enum action verb_to_action(const char *verb) { @@ -3410,7 +3404,7 @@ static int enable_sysv_units(char **args) { * afterwards only the native units remain */ zero(paths); - r = lookup_paths_init(&paths, MANAGER_SYSTEM, false, NULL, NULL, NULL); + r = lookup_paths_init(&paths, SYSTEMD_SYSTEM, false, NULL, NULL, NULL); if (r < 0) return r;