]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-bus: make bus_set_address_user always go through sd_bus_set_address
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 18 Mar 2020 11:16:06 +0000 (12:16 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 18 Mar 2020 18:57:43 +0000 (19:57 +0100)
This way all the checks are done, and we don't leak a pointer if
bus_set_address_user() is called twice.

src/libsystemd/sd-bus/sd-bus.c

index 7ad03680f48d80d44adcf720412bbfa0e0fde887..e45334c83f447be26f9d6787a1deb477beb8b1f7 100644 (file)
@@ -980,9 +980,8 @@ static int parse_container_unix_address(sd_bus *b, const char **p, char **guid)
                         return -EINVAL;
 
                 free_and_replace(b->machine, machine);
-        } else {
+        } else
                 b->machine = mfree(b->machine);
-        }
 
         if (pid) {
                 r = parse_pid(pid, &b->nspid);
@@ -1271,10 +1270,7 @@ int bus_set_address_system(sd_bus *b) {
         assert(b);
 
         e = secure_getenv("DBUS_SYSTEM_BUS_ADDRESS");
-        if (e)
-                return sd_bus_set_address(b, e);
-
-        return sd_bus_set_address(b, DEFAULT_SYSTEM_BUS_ADDRESS);
+        return sd_bus_set_address(b, e ?: DEFAULT_SYSTEM_BUS_ADDRESS);
 }
 
 _public_ int sd_bus_open_system_with_description(sd_bus **ret, const char *description) {
@@ -1319,29 +1315,30 @@ _public_ int sd_bus_open_system(sd_bus **ret) {
 }
 
 int bus_set_address_user(sd_bus *b) {
-        const char *e;
-        _cleanup_free_ char *ee = NULL, *s = NULL;
+        const char *a;
+        _cleanup_free_ char *_a = NULL;
 
         assert(b);
 
-        e = secure_getenv("DBUS_SESSION_BUS_ADDRESS");
-        if (e)
-                return sd_bus_set_address(b, e);
-
-        e = secure_getenv("XDG_RUNTIME_DIR");
-        if (!e)
-                return -ENOENT;
+        a = secure_getenv("DBUS_SESSION_BUS_ADDRESS");
+        if (!a) {
+                const char *e;
+                _cleanup_free_ char *ee = NULL;
 
-        ee = bus_address_escape(e);
-        if (!ee)
-                return -ENOMEM;
+                e = secure_getenv("XDG_RUNTIME_DIR");
+                if (!e)
+                        return -ENOENT;
 
-        if (asprintf(&s, DEFAULT_USER_BUS_ADDRESS_FMT, ee) < 0)
-                return -ENOMEM;
+                ee = bus_address_escape(e);
+                if (!ee)
+                        return -ENOMEM;
 
-        b->address = TAKE_PTR(s);
+                if (asprintf(&_a, DEFAULT_USER_BUS_ADDRESS_FMT, ee) < 0)
+                        return -ENOMEM;
+                a = _a;
+        }
 
-        return 0;
+        return sd_bus_set_address(b, a);
 }
 
 _public_ int sd_bus_open_user_with_description(sd_bus **ret, const char *description) {