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

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

unix.superglobalmegacorp.com

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