home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume23 / sps2 / part03 / initialise.c < prev    next >
C/C++ Source or Header  |  1991-01-08  |  2KB  |  72 lines

  1. # ifndef lint
  2. static char SccsId[] =  "@(#)initialise.c    1.1\t10/1/88" ;
  3. # endif
  4.  
  5. # include       "sps.h"
  6. # include       "flags.h"
  7. # include       <pwd.h>
  8. # include       <stdio.h>
  9.  
  10. /*
  11. ** INITIALISE - Called to reset the `Info' structure with new kernel
  12. ** addresses and user and tty information.
  13. */
  14. initialise ()
  15. {
  16.     register FILE           *fd ;
  17.     char                    *fileinfo ;
  18.     extern struct flags     Flg ;
  19.     extern struct info      Info ;
  20.     FILE                    *fopen() ;
  21.  
  22.     fileinfo = Flg.flg_j ? Flg.flg_j : FILE_INFO ;
  23.     /* Read kernel addresses */
  24.     initsymbols() ;                 
  25.     /* Read user names */
  26.     initusers() ;                   
  27.     (void)umask( ~0644 ) ;          
  28.     if ( !(fd = fopen( fileinfo, "w" )) )
  29.     {
  30.         fprintf( stderr, "sps - Can't create info file %s", fileinfo ) ;
  31.         sysperror() ;
  32.     }
  33.     /* Find tty addresses */
  34.     inittty() ;                     
  35.     if ( fwrite( (char*)&Info, sizeof( struct info ), 1, fd ) != 1 )
  36.     {
  37.         fprintf( stderr, "sps - Can't write info file %s", fileinfo ) ;
  38.         sysperror() ;
  39.         exit( 1 ) ;
  40.     }
  41.     (void)fclose( fd ) ;
  42.     printf( "sps is initialised\n" ) ;
  43. }
  44.  
  45. /* INITUSERS - Read the passwd file and fill in the user name arrays */
  46. initusers ()
  47. {
  48.     register struct passwd  *pw ;
  49.     register struct hashtab *hp ;
  50.     struct passwd           *getpwent() ;
  51.     char                    *strncpy() ;
  52.     struct hashtab          *hashuid(), *hashnext() ;
  53.  
  54.     while ( pw = getpwent() )
  55.     {       /* For each user in the passwd file, first see if that uid
  56.            has been already allocated in the hash table. */
  57.         if ( hp = hashuid( pw->pw_uid ) )
  58.         {
  59.             fprintf( stderr,
  60.            "sps - Names %s and %s conflict in passwd file for uid %d\n",
  61.                 hp->h_uname, pw->pw_name, pw->pw_uid ) ;
  62.             continue ;
  63.         }
  64.         /* Try to find a free slot in the hash table and fill it. */
  65.         if ( !(hp = hashnext( pw->pw_uid )) )
  66.             prexit( "sps - Too many users in passwd file\n" ) ;
  67.         hp->h_uid = pw->pw_uid ;
  68.         (void)strncpy( hp->h_uname, pw->pw_name, UNAMELEN ) ;
  69.     }
  70.     (void)endpwent() ;
  71. }
  72.