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:
parent
e7b251913e
commit
7b217f41d2
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user