]>
Commit | Line | Data |
---|---|---|
3b055b47 UD |
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" |