summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-07-31 17:56:02 +0200
committerLennart Poettering <lennart@poettering.net>2015-07-31 17:56:02 +0200
commitaba8a9d1d26cc1cab2ebbeb3f1e557b5a6afdc6b (patch)
tree6b50faef14033bb472e6c061af97ab6fedcee5a6
parent10189fd6be0f547d75bc857860f3ecbbdbc447a6 (diff)
parent970ad53dd63516c0fa76c772f58662902c044dcb (diff)
downloadsystemd-aba8a9d1d26cc1cab2ebbeb3f1e557b5a6afdc6b.tar.gz
Merge pull request #806 from dvdhrm/proxy-cookie
bus-proxy: fix cookie namespacing
-rw-r--r--src/bus-proxyd/driver.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/src/bus-proxyd/driver.c b/src/bus-proxyd/driver.c
index 133454ddbf..ad164a5e02 100644
--- a/src/bus-proxyd/driver.c
+++ b/src/bus-proxyd/driver.c
@@ -610,6 +610,7 @@ int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m,
_cleanup_bus_message_unref_ sd_bus_message *msg = NULL;
ProxyActivation *activation;
const char *name;
+ uint64_t cookie;
uint32_t flags;
if (!sd_bus_message_has_signature(m, "su"))
@@ -631,19 +632,33 @@ int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m,
if (p->n_activations >= PROXY_ACTIVATIONS_MAX)
return synthetic_reply_method_errno(m, -EMFILE, NULL);
+ r = sd_bus_message_get_cookie(m, &cookie);
+ if (r < 0)
+ return synthetic_reply_method_errno(m, r, NULL);
+
+ r = sd_bus_message_new_method_call(a,
+ &msg,
+ name,
+ "/",
+ "org.freedesktop.DBus.Peer",
+ "Ping");
+ if (r < 0)
+ return synthetic_reply_method_errno(m, r, NULL);
+
+ r = bus_message_seal(msg, cookie, BUS_DEFAULT_TIMEOUT);
+ if (r < 0)
+ return synthetic_reply_method_errno(m, r, NULL);
+
activation = new0(ProxyActivation, 1);
if (!activation)
return synthetic_reply_method_errno(m, -ENOMEM, NULL);
- r = sd_bus_call_method_async(a,
- &activation->slot,
- name,
- "/",
- "org.freedesktop.DBus.Peer",
- "Ping",
- driver_activation,
- activation,
- NULL);
+ r = sd_bus_call_async(a,
+ &activation->slot,
+ msg,
+ driver_activation,
+ activation,
+ 0);
if (r < 0) {
free(activation);
return synthetic_reply_method_errno(m, r, NULL);