Commit aaf690e8 authored by Simon McVittie's avatar Simon McVittie
Browse files

bus: Try to get groups directly from credentials, not userdb

If we avoid consulting the userdb, then it's one less chance to
Signed-off-by: Simon McVittie's avatarSimon McVittie <>

Reviewed-by: Philip Withnall's avatarPhilip Withnall <>
parent 005bded7
......@@ -1033,11 +1033,43 @@ bus_connection_get_unix_groups (DBusConnection *connection,
int *n_groups,
DBusError *error)
/* Assigning dbus_gid_t to unsigned long is lossless (in fact
* they are the same type) */
_DBUS_STATIC_ASSERT (sizeof (unsigned long) == sizeof (dbus_gid_t));
const dbus_gid_t *groups_borrowed = NULL;
DBusCredentials *credentials;
unsigned long uid;
size_t n = 0;
*groups = NULL;
*n_groups = 0;
credentials = _dbus_connection_get_credentials (connection);
if (credentials != NULL &&
_dbus_credentials_get_unix_gids (credentials, &groups_borrowed, &n))
size_t i;
/* We got the group IDs from SO_PEERGROUPS or equivalent - no
* need to ask NSS */
*n_groups = n;
*groups = dbus_new (unsigned long, n);
if (groups == NULL)
BUS_SET_OOM (error);
return FALSE;
for (i = 0; i < n; i++)
(*groups)[i] = groups_borrowed[i];
return TRUE;
if (dbus_connection_get_unix_user (connection, &uid))
if (!_dbus_unix_groups_from_uid (uid, groups, n_groups))
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment