Skip to content

Commit

Permalink
Always check the group membership list (Issue #5613)
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelrsweet committed Jul 16, 2019
1 parent e9a4e9d commit 3c27d2a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 7 deletions.
3 changes: 3 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ Changes in CUPS v2.3.0
- Removed dead code from the scheduler (Issue #5593)
- "make" failed with GZIP options (Issue #5595)
- Fixed a NULL pointer dereference bug in `httpGetSubField2` (Issue #5598)
- 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)
- Fixed an issue with unsupported "sides" values in the IPP backend
(rdar://51775322)
- The scheduler would restart continuously when idle and printers were not
Expand Down
23 changes: 16 additions & 7 deletions scheduler/auth.c
Original file line number Diff line number Diff line change
Expand Up @@ -1166,7 +1166,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 */
Expand All @@ -1187,13 +1203,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
Expand Down

0 comments on commit 3c27d2a

Please sign in to comment.