Line data Source code
1 : /* Copyright (C) 1991-2018 Free Software Foundation, Inc.
2 : This file is part of the GNU C Library.
3 :
4 : The GNU C Library is free software; you can redistribute it and/or
5 : modify it under the terms of the GNU Lesser General Public
6 : License as published by the Free Software Foundation; either
7 : version 2.1 of the License, or (at your option) any later version.
8 :
9 : The GNU C Library is distributed in the hope that it will be useful,
10 : but WITHOUT ANY WARRANTY; without even the implied warranty of
11 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 : Lesser General Public License for more details.
13 :
14 : You should have received a copy of the GNU Lesser General Public
15 : License along with the GNU C Library; if not, see
16 : <http://www.gnu.org/licenses/>. */
17 :
18 : /*
19 : * POSIX Standard: 9.2.1 Group Database Access <grp.h>
20 : */
21 :
22 : #ifndef _GRP_H
23 : #define _GRP_H 1
24 :
25 : #include <features.h>
26 :
27 : __BEGIN_DECLS
28 :
29 : #include <bits/types.h>
30 :
31 : #define __need_size_t
32 : #include <stddef.h>
33 :
34 :
35 : /* For the Single Unix specification we must define this type here. */
36 : #if (defined __USE_XOPEN || defined __USE_XOPEN2K) && !defined __gid_t_defined
37 : typedef __gid_t gid_t;
38 : # define __gid_t_defined
39 : #endif
40 :
41 : /* The group structure. */
42 : struct group
43 : {
44 : char *gr_name; /* Group name. */
45 : char *gr_passwd; /* Password. */
46 : __gid_t gr_gid; /* Group ID. */
47 : char **gr_mem; /* Member list. */
48 : };
49 :
50 :
51 : #ifdef __USE_MISC
52 : # include <bits/types/FILE.h>
53 : #endif
54 :
55 :
56 : #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
57 : /* Rewind the group-file stream.
58 :
59 : This function is a possible cancellation point and therefore not
60 : marked with __THROW. */
61 10 : extern void setgrent (void);
62 :
63 : /* Close the group-file stream.
64 :
65 : This function is a possible cancellation point and therefore not
66 : marked with __THROW. */
67 10 : extern void endgrent (void);
68 :
69 : /* Read an entry from the group-file stream, opening it if necessary.
70 :
71 : This function is a possible cancellation point and therefore not
72 : marked with __THROW. */
73 180 : extern struct group *getgrent (void);
74 : #endif
75 :
76 : #ifdef __USE_MISC
77 : /* Read a group entry from STREAM.
78 :
79 : This function is not part of POSIX and therefore no official
80 : cancellation point. But due to similarity with an POSIX interface
81 : or due to the implementation it is a cancellation point and
82 : therefore not marked with __THROW. */
83 : extern struct group *fgetgrent (FILE *__stream);
84 : #endif
85 :
86 : #ifdef __USE_GNU
87 : /* Write the given entry onto the given stream.
88 :
89 : This function is not part of POSIX and therefore no official
90 : cancellation point. But due to similarity with an POSIX interface
91 : or due to the implementation it is a cancellation point and
92 : therefore not marked with __THROW. */
93 : extern int putgrent (const struct group *__restrict __p,
94 : FILE *__restrict __f);
95 : #endif
96 :
97 : /* Search for an entry with a matching group ID.
98 :
99 : This function is a possible cancellation point and therefore not
100 : marked with __THROW. */
101 2278 : extern struct group *getgrgid (__gid_t __gid);
102 :
103 : /* Search for an entry with a matching group name.
104 :
105 : This function is a possible cancellation point and therefore not
106 : marked with __THROW. */
107 737 : extern struct group *getgrnam (const char *__name);
108 :
109 : #ifdef __USE_POSIX
110 :
111 : # ifdef __USE_MISC
112 : /* Reasonable value for the buffer sized used in the reentrant
113 : functions below. But better use `sysconf'. */
114 : # define NSS_BUFLEN_GROUP 1024
115 : # endif
116 :
117 : /* Reentrant versions of some of the functions above.
118 :
119 : PLEASE NOTE: the `getgrent_r' function is not (yet) standardized.
120 : The interface may change in later versions of this library. But
121 : the interface is designed following the principals used for the
122 : other reentrant functions so the chances are good this is what the
123 : POSIX people would choose.
124 :
125 : This function is not part of POSIX and therefore no official
126 : cancellation point. But due to similarity with an POSIX interface
127 : or due to the implementation it is a cancellation point and
128 : therefore not marked with __THROW. */
129 :
130 : # ifdef __USE_GNU
131 120 : extern int getgrent_r (struct group *__restrict __resultbuf,
132 : char *__restrict __buffer, size_t __buflen,
133 : struct group **__restrict __result);
134 : # endif
135 :
136 : /* Search for an entry with a matching group ID.
137 :
138 : This function is a possible cancellation point and therefore not
139 : marked with __THROW. */
140 116 : extern int getgrgid_r (__gid_t __gid, struct group *__restrict __resultbuf,
141 : char *__restrict __buffer, size_t __buflen,
142 : struct group **__restrict __result);
143 :
144 : /* Search for an entry with a matching group name.
145 :
146 : This function is a possible cancellation point and therefore not
147 : marked with __THROW. */
148 167 : extern int getgrnam_r (const char *__restrict __name,
149 : struct group *__restrict __resultbuf,
150 : char *__restrict __buffer, size_t __buflen,
151 : struct group **__restrict __result);
152 :
153 : # ifdef __USE_MISC
154 : /* Read a group entry from STREAM. This function is not standardized
155 : an probably never will.
156 :
157 : This function is not part of POSIX and therefore no official
158 : cancellation point. But due to similarity with an POSIX interface
159 : or due to the implementation it is a cancellation point and
160 : therefore not marked with __THROW. */
161 : extern int fgetgrent_r (FILE *__restrict __stream,
162 : struct group *__restrict __resultbuf,
163 : char *__restrict __buffer, size_t __buflen,
164 : struct group **__restrict __result);
165 : # endif
166 :
167 : #endif /* POSIX or reentrant */
168 :
169 :
170 : #ifdef __USE_MISC
171 :
172 : # define __need_size_t
173 : # include <stddef.h>
174 :
175 : /* Set the group set for the current user to GROUPS (N of them). */
176 0 : extern int setgroups (size_t __n, const __gid_t *__groups) __THROW;
177 :
178 : /* Store at most *NGROUPS members of the group set for USER into
179 : *GROUPS. Also include GROUP. The actual number of groups found is
180 : returned in *NGROUPS. Return -1 if the if *NGROUPS is too small.
181 :
182 : This function is not part of POSIX and therefore no official
183 : cancellation point. But due to similarity with an POSIX interface
184 : or due to the implementation it is a cancellation point and
185 : therefore not marked with __THROW. */
186 3080 : extern int getgrouplist (const char *__user, __gid_t __group,
187 : __gid_t *__groups, int *__ngroups);
188 :
189 : /* Initialize the group set for the current user
190 : by reading the group database and using all groups
191 : of which USER is a member. Also include GROUP.
192 :
193 : This function is not part of POSIX and therefore no official
194 : cancellation point. But due to similarity with an POSIX interface
195 : or due to the implementation it is a cancellation point and
196 : therefore not marked with __THROW. */
197 0 : extern int initgroups (const char *__user, __gid_t __group);
198 :
199 : #endif /* Use misc. */
200 :
201 : __END_DECLS
202 :
203 : #endif /* grp.h */
|