home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume6 / shadow-2.pt3 / shadow.c < prev    next >
C/C++ Source or Header  |  1989-02-03  |  2KB  |  106 lines

  1. #include "shadow.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. static    FILE    *shadow;
  6.  
  7. void    setspent ()
  8. {
  9.     if (shadow)
  10.         rewind (shadow);
  11.     else
  12.         shadow = fopen (SHADOW, "r");
  13. }
  14.  
  15. void    endspent ()
  16. {
  17.     if (shadow)
  18.         (void) fclose (shadow);
  19.  
  20.     shadow = (FILE *) 0;
  21. }
  22.  
  23. struct    spwd    *fgetspent (fp)
  24. FILE    *fp;
  25. {
  26.     static    struct    spwd    spwd;
  27.     static    char    name[32];
  28.     static    char    pass[32];
  29.     char    buf[BUFSIZ];
  30.     char    *cp;
  31.     int    atoi ();
  32.     long    atol ();
  33.  
  34.     if (! fp)
  35.         return (0);
  36.  
  37.     if (fgets (buf, BUFSIZ, fp) == (char *) 0)
  38.         return (0);
  39.  
  40.     buf[strlen (buf) - 1] = '\0';
  41.  
  42.     if ((cp = strtok (buf, ":")) && *cp)
  43.         (void) strcpy (name, cp);
  44.     else
  45.         return (0);
  46.  
  47.     if ((cp = strtok ((char *) 0, ":")) && *cp)
  48.         (void) strcpy (pass, cp);
  49.     else
  50.         return (0);
  51.  
  52.     if ((cp = strtok ((char *) 0, ":")) && *cp)
  53.         spwd.sp_lstchg = atol (cp);
  54.     else
  55.         return (0);
  56.  
  57.     if ((cp = strtok ((char *) 0, ":")) && *cp)
  58.         spwd.sp_min = atoi (cp);
  59.     else
  60.         return (0);
  61.  
  62.     if ((cp = strtok ((char *) 0, ":")) && *cp)
  63.         spwd.sp_max = atoi (cp);
  64.     else
  65.         return (0);
  66.  
  67.     spwd.sp_namp = name;
  68.     spwd.sp_pwdp = pass;
  69.  
  70.     return (&spwd);
  71. }
  72.  
  73. struct    spwd    *getspent ()
  74. {
  75.     if (! shadow)
  76.         setspent ();
  77.  
  78.     return (fgetspent (shadow));
  79. }
  80.  
  81. struct    spwd    *getspnam (name)
  82. char    *name;
  83. {
  84.     struct    spwd    *spwd;
  85.  
  86.     setspent ();
  87.  
  88.     while ((spwd = getspent ()) != (struct spwd *) 0) {
  89.         if (strcmp (name, spwd->sp_namp) == 0)
  90.             return (spwd);
  91.     }
  92.     return (0);
  93. }
  94.  
  95. int    putspent (spwd, fp)
  96. struct    spwd    *spwd;
  97. FILE    *fp;
  98. {
  99.     if (! fp)
  100.         return (0);
  101.  
  102.     return (fprintf (fp, "%s:%s:%ld:%d:%d\n",
  103.             spwd->sp_namp, spwd->sp_pwdp,
  104.             spwd->sp_lstchg, spwd->sp_min, spwd->sp_max) != EOF);
  105. }
  106.