1*6349Swnj /* @(#)getgrent.c 4.2 (Berkeley) 03/29/82 */ 2*6349Swnj 32014Swnj #include <stdio.h> 42014Swnj #include <grp.h> 52014Swnj 62014Swnj #define MAXGRP 100 72014Swnj 82014Swnj static char GROUP[] = "/etc/group"; 92014Swnj static FILE *grf = NULL; 102014Swnj static char line[BUFSIZ+1]; 112014Swnj static struct group group; 122014Swnj static char *gr_mem[MAXGRP]; 132014Swnj 142014Swnj setgrent() 152014Swnj { 162014Swnj if( !grf ) 172014Swnj grf = fopen( GROUP, "r" ); 182014Swnj else 192014Swnj rewind( grf ); 202014Swnj } 212014Swnj 222014Swnj endgrent() 232014Swnj { 242014Swnj if( grf ){ 252014Swnj fclose( grf ); 262014Swnj grf = NULL; 272014Swnj } 282014Swnj } 292014Swnj 302014Swnj static char * 312014Swnj grskip(p,c) 322014Swnj register char *p; 332014Swnj register c; 342014Swnj { 352014Swnj while( *p && *p != c ) ++p; 362014Swnj if( *p ) *p++ = 0; 372014Swnj return( p ); 382014Swnj } 392014Swnj 402014Swnj struct group * 412014Swnj getgrent() 422014Swnj { 432014Swnj register char *p, **q; 442014Swnj 452014Swnj if( !grf && !(grf = fopen( GROUP, "r" )) ) 462014Swnj return(NULL); 472014Swnj if( !(p = fgets( line, BUFSIZ, grf )) ) 482014Swnj return(NULL); 492014Swnj group.gr_name = p; 50*6349Swnj group.gr_passwd = p = grskip(p,':'); 51*6349Swnj group.gr_gid = atoi( p = grskip(p,':') ); 522014Swnj group.gr_mem = gr_mem; 53*6349Swnj p = grskip(p,':'); 54*6349Swnj grskip(p,'\n'); 552014Swnj q = gr_mem; 562014Swnj while( *p ){ 57*6349Swnj if (q < &gr_mem[MAXGRP-1]) 58*6349Swnj *q++ = p; 59*6349Swnj p = grskip(p,','); 602014Swnj } 612014Swnj *q = NULL; 622014Swnj return( &group ); 632014Swnj } 64