diff options
Diffstat (limited to 'mdk-stage1/dietlibc/libcruft/initgroups.c')
-rw-r--r-- | mdk-stage1/dietlibc/libcruft/initgroups.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/libcruft/initgroups.c b/mdk-stage1/dietlibc/libcruft/initgroups.c new file mode 100644 index 000000000..7d24866e9 --- /dev/null +++ b/mdk-stage1/dietlibc/libcruft/initgroups.c @@ -0,0 +1,23 @@ +#include <grp.h> +#include <sys/types.h> +#include <string.h> + +int initgroups(const char *user, gid_t group) { + int n=0; + gid_t grouplist[32]; + struct group *g; + setgrent(); + while ((g=getgrent())) { + char **duh=g->gr_mem; + while (*duh) { + if (!strcmp(*duh,user)) { + grouplist[n]=g->gr_gid; + if (++n>=32) + break; + } + duh++; + } + } + return setgroups(n,grouplist); +} + |