home *** CD-ROM | disk | FTP | other *** search
- From decwrl!labrea!rutgers!mailrus!cwjcc!hal!ncoast!allbery Sun Oct 30 15:05:55 PST 1988
- Article 685 of comp.sources.misc:
- Path: granite!decwrl!labrea!rutgers!mailrus!cwjcc!hal!ncoast!allbery
- From: randy@uokmax.UUCP (Longshot)
- Newsgroups: comp.sources.misc
- Subject: v05i008: whosin - show groups members
- Message-ID: <12856@ncoast.UUCP>
- Date: 28 Oct 88 02:28:22 GMT
- Sender: allbery@ncoast.UUCP
- Reply-To: randy@uokmax.UUCP (Longshot)
- Organization: University of Oklahoma, Norman
- Lines: 158
- Approved: allbery@ncoast.UUCP
-
- Posting-number: Volume 5, Issue 8
- Submitted-by: "Longshot" <randy@uokmax.UUCP>
- Archive-name: whosin
-
- [Methinks this is a job for perl or awk, not C.... ++bsa]
-
- A little program I wrote to display the members of specified groups. Should
- work on any UNIX with grp.h and group data in /etc/group.
-
- Randy J. Ray
- ---- Cut Here and unpack ----
- #!/bin/sh
- # shar: Shell Archiver (v1.22)
- # Packed Sun Oct 23 21:00:34 CDT 1988 by uokmax!randy
- # from directory /uokmax/staff/randy/src/C
- #
- # Run the following text with /bin/sh to create:
- # README
- # whosin.L
- # whosin.c
- #
- if test -f README; then echo "File README exists"; else
- echo "x - extracting README (Text)"
- sed 's/^X//' << 'SHAR_EOF' > README &&
- XThis is a little program I tossed together because I occassionally wanted
- Xto know who all were included in a specific group. This is handy if you need
- Xto get in touch with someone who has specific access. It accepts as arguments
- Xgroup names or numbers as listed in the file /etc/group. It prints the name,
- Xnumber, and number of listed users for the group, followed by an alphabetized
- Xlist of usernames, printed 8 to a line. To create it, just type:
- X
- X cc -O -o whosin whosin.c # No need for a makefile
- X
- XAs /etc/group is world readable, and no writing is done, no special permissions
- Xare needed. Be warned, however. On our system, many student account groups are
- Xnot entered with complete listings, as they change from semester to semester.
- XRather, the group entry is made, and the user accounts bestowed with the
- Xnumber. In these cases, the group appears legal, but is reported with
- X"Users: 0" and no names following. This is not really a bug, since all the
- Xprogram does is read the file. But it is handy for smaller groups (like finding
- Xthe nearest person with root access, by typing "whosin wheel").
- X
- XRandy J. Ray
- X--
- XRandy J. Ray University of Oklahoma, Norman, Oklahoma
- Xrandy@uokmax.uucp "...and he who made kittens put snakes
- XRJRAY@aardvark.ucs.uoknor.edu in the grass..." -Jethro Tull
- X-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-
- SHAR_EOF
- chmod 0644 README || echo "restore of README fails"
- set `wc -c README`;Sum=$1
- if test "$Sum" != "1384"
- then echo original size 1384, current size $Sum;fi
- fi
- if test -f whosin.L; then echo "File whosin.L exists"; else
- echo "x - extracting whosin.L (Text)"
- sed 's/^X//' << 'SHAR_EOF' > whosin.L &&
- X.TH WHOSIN L LOCAL
- X.SH NAME
- Xwhosin \- diplays users in specified groups
- X.SH SYNOPSIS
- Xwhosin [
- X.B name
- X|
- X.B number
- X] . . .
- X.SH DESCRIPTION
- X.B Whosin
- Xtakes a list of arguments being either names of active groups
- Xor groups numbers, and displays the users listed with that
- Xgroup in the file
- X.I /etc/group .
- X.SH FILES
- X/etc/group
- X.SH "SEE ALSO"
- Xgroups(1), gid(L), uid(L), id(L)
- X.SH BUGS
- XIf the group's entry in /etc/group is quite long (as is the case for
- Xgroups such as eecsugrad, the undergraduate accounts in EECS), all
- Xindividual names are not listed with the regular entry. In these cases,
- Xno names are listed, and number of users is reported as 0.
- X.SH AUTHOR
- XRandy J. Ray
- SHAR_EOF
- chmod 0644 whosin.L || echo "restore of whosin.L fails"
- set `wc -c whosin.L`;Sum=$1
- if test "$Sum" != "672"
- then echo original size 672, current size $Sum;fi
- fi
- if test -f whosin.c; then echo "File whosin.c exists"; else
- echo "x - extracting whosin.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > whosin.c &&
- X/*
- X whosin - show the members of a specified group
- X*/
- X
- X/*
- X $Header: whosin.c,v 1.2 88/10/19 19:50:14 randy Exp $
- X
- X $Log: whosin.c,v $
- X * Revision 1.2 88/10/19 19:50:14 randy
- X * Changed string.h header file to strings.h to increase portability.
- X *
- X * Revision 1.1 88/10/17 14:35:51 randy
- X * Initial revision
- X *
- X*/
- X
- X#include <stdio.h>
- X#include <grp.h>
- X#include <strings.h>
- X
- Xmain(argc,argv)
- Xint argc;
- Xchar **argv;
- X{
- X int strkmp(),grnum,nnum;
- X char **names,**argx,*grp;
- X struct group *gr;
- X
- X if (--argc == 0) {
- X fprintf(stderr,"Usage: whosin [group name | group num] . . .\n");
- X exit(1);
- X }
- X while (argc--) {
- X grnum=atoi(*++argv);
- X if ((grnum == 0) && (strcmp(*argv,"0"))) gr=getgrnam(*argv);
- X else gr=getgrgid(grnum);
- X if ((names=gr->gr_mem) == NULL) {
- X fprintf(stderr,"Unknown group: %s\n",*argv);
- X exit(1);
- X }
- X argx=names;
- X nnum=0;
- X while (*argx++) nnum++;
- X qsort(names,nnum,(sizeof(char *)),strkmp);
- X printf("\nGroup: %s\t\tId: %d\t\tUsers: %d\n",gr->gr_name,gr->gr_gid,nnum);
- X grnum=0;
- X while (grnum++ != nnum) {
- X printf("%-9s",*names++);
- X if ((grnum % 8) == 0) putchar('\n');
- X }
- X if ((nnum % 8) != 0) putchar('\n');
- X }
- X}
- X
- Xint strkmp(s1,s2)
- Xchar **s1,**s2;
- X{
- X return(strcmp(*s1,*s2));
- X}
- SHAR_EOF
- chmod 0444 whosin.c || echo "restore of whosin.c fails"
- set `wc -c whosin.c`;Sum=$1
- if test "$Sum" != "1220"
- then echo original size 1220, current size $Sum;fi
- fi
- exit 0
-
-
-