System D-Bus Does Not Allow Punching Out Ownership with Conf Files

System D-Bus does not allow punching out ownership with conf files

I finally found the issue. When Dbus looks for configuration files for punching out permissions (like ownerships) the file not only must be in system.d/ but it must also end in .conf.

My configuration file "org.dbus.arduino" should have been "org.dbus.arduino.conf". I removed the code from system.conf. Confirmed I no longer had permissions, created a configuration file at "system.d/org.dbus.arduino.conf", I was granted permissions. I then attempted to rename the file to just "org.dbus.arduino" and confirmed the permissions were denied.

dbus_bus_request_name (): Connections are not allowed to own the service

I had a similar problem, in my case the default avahi-dbus.conf that come with my system packet system just lack the last " </policy> " before " </busconfig> " which triggered this error.

I first thought the problem didn't come from this file since a rapid look at it is not enough to find this kind of syntax error.

Access another user's D-Bus session

First, you need DBUS_SESSION_BUS_ADDRESS environment variable to be preserved when invoking application with su or sudo. Unfortunately, this is not enough, because DBus always checks (as a security measure) whether UIDs of the calling process and the session daemon are the same. The only workaround is to call seteuid from this application before connecting to the session bus. You can regain your privileges then with seteuid(0).

How to get QDBusConnection::connect() failure reason

I had the same issue and it turned out that the slot I connected to had the wrong parameter types. They must match according to Qt's documentation and it looks like connect() verifies that, despite not explicitly mentioned.

Warning: The signal will only be delivered to the slot if the parameters match.

I suggest d-feet to list signals and check their parameter types. dbus-monitor does list signals, paths and such too, but not always the exact type of parameters.


One important observation though: I fixed the issue in my particular case by using different slot parameters than the actual signal has!

I wanted to connect to a com.ubuntu.Upstart0_6 signal mentioned here to detect when the screen in Ubuntu is locked/unlocked. dbusmonitor prints the following and d-feet shows parameters (String, Array of [String])

// dbusmonitor output
signal time=1529077633.579984 sender=:1.0 -> destination=(null destination) serial=809 path=/com/ubuntu/Upstart; interface=com.ubuntu.Upstart0_6; member=EventEmitted
string "desktop-unlock"
array [
]

Hence the signal should be of type

void screenLockChangedUbuntu(QString event, QVector<QString> args) // connect() -> false

This however made connect() return false. The solution was to remove the array parameter from the slot:

void screenLockChangedUbuntu(QString event) // works

I am aware that the array parameter was always empty, but I cannot explain why it only worked when removing it.



Related Topics



Leave a reply



Submit