diff options
author | Simon McVittie <smcv@collabora.com> | 2017-07-19 15:53:17 +0100 |
---|---|---|
committer | Simon McVittie <smcv@debian.org> | 2017-07-28 11:24:20 +0100 |
commit | 7424c3499f1cfafabfca49710e757eb43813f65e (patch) | |
tree | b4ddb57785ada4a7ec4e4093c918964fcda9d9bf /bus/config-parser.c | |
parent | 2d3f751716c64c3d7997bbcd362df5e4a6b1d63e (diff) | |
download | dbus-7424c3499f1cfafabfca49710e757eb43813f65e.tar.gz |
Add send_broadcast as an attribute of <allow> and <deny> elements
<allow send_broadcast="true" ...> only matches broadcasts,
which are signals with a NULL destination. There was previously
no way for the policy language to express "NULL destination",
only "any destination".
<allow send_broadcast="false" ...> only matches non-broadcasts,
which are non-signals or signals with a non-NULL destination.
There was previously no way for the policy language to express
"any non-NULL destination", only "any destination".
Reviewed-by: Philip Withnall <withnall@endlessm.com>
[smcv: improved documentation as per Philip's review]
Signed-off-by: Simon McVittie <smcv@collabora.com>
Reviewed-by: Thiago Macieira <thiago@kde.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=92853
Diffstat (limited to 'bus/config-parser.c')
-rw-r--r-- | bus/config-parser.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/bus/config-parser.c b/bus/config-parser.c index 4dc7d927..52576e9d 100644 --- a/bus/config-parser.c +++ b/bus/config-parser.c @@ -1294,6 +1294,7 @@ append_rule_from_element (BusConfigParser *parser, const char *send_path; const char *send_type; const char *send_requested_reply; + const char *send_broadcast; /* TRUE if any send_ attribute is present */ dbus_bool_t any_send_attribute; @@ -1331,6 +1332,7 @@ append_rule_from_element (BusConfigParser *parser, "send_destination", &send_destination, "send_path", &send_path, "send_type", &send_type, + "send_broadcast", &send_broadcast, "receive_interface", &receive_interface, "receive_member", &receive_member, "receive_error", &receive_error, @@ -1349,6 +1351,7 @@ append_rule_from_element (BusConfigParser *parser, return FALSE; any_send_attribute = (send_destination != NULL || + send_broadcast != NULL || send_path != NULL || send_type != NULL || send_interface != NULL || @@ -1399,7 +1402,7 @@ append_rule_from_element (BusConfigParser *parser, * interface + member * error * - * base send_ can combine with send_destination, send_path, send_type, send_requested_reply, eavesdrop + * base send_ can combine with send_destination, send_path, send_type, send_requested_reply, send_broadcast, eavesdrop * base receive_ with receive_sender, receive_path, receive_type, receive_requested_reply, eavesdrop * * user, group, own, own_prefix must occur alone @@ -1496,6 +1499,16 @@ append_rule_from_element (BusConfigParser *parser, return FALSE; } + if (send_broadcast && + !(strcmp (send_broadcast, "true") == 0 || + strcmp (send_broadcast, "false") == 0)) + { + dbus_set_error (error, DBUS_ERROR_FAILED, + "Bad value \"%s\" for %s attribute, must be true or false", + send_broadcast, "send_broadcast"); + return FALSE; + } + if (send_requested_reply && !(strcmp (send_requested_reply, "true") == 0 || strcmp (send_requested_reply, "false") == 0)) @@ -1519,6 +1532,18 @@ append_rule_from_element (BusConfigParser *parser, if (send_requested_reply) rule->d.send.requested_reply = (strcmp (send_requested_reply, "true") == 0); + if (send_broadcast) + { + if (strcmp (send_broadcast, "true") == 0) + rule->d.send.broadcast = BUS_POLICY_TRISTATE_TRUE; + else + rule->d.send.broadcast = BUS_POLICY_TRISTATE_FALSE; + } + else + { + rule->d.send.broadcast = BUS_POLICY_TRISTATE_ANY; + } + rule->d.send.message_type = message_type; rule->d.send.path = _dbus_strdup (send_path); rule->d.send.interface = _dbus_strdup (send_interface); |