1/* Test out of order operations with {set,get,end}grent */
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 <grp.h>
26
27int main (int argc, char **argv)
28{
29	struct group *gr;
30	int found = 0;
31	int num_users, i;
32
33	/* Test getgrent() without setgrent() */
34
35	for (i = 0; i < 100; i++) {
36		gr = getgrent();
37
38		/* This is supposed to work */
39
40#if 0
41		if (gr != NULL) {
42			printf("FAIL: getgrent() with no setgrent()\n");
43			return 1;
44		}
45#endif
46	}
47
48	/* Work out how many user till first domain group */
49
50	num_users = 0;
51	setgrent();
52
53	while (1) {
54		gr = getgrent();
55		num_users++;
56
57		if (gr == NULL) break;
58
59		if (strchr(gr->gr_name, '/')) {
60			found = 1;
61			break;
62		}
63
64	}
65
66	if (!found) {
67		printf("FAIL: could not find any domain groups\n");
68		return 1;
69	}
70
71	/* Test stopping getgrent in the middle of a set of users */
72
73	endgrent();
74
75	/* Test setgrent() without any getgrent() calls */
76
77	setgrent();
78
79	for (i = 0; i < (num_users - 1); i++) {
80		getgrent();
81	}
82
83	endgrent();
84
85	/* Test lots of setgrent() calls */
86
87	for (i = 0; i < 100; i++) {
88		setgrent();
89	}
90
91	/* Test lots of endgrent() calls */
92
93	for (i = 0; i < 100; i++) {
94		endgrent();
95	}
96
97	/* Everything's cool */
98
99	printf("PASS\n");
100	return 0;
101}
102