diff options
Diffstat (limited to 'testsuite/nsswitch/getent_pwent.c')
-rw-r--r-- | testsuite/nsswitch/getent_pwent.c | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/testsuite/nsswitch/getent_pwent.c b/testsuite/nsswitch/getent_pwent.c new file mode 100644 index 0000000..14200b0 --- /dev/null +++ b/testsuite/nsswitch/getent_pwent.c @@ -0,0 +1,112 @@ +/* Test out of order operations with {set,get,end}pwent */ + +/* + Unix SMB/Netbios implementation. + Version 1.9. + Security context tests + Copyright (C) Tim Potter 2000 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <stdio.h> +#include <pwd.h> + +int main (int argc, char **argv) +{ + struct passwd *pw; + int found = 0; + int num_users, i; + + /* Test getpwent() without setpwent() */ + + for (i = 0; i < 100; i++) { + pw = getpwent(); + + /* This is supposed to work */ + +#if 0 + if (pw != NULL) { + printf("FAIL: getpwent() with no setpwent()\n"); + return 1; + } +#endif + } + + /* Work out how many user till first domain user */ + + num_users = 0; + setpwent(); + + while (1) { + pw = getpwent(); + num_users++; + + if (pw == NULL) break; + + if (strchr(pw->pw_name, '/')) { + found = 1; + break; + } + + } + + if (!found) { + printf("FAIL: could not find any domain users\n"); + return 1; + } + + /* Test stopping getpwent in the middle of a set of users */ + + endpwent(); + + /* Test setpwent() without any getpwent() calls */ + + setpwent(); + + for (i = 0; i < (num_users - 1); i++) { + getpwent(); + } + + endpwent(); + + /* Test lots of setpwent() calls */ + + setpwent(); + + for (i = 0; i < (num_users - 1); i++) { + getpwent(); + } + + for (i = 0; i < 100; i++) { + setpwent(); + } + + /* Test lots of endpwent() calls */ + + setpwent(); + + for (i = 0; i < (num_users - 1); i++) { + getpwent(); + } + + for (i = 0; i < 100; i++) { + endpwent(); + } + + /* Everything's cool */ + + printf("PASS\n"); + return 0; +} |