summaryrefslogtreecommitdiff
path: root/src/systemctl
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemctl')
-rw-r--r--src/systemctl/systemctl.c111
1 files changed, 57 insertions, 54 deletions
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 952be1d11f..f2da2ad604 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -1502,20 +1502,19 @@ finish:
static int get_unit_path(
DBusConnection *bus,
- DBusError *error,
const char *name,
char **unit_path) {
+ DBusError error;
DBusMessage *m = NULL, *reply = NULL;
+ char *path;
int r = 0;
assert(bus);
- assert(error);
assert(name);
assert(unit_path);
- *unit_path = NULL;
-
+ dbus_error_init(&error);
m = dbus_message_new_method_call("org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
@@ -1528,34 +1527,33 @@ static int get_unit_path(
}
if (!dbus_message_append_args(m,
- DBUS_TYPE_STRING, &name,
- DBUS_TYPE_INVALID)) {
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_INVALID)) {
log_error("Could not append arguments to message.");
r = -ENOMEM;
goto finish;
}
- reply = dbus_connection_send_with_reply_and_block(bus, m, -1, error);
+ reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
if (!reply) {
- if (streq(error->name, BUS_ERROR_NO_SUCH_UNIT)) {
- dbus_error_free(error);
+ if (streq(error.name, BUS_ERROR_NO_SUCH_UNIT))
r = -EINVAL;
- } else {
- log_error("Failed to issue method call: %s", bus_error_message(error));
+ else {
+ log_error("Failed to issue method call: %s", bus_error_message(&error));
r = -EIO;
}
goto finish;
}
- if (!dbus_message_get_args(reply, error,
- DBUS_TYPE_OBJECT_PATH, unit_path,
- DBUS_TYPE_INVALID)) {
- log_error("Failed to parse reply: %s", bus_error_message(error));
+ 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;
}
- *unit_path = strdup(*unit_path);
+ *unit_path = strdup(path);
if (!(*unit_path)) {
log_error("Failed to duplicate unit path");
r = -ENOMEM;
@@ -1565,14 +1563,17 @@ finish:
dbus_message_unref(m);
if (reply)
dbus_message_unref(reply);
+
+ dbus_error_free(&error);
+
return r;
}
static int is_socket_listening(
DBusConnection *bus,
- DBusError *error,
const char *socket_name) {
+ DBusError error;
DBusMessage *m = NULL, *reply = NULL;
DBusMessageIter iter, sub;
char *socket_object_path = NULL;
@@ -1582,12 +1583,14 @@ static int is_socket_listening(
int r = 0;
assert(bus);
- assert(error);
assert(socket_name);
- if ((r = get_unit_path(bus, error, socket_name, &socket_object_path)) < 0) {
+ dbus_error_init(&error);
+
+ r = get_unit_path(bus, socket_name, &socket_object_path);
+ if (r < 0)
goto finish;
- }
+
m = dbus_message_new_method_call("org.freedesktop.systemd1",
socket_object_path,
"org.freedesktop.DBus.Properties",
@@ -1599,17 +1602,17 @@ static int is_socket_listening(
}
if (!dbus_message_append_args(m,
- DBUS_TYPE_STRING, &interface,
- DBUS_TYPE_STRING, &property,
- DBUS_TYPE_INVALID)) {
+ DBUS_TYPE_STRING, &interface,
+ DBUS_TYPE_STRING, &property,
+ DBUS_TYPE_INVALID)) {
log_error("Could not append arguments to message.");
r = -ENOMEM;
goto finish;
}
- reply = dbus_connection_send_with_reply_and_block(bus, m, -1, error);
+ reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
if (!reply) {
- log_error("Failed to issue method call: %s", bus_error_message(error));
+ log_error("Failed to issue method call: %s", bus_error_message(&error));
r = -EIO;
goto finish;
}
@@ -1618,7 +1621,7 @@ static int is_socket_listening(
dbus_message_iter_recurse(&iter, &sub);
if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) {
- log_error("Failed to parse reply: %s", bus_error_message(error));
+ log_error("Failed to parse reply: %s", bus_error_message(&error));
r = -EIO;
goto finish;
}
@@ -1631,15 +1634,17 @@ finish:
if (reply)
dbus_message_unref(reply);
+ dbus_error_free(&error);
+
free(socket_object_path);
return r;
}
static void check_listening_sockets(
DBusConnection *bus,
- DBusError *error,
const char *unit_name) {
+ DBusError error;
DBusMessage *m = NULL, *reply = NULL;
DBusMessageIter iter, sub;
const char *service_trigger = NULL,
@@ -1647,11 +1652,12 @@ static void check_listening_sockets(
*triggered_by_property = "TriggeredBy";
char *unit_path = NULL;
- int print_warning_label = 1;
+ bool print_warning_label = true;
+
+ dbus_error_init(&error);
- if ((get_unit_path(bus, error, unit_name, &unit_path) < 0)) {
+ if (get_unit_path(bus, unit_name, &unit_path) < 0)
goto finish;
- }
m = dbus_message_new_method_call("org.freedesktop.systemd1",
unit_path,
@@ -1663,22 +1669,22 @@ static void check_listening_sockets(
}
if (!dbus_message_append_args(m,
- DBUS_TYPE_STRING, &interface,
- DBUS_TYPE_STRING, &triggered_by_property,
- DBUS_TYPE_INVALID)) {
+ DBUS_TYPE_STRING, &interface,
+ DBUS_TYPE_STRING, &triggered_by_property,
+ DBUS_TYPE_INVALID)) {
log_error("Could not append arguments to message.");
goto finish;
}
- reply = dbus_connection_send_with_reply_and_block(bus, m, -1, error);
+ reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
if (!reply) {
- log_error("Failed to issue method call: %s", bus_error_message(error));
+ log_error("Failed to issue method call: %s", bus_error_message(&error));
goto finish;
}
if (!dbus_message_iter_init(reply, &iter) ||
- dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
- log_error("Failed to parse reply: %s", bus_error_message(error));
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
+ log_error("Failed to parse reply: %s", bus_error_message(&error));
goto finish;
}
@@ -1688,33 +1694,29 @@ static void check_listening_sockets(
sub = iter;
while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID) {
- int r = 0;
+ int r;
if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) {
- log_error("Failed to parse reply: %s", bus_error_message(error));
+ log_error("Failed to parse reply: %s", bus_error_message(&error));
goto finish;
}
dbus_message_iter_get_basic(&sub, &service_trigger);
- if (endswith(service_trigger, ".socket")) {
- r = is_socket_listening(bus, error, service_trigger);
- } else {
- dbus_message_iter_recurse(&iter, &sub);
- iter = sub;
- continue;
- }
+ if (!endswith(service_trigger, ".socket"))
+ goto next;
+ r = is_socket_listening(bus, service_trigger);
+ if (r < 0)
+ goto finish;
if (r == 1) {
if (print_warning_label) {
log_warning("There are listening sockets associated with %s :", unit_name);
- print_warning_label = 0;
+ print_warning_label = false;
}
- log_warning("%s",service_trigger);
- } else if (r < 0) {
- log_error("Failed to issue function call: %s", bus_error_message(error));
- goto finish;
+ log_warning("%s", service_trigger);
}
+next:
dbus_message_iter_recurse(&iter, &sub);
iter = sub;
}
@@ -1725,6 +1727,8 @@ finish:
if (reply)
dbus_message_unref(reply);
+ dbus_error_free(&error);
+
free(unit_path);
}
@@ -1809,9 +1813,8 @@ static int start_unit_one(
}
/* When stopping unit check if we have some listening sockets active */
- if (streq(method, "StopUnit") && !arg_quiet) {
- check_listening_sockets(bus, error, name);
- }
+ if (streq(method, "StopUnit") && !arg_quiet)
+ check_listening_sockets(bus, name);
r = 0;