Blame nss/tst-nss-test2.c

Packit Service 82fcde
/* Basic test for two passwd databases.
Packit Service 82fcde
   Copyright (C) 2017-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public
Packit Service 82fcde
   License as published by the Free Software Foundation; either
Packit Service 82fcde
   version 2.1 of the License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; if not, see
Packit Service 82fcde
   <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#include <nss.h>
Packit Service 82fcde
#include <pwd.h>
Packit Service 82fcde
#include <stdio.h>
Packit Service 82fcde
#include <stdlib.h>
Packit Service 82fcde
#include <string.h>
Packit Service 82fcde
Packit Service 82fcde
#include <support/support.h>
Packit Service 82fcde
Packit Service 82fcde
#include "nss_test.h"
Packit Service 82fcde
Packit Service 82fcde
/* The data in these tables is arbitrary, but the merged data based on
Packit Service 82fcde
   the first two tables will be compared against the expected data in
Packit Service 82fcde
   the pwd_expected table, and the tests[] array.  */
Packit Service 82fcde
Packit Service 82fcde
static struct passwd pwd_table_1[] = {
Packit Service 82fcde
    PWD (100),
Packit Service 82fcde
    PWD (30),
Packit Service 82fcde
    PWD (200),
Packit Service 82fcde
    PWD (60),
Packit Service 82fcde
    PWD (20000),
Packit Service 82fcde
    PWD_LAST ()
Packit Service 82fcde
  };
Packit Service 82fcde
Packit Service 82fcde
static struct passwd pwd_table_2[] = {
Packit Service 82fcde
    PWD (5),
Packit Service 82fcde
    PWD_N(200, "name30"),
Packit Service 82fcde
    PWD (16),
Packit Service 82fcde
    PWD_LAST ()
Packit Service 82fcde
  };
Packit Service 82fcde
Packit Service 82fcde
void
Packit Service 82fcde
_nss_test1_init_hook(test_tables *t)
Packit Service 82fcde
{
Packit Service 82fcde
  t->pwd_table = pwd_table_1;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
void
Packit Service 82fcde
_nss_test2_init_hook(test_tables *t)
Packit Service 82fcde
{
Packit Service 82fcde
  t->pwd_table = pwd_table_2;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
static struct passwd pwd_expected[] = {
Packit Service 82fcde
  PWD(100),
Packit Service 82fcde
  PWD(30),
Packit Service 82fcde
  PWD(200),
Packit Service 82fcde
  PWD(60),
Packit Service 82fcde
  PWD(20000),
Packit Service 82fcde
  PWD(5),
Packit Service 82fcde
  PWD_N(200, "name30"),
Packit Service 82fcde
  PWD(16),
Packit Service 82fcde
  PWD_LAST ()
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
static struct {
Packit Service 82fcde
  uid_t uid;
Packit Service 82fcde
  const char *name;
Packit Service 82fcde
} tests[] = {
Packit Service 82fcde
  { 100, "name100" }, /* control, first db */
Packit Service 82fcde
  {  16, "name16"  }, /* second db */
Packit Service 82fcde
  {  30, "name30"  }, /* test overlaps in name */
Packit Service 82fcde
  { 200, "name200" }, /* test overlaps uid */
Packit Service 82fcde
  { 0, NULL }
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
static int
Packit Service 82fcde
do_test (void)
Packit Service 82fcde
{
Packit Service 82fcde
  int retval = 0;
Packit Service 82fcde
  int i;
Packit Service 82fcde
Packit Service 82fcde
  __nss_configure_lookup ("passwd", "test1 test2");
Packit Service 82fcde
Packit Service 82fcde
  setpwent ();
Packit Service 82fcde
Packit Service 82fcde
  i = 0;
Packit Service 82fcde
  for (struct passwd *p = getpwent (); p != NULL; ++i, p = getpwent ())
Packit Service 82fcde
    {
Packit Service 82fcde
      retval += compare_passwds (i, & pwd_expected[i], p);
Packit Service 82fcde
Packit Service 82fcde
      if (p->pw_uid != pwd_expected[i].pw_uid || strcmp (p->pw_name, pwd_expected[i].pw_name) != 0)
Packit Service 82fcde
      {
Packit Service 82fcde
	printf ("FAIL: getpwent for %u.%s returned %u.%s\n",
Packit Service 82fcde
		pwd_expected[i].pw_uid, pwd_expected[i].pw_name,
Packit Service 82fcde
		p->pw_uid, p->pw_name);
Packit Service 82fcde
	retval = 1;
Packit Service 82fcde
	break;
Packit Service 82fcde
      }
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  endpwent ();
Packit Service 82fcde
Packit Service 82fcde
  for (i=0; tests[i].name; i++)
Packit Service 82fcde
    {
Packit Service 82fcde
      struct passwd *p = getpwnam (tests[i].name);
Packit Service 82fcde
      if (strcmp (p->pw_name, tests[i].name) != 0
Packit Service 82fcde
	  || p->pw_uid != tests[i].uid)
Packit Service 82fcde
	{
Packit Service 82fcde
	  printf("FAIL: getpwnam for %u.%s returned %u.%s\n",
Packit Service 82fcde
		 tests[i].uid, tests[i].name,
Packit Service 82fcde
		 p->pw_uid, p->pw_name);
Packit Service 82fcde
	  retval = 1;
Packit Service 82fcde
	}
Packit Service 82fcde
Packit Service 82fcde
      p = getpwuid (tests[i].uid);
Packit Service 82fcde
      if (strcmp (p->pw_name, tests[i].name) != 0
Packit Service 82fcde
	  || p->pw_uid != tests[i].uid)
Packit Service 82fcde
	{
Packit Service 82fcde
	  printf("FAIL: getpwuid for %u.%s returned %u.%s\n",
Packit Service 82fcde
		 tests[i].uid, tests[i].name,
Packit Service 82fcde
		 p->pw_uid, p->pw_name);
Packit Service 82fcde
	  retval = 1;
Packit Service 82fcde
	}
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  return retval;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
#include <support/test-driver.c>