weston-launch: always run through all groups

If the user is in group 0, we'd exit the loop early with a failure. Make sure
we run through all groups.

https://gitlab.freedesktop.org/wayland/weston/issues/86

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
[Pekka: fix one whitespace]
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
Peter Hutterer 2018-06-11 09:57:04 +10:00 committed by Pekka Paalanen
parent dcfb19585e
commit 84bc4035b8
1 changed files with 8 additions and 6 deletions

View File

@ -121,7 +121,7 @@ struct weston_launch {
union cmsg_data { unsigned char b[4]; int fd; };
static gid_t *
read_groups(void)
read_groups(int *ngroups)
{
int n;
gid_t *groups;
@ -142,6 +142,8 @@ read_groups(void)
free(groups);
return NULL;
}
*ngroups = n;
return groups;
}
@ -150,7 +152,7 @@ weston_launch_allowed(struct weston_launch *wl)
{
struct group *gr;
gid_t *groups;
int i;
int ngroups;
#ifdef HAVE_SYSTEMD_LOGIN
char *session, *seat;
int err;
@ -161,10 +163,10 @@ weston_launch_allowed(struct weston_launch *wl)
gr = getgrnam("weston-launch");
if (gr) {
groups = read_groups();
if (groups) {
for (i = 0; groups[i]; ++i) {
if (groups[i] == gr->gr_gid) {
groups = read_groups(&ngroups);
if (groups && ngroups > 0) {
while (ngroups--) {
if (groups[ngroups] == gr->gr_gid) {
free(groups);
return true;
}