Annotation of 43BSDTahoe/lib/libc/gen/initgroups.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1983 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  */
                      6: 
                      7: #if defined(LIBC_SCCS) && !defined(lint)
                      8: static char sccsid[] = "@(#)initgroups.c       5.3 (Berkeley) 4/27/86";
                      9: #endif LIBC_SCCS and not lint
                     10: 
                     11: /*
                     12:  * initgroups
                     13:  */
                     14: #include <stdio.h>
                     15: #include <sys/param.h>
                     16: #include <grp.h>
                     17: 
                     18: struct group *getgrent();
                     19: 
                     20: initgroups(uname, agroup)
                     21:        char *uname;
                     22:        int agroup;
                     23: {
                     24:        int groups[NGROUPS], ngroups = 0;
                     25:        register struct group *grp;
                     26:        register int i;
                     27: 
                     28:        if (agroup >= 0)
                     29:                groups[ngroups++] = agroup;
                     30:        setgrent();
                     31:        while (grp = getgrent()) {
                     32:                if (grp->gr_gid == agroup)
                     33:                        continue;
                     34:                for (i = 0; grp->gr_mem[i]; i++)
                     35:                        if (!strcmp(grp->gr_mem[i], uname)) {
                     36:                                if (ngroups == NGROUPS) {
                     37: fprintf(stderr, "initgroups: %s is in too many groups\n", uname);
                     38:                                        goto toomany;
                     39:                                }
                     40:                                groups[ngroups++] = grp->gr_gid;
                     41:                        }
                     42:        }
                     43: toomany:
                     44:        endgrent();
                     45:        if (setgroups(ngroups, groups) < 0) {
                     46:                perror("setgroups");
                     47:                return (-1);
                     48:        }
                     49:        return (0);
                     50: }

unix.superglobalmegacorp.com

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