summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/libcruft/initgroups.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/dietlibc/libcruft/initgroups.c')
-rw-r--r--mdk-stage1/dietlibc/libcruft/initgroups.c23
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);
+}
+