From: Lennart Poettering Date: Tue, 28 Nov 2023 22:29:50 +0000 (+0100) Subject: stdio-bridge: properly handle org.freedesktop.DBus.Local.Disconnected signal X-Git-Tag: v255~48 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0321248b79d14ceddd36140b327332f145ae68e7;p=platform%2Fupstream%2Fsystemd.git stdio-bridge: properly handle org.freedesktop.DBus.Local.Disconnected signal Previously, we'd forward org.freedesktop.DBus.Local.Disconnected like any other message to the other side. But that's not OK, as messages in the org.freedesktop.DBus.Local.* namespace are supposed to never touch the wire, and are synthetic messages that the library uses to communicate with the app, but never with other apps. dbus-daemon never cared, but dbus-broker complains about this, hence clean this up. See: #28514 --- diff --git a/src/stdio-bridge/stdio-bridge.c b/src/stdio-bridge/stdio-bridge.c index 48c29a6..ce2bd5f 100644 --- a/src/stdio-bridge/stdio-bridge.c +++ b/src/stdio-bridge/stdio-bridge.c @@ -182,10 +182,14 @@ static int run(int argc, char *argv[]) { assert_cc(sizeof(usec_t) == sizeof(uint64_t)); r = sd_bus_process(a, &m); + if (ERRNO_IS_NEG_DISCONNECT(r)) /* Treat 'connection reset by peer' as clean exit condition */ + break; if (r < 0) return log_error_errno(r, "Failed to process bus a: %m"); - if (m) { + if (sd_bus_message_is_signal(m, "org.freedesktop.DBus.Local", "Disconnected")) + break; + r = sd_bus_send(b, m, NULL); if (r < 0) return log_error_errno(r, "Failed to send message: %m"); @@ -195,13 +199,14 @@ static int run(int argc, char *argv[]) { continue; r = sd_bus_process(b, &m); - if (ERRNO_IS_NEG_DISCONNECT(r)) - /* Treat 'connection reset by peer' as clean exit condition */ - return 0; + if (ERRNO_IS_NEG_DISCONNECT(r)) /* Treat 'connection reset by peer' as clean exit condition */ + break; if (r < 0) return log_error_errno(r, "Failed to process bus: %m"); - if (m) { + if (sd_bus_message_is_signal(m, "org.freedesktop.DBus.Local", "Disconnected")) + break; + r = sd_bus_send(a, m, NULL); if (r < 0) return log_error_errno(r, "Failed to send message: %m");