]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
dbus-sysdeps-unix: Handle empty supplementary group list
authorcptpcrd <cptpcrd.git@gmail.com>
Sun, 30 Jul 2023 22:38:22 +0000 (18:38 -0400)
committerSimon McVittie <smcv@collabora.com>
Wed, 16 Aug 2023 10:29:45 +0000 (11:29 +0100)
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

index 6b32df662ffe4a7764bbe0c72d6b16518f101849..2ce425d07dbeed8193a4c72d3e865cf84e9ca0b2 100644 (file)
@@ -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));