diff options
Diffstat (limited to 'daemon/gdm-dbus-util.c')
-rw-r--r-- | daemon/gdm-dbus-util.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/daemon/gdm-dbus-util.c b/daemon/gdm-dbus-util.c index e57f0a0b..94361c66 100644 --- a/daemon/gdm-dbus-util.c +++ b/daemon/gdm-dbus-util.c @@ -163,3 +163,43 @@ gdm_dbus_get_pid_for_name (const char *system_bus_name, return retval; } + +gboolean +gdm_dbus_get_uid_for_name (const char *system_bus_name, + uid_t *out_uid, + GError **error) +{ + GDBusConnection *bus; + GVariant *reply; + gboolean retval = FALSE; + unsigned int v; + + bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, error); + if (bus == NULL) { + return FALSE; + } + + reply = g_dbus_connection_call_sync (bus, + "org.freedesktop.DBus", + "/org/freedesktop/DBus", + "org.freedesktop.DBus", + "GetConnectionUnixUser", + g_variant_new ("(s)", system_bus_name), + G_VARIANT_TYPE ("(u)"), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, error); + if (reply == NULL) { + goto out; + } + + g_variant_get (reply, "(u)", &v); + *out_uid = v; + g_variant_unref (reply); + + retval = TRUE; + out: + g_object_unref (bus); + + return retval; +} |