1168754Sbushman/*- 2168754Sbushman * Copyright (c) 2006 Michael Bushkov <bushman@freebsd.org> 3251867Seadler * All rights reserved. 4168754Sbushman * 5168754Sbushman * Redistribution and use in source and binary forms, with or without 6168754Sbushman * modification, are permitted provided that the following conditions 7168754Sbushman * are met: 8168754Sbushman * 1. Redistributions of source code must retain the above copyright 9168754Sbushman * notice, this list of conditions and the following disclaimer. 10168754Sbushman * 2. Redistributions in binary form must reproduce the above copyright 11168754Sbushman * notice, this list of conditions and the following disclaimer in the 12168754Sbushman * documentation and/or other materials provided with the distribution. 13168754Sbushman * 14168754Sbushman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15168754Sbushman * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16168754Sbushman * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17168754Sbushman * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18168754Sbushman * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19168754Sbushman * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20168754Sbushman * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21168754Sbushman * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22168754Sbushman * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23168754Sbushman * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24168754Sbushman * SUCH DAMAGE. 25168754Sbushman * 26168754Sbushman */ 27168754Sbushman 28168754Sbushman#include <sys/cdefs.h> 29168754Sbushman__FBSDID("$FreeBSD: stable/10/lib/libc/tests/nss/getpw_test.c 319298 2017-05-31 08:30:37Z ngie $"); 30168754Sbushman 31168754Sbushman#include <errno.h> 32168754Sbushman#include <pwd.h> 33168754Sbushman#include <stdio.h> 34168754Sbushman#include <stdlib.h> 35168754Sbushman#include <string.h> 36168754Sbushman#include <unistd.h> 37292323Sngie 38292323Sngie#include <atf-c.h> 39292323Sngie 40168754Sbushman#include "testutil.h" 41168754Sbushman 42168754Sbushmanenum test_methods { 43168754Sbushman TEST_GETPWENT, 44168754Sbushman TEST_GETPWNAM, 45168754Sbushman TEST_GETPWUID, 46168754Sbushman TEST_GETPWENT_2PASS, 47168754Sbushman TEST_BUILD_SNAPSHOT 48168754Sbushman}; 49168754Sbushman 50168754SbushmanDECLARE_TEST_DATA(passwd) 51168754SbushmanDECLARE_TEST_FILE_SNAPSHOT(passwd) 52168754SbushmanDECLARE_1PASS_TEST(passwd) 53168754SbushmanDECLARE_2PASS_TEST(passwd) 54168754Sbushman 55168754Sbushmanstatic void clone_passwd(struct passwd *, struct passwd const *); 56168754Sbushmanstatic int compare_passwd(struct passwd *, struct passwd *, void *); 57168754Sbushmanstatic void free_passwd(struct passwd *); 58168754Sbushman 59168754Sbushmanstatic void sdump_passwd(struct passwd *, char *, size_t); 60319298Sngie#ifdef DEBUG 61168754Sbushmanstatic void dump_passwd(struct passwd *); 62319298Sngie#endif 63168754Sbushman 64168754Sbushmanstatic int passwd_read_snapshot_func(struct passwd *, char *); 65168754Sbushman 66168754Sbushmanstatic int passwd_check_ambiguity(struct passwd_test_data *, struct passwd *); 67168754Sbushmanstatic int passwd_fill_test_data(struct passwd_test_data *); 68168754Sbushmanstatic int passwd_test_correctness(struct passwd *, void *); 69168754Sbushmanstatic int passwd_test_getpwnam(struct passwd *, void *); 70168754Sbushmanstatic int passwd_test_getpwuid(struct passwd *, void *); 71168754Sbushmanstatic int passwd_test_getpwent(struct passwd *, void *); 72291363Sngie 73168754SbushmanIMPLEMENT_TEST_DATA(passwd) 74168754SbushmanIMPLEMENT_TEST_FILE_SNAPSHOT(passwd) 75168754SbushmanIMPLEMENT_1PASS_TEST(passwd) 76168754SbushmanIMPLEMENT_2PASS_TEST(passwd) 77168754Sbushman 78291363Sngiestatic void 79168754Sbushmanclone_passwd(struct passwd *dest, struct passwd const *src) 80168754Sbushman{ 81292323Sngie ATF_REQUIRE(dest != NULL); 82292323Sngie ATF_REQUIRE(src != NULL); 83291363Sngie 84168754Sbushman memcpy(dest, src, sizeof(struct passwd)); 85168754Sbushman if (src->pw_name != NULL) 86168754Sbushman dest->pw_name = strdup(src->pw_name); 87168754Sbushman if (src->pw_passwd != NULL) 88168754Sbushman dest->pw_passwd = strdup(src->pw_passwd); 89168754Sbushman if (src->pw_class != NULL) 90168754Sbushman dest->pw_class = strdup(src->pw_class); 91168754Sbushman if (src->pw_gecos != NULL) 92168754Sbushman dest->pw_gecos = strdup(src->pw_gecos); 93168754Sbushman if (src->pw_dir != NULL) 94168754Sbushman dest->pw_dir = strdup(src->pw_dir); 95168754Sbushman if (src->pw_shell != NULL) 96168754Sbushman dest->pw_shell = strdup(dest->pw_shell); 97168754Sbushman} 98168754Sbushman 99291363Sngiestatic int 100319298Sngiecompare_passwd(struct passwd *pwd1, struct passwd *pwd2, void *mdata __unused) 101168754Sbushman{ 102292323Sngie ATF_REQUIRE(pwd1 != NULL); 103292323Sngie ATF_REQUIRE(pwd2 != NULL); 104291363Sngie 105168754Sbushman if (pwd1 == pwd2) 106168754Sbushman return (0); 107291363Sngie 108292323Sngie if (pwd1->pw_uid != pwd2->pw_uid || 109292323Sngie pwd1->pw_gid != pwd2->pw_gid || 110292323Sngie pwd1->pw_change != pwd2->pw_change || 111292323Sngie pwd1->pw_expire != pwd2->pw_expire || 112292323Sngie pwd1->pw_fields != pwd2->pw_fields || 113292323Sngie strcmp(pwd1->pw_name, pwd2->pw_name) != 0 || 114292323Sngie strcmp(pwd1->pw_passwd, pwd2->pw_passwd) != 0 || 115292323Sngie strcmp(pwd1->pw_class, pwd2->pw_class) != 0 || 116292323Sngie strcmp(pwd1->pw_gecos, pwd2->pw_gecos) != 0 || 117292323Sngie strcmp(pwd1->pw_dir, pwd2->pw_dir) != 0 || 118292323Sngie strcmp(pwd1->pw_shell, pwd2->pw_shell) != 0) 119168754Sbushman return (-1); 120168754Sbushman else 121168754Sbushman return (0); 122168754Sbushman} 123168754Sbushman 124291363Sngiestatic void 125168754Sbushmanfree_passwd(struct passwd *pwd) 126168754Sbushman{ 127168754Sbushman free(pwd->pw_name); 128168754Sbushman free(pwd->pw_passwd); 129168754Sbushman free(pwd->pw_class); 130168754Sbushman free(pwd->pw_gecos); 131168754Sbushman free(pwd->pw_dir); 132168754Sbushman free(pwd->pw_shell); 133168754Sbushman} 134168754Sbushman 135291363Sngiestatic void 136168754Sbushmansdump_passwd(struct passwd *pwd, char *buffer, size_t buflen) 137168754Sbushman{ 138292323Sngie snprintf(buffer, buflen, "%s:%s:%d:%d:%jd:%s:%s:%s:%s:%jd:%d", 139292323Sngie pwd->pw_name, pwd->pw_passwd, pwd->pw_uid, pwd->pw_gid, 140292323Sngie (uintmax_t)pwd->pw_change, pwd->pw_class, pwd->pw_gecos, 141292323Sngie pwd->pw_dir, pwd->pw_shell, (uintmax_t)pwd->pw_expire, 142292323Sngie pwd->pw_fields); 143168754Sbushman} 144168754Sbushman 145319298Sngie#ifdef DEBUG 146168754Sbushmanstatic void 147168754Sbushmandump_passwd(struct passwd *pwd) 148168754Sbushman{ 149168754Sbushman if (pwd != NULL) { 150168754Sbushman char buffer[2048]; 151168754Sbushman sdump_passwd(pwd, buffer, sizeof(buffer)); 152168754Sbushman printf("%s\n", buffer); 153168754Sbushman } else 154168754Sbushman printf("(null)\n"); 155168754Sbushman} 156319298Sngie#endif 157168754Sbushman 158291363Sngiestatic int 159168754Sbushmanpasswd_read_snapshot_func(struct passwd *pwd, char *line) 160168754Sbushman{ 161168754Sbushman char *s, *ps, *ts; 162168754Sbushman int i; 163168754Sbushman 164292323Sngie#ifdef DEBUG 165292323Sngie printf("1 line read from snapshot:\n%s\n", line); 166292323Sngie#endif 167291363Sngie 168168754Sbushman i = 0; 169168754Sbushman ps = line; 170168754Sbushman memset(pwd, 0, sizeof(struct passwd)); 171292323Sngie while ((s = strsep(&ps, ":")) != NULL) { 172168754Sbushman switch (i) { 173292323Sngie case 0: 174292323Sngie pwd->pw_name = strdup(s); 175292323Sngie ATF_REQUIRE(pwd->pw_name != NULL); 176168754Sbushman break; 177292323Sngie case 1: 178292323Sngie pwd->pw_passwd = strdup(s); 179292323Sngie ATF_REQUIRE(pwd->pw_passwd != NULL); 180168754Sbushman break; 181292323Sngie case 2: 182292323Sngie pwd->pw_uid = (uid_t)strtol(s, &ts, 10); 183292323Sngie if (*ts != '\0') 184292323Sngie goto fin; 185168754Sbushman break; 186292323Sngie case 3: 187292323Sngie pwd->pw_gid = (gid_t)strtol(s, &ts, 10); 188292323Sngie if (*ts != '\0') 189292323Sngie goto fin; 190168754Sbushman break; 191292323Sngie case 4: 192292323Sngie pwd->pw_change = (time_t)strtol(s, &ts, 10); 193292323Sngie if (*ts != '\0') 194292323Sngie goto fin; 195168754Sbushman break; 196292323Sngie case 5: 197292323Sngie pwd->pw_class = strdup(s); 198292323Sngie ATF_REQUIRE(pwd->pw_class != NULL); 199168754Sbushman break; 200292323Sngie case 6: 201292323Sngie pwd->pw_gecos = strdup(s); 202292323Sngie ATF_REQUIRE(pwd->pw_gecos != NULL); 203168754Sbushman break; 204292323Sngie case 7: 205292323Sngie pwd->pw_dir = strdup(s); 206292323Sngie ATF_REQUIRE(pwd->pw_dir != NULL); 207168754Sbushman break; 208292323Sngie case 8: 209292323Sngie pwd->pw_shell = strdup(s); 210292323Sngie ATF_REQUIRE(pwd->pw_shell != NULL); 211168754Sbushman break; 212292323Sngie case 9: 213292323Sngie pwd->pw_expire = (time_t)strtol(s, &ts, 10); 214292323Sngie if (*ts != '\0') 215292323Sngie goto fin; 216168754Sbushman break; 217292323Sngie case 10: 218292323Sngie pwd->pw_fields = (int)strtol(s, &ts, 10); 219292323Sngie if (*ts != '\0') 220292323Sngie goto fin; 221168754Sbushman break; 222292323Sngie default: 223291363Sngie break; 224292323Sngie } 225168754Sbushman ++i; 226168754Sbushman } 227168754Sbushman 228168754Sbushmanfin: 229168754Sbushman if (i != 11) { 230168754Sbushman free_passwd(pwd); 231168754Sbushman memset(pwd, 0, sizeof(struct passwd)); 232168754Sbushman return (-1); 233168754Sbushman } 234291363Sngie 235168754Sbushman return (0); 236168754Sbushman} 237168754Sbushman 238168754Sbushmanstatic int 239168754Sbushmanpasswd_fill_test_data(struct passwd_test_data *td) 240168754Sbushman{ 241168754Sbushman struct passwd *pwd; 242291363Sngie 243168754Sbushman setpassent(1); 244168754Sbushman while ((pwd = getpwent()) != NULL) { 245168754Sbushman if (passwd_test_correctness(pwd, NULL) == 0) 246168754Sbushman TEST_DATA_APPEND(passwd, td, pwd); 247168754Sbushman else 248168754Sbushman return (-1); 249168754Sbushman } 250168754Sbushman endpwent(); 251291363Sngie 252168754Sbushman return (0); 253168754Sbushman} 254168754Sbushman 255168754Sbushmanstatic int 256319298Sngiepasswd_test_correctness(struct passwd *pwd, void *mdata __unused) 257168754Sbushman{ 258291363Sngie 259292323Sngie#ifdef DEBUG 260292323Sngie printf("testing correctness with the following data:\n"); 261292323Sngie dump_passwd(pwd); 262292323Sngie#endif 263292323Sngie 264168754Sbushman if (pwd == NULL) 265291363Sngie return (-1); 266168754Sbushman 267168754Sbushman if (pwd->pw_name == NULL) 268168754Sbushman goto errfin; 269168754Sbushman 270168754Sbushman if (pwd->pw_passwd == NULL) 271168754Sbushman goto errfin; 272168754Sbushman 273168754Sbushman if (pwd->pw_class == NULL) 274168754Sbushman goto errfin; 275168754Sbushman 276168754Sbushman if (pwd->pw_gecos == NULL) 277168754Sbushman goto errfin; 278168754Sbushman 279168754Sbushman if (pwd->pw_dir == NULL) 280168754Sbushman goto errfin; 281168754Sbushman 282168754Sbushman if (pwd->pw_shell == NULL) 283168754Sbushman goto errfin; 284291363Sngie 285292323Sngie#ifdef DEBUG 286292323Sngie printf("correct\n"); 287292323Sngie#endif 288291363Sngie 289291363Sngie return (0); 290168754Sbushmanerrfin: 291292323Sngie#ifdef DEBUG 292292323Sngie printf("incorrect\n"); 293292323Sngie#endif 294291363Sngie 295168754Sbushman return (-1); 296168754Sbushman} 297168754Sbushman 298168754Sbushman/* passwd_check_ambiguity() is needed here because when doing the getpwent() 299291363Sngie * calls sequence, records from different nsswitch sources can be different, 300168754Sbushman * though having the same pw_name/pw_uid */ 301168754Sbushmanstatic int 302168754Sbushmanpasswd_check_ambiguity(struct passwd_test_data *td, struct passwd *pwd) 303168754Sbushman{ 304291363Sngie 305168754Sbushman return (TEST_DATA_FIND(passwd, td, pwd, compare_passwd, 306168754Sbushman NULL) != NULL ? 0 : -1); 307168754Sbushman} 308168754Sbushman 309168754Sbushmanstatic int 310168754Sbushmanpasswd_test_getpwnam(struct passwd *pwd_model, void *mdata) 311168754Sbushman{ 312168754Sbushman struct passwd *pwd; 313291363Sngie 314292323Sngie#ifdef DEBUG 315292323Sngie printf("testing getpwnam() with the following data:\n"); 316292323Sngie dump_passwd(pwd_model); 317292323Sngie#endif 318168754Sbushman 319168754Sbushman pwd = getpwnam(pwd_model->pw_name); 320168754Sbushman if (passwd_test_correctness(pwd, NULL) != 0) 321168754Sbushman goto errfin; 322291363Sngie 323168754Sbushman if ((compare_passwd(pwd, pwd_model, NULL) != 0) && 324291363Sngie (passwd_check_ambiguity((struct passwd_test_data *)mdata, pwd) 325168754Sbushman !=0)) 326168754Sbushman goto errfin; 327291363Sngie 328292323Sngie#ifdef DEBUG 329292323Sngie printf("ok\n"); 330292323Sngie#endif 331168754Sbushman return (0); 332291363Sngie 333168754Sbushmanerrfin: 334292323Sngie#ifdef DEBUG 335292323Sngie printf("not ok\n"); 336292323Sngie#endif 337168754Sbushman return (-1); 338168754Sbushman} 339168754Sbushman 340168754Sbushmanstatic int 341168754Sbushmanpasswd_test_getpwuid(struct passwd *pwd_model, void *mdata) 342168754Sbushman{ 343168754Sbushman struct passwd *pwd; 344291363Sngie 345292323Sngie#ifdef DEBUG 346292323Sngie printf("testing getpwuid() with the following data...\n"); 347292323Sngie dump_passwd(pwd_model); 348292323Sngie#endif 349291363Sngie 350168754Sbushman pwd = getpwuid(pwd_model->pw_uid); 351291363Sngie if ((passwd_test_correctness(pwd, NULL) != 0) || 352168754Sbushman ((compare_passwd(pwd, pwd_model, NULL) != 0) && 353168754Sbushman (passwd_check_ambiguity((struct passwd_test_data *)mdata, pwd) 354168754Sbushman != 0))) { 355292323Sngie#ifdef DEBUG 356168754Sbushman printf("not ok\n"); 357292323Sngie#endif 358292323Sngie return (-1); 359168754Sbushman } else { 360292323Sngie#ifdef DEBUG 361168754Sbushman printf("ok\n"); 362292323Sngie#endif 363292323Sngie return (0); 364168754Sbushman } 365168754Sbushman} 366168754Sbushman 367291363Sngiestatic int 368319298Sngiepasswd_test_getpwent(struct passwd *pwd, void *mdata __unused) 369168754Sbushman{ 370168754Sbushman /* Only correctness can be checked when doing 1-pass test for 371168754Sbushman * getpwent(). */ 372168754Sbushman return (passwd_test_correctness(pwd, NULL)); 373168754Sbushman} 374168754Sbushman 375292323Sngiestatic int 376292323Sngierun_tests(const char *snapshot_file, enum test_methods method) 377168754Sbushman{ 378168754Sbushman struct passwd_test_data td, td_snap, td_2pass; 379168754Sbushman int rv; 380291363Sngie 381168754Sbushman TEST_DATA_INIT(passwd, &td, clone_passwd, free_passwd); 382168754Sbushman TEST_DATA_INIT(passwd, &td_snap, clone_passwd, free_passwd); 383168754Sbushman if (snapshot_file != NULL) { 384291363Sngie if (access(snapshot_file, W_OK | R_OK) != 0) { 385168754Sbushman if (errno == ENOENT) 386168754Sbushman method = TEST_BUILD_SNAPSHOT; 387168754Sbushman else { 388292323Sngie printf("can't access the file %s\n", 389292323Sngie snapshot_file); 390168754Sbushman rv = -1; 391168754Sbushman goto fin; 392168754Sbushman } 393168754Sbushman } else { 394168754Sbushman if (method == TEST_BUILD_SNAPSHOT) { 395168754Sbushman rv = 0; 396168754Sbushman goto fin; 397168754Sbushman } 398291363Sngie 399168754Sbushman TEST_SNAPSHOT_FILE_READ(passwd, snapshot_file, 400168754Sbushman &td_snap, passwd_read_snapshot_func); 401168754Sbushman } 402168754Sbushman } 403291363Sngie 404168754Sbushman rv = passwd_fill_test_data(&td); 405168754Sbushman if (rv == -1) 406168754Sbushman return (-1); 407291363Sngie 408168754Sbushman switch (method) { 409168754Sbushman case TEST_GETPWNAM: 410168754Sbushman if (snapshot_file == NULL) 411168754Sbushman rv = DO_1PASS_TEST(passwd, &td, 412168754Sbushman passwd_test_getpwnam, (void *)&td); 413168754Sbushman else 414291363Sngie rv = DO_1PASS_TEST(passwd, &td_snap, 415168754Sbushman passwd_test_getpwnam, (void *)&td_snap); 416168754Sbushman break; 417168754Sbushman case TEST_GETPWUID: 418168754Sbushman if (snapshot_file == NULL) 419168754Sbushman rv = DO_1PASS_TEST(passwd, &td, 420168754Sbushman passwd_test_getpwuid, (void *)&td); 421168754Sbushman else 422291363Sngie rv = DO_1PASS_TEST(passwd, &td_snap, 423168754Sbushman passwd_test_getpwuid, (void *)&td_snap); 424168754Sbushman break; 425168754Sbushman case TEST_GETPWENT: 426168754Sbushman if (snapshot_file == NULL) 427168754Sbushman rv = DO_1PASS_TEST(passwd, &td, passwd_test_getpwent, 428168754Sbushman (void *)&td); 429168754Sbushman else 430168754Sbushman rv = DO_2PASS_TEST(passwd, &td, &td_snap, 431168754Sbushman compare_passwd, NULL); 432168754Sbushman break; 433168754Sbushman case TEST_GETPWENT_2PASS: 434292323Sngie TEST_DATA_INIT(passwd, &td_2pass, clone_passwd, free_passwd); 435292323Sngie rv = passwd_fill_test_data(&td_2pass); 436292323Sngie if (rv != -1) 437292323Sngie rv = DO_2PASS_TEST(passwd, &td, &td_2pass, 438292323Sngie compare_passwd, NULL); 439292323Sngie TEST_DATA_DESTROY(passwd, &td_2pass); 440168754Sbushman break; 441168754Sbushman case TEST_BUILD_SNAPSHOT: 442168754Sbushman if (snapshot_file != NULL) 443292323Sngie rv = TEST_SNAPSHOT_FILE_WRITE(passwd, snapshot_file, 444292323Sngie &td, sdump_passwd); 445168754Sbushman break; 446168754Sbushman default: 447168754Sbushman rv = 0; 448168754Sbushman break; 449292323Sngie } 450168754Sbushman 451168754Sbushmanfin: 452168754Sbushman TEST_DATA_DESTROY(passwd, &td_snap); 453168754Sbushman TEST_DATA_DESTROY(passwd, &td); 454292323Sngie 455168754Sbushman return (rv); 456168754Sbushman} 457292323Sngie 458292323Sngie#define SNAPSHOT_FILE "snapshot_pwd" 459292323Sngie 460292323SngieATF_TC_WITHOUT_HEAD(build_snapshot); 461292323SngieATF_TC_BODY(build_snapshot, tc) 462292323Sngie{ 463292323Sngie 464292323Sngie ATF_REQUIRE(run_tests(SNAPSHOT_FILE, TEST_BUILD_SNAPSHOT) == 0); 465292323Sngie} 466292323Sngie 467292323SngieATF_TC_WITHOUT_HEAD(getpwent); 468292323SngieATF_TC_BODY(getpwent, tc) 469292323Sngie{ 470292323Sngie 471292323Sngie ATF_REQUIRE(run_tests(SNAPSHOT_FILE, TEST_GETPWENT) == 0); 472292323Sngie} 473292323Sngie 474292323SngieATF_TC_WITHOUT_HEAD(getpwent_with_snapshot); 475292323SngieATF_TC_BODY(getpwent_with_snapshot, tc) 476292323Sngie{ 477292323Sngie 478292323Sngie ATF_REQUIRE(run_tests(SNAPSHOT_FILE, TEST_BUILD_SNAPSHOT) == 0); 479292323Sngie ATF_REQUIRE(run_tests(SNAPSHOT_FILE, TEST_GETPWENT) == 0); 480292323Sngie} 481292323Sngie 482292323SngieATF_TC_WITHOUT_HEAD(getpwent_with_two_pass); 483292323SngieATF_TC_BODY(getpwent_with_two_pass, tc) 484292323Sngie{ 485292323Sngie 486292323Sngie ATF_REQUIRE(run_tests(SNAPSHOT_FILE, TEST_GETPWENT_2PASS) == 0); 487292323Sngie} 488292323Sngie 489292323SngieATF_TC_WITHOUT_HEAD(getpwnam); 490292323SngieATF_TC_BODY(getpwnam, tc) 491292323Sngie{ 492292323Sngie 493292323Sngie ATF_REQUIRE(run_tests(SNAPSHOT_FILE, TEST_GETPWNAM) == 0); 494292323Sngie} 495292323Sngie 496292323SngieATF_TC_WITHOUT_HEAD(getpwnam_with_snapshot); 497292323SngieATF_TC_BODY(getpwnam_with_snapshot, tc) 498292323Sngie{ 499292323Sngie 500292323Sngie ATF_REQUIRE(run_tests(SNAPSHOT_FILE, TEST_BUILD_SNAPSHOT) == 0); 501292323Sngie ATF_REQUIRE(run_tests(SNAPSHOT_FILE, TEST_GETPWNAM) == 0); 502292323Sngie} 503292323Sngie 504292323SngieATF_TC_WITHOUT_HEAD(getpwuid); 505292323SngieATF_TC_BODY(getpwuid, tc) 506292323Sngie{ 507292323Sngie 508292323Sngie ATF_REQUIRE(run_tests(SNAPSHOT_FILE, TEST_GETPWUID) == 0); 509292323Sngie} 510292323Sngie 511292323SngieATF_TC_WITHOUT_HEAD(getpwuid_with_snapshot); 512292323SngieATF_TC_BODY(getpwuid_with_snapshot, tc) 513292323Sngie{ 514292323Sngie 515292323Sngie ATF_REQUIRE(run_tests(SNAPSHOT_FILE, TEST_BUILD_SNAPSHOT) == 0); 516292323Sngie ATF_REQUIRE(run_tests(SNAPSHOT_FILE, TEST_GETPWUID) == 0); 517292323Sngie} 518292323Sngie 519292323SngieATF_TP_ADD_TCS(tp) 520292323Sngie{ 521292323Sngie 522292323Sngie ATF_TP_ADD_TC(tp, build_snapshot); 523292323Sngie ATF_TP_ADD_TC(tp, getpwent); 524292323Sngie ATF_TP_ADD_TC(tp, getpwent_with_snapshot); 525292323Sngie ATF_TP_ADD_TC(tp, getpwent_with_two_pass); 526292323Sngie ATF_TP_ADD_TC(tp, getpwnam); 527292323Sngie ATF_TP_ADD_TC(tp, getpwnam_with_snapshot); 528292323Sngie ATF_TP_ADD_TC(tp, getpwuid); 529292323Sngie ATF_TP_ADD_TC(tp, getpwuid_with_snapshot); 530292323Sngie 531292323Sngie return (atf_no_error()); 532292323Sngie} 533