From 8a98ef62b093b2847b91e9bfe5ca16c0724c8ed5 Mon Sep 17 00:00:00 2001 From: cptpcrd Date: Sun, 30 Jul 2023 18:38:22 -0400 Subject: [PATCH] dbus-sysdeps-unix: Handle empty supplementary group list It is valid for getsockopt(SO_PEERGROUPS) to return len=0; that indicates the process has no supplementary groups. Rather than failing, simply use the returned empty list (and add the primary GID to it). Without this change, calling GetConnectionCredentials on a bus name owned by a process with no supplementary groups does not return the UnixGroupIDs field, even though it is easy to determine that the process only has one GID (the primary GID). (cherry picked from commit f8a7bffd5e4de4b5d580af0f3888540da31afa86) --- dbus/dbus-sysdeps-unix.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index 6b32df66..2ce425d0 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -1977,13 +1977,6 @@ add_groups_to_credentials (int client_fd, _dbus_verbose ("will try again with %lu\n", (unsigned long) len); } - if (len <= 0) - { - _dbus_verbose ("getsockopt(SO_PEERGROUPS) yielded <= 0 bytes: %ld\n", - (long) len); - goto out; - } - if (len > n_gids * sizeof (gid_t)) { _dbus_verbose ("%lu > %zu", (unsigned long) len, n_gids * sizeof (gid_t));