tst-shadow.c 2.1 KB

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