(root)/
glibc-2.38/
shadow/
tst-shadow.c
       1  #include <shadow.h>
       2  #include <stdio.h>
       3  #include <string.h>
       4  
       5  
       6  static const struct spwd data[] =
       7    {
       8      { (char *) "one", (char *) "pwdone", 1, 2, 3, 4, 5, 6, 7 },
       9      { (char *) "two", (char *) "pwdtwo", 11, 12, 13, 14, 15, 16, 17 },
      10      { (char *) "three", (char *) "pwdthree", -1, 22, 23, 24, 25, 26, 27 },
      11      { (char *) "four", (char *) "pwdfour", 31, -1, 33, 34, 35, 36, 37 },
      12      { (char *) "five", (char *) "pwdfive", 41, 42, -1, 44, 45, 46, 47 },
      13      { (char *) "six", (char *) "pwdsix", 51, 52, 53, -1, 55, 56, 57 },
      14      { (char *) "seven", (char *) "pwdseven", 61, 62, 63, 64, -1, 66, 67 },
      15      { (char *) "eight", (char *) "pwdeigth", 71, 72, 73, 74, 75, -1, 77 },
      16      { (char *) "nine", (char *) "pwdnine", 81, 82, 83, 84, 85, 86, ~0ul },
      17    };
      18  #define ndata (sizeof (data) / sizeof (data[0]))
      19  
      20  
      21  static int
      22  do_test (void)
      23  {
      24    FILE *fp = tmpfile ();
      25    if (fp == NULL)
      26      {
      27        puts ("cannot open temporary file");
      28        return 1;
      29      }
      30  
      31    for (size_t i = 0; i < ndata; ++i)
      32      if (putspent (&data[i], fp) != 0)
      33        {
      34  	printf ("putspent call %zu failed\n", i + 1);
      35  	return 1;
      36        }
      37  
      38    rewind (fp);
      39  
      40    int result = 0;
      41    int seen = -1;
      42    struct spwd *p;
      43    while ((p = fgetspent (fp)) != NULL)
      44      {
      45        ++seen;
      46        if (strcmp (p->sp_namp, data[seen].sp_namp) != 0)
      47  	{
      48  	  printf ("sp_namp of entry %d does not match: %s vs %s\n",
      49  		  seen + 1, p->sp_namp, data[seen].sp_namp);
      50  	  result = 1;
      51  	}
      52        if (strcmp (p->sp_pwdp, data[seen].sp_pwdp) != 0)
      53  	{
      54  	  printf ("sp_pwdp of entry %d does not match: %s vs %s\n",
      55  		  seen + 1, p->sp_pwdp, data[seen].sp_pwdp);
      56  	  result = 1;
      57  	}
      58  #define T(f) \
      59        if (p->f != data[seen].f)						      \
      60  	{								      \
      61  	  printf ("%s of entry %d wrong: %ld vs %ld\n",			      \
      62  		  #f, seen + 1, p->f, data[seen].f);			      \
      63  	  result = 1;							      \
      64  	}
      65        T (sp_lstchg);
      66        T (sp_min);
      67        T (sp_max);
      68        T (sp_warn);
      69        T (sp_expire);
      70        if (p->sp_flag != data[seen].sp_flag)
      71  	{
      72  	  printf ("sp_flag of entry %d wrong: %lu vs %lu\n",
      73  		  seen + 1, p->sp_flag, data[seen].sp_flag);
      74  	  result = 1;
      75  	}
      76      }
      77  
      78    fclose (fp);
      79  
      80    return result;
      81  }
      82  
      83  #define TEST_FUNCTION do_test ()
      84  #include "../test-skeleton.c"