]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bus-proxy: fix NameAcquired and NameLost to be directed
authorDavid Herrmann <dh.herrmann@gmail.com>
Fri, 31 Jul 2015 09:12:52 +0000 (11:12 +0200)
committerDavid Herrmann <dh.herrmann@gmail.com>
Fri, 31 Jul 2015 11:28:21 +0000 (13:28 +0200)
The NameAcquired and NameLost signals are _directed_ signals. Make sure
we properly set the destination correctly, and verify it in our
proxy-test.

src/bus-proxyd/proxy.c
src/bus-proxyd/synthesize.c
src/libsystemd/sd-bus/test-bus-proxy.c

index c37b09b9c0ad33ea5b83919365fa5e8207684c1e..425af658734ce6b39bd178a8a22f45809cc166f5 100644 (file)
@@ -644,6 +644,10 @@ static int process_hello(Proxy *p, sd_bus_message *m) {
         if (r < 0)
                 return log_error_errno(r, "Failed to append sender to NameAcquired message: %m");
 
+        r = sd_bus_message_set_destination(n, p->destination_bus->unique_name);
+        if (r < 0)
+                return log_error_errno(r, "Failed to set destination for NameAcquired message: %m");
+
         r = bus_seal_synthetic_message(p->local_bus, n);
         if (r < 0)
                 return log_error_errno(r, "Failed to seal NameAcquired message: %m");
index 3ecedfd575322798803cb3fd47d8b85c8a20a277..c26de9af6a3bc5f9de3d813d679f9699da624991 100644 (file)
@@ -214,6 +214,10 @@ int synthesize_name_acquired(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m)
         if (r < 0)
                 return r;
 
+        r = sd_bus_message_set_destination(n, a->unique_name);
+        if (r < 0)
+                return r;
+
         r = bus_seal_synthetic_message(b, n);
         if (r < 0)
                 return r;
index 369c2f331cd9edf5bf337291b5940a345a3b6bf1..aef768dc185fe9c05daca89be13670ce0d2e625e 100644 (file)
@@ -53,7 +53,9 @@ static int test_proxy_acquired(sd_bus_message *m, void *userdata, sd_bus_error *
 
 static void test_proxy_matched(void) {
         _cleanup_bus_flush_close_unref_ sd_bus *a = NULL;
+        _cleanup_free_ char *matchstr = NULL;
         TestProxyMatch match = {};
+        const char *me;
         int r;
 
         /* open bus 'a' */
@@ -70,10 +72,17 @@ static void test_proxy_matched(void) {
         r = sd_bus_start(a);
         assert_se(r >= 0);
 
-        r = sd_bus_add_match(a, NULL,
-                             "type='signal',"
-                             "member='NameAcquired'",
-                             test_proxy_acquired, &match);
+        r = sd_bus_get_unique_name(a, &me);
+        assert_se(r >= 0);
+
+        matchstr = strjoin("type='signal',"
+                           "member='NameAcquired',"
+                           "destination='",
+                           me,
+                           "'",
+                           NULL);
+        assert_se(matchstr);
+        r = sd_bus_add_match(a, NULL, matchstr, test_proxy_acquired, &match);
         assert_se(r >= 0);
 
         r = sd_bus_get_unique_name(a, &match.sender);