]>
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 | |
41bdb6e2 AJ |
6 | modify it under the terms of the GNU Lesser General Public |
7 | License as published by the Free Software Foundation; either | |
8 | version 2.1 of the License, or (at your option) any later version. | |
a7f7e954 UD |
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 | |
41bdb6e2 | 13 | Lesser General Public License for more details. |
a7f7e954 | 14 | |
41bdb6e2 | 15 | You should have received a copy of the GNU Lesser General Public |
59ba27a6 PE |
16 | License along with the GNU C Library; if not, see |
17 | <http://www.gnu.org/licenses/>. */ | |
a7f7e954 UD |
18 | |
19 | #include <grp.h> | |
20 | #include <stdio.h> | |
f535dd02 | 21 | #include <stdlib.h> |
a7f7e954 UD |
22 | #include <string.h> |
23 | #include <sys/types.h> | |
24 | ||
25 | static int errors; | |
26 | ||
27 | static void | |
28 | write_users (FILE *f, int large_pos, int pos) | |
29 | { | |
30 | int i; | |
31 | ||
32 | if (pos == large_pos) | |
33 | { | |
e1c6ee83 UD |
34 | if (large_pos == 3) |
35 | fprintf (f, ":three"); | |
36 | ||
a7f7e954 UD |
37 | /* we need more than 2048 bytes for proper testing. */ |
38 | for (i = 0; i < 500; i++) | |
e1c6ee83 | 39 | fprintf (f, ",user%03d", i); |
a7f7e954 UD |
40 | } |
41 | fprintf (f, "\n"); | |
42 | ||
43 | } | |
44 | ||
45 | static void | |
46 | write_group (const char *filename, int pos) | |
47 | { | |
48 | FILE *f; | |
4707ba3d | 49 | |
a7f7e954 | 50 | f = fopen (filename, "w"); |
f535dd02 | 51 | fprintf (f, "one:x:1:one"); |
a7f7e954 | 52 | write_users (f, pos, 1); |
f535dd02 | 53 | fprintf (f, "two:x:2:two"); |
a7f7e954 | 54 | write_users (f, pos, 2); |
f535dd02 | 55 | fprintf (f, "three:x:3"); |
a7f7e954 UD |
56 | write_users (f, pos, 3); |
57 | fclose (f); | |
58 | } | |
59 | ||
60 | static void | |
61 | test_entry (const char *name, gid_t gid, struct group *g) | |
62 | { | |
63 | if (!g) | |
64 | { | |
65 | printf ("Error: Entry is empty\n"); | |
66 | errors++; | |
67 | return; | |
68 | } | |
4707ba3d | 69 | |
a7f7e954 UD |
70 | if ((g->gr_gid == gid) && (strcmp (g->gr_name, name) == 0)) |
71 | printf ("Ok: %s: %d\n", g->gr_name, g->gr_gid); | |
72 | else | |
73 | { | |
74 | printf ("Error: %s: %d should be: %s: %d\n", g->gr_name, g->gr_gid, | |
75 | name, gid); | |
76 | errors++; | |
77 | } | |
78 | } | |
79 | ||
80 | ||
81 | static void | |
82 | test_fgetgrent (const char *filename) | |
83 | { | |
84 | struct group *g; | |
85 | FILE *f; | |
86 | ||
f535dd02 | 87 | f = fopen (filename,"r"); |
a7f7e954 UD |
88 | |
89 | g = fgetgrent (f); | |
f535dd02 | 90 | test_entry ("one", 1, g); |
a7f7e954 | 91 | g = fgetgrent (f); |
f535dd02 | 92 | test_entry ("two", 2, g); |
a7f7e954 | 93 | g = fgetgrent (f); |
f535dd02 | 94 | test_entry ("three", 3, g); |
a7f7e954 UD |
95 | fclose (f); |
96 | } | |
97 | ||
4707ba3d | 98 | |
a7f7e954 | 99 | int |
f535dd02 | 100 | main (int argc, char *argv[]) |
a7f7e954 UD |
101 | { |
102 | char *file = tmpnam (NULL); | |
f535dd02 UD |
103 | int i = 0; |
104 | ||
105 | if (argc > 1) | |
106 | i = atoi (argv[1]); | |
107 | if (i > 3) | |
108 | i = 3; | |
109 | if (i) | |
110 | printf ("Large group is group: %d\n", i); | |
111 | else | |
112 | printf ("Not using a large group\n"); | |
113 | write_group (file, i); | |
114 | test_fgetgrent (file); | |
a7f7e954 | 115 | |
a7f7e954 | 116 | remove (file); |
4707ba3d | 117 | |
a7f7e954 UD |
118 | return (errors != 0); |
119 | } |