]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-bus: internalize setting of bus is_system/is_user
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 24 May 2020 11:04:24 +0000 (13:04 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 25 May 2020 09:09:21 +0000 (11:09 +0200)
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
src/libsystemd/sd-bus/sd-bus.c

index 068e847170f4b46ec08da9069b22a38ed4125ca7..a4132b3345fe9045a2fb2869c32b10c8a44809a6 100644 (file)
@@ -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:
index 366f36645a192ad54a01e448cabd59326883f675..cd1a79a256dfadfeeca3bd28574c66bbb334eb0a 100644 (file)
@@ -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;