]>
Commit | Line | Data |
---|---|---|
a7f7e954 UD |
1 | /* Copyright (C) 1999 Free Software Foundation, Inc. |
2 | This file is part of the GNU C Library. | |
3 | Contributed by Andreas Jaeger <aj@arthur.rhein-neckar.de>, 1999. | |
4 | ||
5 | The GNU C Library is free software; you can redistribute it and/or | |
6 | modify it under the terms of the GNU Library General Public License as | |
7 | published by the Free Software Foundation; either version 2 of the | |
8 | License, or (at your option) any later version. | |
9 | ||
10 | The GNU C Library is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | Library General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU Library General Public | |
16 | License along with the GNU C Library; see the file COPYING.LIB. If not, | |
17 | write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
18 | Boston, MA 02111-1307, USA. */ | |
19 | ||
20 | #include <grp.h> | |
21 | #include <stdio.h> | |
f535dd02 | 22 | #include <stdlib.h> |
a7f7e954 UD |
23 | #include <string.h> |
24 | #include <sys/types.h> | |
25 | ||
26 | static int errors; | |
27 | ||
28 | static void | |
29 | write_users (FILE *f, int large_pos, int pos) | |
30 | { | |
31 | int i; | |
32 | ||
33 | if (pos == large_pos) | |
34 | { | |
e1c6ee83 UD |
35 | if (large_pos == 3) |
36 | fprintf (f, ":three"); | |
37 | ||
a7f7e954 UD |
38 | /* we need more than 2048 bytes for proper testing. */ |
39 | for (i = 0; i < 500; i++) | |
e1c6ee83 | 40 | fprintf (f, ",user%03d", i); |
a7f7e954 UD |
41 | } |
42 | fprintf (f, "\n"); | |
43 | ||
44 | } | |
45 | ||
46 | static void | |
47 | write_group (const char *filename, int pos) | |
48 | { | |
49 | FILE *f; | |
4707ba3d | 50 | |
a7f7e954 | 51 | f = fopen (filename, "w"); |
f535dd02 | 52 | fprintf (f, "one:x:1:one"); |
a7f7e954 | 53 | write_users (f, pos, 1); |
f535dd02 | 54 | fprintf (f, "two:x:2:two"); |
a7f7e954 | 55 | write_users (f, pos, 2); |
f535dd02 | 56 | fprintf (f, "three:x:3"); |
a7f7e954 UD |
57 | write_users (f, pos, 3); |
58 | fclose (f); | |
59 | } | |
60 | ||
61 | static void | |
62 | test_entry (const char *name, gid_t gid, struct group *g) | |
63 | { | |
64 | if (!g) | |
65 | { | |
66 | printf ("Error: Entry is empty\n"); | |
67 | errors++; | |
68 | return; | |
69 | } | |
4707ba3d | 70 | |
a7f7e954 UD |
71 | if ((g->gr_gid == gid) && (strcmp (g->gr_name, name) == 0)) |
72 | printf ("Ok: %s: %d\n", g->gr_name, g->gr_gid); | |
73 | else | |
74 | { | |
75 | printf ("Error: %s: %d should be: %s: %d\n", g->gr_name, g->gr_gid, | |
76 | name, gid); | |
77 | errors++; | |
78 | } | |
79 | } | |
80 | ||
81 | ||
82 | static void | |
83 | test_fgetgrent (const char *filename) | |
84 | { | |
85 | struct group *g; | |
86 | FILE *f; | |
87 | ||
f535dd02 | 88 | f = fopen (filename,"r"); |
a7f7e954 UD |
89 | |
90 | g = fgetgrent (f); | |
f535dd02 | 91 | test_entry ("one", 1, g); |
a7f7e954 | 92 | g = fgetgrent (f); |
f535dd02 | 93 | test_entry ("two", 2, g); |
a7f7e954 | 94 | g = fgetgrent (f); |
f535dd02 | 95 | test_entry ("three", 3, g); |
a7f7e954 UD |
96 | fclose (f); |
97 | } | |
98 | ||
4707ba3d | 99 | |
a7f7e954 | 100 | int |
f535dd02 | 101 | main (int argc, char *argv[]) |
a7f7e954 UD |
102 | { |
103 | char *file = tmpnam (NULL); | |
f535dd02 UD |
104 | int i = 0; |
105 | ||
106 | if (argc > 1) | |
107 | i = atoi (argv[1]); | |
108 | if (i > 3) | |
109 | i = 3; | |
110 | if (i) | |
111 | printf ("Large group is group: %d\n", i); | |
112 | else | |
113 | printf ("Not using a large group\n"); | |
114 | write_group (file, i); | |
115 | test_fgetgrent (file); | |
a7f7e954 | 116 | |
a7f7e954 | 117 | remove (file); |
4707ba3d | 118 | |
a7f7e954 UD |
119 | return (errors != 0); |
120 | } |