]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bus-util: Log more information when connecting to a bus socket fails
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 8 Oct 2024 14:22:58 +0000 (16:22 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 9 Oct 2024 08:27:53 +0000 (10:27 +0200)
Let's log about which bus we're trying to connect to and what transport
we're using to do it.

30 files changed:
src/analyze/analyze-blame.c
src/analyze/analyze-critical-chain.c
src/analyze/analyze-dot.c
src/analyze/analyze-dump.c
src/analyze/analyze-fdstore.c
src/analyze/analyze-log-control.c
src/analyze/analyze-malloc.c
src/analyze/analyze-plot.c
src/analyze/analyze-security.c
src/analyze/analyze-service-watchdogs.c
src/analyze/analyze-time.c
src/busctl/busctl.c
src/cgls/cgls.c
src/firstboot/firstboot.c
src/home/homectl.c
src/hostname/hostnamectl.c
src/import/importctl.c
src/locale/localectl.c
src/login/inhibit.c
src/login/loginctl.c
src/machine/machinectl.c
src/mount/mount-tool.c
src/portable/portablectl.c
src/run/run.c
src/shared/bus-util.c
src/shared/bus-util.h
src/shared/cgroup-show.c
src/systemctl/systemctl-util.c
src/sysupdate/updatectl.c
src/timedate/timedatectl.c

index 81e5c590b9cc248453a61f46a533959c432b73f3..4d78ed405d7d4033950be6214277ae5175ae83ac 100644 (file)
@@ -14,7 +14,7 @@ int verb_blame(int argc, char *argv[], void *userdata) {
 
         r = acquire_bus(&bus, NULL);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         n = acquire_time_data(bus, /* require_finished = */ false, &times);
         if (n <= 0)
index 7d78de3d388d1fb36752104c4045bdb4236aa0d3..03c014d4023e69145b0a4e4c4f90ce30f2d1cb82 100644 (file)
@@ -200,7 +200,7 @@ int verb_critical_chain(int argc, char *argv[], void *userdata) {
 
         r = acquire_bus(&bus, NULL);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         n = acquire_time_data(bus, /* require_finished = */ true, &times);
         if (n <= 0)
index 9e92d59bceeeeb55b3318a9c20afa7cfd3255d11..b93bf4a9a5bb0b1dbc01e0583f56746e035d2b9f 100644 (file)
@@ -149,7 +149,7 @@ int verb_dot(int argc, char *argv[], void *userdata) {
 
         r = acquire_bus(&bus, NULL);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         r = expand_patterns(bus, strv_skip(argv, 1), &expanded_patterns);
         if (r < 0)
index 2642582903b0963128733ffd353b578a47d9017c..4ee547ed4c9699482943031b247bcf9ef4570c68 100644 (file)
@@ -123,7 +123,7 @@ int verb_dump(int argc, char *argv[], void *userdata) {
 
         r = acquire_bus(&bus, NULL);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         pager_open(arg_pager_flags);
 
index dc3d979d84e01981bc5ce8f69f66bd10983596a6..4cf015ab44c9abaa012715eb032b97753caea314 100644 (file)
@@ -98,7 +98,7 @@ int verb_fdstore(int argc, char *argv[], void *userdata) {
 
         r = acquire_bus(&bus, NULL);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         STRV_FOREACH(arg, strv_skip(argv, 1)) {
                 r = dump_fdstore(bus, *arg);
index cead0e833f5dafde7545158f4cee3bb45470dd46..854cf6cb806c2826027e7cb4729c71866671b303 100644 (file)
@@ -12,7 +12,7 @@ int verb_log_control(int argc, char *argv[], void *userdata) {
 
         r = acquire_bus(&bus, NULL);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         r = verb_log_control_common(bus, "org.freedesktop.systemd1", argv[0], argc == 2 ? argv[1] : NULL);
         if (r < 0)
index 5e6ff5bb9627cdc59a07887fce7803dce4b8f771..514526d14256a190e40a00b528d9f27d0c3452b9 100644 (file)
@@ -43,7 +43,7 @@ int verb_malloc(int argc, char *argv[], void *userdata) {
 
         r = acquire_bus(&bus, NULL);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         r = sd_bus_can_send(bus, SD_BUS_TYPE_UNIX_FD);
         if (r < 0)
index d14c40de60f7301a54193686778342796b75af4c..b8c83eeead6dcbe2b84186beeca4e66261ed6efe 100644 (file)
@@ -473,7 +473,7 @@ int verb_plot(int argc, char *argv[], void *userdata) {
 
         r = acquire_bus(&bus, &use_full_bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         n = acquire_boot_times(bus, /* require_finished = */ true, &boot);
         if (n < 0)
index f7e9b9421325246fb3a042e4689930d3d4c1086d..2ed23d0a4f27306312b1c9cfac7aa4424ee6901a 100644 (file)
@@ -2904,7 +2904,7 @@ int verb_security(int argc, char *argv[], void *userdata) {
         if (!arg_offline) {
                 r = acquire_bus(&bus, NULL);
                 if (r < 0)
-                        return bus_log_connect_error(r, arg_transport);
+                        return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
         }
 
         pager_open(arg_pager_flags);
index 6535eb1a894f7fb0426b4b281bf244499316bc7a..b1fad4328caa518b4aa6add38c52960ff19d6401 100644 (file)
@@ -16,7 +16,7 @@ int verb_service_watchdogs(int argc, char *argv[], void *userdata) {
 
         r = acquire_bus(&bus, NULL);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         if (argc == 1) {
                 /* get ServiceWatchdogs */
index c233b1f08558e9eb3a55a01dd0c1f8e738ddbc86..8135112dec42b1ae337e527c9a857546f0255414 100644 (file)
@@ -11,7 +11,7 @@ int verb_time(int argc, char *argv[], void *userdata) {
 
         r = acquire_bus(&bus, NULL);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         r = pretty_boot_time(bus, &buf);
         if (r < 0)
index 1b0b72085e6465e900053ef8e8b47ec9bd8c42ef..52649511f5cf949d402c5d73f8ea3fdddef96f26 100644 (file)
@@ -153,7 +153,7 @@ static int acquire_bus(bool set_monitor, sd_bus **ret) {
 
         r = sd_bus_start(bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         *ret = TAKE_PTR(bus);
 
index 70fa260246929ea1e66b6a0b8b9869c63ca25b40..1dcd316cdb379b08d80c72a5e496546661293b2f 100644 (file)
@@ -221,13 +221,12 @@ static int run(int argc, char *argv[]) {
                                         return log_error_errno(r, "Failed to mangle unit name: %m");
 
                                 if (!bus) {
+                                        RuntimeScope scope = arg_show_unit == SHOW_UNIT_USER ? RUNTIME_SCOPE_USER : RUNTIME_SCOPE_SYSTEM;
+
                                         /* Connect to the bus only if necessary */
-                                        r = bus_connect_transport_systemd(
-                                                        BUS_TRANSPORT_LOCAL, NULL,
-                                                        arg_show_unit == SHOW_UNIT_USER ? RUNTIME_SCOPE_USER : RUNTIME_SCOPE_SYSTEM,
-                                                        &bus);
+                                        r = bus_connect_transport_systemd(BUS_TRANSPORT_LOCAL, NULL, scope, &bus);
                                         if (r < 0)
-                                                return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL);
+                                                return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL, scope);
                                 }
 
                                 q = show_cgroup_get_unit_path_and_warn(bus, unit_name, &cgroup);
index 3bf11e7f214fe310a543883b5cf0f2556a90bcd5..5bdeecc96ce33276f6c3c96e31b36d25f0c70fad 100644 (file)
@@ -1558,7 +1558,7 @@ static int reload_system_manager(sd_bus **bus) {
         if (!*bus) {
                 r = bus_connect_transport_systemd(BUS_TRANSPORT_LOCAL, NULL, RUNTIME_SCOPE_SYSTEM, bus);
                 if (r < 0)
-                        return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL);
+                        return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL, RUNTIME_SCOPE_SYSTEM);
         }
 
         r = bus_service_manager_reload(*bus);
@@ -1581,7 +1581,7 @@ static int reload_vconsole(sd_bus **bus) {
         if (!*bus) {
                 r = bus_connect_transport_systemd(BUS_TRANSPORT_LOCAL, NULL, RUNTIME_SCOPE_SYSTEM, bus);
                 if (r < 0)
-                        return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL);
+                        return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL, RUNTIME_SCOPE_SYSTEM);
         }
 
         r = bus_wait_for_jobs_new(*bus, &w);
index 741e5d72b7a4dc5f8357f73ebf2f195534150d35..37bebe92b05c1aae664ffed6e1679dbdce50d088 100644 (file)
@@ -135,7 +135,7 @@ static int acquire_bus(sd_bus **bus) {
 
         r = bus_connect_transport(arg_transport, arg_host, RUNTIME_SCOPE_SYSTEM, bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, RUNTIME_SCOPE_SYSTEM);
 
         (void) sd_bus_set_allow_interactive_authorization(*bus, arg_ask_password);
 
index 1f98c975fe8821496d6fb6f88f2d63bfca8dad75..468172d90264e8687a7830548bf1008fa573e504 100644 (file)
@@ -813,7 +813,7 @@ static int run(int argc, char *argv[]) {
 
         r = bus_connect_transport(arg_transport, arg_host, RUNTIME_SCOPE_SYSTEM, &bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, RUNTIME_SCOPE_SYSTEM);
 
         return hostnamectl_main(bus, argc, argv);
 }
index 85903bb8c69c9ca52dbd2d5021173dca4fa6a430..ce0fbc6490692029b8b84167a0cfc9d91722fcc5 100644 (file)
@@ -1240,7 +1240,7 @@ static int run(int argc, char *argv[]) {
 
         r = bus_connect_transport(arg_transport, arg_host, RUNTIME_SCOPE_SYSTEM, &bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, RUNTIME_SCOPE_SYSTEM);
 
         (void) sd_bus_set_allow_interactive_authorization(bus, arg_ask_password);
 
index 9c0c2172aa0b7e2ceae71b45275a4489e7210ee9..36dbeb9daa89a1c67606085355abd0286db6a99e 100644 (file)
@@ -536,7 +536,7 @@ static int run(int argc, char *argv[]) {
 
         r = bus_connect_transport(arg_transport, arg_host, RUNTIME_SCOPE_SYSTEM, &bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, RUNTIME_SCOPE_SYSTEM);
 
         return localectl_main(bus, argc, argv);
 }
index 990bda0cfd259991d8e2fe7357cd54691992d23d..70950438d8a776a3160de91d89149d352d5bd248 100644 (file)
@@ -275,7 +275,7 @@ static int run(int argc, char *argv[]) {
 
         r = sd_bus_default_system(&bus);
         if (r < 0)
-                return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL);
+                return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL, RUNTIME_SCOPE_SYSTEM);
 
         (void) sd_bus_set_allow_interactive_authorization(bus, arg_ask_password);
 
index c538b61e0d82135f3809ad21358fa6d994de9836..cde2ed5caf580be4579e7dd5e2462345bed79c09 100644 (file)
@@ -1723,7 +1723,7 @@ static int run(int argc, char *argv[]) {
 
         r = bus_connect_transport(arg_transport, arg_host, RUNTIME_SCOPE_SYSTEM, &bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, RUNTIME_SCOPE_SYSTEM);
 
         (void) sd_bus_set_allow_interactive_authorization(bus, arg_ask_password);
 
index e6d773b7a09013992e0282e2a32fb38626dd6b11..7843b9aa630d71fd2a4dcc7a238d3dd51511a790 100644 (file)
@@ -2445,7 +2445,7 @@ static int run(int argc, char *argv[]) {
 
         r = bus_connect_transport(arg_transport, arg_host, RUNTIME_SCOPE_SYSTEM, &bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, RUNTIME_SCOPE_SYSTEM);
 
         (void) sd_bus_set_allow_interactive_authorization(bus, arg_ask_password);
 
index 278890dd6958a62761d7fb5385b9522c25c05a6a..5f9cf44b5df76e43b4ab65b7bf4ea2d4adf47af9 100644 (file)
@@ -1513,7 +1513,7 @@ static int run(int argc, char* argv[]) {
 
         r = bus_connect_transport_systemd(arg_transport, arg_host, arg_runtime_scope, &bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         (void) sd_bus_set_allow_interactive_authorization(bus, arg_ask_password);
 
index e4eb437b2ec29957a713dcfc95806273fedbdd49..5fd2621b524ac5c4b1942fd09b9500a95d6f5223 100644 (file)
@@ -229,7 +229,7 @@ static int acquire_bus(sd_bus **bus) {
 
         r = bus_connect_transport(arg_transport, arg_host, RUNTIME_SCOPE_SYSTEM, bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, RUNTIME_SCOPE_SYSTEM);
 
         (void) sd_bus_set_allow_interactive_authorization(*bus, arg_ask_password);
 
index 4370f897ecbe8b5202b84495a22b3cc61d8e7ca1..1f2938f9eae3099e00e8e4ca92915af0e94c06e4 100644 (file)
@@ -2439,7 +2439,7 @@ static int run(int argc, char* argv[]) {
         else
                 r = bus_connect_transport_systemd(arg_transport, arg_host, arg_runtime_scope, &bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
         (void) sd_bus_set_allow_interactive_authorization(bus, arg_ask_password);
 
index e3182e124f418317abab908164e32cf0a8f356a6..f4c4eed70702af9a33912a1bc29c541f66f049d8 100644 (file)
@@ -29,6 +29,7 @@
 #include "path-util.h"
 #include "socket-util.h"
 #include "stdio-util.h"
+#include "string-table.h"
 #include "uid-classification.h"
 
 static int name_owner_change_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
@@ -50,14 +51,14 @@ int bus_log_address_error(int r, BusTransport transport) {
                                       "Failed to set bus address: %m");
 }
 
-int bus_log_connect_error(int r, BusTransport transport) {
+int bus_log_connect_error(int r, BusTransport transport, RuntimeScope scope) {
         bool hint_vars = transport == BUS_TRANSPORT_LOCAL && r == -ENOMEDIUM,
              hint_addr = transport == BUS_TRANSPORT_LOCAL && ERRNO_IS_PRIVILEGE(r);
 
         return log_error_errno(r,
-                               r == hint_vars ? "Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)" :
-                               r == hint_addr ? "Failed to connect to bus: Operation not permitted (consider using --machine=<user>@.host --user to connect to bus of other user)" :
-                                                "Failed to connect to bus: %m");
+                               r == hint_vars ? "Failed to connect to %s scope bus via %s transport: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)" :
+                               r == hint_addr ? "Failed to connect to %s scope bus via %s transport: Operation not permitted (consider using --machine=<user>@.host --user to connect to bus of other user)" :
+                                                "Failed to connect to %s scope bus via %s transport: %m", runtime_scope_to_string(scope), bus_transport_to_string(transport));
 }
 
 int bus_async_unregister_and_exit(sd_event *e, sd_bus *bus, const char *name) {
@@ -944,3 +945,12 @@ int bus_message_read_id128(sd_bus_message *m, sd_id128_t *ret) {
                 return -EINVAL;
         }
 }
+
+static const char* const bus_transport_table[] = {
+        [BUS_TRANSPORT_LOCAL]   = "local",
+        [BUS_TRANSPORT_REMOTE]  = "remote",
+        [BUS_TRANSPORT_MACHINE] = "machine",
+        [BUS_TRANSPORT_CAPSULE] = "capsule",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(bus_transport, BusTransport);
index 9c6f01d8eb846467a6e8f3c7aa81ff7b86547a92..fbccb24314fe4c2a2d412f0afe62cbb93d75c7dd 100644 (file)
@@ -48,7 +48,7 @@ int bus_connect_transport(BusTransport transport, const char *host, RuntimeScope
 int bus_connect_transport_systemd(BusTransport transport, const char *host, RuntimeScope runtime_scope, sd_bus **bus);
 
 int bus_log_address_error(int r, BusTransport transport);
-int bus_log_connect_error(int r, BusTransport transport);
+int bus_log_connect_error(int r, BusTransport transport, RuntimeScope scope);
 
 #define bus_log_parse_error(r)                                  \
         log_error_errno(r, "Failed to parse bus message: %m")
@@ -84,3 +84,5 @@ int bus_creds_get_pidref(sd_bus_creds *c, PidRef *ret);
 int bus_query_sender_pidref(sd_bus_message *m, PidRef *ret);
 
 int bus_message_read_id128(sd_bus_message *m, sd_id128_t *ret);
+
+const char* bus_transport_to_string(BusTransport transport) _const_;
index 33fe222730f02735f8c723cc3cf040ade8b92228..3d7e936a91ed0d835cbf26f8cbc45bb934ce4e49 100644 (file)
@@ -434,7 +434,7 @@ int show_cgroup_get_path_and_warn(
 
                 r = bus_connect_transport_systemd(BUS_TRANSPORT_LOCAL, NULL, RUNTIME_SCOPE_SYSTEM, &bus);
                 if (r < 0)
-                        return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL);
+                        return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL, RUNTIME_SCOPE_SYSTEM);
 
                 r = show_cgroup_get_unit_path_and_warn(bus, unit, &root);
                 if (r < 0)
index 0b5881ccbbf629dbc875d36514173ce7a035dde4..1b1a96c0d5a7988415ad8dac0c14292a5fe002e3 100644 (file)
@@ -54,7 +54,7 @@ int acquire_bus(BusFocus focus, sd_bus **ret) {
                 else
                         r = bus_connect_transport(arg_transport, arg_host, arg_runtime_scope, &buses[focus]);
                 if (r < 0)
-                        return bus_log_connect_error(r, arg_transport);
+                        return bus_log_connect_error(r, arg_transport, arg_runtime_scope);
 
                 (void) sd_bus_set_allow_interactive_authorization(buses[focus], arg_ask_password);
         }
index af27d0dc80382137e28265dd951c591a28eaabad..363a81ac808b1855e79400f74cbb361985c19932 100644 (file)
@@ -1299,7 +1299,7 @@ static int run(int argc, char *argv[]) {
 
         r = bus_connect_transport(arg_transport, arg_host, RUNTIME_SCOPE_SYSTEM, &bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, RUNTIME_SCOPE_SYSTEM);
 
         if (arg_transport == BUS_TRANSPORT_LOCAL)
                 polkit_agent_open();
index 4dd00b667d9ddf7336045010b0d59be10876e4c2..e3c9af796e4eef68e8394be28394da64fc2c751f 100644 (file)
@@ -1063,7 +1063,7 @@ static int run(int argc, char *argv[]) {
 
         r = bus_connect_transport(arg_transport, arg_host, RUNTIME_SCOPE_SYSTEM, &bus);
         if (r < 0)
-                return bus_log_connect_error(r, arg_transport);
+                return bus_log_connect_error(r, arg_transport, RUNTIME_SCOPE_SYSTEM);
 
         (void) sd_bus_set_allow_interactive_authorization(bus, arg_ask_password);