Annotation of 42BSD/ucb/groups.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)groups.c   4.8 (Berkeley) 9/25/83";
                      3: #endif
                      4: 
                      5: /*
                      6:  * groups
                      7:  */
                      8: 
                      9: #include <sys/param.h>
                     10: #include <grp.h>
                     11: #include <pwd.h>
                     12: #include <stdio.h>
                     13: 
                     14: int    groups[NGROUPS];
                     15: 
                     16: main(argc, argv)
                     17:        int argc;
                     18:        char *argv[];
                     19: {
                     20:        int ngroups, i;
                     21:        char *sep = "";
                     22:        struct group *gr;
                     23: 
                     24:        if (argc > 1)
                     25:                showgroups(argv[1]);
                     26:        ngroups = getgroups(NGROUPS, groups);
                     27:        for (i = 0; i < ngroups; i++) {
                     28:                gr = getgrgid(groups[i]);
                     29:                if (gr == NULL)
                     30:                        printf("%s%d", sep, groups[i]);
                     31:                else
                     32:                        printf("%s%s", sep, gr->gr_name);
                     33:                sep = " ";
                     34:        }
                     35:        printf("\n");
                     36:        exit(0);
                     37: }
                     38: 
                     39: showgroups(user)
                     40:        register char *user;
                     41: {
                     42:        register struct group *gr;
                     43:        register struct passwd *pw;
                     44:        register char **cp;
                     45:        char *sep = "";
                     46: 
                     47:        if ((pw = getpwnam(user)) == NULL) {
                     48:                fprintf(stderr, "No such user\n");
                     49:                exit(1);
                     50:        }
                     51:        while (gr = getgrent()) {
                     52:                if (pw->pw_gid == gr->gr_gid) {
                     53:                        printf("%s%s", sep, gr->gr_name);
                     54:                        sep = " ";
                     55:                        continue;
                     56:                }       
                     57:                for (cp = gr->gr_mem; cp && *cp; cp++)
                     58:                        if (strcmp(*cp, user) == 0) {
                     59:                                printf("%s%s", sep, gr->gr_name);
                     60:                                sep = " ";
                     61:                                break;
                     62:                        }
                     63:        }
                     64:        printf("\n");
                     65:        exit(0);
                     66: }

unix.superglobalmegacorp.com

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