diff --git a/src/libsystemd/sd-bus/bus-convenience.c b/src/libsystemd/sd-bus/bus-convenience.c index 81892c3254..989e577de5 100644 --- a/src/libsystemd/sd-bus/bus-convenience.c +++ b/src/libsystemd/sd-bus/bus-convenience.c @@ -655,7 +655,7 @@ _public_ int sd_bus_query_sender_creds(sd_bus_message *call, uint64_t mask, sd_b c = sd_bus_message_get_creds(call); /* All data we need? */ - if (c && (mask & ~c->mask) == 0) { + if (c && (mask & ~SD_BUS_CREDS_AUGMENT & ~c->mask) == 0) { *ret = sd_bus_creds_ref(c); return 0; } diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c index 7a2303350c..77b2e1a0fd 100644 --- a/src/libsystemd/sd-bus/bus-error.c +++ b/src/libsystemd/sd-bus/bus-error.c @@ -599,7 +599,7 @@ const char* _bus_error_message(const sd_bus_error *e, int error, char buf[static static bool map_ok(const sd_bus_error_map *map) { for (; map->code != BUS_ERROR_MAP_END_MARKER; map++) - if (!map->name || map->code <=0) + if (!map->name || map->code <= 0) return false; return true; } diff --git a/src/libsystemd/sd-bus/test-bus-chat.c b/src/libsystemd/sd-bus/test-bus-chat.c index 4b457fd76b..da1340fe59 100644 --- a/src/libsystemd/sd-bus/test-bus-chat.c +++ b/src/libsystemd/sd-bus/test-bus-chat.c @@ -106,6 +106,7 @@ static int server(sd_bus *_bus) { while (!client1_gone || !client2_gone) { _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; + _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL; pid_t pid = 0; const char *label = NULL; @@ -122,8 +123,16 @@ static int server(sd_bus *_bus) { if (!m) continue; - (void) sd_bus_creds_get_pid(sd_bus_message_get_creds(m), &pid); - (void) sd_bus_creds_get_selinux_context(sd_bus_message_get_creds(m), &label); + r = sd_bus_query_sender_creds(m, SD_BUS_CREDS_AUGMENT | SD_BUS_CREDS_PID | SD_BUS_CREDS_SELINUX_CONTEXT, &creds); + if (r < 0) + log_debug_errno(r, "Failed to query sender credentials, ignoring: %m"); + else { + r = sd_bus_creds_get_pid(creds, &pid); + if (r < 0) + return log_error_errno(r, "Failed to get sender pid: %m"); + + (void) sd_bus_creds_get_selinux_context(creds, &label); + } log_info("Got message! member=%s pid="PID_FMT" label=%s", strna(sd_bus_message_get_member(m)), @@ -421,9 +430,12 @@ static void* client2(void *p) { r = sd_bus_call(bus, m, 200 * USEC_PER_MSEC, &error, &reply); if (r < 0) - log_info("Failed to issue method call: %s", bus_error_message(&error, r)); - else - log_info("Slow call succeed."); + log_debug("Failed to issue method call: %s", bus_error_message(&error, r)); + else { + log_error("Slow call unexpectedly succeed."); + r = -ENOANO; + goto finish; + } m = sd_bus_message_unref(m); diff --git a/src/libsystemd/sd-bus/test-bus-peersockaddr.c b/src/libsystemd/sd-bus/test-bus-peersockaddr.c index 4774ef6a4c..79556e8a85 100644 --- a/src/libsystemd/sd-bus/test-bus-peersockaddr.c +++ b/src/libsystemd/sd-bus/test-bus-peersockaddr.c @@ -65,7 +65,7 @@ static void *server(void *p) { continue; } - if (sd_bus_message_is_method_call(m, "foo.foo", "Foo") > 0) { + if (m && sd_bus_message_is_method_call(m, "foo.foo", "Foo") > 0) { assert_se(sd_bus_reply_method_return(m, "s", "bar") >= 0); break; }