Blame gshadow/tst-gshadow.c

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