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