| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #include <gshadow.h>
- #include <stdio.h>
- #include <string.h>
- static const struct sgrp data[] =
- {
- { (char *) "one", (char *) "pwdone",
- (char *[]) { (char *) "admoneone", (char *) "admonetwo",
- (char *) "admonethree", NULL },
- (char *[]) { (char *) "memoneone", (char *) "memonetwo",
- (char *) "memonethree", NULL } },
- { (char *) "two", (char *) "pwdtwo",
- (char *[]) { (char *) "admtwoone", (char *) "admtwotwo", NULL },
- (char *[]) { (char *) "memtwoone", (char *) "memtwotwo",
- (char *) "memtwothree", NULL } },
- { (char *) "three", (char *) "pwdthree",
- (char *[]) { (char *) "admthreeone", (char *) "admthreetwo", NULL },
- (char *[]) { (char *) "memthreeone", (char *) "memthreetwo", NULL } },
- { (char *) "four", (char *) "pwdfour",
- (char *[]) { (char *) "admfourone", (char *) "admfourtwo", NULL },
- (char *[]) { NULL } },
- { (char *) "five", (char *) "pwdfive",
- (char *[]) { NULL },
- (char *[]) { (char *) "memfiveone", (char *) "memfivetwo", NULL } },
- };
- #define ndata (sizeof (data) / sizeof (data[0]))
- static int
- do_test (void)
- {
- FILE *fp = tmpfile ();
- if (fp == NULL)
- {
- puts ("cannot open temporary file");
- return 1;
- }
- for (size_t i = 0; i < ndata; ++i)
- if (putsgent (&data[i], fp) != 0)
- {
- printf ("putsgent call %zu failed\n", i + 1);
- return 1;
- }
- rewind (fp);
- int result = 0;
- int seen = -1;
- struct sgrp *g;
- while ((g = fgetsgent (fp)) != NULL)
- {
- ++seen;
- if (strcmp (g->sg_namp, data[seen].sg_namp) != 0)
- {
- printf ("sg_namp of entry %d does not match: %s vs %s\n",
- seen + 1, g->sg_namp, data[seen].sg_namp);
- result = 1;
- }
- if (strcmp (g->sg_passwd, data[seen].sg_passwd) != 0)
- {
- printf ("sg_passwd of entry %d does not match: %s vs %s\n",
- seen + 1, g->sg_passwd, data[seen].sg_passwd);
- result = 1;
- }
- if (g->sg_adm == NULL)
- {
- printf ("sg_adm of entry %d is NULL\n", seen + 1);
- result = 1;
- }
- else
- {
- int i = 1;
- char **sp1 = g->sg_adm;
- char **sp2 = data[seen].sg_adm;
- while (*sp1 != NULL && *sp2 != NULL)
- {
- if (strcmp (*sp1, *sp2) != 0)
- {
- printf ("sg_adm[%d] of entry %d does not match: %s vs %s\n",
- i, seen + 1, *sp1, *sp2);
- result = 1;
- }
- ++sp1;
- ++sp2;
- ++i;
- }
- if (*sp1 == NULL && *sp2 != NULL)
- {
- printf ("sg_adm of entry %d has too few entries\n", seen + 1);
- result = 1;
- }
- else if (*sp1 != NULL && *sp2 == NULL)
- {
- printf ("sg_adm of entry %d has too many entries\n", seen + 1);
- result = 1;
- }
- }
- if (g->sg_mem == NULL)
- {
- printf ("sg_mem of entry %d is NULL\n", seen + 1);
- result = 1;
- }
- else
- {
- int i = 1;
- char **sp1 = g->sg_mem;
- char **sp2 = data[seen].sg_mem;
- while (*sp1 != NULL && *sp2 != NULL)
- {
- if (strcmp (*sp1, *sp2) != 0)
- {
- printf ("sg_mem[%d] of entry %d does not match: %s vs %s\n",
- i, seen + 1, *sp1, *sp2);
- result = 1;
- }
- ++sp1;
- ++sp2;
- ++i;
- }
- if (*sp1 == NULL && *sp2 != NULL)
- {
- printf ("sg_mem of entry %d has too few entries\n", seen + 1);
- result = 1;
- }
- else if (*sp1 != NULL && *sp2 == NULL)
- {
- printf ("sg_mem of entry %d has too many entries\n", seen + 1);
- result = 1;
- }
- }
- }
- fclose (fp);
- return result;
- }
- #define TEST_FUNCTION do_test ()
- #include "../test-skeleton.c"
|