1 /* @(#)getgrent.c 4.3 (Berkeley) 08/18/83 */ 2 3 #include <stdio.h> 4 #include <grp.h> 5 6 #define MAXGRP 200 7 8 static char GROUP[] = "/etc/group"; 9 static FILE *grf = NULL; 10 static char line[BUFSIZ+1]; 11 static struct group group; 12 static char *gr_mem[MAXGRP]; 13 14 setgrent() 15 { 16 if( !grf ) 17 grf = fopen( GROUP, "r" ); 18 else 19 rewind( grf ); 20 } 21 22 endgrent() 23 { 24 if( grf ){ 25 fclose( grf ); 26 grf = NULL; 27 } 28 } 29 30 static char * 31 grskip(p,c) 32 register char *p; 33 register c; 34 { 35 while( *p && *p != c ) ++p; 36 if( *p ) *p++ = 0; 37 return( p ); 38 } 39 40 struct group * 41 getgrent() 42 { 43 register char *p, **q; 44 45 if( !grf && !(grf = fopen( GROUP, "r" )) ) 46 return(NULL); 47 if( !(p = fgets( line, BUFSIZ, grf )) ) 48 return(NULL); 49 group.gr_name = p; 50 group.gr_passwd = p = grskip(p,':'); 51 group.gr_gid = atoi( p = grskip(p,':') ); 52 group.gr_mem = gr_mem; 53 p = grskip(p,':'); 54 grskip(p,'\n'); 55 q = gr_mem; 56 while( *p ){ 57 if (q < &gr_mem[MAXGRP-1]) 58 *q++ = p; 59 p = grskip(p,','); 60 } 61 *q = NULL; 62 return( &group ); 63 } 64