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 26int 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} 101