home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume5 / whosin < prev    next >
Text File  |  1989-02-03  |  5KB  |  171 lines

  1. Path: xanth!nic.MR.NET!hal!ncoast!allbery
  2. From: randy@uokmax.UUCP (Longshot)
  3. Newsgroups: comp.sources.misc
  4. Subject: v05i008: whosin - show groups members
  5. Message-ID: <12856@ncoast.UUCP>
  6. Date: 28 Oct 88 02:28:22 GMT
  7. Sender: allbery@ncoast.UUCP
  8. Reply-To: randy@uokmax.UUCP (Longshot)
  9. Organization: University of Oklahoma, Norman
  10. Lines: 158
  11. Approved: allbery@ncoast.UUCP
  12.  
  13. Posting-number: Volume 5, Issue 8
  14. Submitted-by: "Longshot" <randy@uokmax.UUCP>
  15. Archive-name: whosin
  16.  
  17. [Methinks this is a job for perl or awk, not C....  ++bsa]
  18.  
  19. A little program I wrote to display the members of specified groups. Should
  20. work on any UNIX with grp.h and group data in /etc/group.
  21.  
  22. Randy J. Ray
  23. ---- Cut Here and unpack ----
  24. #!/bin/sh
  25. # shar:    Shell Archiver  (v1.22)
  26. #    Packed Sun Oct 23 21:00:34 CDT 1988 by uokmax!randy
  27. #    from directory /uokmax/staff/randy/src/C
  28. #
  29. #    Run the following text with /bin/sh to create:
  30. #      README
  31. #      whosin.L
  32. #      whosin.c
  33. #
  34. if test -f README; then echo "File README exists"; else
  35. echo "x - extracting README (Text)"
  36. sed 's/^X//' << 'SHAR_EOF' > README &&
  37. XThis is a little program I tossed together because I occassionally wanted
  38. Xto know who all were included in a specific group. This is handy if you need
  39. Xto get in touch with someone who has specific access. It accepts as arguments
  40. Xgroup names or numbers as listed in the file /etc/group. It prints the name,
  41. Xnumber, and number of listed users for the group, followed by an alphabetized
  42. Xlist of usernames, printed 8 to a line. To create it, just type:
  43. X
  44. X    cc -O -o whosin whosin.c    # No need for a makefile
  45. X
  46. XAs /etc/group is world readable, and no writing is done, no special permissions
  47. Xare needed. Be warned, however. On our system, many student account groups are
  48. Xnot entered with complete listings, as they change from semester to semester.
  49. XRather, the group entry is made, and the user accounts bestowed with the
  50. Xnumber. In these cases, the group appears legal, but is reported with
  51. X"Users: 0" and no names following. This is not really a bug, since all the
  52. Xprogram does is read the file. But it is handy for smaller groups (like finding
  53. Xthe nearest person with root access, by typing "whosin wheel").
  54. X
  55. XRandy J. Ray
  56. X--
  57. XRandy J. Ray                   University of Oklahoma, Norman, Oklahoma
  58. Xrandy@uokmax.uucp            "...and he who made kittens put snakes
  59. XRJRAY@aardvark.ucs.uoknor.edu          in the grass..."  -Jethro Tull
  60. X-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-
  61. SHAR_EOF
  62. chmod 0644 README || echo "restore of README fails"
  63. set `wc -c README`;Sum=$1
  64. if test "$Sum" != "1384"
  65. then echo original size 1384, current size $Sum;fi
  66. fi
  67. if test -f whosin.L; then echo "File whosin.L exists"; else
  68. echo "x - extracting whosin.L (Text)"
  69. sed 's/^X//' << 'SHAR_EOF' > whosin.L &&
  70. X.TH WHOSIN L LOCAL
  71. X.SH NAME
  72. Xwhosin \- diplays users in specified groups
  73. X.SH SYNOPSIS
  74. Xwhosin [
  75. X.B name
  76. X|
  77. X.B number
  78. X] . . .
  79. X.SH DESCRIPTION
  80. X.B Whosin
  81. Xtakes a list of arguments being either names of active groups
  82. Xor groups numbers, and displays the users listed with that
  83. Xgroup in the file
  84. X.I /etc/group .
  85. X.SH FILES
  86. X/etc/group
  87. X.SH "SEE ALSO"
  88. Xgroups(1), gid(L), uid(L), id(L)
  89. X.SH BUGS
  90. XIf the group's entry in /etc/group is quite long (as is the case for
  91. Xgroups such as eecsugrad, the undergraduate accounts in EECS), all
  92. Xindividual names are not listed with the regular entry. In these cases,
  93. Xno names are listed, and number of users is reported as 0.
  94. X.SH AUTHOR
  95. XRandy J. Ray
  96. SHAR_EOF
  97. chmod 0644 whosin.L || echo "restore of whosin.L fails"
  98. set `wc -c whosin.L`;Sum=$1
  99. if test "$Sum" != "672"
  100. then echo original size 672, current size $Sum;fi
  101. fi
  102. if test -f whosin.c; then echo "File whosin.c exists"; else
  103. echo "x - extracting whosin.c (Text)"
  104. sed 's/^X//' << 'SHAR_EOF' > whosin.c &&
  105. X/*
  106. X    whosin - show the members of a specified group
  107. X*/
  108. X
  109. X/*
  110. X    $Header: whosin.c,v 1.2 88/10/19 19:50:14 randy Exp $
  111. X
  112. X    $Log:    whosin.c,v $
  113. X * Revision 1.2  88/10/19  19:50:14  randy
  114. X * Changed string.h header file to strings.h to increase portability.
  115. X * 
  116. X * Revision 1.1  88/10/17  14:35:51  randy
  117. X * Initial revision
  118. X * 
  119. X*/
  120. X
  121. X#include <stdio.h>
  122. X#include <grp.h>
  123. X#include <strings.h>
  124. X
  125. Xmain(argc,argv)
  126. Xint argc;
  127. Xchar **argv;
  128. X{
  129. X    int strkmp(),grnum,nnum;
  130. X    char **names,**argx,*grp;
  131. X    struct group *gr;
  132. X
  133. X    if (--argc == 0) {
  134. X        fprintf(stderr,"Usage: whosin [group name | group num] . . .\n");
  135. X        exit(1);
  136. X    }
  137. X    while (argc--) {
  138. X        grnum=atoi(*++argv);
  139. X        if ((grnum == 0) && (strcmp(*argv,"0"))) gr=getgrnam(*argv);
  140. X            else gr=getgrgid(grnum);
  141. X        if ((names=gr->gr_mem) == NULL) {
  142. X            fprintf(stderr,"Unknown group: %s\n",*argv);
  143. X            exit(1);
  144. X        }
  145. X        argx=names;
  146. X        nnum=0;
  147. X        while (*argx++) nnum++;
  148. X        qsort(names,nnum,(sizeof(char *)),strkmp);
  149. X        printf("\nGroup: %s\t\tId: %d\t\tUsers: %d\n",gr->gr_name,gr->gr_gid,nnum);
  150. X        grnum=0;
  151. X        while (grnum++ != nnum) {
  152. X            printf("%-9s",*names++);
  153. X            if ((grnum % 8) == 0) putchar('\n');
  154. X        }
  155. X        if ((nnum % 8) != 0) putchar('\n');
  156. X    }
  157. X}
  158. X
  159. Xint strkmp(s1,s2)
  160. Xchar **s1,**s2;
  161. X{
  162. X    return(strcmp(*s1,*s2));
  163. X}
  164. SHAR_EOF
  165. chmod 0444 whosin.c || echo "restore of whosin.c fails"
  166. set `wc -c whosin.c`;Sum=$1
  167. if test "$Sum" != "1220"
  168. then echo original size 1220, current size $Sum;fi
  169. fi
  170. exit 0
  171.