From 84bc4035b824f69604415e41b5a1b9c87b90db05 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 11 Jun 2018 09:57:04 +1000 Subject: [PATCH] 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 [Pekka: fix one whitespace] Reviewed-by: Pekka Paalanen --- libweston/weston-launch.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libweston/weston-launch.c b/libweston/weston-launch.c index 1adcf21a..bf73e0d6 100644 --- a/libweston/weston-launch.c +++ b/libweston/weston-launch.c @@ -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; }