Annotation of 42BSD/lib/libc/gen/initgroups.c, revision 1.1.1.1

1.1       root        1: /*     initgroups.c    4.4     83/06/17        */
                      2: 
                      3: /*
                      4:  * initgroups
                      5:  */
                      6: #include <stdio.h>
                      7: #include <sys/param.h>
                      8: #include <grp.h>
                      9: 
                     10: struct group *getgrent();
                     11: 
                     12: initgroups(uname, agroup)
                     13:        char *uname;
                     14:        int agroup;
                     15: {
                     16:        int groups[NGROUPS], ngroups = 0;
                     17:        register struct group *grp;
                     18:        register int i;
                     19: 
                     20:        if (agroup >= 0)
                     21:                groups[ngroups++] = agroup;
                     22:        setgrent();
                     23:        while (grp = getgrent()) {
                     24:                if (grp->gr_gid == agroup)
                     25:                        continue;
                     26:                for (i = 0; grp->gr_mem[i]; i++)
                     27:                        if (!strcmp(grp->gr_mem[i], uname)) {
                     28:                                if (ngroups == NGROUPS) {
                     29: fprintf(stderr, "initgroups: %s is in too many groups\n", uname);
                     30:                                        goto toomany;
                     31:                                }
                     32:                                groups[ngroups++] = grp->gr_gid;
                     33:                        }
                     34:        }
                     35: toomany:
                     36:        endgrent();
                     37:        if (setgroups(ngroups, groups) < 0) {
                     38:                perror("setgroups");
                     39:                return (1);
                     40:        }
                     41:        return (0);
                     42: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.