1*26555Sdonn #if defined(LIBC_SCCS) && !defined(lint) 2*26555Sdonn static char sccsid[] = "@(#)getgrent.c 5.2 (Berkeley) 03/09/86"; 3*26555Sdonn #endif LIBC_SCCS and not lint 46349Swnj 52014Swnj #include <stdio.h> 62014Swnj #include <grp.h> 72014Swnj 814703Ssam #define MAXGRP 200 92014Swnj 102014Swnj static char GROUP[] = "/etc/group"; 112014Swnj static FILE *grf = NULL; 122014Swnj static char line[BUFSIZ+1]; 132014Swnj static struct group group; 142014Swnj static char *gr_mem[MAXGRP]; 152014Swnj 162014Swnj setgrent() 172014Swnj { 182014Swnj if( !grf ) 192014Swnj grf = fopen( GROUP, "r" ); 202014Swnj else 212014Swnj rewind( grf ); 222014Swnj } 232014Swnj 242014Swnj endgrent() 252014Swnj { 262014Swnj if( grf ){ 272014Swnj fclose( grf ); 282014Swnj grf = NULL; 292014Swnj } 302014Swnj } 312014Swnj 322014Swnj static char * 332014Swnj grskip(p,c) 342014Swnj register char *p; 352014Swnj register c; 362014Swnj { 372014Swnj while( *p && *p != c ) ++p; 382014Swnj if( *p ) *p++ = 0; 392014Swnj return( p ); 402014Swnj } 412014Swnj 422014Swnj struct group * 432014Swnj getgrent() 442014Swnj { 452014Swnj register char *p, **q; 462014Swnj 472014Swnj if( !grf && !(grf = fopen( GROUP, "r" )) ) 482014Swnj return(NULL); 492014Swnj if( !(p = fgets( line, BUFSIZ, grf )) ) 502014Swnj return(NULL); 512014Swnj group.gr_name = p; 526349Swnj group.gr_passwd = p = grskip(p,':'); 536349Swnj group.gr_gid = atoi( p = grskip(p,':') ); 542014Swnj group.gr_mem = gr_mem; 556349Swnj p = grskip(p,':'); 566349Swnj grskip(p,'\n'); 572014Swnj q = gr_mem; 582014Swnj while( *p ){ 596349Swnj if (q < &gr_mem[MAXGRP-1]) 606349Swnj *q++ = p; 616349Swnj p = grskip(p,','); 622014Swnj } 632014Swnj *q = NULL; 642014Swnj return( &group ); 652014Swnj } 66