Re: [RFE] Support signaling only connections owned by specific uid

David Rheinsberg <[email protected]>
Newsgroups gmane.comp.freedesktop.dbus
Message-ID <CADyDSO42Y4XYf0veEq-i7L1cMSULEo1FFUFFfRKPBdvPNRiTLg@mail.gmail.com>
Hey

On Thu, 8 Apr 2021 at 13:57, Pavel Březina <[email protected]> wrote:
>
> On 4/8/21 11:22 AM, David Rheinsberg wrote:
> > Hi
> >
> > On Thu, 8 Apr 2021 at 11:12, Bogdan Lotko <[email protected]> wrote:
> >> I don't know the details, but is it not much more simple to make a
> >> broadcast and process the message only in applications that belong to
> >> specified user?
> >
> > To extend on that, a simple solution is to only broadcast public
> > information and require callers to request more data via a
> > method-call. This method-call can then be guarded by uid verification,
> > etc. The D-Bus `PropertiesChanged` signal allows for a simple solution
> > by utilizing the `invalidated-properties` feature, rather than
> > including payload directly in the signal.
>
> This is not possible. The signal itself is private information, so it
> needs to be delivered only to the user processes.

If the mere fact that the signal _happened_ is already private
information, this might indeed not be suitable. In all other cases,
this is IMO a neat way to get this behavior _now_.

> > On a different note, you can always send directed-signals as unicasts
> > to all interested/authorized parties. These will not be proper
> > multicasts, though, thus subject to re-ordering.
>
> Yes, as I wrote in the description, there are solutions to workaround
> lack of this functionality. However, it all requires lots of additional
> work to manage subscribed parties and it also requires sending a single
> message to each subscriber which may become a bottleneck if sssd-kcm
> notifications are overused.

Speaking about `dbus-broker`, the algorithmic complexity remains
`O(n)` with `n` being the number of receivers. I think this is true
for dbus-daemon as well, so I don't think you need to worry about
performance bottlenecks.

> Therefore we want to pursue this RFE in dbus if possible. Notifications
> are signals, so the proper implementation should be based on signals. We
> just need to limit the broadcast a little bit.

FYI: Broadcasts and signals are not synonymous in D-Bus, even though
they are often treated as such. Unicast-messages can be signals just
like broadcasts can be. So my suggested workaround would still use
"dbus signals". However, I do get your point that this seems rather
convoluted.

Regarding your proposed extension: I think it lacks justification.
Yes, you might have a single use-case, but there are workarounds.
Furthermore, if you wanted a `uid` destination, where do we stop? Do
we just support any destination-selector that might be needed? What
about `gid`? What about `selinux-label`? (I am not trying to ridicule
the idea, just trying to see its effects from the
broker-implementation side)

I think the broadcast system was always intended as public information
(but smcv can probably tell you a lot more about it, or correct me
here). The fact that bus-policies limit this is more of a
mandatory-access-check rather than a programmatic interface. You can
see this in the message header, which allows you to deduce the
destination of a message just based on D-Bus peer names. No
destination means broadcast, explicit destination means unicast to
_that peer_. Adding another field `destination_uid=<uid>` would break
with this and make it hard to debug where a message goes.

In the past, I argued in favor of `destination=<array-of-peers>`
allowing for proper multicasts in D-Bus. This would possibly play into
your hand: You would still have to manage the list of receivers, but
at least the message transmission would be a proper multicast, rather
than a series of unicasts. This would then avoid hard-coding the
`uid=` feature in dbus, and allow any kind of selector as a
client-side feature.
Anyway, the multicast discussion never got to an implementation, so
maybe this is just moot.

David
_______________________________________________
dbus mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dbus
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.