1/* Test out of order operations with {set,get,end}pwent */
2
3/*
4   Unix SMB/Netbios implementation.
5   Version 1.9.
6   Security context tests
7   Copyright (C) Tim Potter 2000
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; either version 2 of the License, or
12   (at your option) any later version.
13
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License for more details.
18
19   You should have received a copy of the GNU General Public License
20   along with this program; if not, write to the Free Software
21   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22*/
23
24#include <stdio.h>
25#include <pwd.h>
26
27int main (int argc, char **argv)
28{
29	struct passwd *pw;
30	int found = 0;
31	int num_users, i;
32
33	/* Test getpwent() without setpwent() */
34
35	for (i = 0; i < 100; i++) {
36		pw = getpwent();
37
38		/* This is supposed to work */
39
40#if 0
41		if (pw != NULL) {
42			printf("FAIL: getpwent() with no setpwent()\n");
43			return 1;
44		}
45#endif
46	}
47
48	/* Work out how many user till first domain user */
49
50	num_users = 0;
51	setpwent();
52
53	while (1) {
54		pw = getpwent();
55		num_users++;
56
57		if (pw == NULL) break;
58
59		if (strchr(pw->pw_name, '/')) {
60			found = 1;
61			break;
62		}
63
64	}
65
66	if (!found) {
67		printf("FAIL: could not find any domain users\n");
68		return 1;
69	}
70
71	/* Test stopping getpwent in the middle of a set of users */
72
73	endpwent();
74
75	/* Test setpwent() without any getpwent() calls */
76
77	setpwent();
78
79	for (i = 0; i < (num_users - 1); i++) {
80		getpwent();
81	}
82
83	endpwent();
84
85	/* Test lots of setpwent() calls */
86
87	setpwent();
88
89	for (i = 0; i < (num_users - 1); i++) {
90		getpwent();
91	}
92
93	for (i = 0; i < 100; i++) {
94		setpwent();
95	}
96
97	/* Test lots of endpwent() calls */
98
99	setpwent();
100
101	for (i = 0; i < (num_users - 1); i++) {
102		getpwent();
103	}
104
105	for (i = 0; i < 100; i++) {
106		endpwent();
107	}
108
109	/* Everything's cool */
110
111	printf("PASS\n");
112	return 0;
113}
114