From 596d1ef5a4d74ea04936d0eccde94e7c59d71d09 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 16 Nov 2004 23:40:58 +0000 Subject: [PATCH] Only do string comparisons on the group members if there is no supplemental group list. --- match.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/match.c b/match.c index 4550b5fd8..59dbd82c9 100644 --- a/match.c +++ b/match.c @@ -539,17 +539,18 @@ usergr_matches(group, user, pw) if (grp->gr_gid == pw_gid) return(TRUE); - /* check the user's group vector */ - n = user_ngroups; - while (n--) - if (grp->gr_gid == user_groups[n]) - return(TRUE); - - /* check to see if user is explicitly listed in the group */ - /* XXX - skip if group vector is set? */ - for (cur = grp->gr_mem; *cur; cur++) { - if (strcmp(*cur, user) == 0) - return(TRUE); + /* + * If the user has a supplementary group vector, check it. + * Otherwise, check the member list in struct group for the user name. + */ + if ((n = user_ngroups) > 0) { + while (n--) + if (grp->gr_gid == user_groups[n]) + return(TRUE); + } else { + for (cur = grp->gr_mem; *cur; cur++) + if (strcmp(*cur, user) == 0) + return(TRUE); } return(FALSE); -- 2.50.1