chiark / gitweb /
eglibc (2.11.3-4+deb6u3) squeeze-lts; urgency=medium
[eglibc.git] / 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"