From 062ac2ea85e466105c6aca4ea95e1d9a17422cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 24 May 2020 13:04:24 +0200 Subject: [PATCH] sd-bus: internalize setting of bus is_system/is_user Each of bus_set_address_{user,system} had two users, and each of the two users would set the internal flag manually. We should do that internally in the functions instead. While at it, only set the flag when setting the address is actually successful. This doesn't change anything for current users, but it seems more correct. --- src/busctl/busctl.c | 7 ++----- src/libsystemd/sd-bus/sd-bus.c | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/busctl/busctl.c b/src/busctl/busctl.c index 068e847170..a4132b3345 100644 --- a/src/busctl/busctl.c +++ b/src/busctl/busctl.c @@ -110,13 +110,10 @@ static int acquire_bus(bool set_monitor, sd_bus **ret) { switch (arg_transport) { case BUS_TRANSPORT_LOCAL: - if (arg_user) { - bus->is_user = true; + if (arg_user) r = bus_set_address_user(bus); - } else { - bus->is_system = true; + else r = bus_set_address_system(bus); - } break; case BUS_TRANSPORT_REMOTE: diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c index 366f36645a..cd1a79a256 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c @@ -1266,10 +1266,16 @@ _public_ int sd_bus_open(sd_bus **ret) { int bus_set_address_system(sd_bus *b) { const char *e; + int r; + assert(b); e = secure_getenv("DBUS_SYSTEM_BUS_ADDRESS"); - return sd_bus_set_address(b, e ?: DEFAULT_SYSTEM_BUS_ADDRESS); + + r = sd_bus_set_address(b, e ?: DEFAULT_SYSTEM_BUS_ADDRESS); + if (r >= 0) + b->is_system = true; + return r; } _public_ int sd_bus_open_system_with_description(sd_bus **ret, const char *description) { @@ -1293,7 +1299,6 @@ _public_ int sd_bus_open_system_with_description(sd_bus **ret, const char *descr return r; b->bus_client = true; - b->is_system = true; /* Let's do per-method access control on the system bus. We * need the caller's UID and capability set for that. */ @@ -1316,6 +1321,7 @@ _public_ int sd_bus_open_system(sd_bus **ret) { int bus_set_address_user(sd_bus *b) { const char *a; _cleanup_free_ char *_a = NULL; + int r; assert(b); @@ -1337,7 +1343,10 @@ int bus_set_address_user(sd_bus *b) { a = _a; } - return sd_bus_set_address(b, a); + r = sd_bus_set_address(b, a); + if (r >= 0) + b->is_user = true; + return r; } _public_ int sd_bus_open_user_with_description(sd_bus **ret, const char *description) { @@ -1361,7 +1370,6 @@ _public_ int sd_bus_open_user_with_description(sd_bus **ret, const char *descrip return r; b->bus_client = true; - b->is_user = true; /* We don't do any per-method access control on the user bus. */ b->trusted = true;