date and time created 82/11/07 19:11:20 by sam
authorSam Leffler <sam@ucbvax.Berkeley.EDU>
Mon, 8 Nov 1982 11:11:20 +0000 (03:11 -0800)
committerSam Leffler <sam@ucbvax.Berkeley.EDU>
Mon, 8 Nov 1982 11:11:20 +0000 (03:11 -0800)
SCCS-vsn: lib/libc/gen/initgroups.c 4.1

usr/src/lib/libc/gen/initgroups.c [new file with mode: 0644]

diff --git a/usr/src/lib/libc/gen/initgroups.c b/usr/src/lib/libc/gen/initgroups.c
new file mode 100644 (file)
index 0000000..50d016d
--- /dev/null
@@ -0,0 +1,38 @@
+/*     initgroups.c    4.1     82/11/07        */
+
+/*
+ * initgroups
+ */
+#include <stdio.h>
+#include <sys/param.h>
+#include <grp.h>
+
+struct group *getgrent();
+
+initgroups(uname, agroup)
+       char *uname;
+       int agroup;
+{
+       int groups[NGROUPS], ngroups = 0;
+       register struct group *grp;
+       register int i;
+
+       if (agroup >= 0)
+               groups[ngroups++] = agroup;
+       setgrent();
+       while (grp = getgrent())
+               for (i = 0; grp->gr_mem[i]; i++)
+                       if (!strcmp(grp->gr_mem[i], uname)) {
+                               groups[ngroups++] = grp->gr_gid;
+                               if (ngroups == NGROUPS) {
+fprintf(stderr, "inigrp: %s is in too many groups\n", uname);
+                                       goto toomany;
+                               }
+                       }
+toomany:
+       if (setgroups(ngroups, groups) < 0) {
+               perror("setgrp");
+               return (1);
+       }
+       return (0);
+}