From 656bc2ee287766d5f7c8ce517300a6cbad187000 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Fri, 25 Mar 2016 19:36:13 +0000 Subject: [PATCH] initgroups: clean up so we can use it --- Library/libs/initgroups.c | 70 ++++++++++++++------------------------- 1 file changed, 24 insertions(+), 46 deletions(-) diff --git a/Library/libs/initgroups.c b/Library/libs/initgroups.c index 9b763142..660b6d68 100644 --- a/Library/libs/initgroups.c +++ b/Library/libs/initgroups.c @@ -24,57 +24,35 @@ #include #include "config-getent.h" -int -initgroups(__const char * user, gid_t gid) +int initgroups(const char *user, gid_t gid) { - register struct group * group; -#ifndef GR_DYNAMIC_GROUP_LIST - gid_t group_list[GR_MAX_GROUPS]; -#else - gid_t * group_list=NULL; -#endif - register char ** tmp_mem; - int num_groups; - int grp_fd; + struct group *group; + gid_t group_list[GR_MAX_GROUPS]; + char **tmp_mem; + int num_groups; + int grp_fd; - if ((grp_fd=open("/etc/group", O_RDONLY))<0) - return -1; + if ((grp_fd = open("/etc/group", O_RDONLY)) < 0) + return -1; - num_groups=0; -#ifdef GR_DYNAMIC_GROUP_LIST - group_list=(gid_t *) realloc(group_list, 1); -#endif - group_list[num_groups]=gid; -#ifndef GR_DYNAMIC_GROUP_LIST - while (num_groupsgr_gid!=gid); - { - tmp_mem=group->gr_mem; - while(*tmp_mem!=NULL) - { - if (!strcmp(*tmp_mem, user)) + num_groups = 0; + group_list[num_groups] = gid; + while (num_groups < GR_MAX_GROUPS && + (group = __getgrent(grp_fd)) != NULL) { + if (group->gr_gid != gid); { - num_groups++; -#ifdef GR_DYNAMIC_GROUP_LIST - group_list=(gid_t *)realloc(group_list, - num_groups*sizeof(gid_t *)); -#endif - group_list[num_groups]=group->gr_gid; + tmp_mem = group->gr_mem; + while (*tmp_mem != NULL) { + if (!strcmp(*tmp_mem, user)) { + num_groups++; + group_list[num_groups] = + group->gr_gid; + } + tmp_mem++; + } } - tmp_mem++; - } } - } - close(grp_fd); - return setgroups(num_groups, group_list); + close(grp_fd); + return setgroups(num_groups, group_list); } - - - - -- 2.34.1