mirror of
https://github.com/systemd/systemd.git
synced 2024-12-25 01:34:28 +03:00
bus: fix arg0path= two-way matching
DBus spec clearly defines arg0path= to be a two-way matching. That is, either the matcher or the matchee can be a prefix of the other to match. This is not possible to implement with bloom-filters. Instead, we'd have to add a separate filter for each prefix. This is non-trivial, though. Hence, just skip the match for now and match locally.
This commit is contained in:
parent
7cd4dbe9ca
commit
a867b00226
@ -1310,11 +1310,18 @@ int bus_add_match_internal_kernel(
|
||||
}
|
||||
|
||||
case BUS_MATCH_ARG_PATH...BUS_MATCH_ARG_PATH_LAST: {
|
||||
char buf[sizeof("arg")-1 + 2 + sizeof("-slash-prefix")];
|
||||
|
||||
xsprintf(buf, "arg%i-slash-prefix", c->type - BUS_MATCH_ARG_PATH);
|
||||
bloom_add_pair(bloom, bus->bloom_size, bus->bloom_n_hash, buf, c->value_str);
|
||||
using_bloom = true;
|
||||
/*
|
||||
* XXX: DBus spec defines arg[0..63]path= matching to be
|
||||
* a two-way glob. That is, if either string is a prefix
|
||||
* of the other, it matches.
|
||||
* This is really hard to realize in bloom-filters, as
|
||||
* we would have to create a bloom-match for each prefix
|
||||
* of @c->value_str. This is excessive, hence we just
|
||||
* ignore all those matches and accept everything from
|
||||
* the kernel. People should really avoid those matches.
|
||||
* If they're used in real-life some day, we will have
|
||||
* to properly support multiple-matches here.
|
||||
*/
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user