1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-28 11:55:44 +03:00

bus: when proxying messages from the bus driver patch the driver's well-known name into the sender

This commit is contained in:
Lennart Poettering 2014-01-29 21:23:41 +01:00
parent e7b251913e
commit 7b217f41d2

View File

@ -395,6 +395,36 @@ static int process_hello(sd_bus *a, sd_bus *b, sd_bus_message *m, bool *got_hell
return 1; return 1;
} }
static int patch_sender(sd_bus *a, sd_bus_message *m) {
char **well_known = NULL;
sd_bus_creds *c;
int r;
assert(a);
assert(m);
if (!a->is_kernel)
return 0;
/* We will change the sender of messages from the bus driver
* so that they originate from the bus driver. This is a
* speciality originating from dbus1, where the bus driver did
* not have a unique id, but only the well-known name. */
c = sd_bus_message_get_creds(m);
if (!c)
return 0;
r = sd_bus_creds_get_well_known_names(c, &well_known);
if (r < 0)
return r;
if (strv_contains(well_known, "org.freedesktop.DBus"))
m->sender = "org.freedesktop.DBus";
return 0;
}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
_cleanup_bus_unref_ sd_bus *a = NULL, *b = NULL; _cleanup_bus_unref_ sd_bus *a = NULL, *b = NULL;
@ -612,6 +642,8 @@ int main(int argc, char *argv[]) {
goto finish; goto finish;
} }
patch_sender(a, m);
k = sd_bus_send(b, m, NULL); k = sd_bus_send(b, m, NULL);
if (k < 0) { if (k < 0) {
if (k == -ECONNRESET) if (k == -ECONNRESET)