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