13e12c5d1SDavid du Colombier #include <stdio.h>
23e12c5d1SDavid du Colombier #include <grp.h>
39a747e4fSDavid du Colombier #include <stdlib.h>
43e12c5d1SDavid du Colombier
53e12c5d1SDavid du Colombier #define CL ':'
63e12c5d1SDavid du Colombier #define CM ','
73e12c5d1SDavid du Colombier #define NL '\n'
83e12c5d1SDavid du Colombier #define MAXGRP 100
93e12c5d1SDavid du Colombier
103e12c5d1SDavid du Colombier static char GROUP[] = "/etc/group";
113e12c5d1SDavid du Colombier static FILE *grf = NULL;
123e12c5d1SDavid du Colombier static char line[BUFSIZ+1];
133e12c5d1SDavid du Colombier static struct group group;
143e12c5d1SDavid du Colombier static char *gr_mem[MAXGRP];
153e12c5d1SDavid du Colombier
16*027288c8SDavid du Colombier void
setgrent(void)17*027288c8SDavid du Colombier setgrent(void)
183e12c5d1SDavid du Colombier {
193e12c5d1SDavid du Colombier if( !grf )
203e12c5d1SDavid du Colombier grf = fopen( GROUP, "r" );
213e12c5d1SDavid du Colombier else
223e12c5d1SDavid du Colombier rewind( grf );
233e12c5d1SDavid du Colombier }
243e12c5d1SDavid du Colombier
25*027288c8SDavid du Colombier void
endgrent(void)26*027288c8SDavid du Colombier endgrent(void)
273e12c5d1SDavid du Colombier {
283e12c5d1SDavid du Colombier if( grf ){
293e12c5d1SDavid du Colombier fclose( grf );
303e12c5d1SDavid du Colombier grf = NULL;
313e12c5d1SDavid du Colombier }
323e12c5d1SDavid du Colombier }
333e12c5d1SDavid du Colombier
343e12c5d1SDavid du Colombier static char *
grskip(register char * p,register c)353e12c5d1SDavid du Colombier grskip(register char *p, register c)
363e12c5d1SDavid du Colombier {
373e12c5d1SDavid du Colombier while( *p && *p != c ) ++p;
383e12c5d1SDavid du Colombier if( *p ) *p++ = 0;
393e12c5d1SDavid du Colombier return( p );
403e12c5d1SDavid du Colombier }
413e12c5d1SDavid du Colombier
423e12c5d1SDavid du Colombier struct group *
getgrent()433e12c5d1SDavid du Colombier getgrent()
443e12c5d1SDavid du Colombier {
453e12c5d1SDavid du Colombier register char *p, **q;
463e12c5d1SDavid du Colombier
473e12c5d1SDavid du Colombier if( !grf && !(grf = fopen( GROUP, "r" )) )
483e12c5d1SDavid du Colombier return(NULL);
493e12c5d1SDavid du Colombier if( !(p = fgets( line, BUFSIZ, grf )) )
503e12c5d1SDavid du Colombier return(NULL);
513e12c5d1SDavid du Colombier group.gr_name = p;
523e12c5d1SDavid du Colombier p = grskip(p,CL); /* passwd */
533e12c5d1SDavid du Colombier group.gr_gid = atoi(p = grskip(p,CL));
543e12c5d1SDavid du Colombier group.gr_mem = gr_mem;
553e12c5d1SDavid du Colombier p = grskip(p,CL);
563e12c5d1SDavid du Colombier grskip(p,NL);
573e12c5d1SDavid du Colombier q = gr_mem;
583e12c5d1SDavid du Colombier while( *p ){
593e12c5d1SDavid du Colombier *q++ = p;
603e12c5d1SDavid du Colombier p = grskip(p,CM);
613e12c5d1SDavid du Colombier }
623e12c5d1SDavid du Colombier *q = NULL;
633e12c5d1SDavid du Colombier return( &group );
643e12c5d1SDavid du Colombier }
65