# HG changeset patch # User meillo@marmaro.de # Date 1276963735 -7200 # Node ID ffeff2c33799c8cf9a4163d3e0adf8e3031e7bea # Parent 085d6cd444628331e69d76443fe0fcad15b6a1d3 is_ingroup(): check for the primary group of a user too also some refactoring diff -r 085d6cd44462 -r ffeff2c33799 src/permissions.c --- a/src/permissions.c Sat Jun 19 18:07:31 2010 +0200 +++ b/src/permissions.c Sat Jun 19 18:08:55 2010 +0200 @@ -26,17 +26,24 @@ is_ingroup(uid_t uid, gid_t gid) { struct group *grent = getgrgid(gid); + struct passwd *pwent = getpwuid(uid); + char *entry; + int i = 0; - if (grent) { - struct passwd *pwent = getpwuid(uid); - if (pwent) { - char *entry; - int i = 0; - while ((entry = grent->gr_mem[i++])) { - if (strcmp(pwent->pw_name, entry) == 0) - return TRUE; - } - } + if (!grent) { + return FALSE; + } + if (!pwent) { + return FALSE; + } + /* check primary group */ + if (pwent->pw_gid == gid) { + return TRUE; + } + /* check secondary groups */ + while ((entry = grent->gr_mem[i++])) { + if (strcmp(pwent->pw_name, entry) == 0) + return TRUE; } return FALSE; }