From: Michael R Sweet Date: Tue, 16 Jul 2019 13:17:04 +0000 (-0400) Subject: Always check the group membership list (Issue #5613) X-Git-Tag: v2.2.12~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=666d07699b65e2141ba40822a4c487130383b39f;p=thirdparty%2Fcups.git Always check the group membership list (Issue #5613) --- diff --git a/CHANGES.md b/CHANGES.md index a8af8ce38b..3daf60e29e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -22,6 +22,9 @@ Changes in CUPS v2.2.12 - Fixed some compatibility issues with old releases of CUPS (Issue #5587) - Fixed a bug in the scheduler job cleanup code (Issue #5588) - "make" failed with GZIP options (Issue #5595) +- The scheduler now uses both the group's membership list as well as the + various OS-specific membership functions to determine whether a user belongs + to a named group (Issue #5613) - The scheduler would restart continuously when idle and printers were not shared (rdar://52561199) - Fixed a command ordering issue in the Zebra ZPL driver. diff --git a/scheduler/auth.c b/scheduler/auth.c index fa4e2715de..1fb3ffcc0b 100644 --- a/scheduler/auth.c +++ b/scheduler/auth.c @@ -1176,7 +1176,23 @@ cupsdCheckGroup( groupid = group->gr_gid; + for (i = 0; group->gr_mem[i]; i ++) + { + /* + * User appears in the group membership... + */ + + if (!_cups_strcasecmp(username, group->gr_mem[i])) + return (1); + } + #ifdef HAVE_GETGROUPLIST + /* + * If the user isn't in the group membership list, try the results from + * getgrouplist() which is supposed to return the full list of groups a user + * belongs to... + */ + if (user) { int ngroups; /* Number of groups */ @@ -1197,13 +1213,6 @@ cupsdCheckGroup( if ((int)groupid == (int)groups[i]) return (1); } - -#else - for (i = 0; group->gr_mem[i]; i ++) - { - if (!_cups_strcasecmp(username, group->gr_mem[i])) - return (1); - } #endif /* HAVE_GETGROUPLIST */ } else