dbus_bus_get_unix_user() incorrect type and other possible issue

Simon McVittie simon.mcvittie at collabora.co.uk
Fri May 18 08:28:34 PDT 2007

Hash: SHA1

On Fri, 18 May 2007 at 10:47:48 -0400, Doug Goldstein wrote:
> Internally the function uses a dbus_uint32_t
> and does it's processing with that. However it returns an unsigned long,
> which on x86 is fine. However if you go to other platforms it can and is
> a different size (most notably amd64 where it's 64 bits). So obviously
> the type is wrong.

"Obviously"? long is guaranteed to be >= 32 bits, so I can't see
any problem. On architectures with a 64-bit long the top half will
always be 0, but that's not exactly an important bug.

> dbus-send --system --dest=org.freedesktop.DBus --type=method_call
> --print-reply / org.freedesktop.DBus.GetConnectionUnixUser
> string:"org.freedesktop.DBus"
> And that returns:
> Error org.freedesktop.DBus.Error.NameHasNoOwner: Could not get UID of
> name 'org.freedesktop.DBus': no such name

On the other hand,

% dbus-send --session --dest=org.freedesktop.DBus --type=method_call \
  --print-reply / org.freedesktop.DBus.GetConnectionUnixUser \

returns my UID, and

% dbus-send --system --dest=org.freedesktop.DBus --type=method_call \
  --print-reply / org.freedesktop.DBus.GetConnectionUnixUser \

returns a UID too.

It appears the function only fails for the bus daemon itself - it
refuses to tell you its own uid. The specification does, in fact, say
"Returns the unix uid of the process connected to the server" so it's
arguably correct to do this, but it seems strange not to add the
necessary 3 lines of code (or whatever) for the daemon to special-case its
own bus name.
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: OpenPGP key: http://www.pseudorandom.co.uk/2003/contact/ or pgp.net


More information about the dbus mailing list