diff options
author | David Herrmann <dh.herrmann@gmail.com> | 2015-07-16 15:14:43 +0200 |
---|---|---|
committer | David Herrmann <dh.herrmann@gmail.com> | 2015-07-16 16:36:35 +0200 |
commit | e23bc0e7cac8ba79f4e14ab98ecd68c79cc87aab (patch) | |
tree | b16aaccf677c04381bb37ef72d5a21e690308185 /src/bus-proxyd/driver.c | |
parent | 2ec7c4279e4cbbe668c5dfb0ab447b74deaa294b (diff) |
bus-proxy: never pass on unmatched broadcasts
The lovely libvirtd goes into crazy mode if it receives broadcasts that
it didn't subscribe to. With bus-proxyd, this might happen in 2 cases:
1) The kernel passes us an unmatched signal due to a false-positive
bloom-match.
2) We generate NameOwnerChanged/NameAcquired/NameLost locally even
though the peer didn't subscribe to it.
dbus-daemon is reliable in what signals it passes on. So make sure we
follow that style. Never ever send a signal to a local peer if it doesn't
match an installed filter of that peer.
Diffstat (limited to 'src/bus-proxyd/driver.c')
-rw-r--r-- | src/bus-proxyd/driver.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/bus-proxyd/driver.c b/src/bus-proxyd/driver.c index 4ac955da41..1cb5ea5008 100644 --- a/src/bus-proxyd/driver.c +++ b/src/bus-proxyd/driver.c @@ -33,6 +33,7 @@ #include "strv.h" #include "set.h" #include "driver.h" +#include "proxy.h" #include "synthesize.h" static int get_creds_by_name(sd_bus *bus, const char *name, uint64_t mask, sd_bus_creds **_creds, sd_bus_error *error) { @@ -70,7 +71,7 @@ static int get_creds_by_message(sd_bus *bus, sd_bus_message *m, uint64_t mask, s return get_creds_by_name(bus, name, mask, _creds, error); } -int bus_proxy_process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPolicy *sp, const struct ucred *ucred, Set *owned_names) { +int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPolicy *sp, const struct ucred *ucred, Set *owned_names) { int r; assert(a); @@ -189,7 +190,7 @@ int bus_proxy_process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPoli if (r < 0) return synthetic_reply_method_errno(m, r, NULL); - r = sd_bus_add_match(a, NULL, match, NULL, NULL); + r = sd_bus_add_match(a, NULL, match, proxy_match, p); if (r < 0) return synthetic_reply_method_errno(m, r, NULL); |