diff options
Diffstat (limited to 'nss/tst-nss-test1.c')
-rw-r--r-- | nss/tst-nss-test1.c | 76 |
1 files changed, 64 insertions, 12 deletions
diff --git a/nss/tst-nss-test1.c b/nss/tst-nss-test1.c index c5750e0956..ff13272219 100644 --- a/nss/tst-nss-test1.c +++ b/nss/tst-nss-test1.c @@ -1,9 +1,49 @@ +/* Basic test of passwd database handling. + Copyright (C) 2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + #include <nss.h> #include <pwd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> +#include "nss_test.h" + +static int hook_called = 0; + +/* Note: the values chosen here are arbitrary; they need only be + unique within the table. However, they do need to match the + "pwdids" array further down. */ +static struct passwd pwd_table[] = { + PWD (100), + PWD (30), + PWD (200), + PWD (60), + PWD (20000), + PWD_LAST () + }; + +void +_nss_test1_init_hook(test_tables *t) +{ + hook_called = 1; + t->pwd_table = pwd_table; +} static int do_test (void) @@ -12,20 +52,26 @@ do_test (void) __nss_configure_lookup ("passwd", "test1"); + /* This must match the pwd_table above. */ static const unsigned int pwdids[] = { 100, 30, 200, 60, 20000 }; #define npwdids (sizeof (pwdids) / sizeof (pwdids[0])) + setpwent (); const unsigned int *np = pwdids; for (struct passwd *p = getpwent (); p != NULL; ++np, p = getpwent ()) - if (p->pw_uid != *np || strncmp (p->pw_name, "name", 4) != 0 - || atol (p->pw_name + 4) != *np) - { - printf ("passwd entry %td wrong (%s, %u)\n", - np - pwdids, p->pw_name, p->pw_uid); - retval = 1; - break; - } + { + retval += compare_passwds (np-pwdids, p, & pwd_table[np-pwdids]); + + if (p->pw_uid != *np || strncmp (p->pw_name, "name", 4) != 0 + || atol (p->pw_name + 4) != *np) + { + printf ("FAIL: passwd entry %td wrong (%s, %u)\n", + np - pwdids, p->pw_name, p->pw_uid); + retval = 1; + break; + } + } endpwent (); @@ -37,14 +83,14 @@ do_test (void) struct passwd *p = getpwnam (buf); if (p == NULL || p->pw_uid != pwdids[i] || strcmp (buf, p->pw_name) != 0) { - printf ("passwd entry \"%s\" wrong\n", buf); + printf ("FAIL: passwd entry \"%s\" wrong\n", buf); retval = 1; } p = getpwuid (pwdids[i]); if (p == NULL || p->pw_uid != pwdids[i] || strcmp (buf, p->pw_name) != 0) { - printf ("passwd entry %u wrong\n", pwdids[i]); + printf ("FAIL: passwd entry %u wrong\n", pwdids[i]); retval = 1; } @@ -53,18 +99,24 @@ do_test (void) p = getpwnam (buf); if (p != NULL) { - printf ("passwd entry \"%s\" wrong\n", buf); + printf ("FAIL: passwd entry \"%s\" wrong\n", buf); retval = 1; } p = getpwuid (pwdids[i] + 1); if (p != NULL) { - printf ("passwd entry %u wrong\n", pwdids[i] + 1); + printf ("FAIL: passwd entry %u wrong\n", pwdids[i] + 1); retval = 1; } } + if (!hook_called) + { + retval = 1; + printf("FAIL: init hook never called\n"); + } + return retval; } |