xref: /illumos-gate/usr/src/head/grp.h (revision 581cede61ac9c14d8d4ea452562a567189eead78)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*	Copyright (c) 1988 AT&T	*/
23 /*	  All Rights Reserved  	*/
24 
25 
26 /*
27  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
28  * Use is subject to license terms.
29  */
30 
31 #ifndef _GRP_H
32 #define	_GRP_H
33 
34 #pragma ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.3.3.1 */
35 
36 #include <sys/feature_tests.h>
37 
38 #include <sys/types.h>
39 
40 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
41 #include <stdio.h>
42 #endif
43 
44 #ifdef	__cplusplus
45 extern "C" {
46 #endif
47 
48 struct	group {	/* see getgrent(3C) */
49 	char	*gr_name;
50 	char	*gr_passwd;
51 	gid_t	gr_gid;
52 	char	**gr_mem;
53 };
54 
55 #if defined(__STDC__)
56 
57 extern struct group *getgrgid(gid_t);		/* MT-unsafe */
58 extern struct group *getgrnam(const char *);	/* MT-unsafe */
59 
60 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
61 extern struct group *getgrent_r(struct group *, char *, int);
62 extern struct group *fgetgrent_r(FILE *, struct group *, char *, int);
63 
64 
65 extern struct group *fgetgrent(FILE *);		/* MT-unsafe */
66 extern int initgroups(const char *, gid_t);
67 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) */
68 
69 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || defined(_XPG4_2)
70 extern void endgrent(void);
71 extern void setgrent(void);
72 extern struct group *getgrent(void);		/* MT-unsafe */
73 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)... */
74 
75 #else
76 
77 extern struct group *getgrgid();		/* MT-unsafe */
78 extern struct group *getgrnam();		/* MT-unsafe */
79 
80 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
81 extern struct group *getgrent_r();
82 extern struct group *fgetgrent_r();
83 
84 extern struct group *fgetgrent();		/* MT-unsafe */
85 extern int initgroups();
86 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) */
87 
88 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || defined(_XPG4_2)
89 extern void endgrent();
90 extern void setgrent();
91 extern struct group *getgrent();		/* MT-unsafe */
92 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)... */
93 
94 #endif	/* __STDC__ */
95 
96 
97 /*
98  * getgrgid_r() & getgrnam_r() prototypes are defined here.
99  */
100 
101 /*
102  * Previous releases of Solaris, starting at 2.3, provided definitions of
103  * various functions as specified in POSIX.1c, Draft 6.  For some of these
104  * functions, the final POSIX 1003.1c standard had a different number of
105  * arguments and return values.
106  *
107  * The following segment of this header provides support for the standard
108  * interfaces while supporting applications written under earlier
109  * releases.  The application defines appropriate values of the feature
110  * test macros _POSIX_C_SOURCE and _POSIX_PTHREAD_SEMANTICS to indicate
111  * whether it was written to expect the Draft 6 or standard versions of
112  * these interfaces, before including this header.  This header then
113  * provides a mapping from the source version of the interface to an
114  * appropriate binary interface.  Such mappings permit an application
115  * to be built from libraries and objects which have mixed expectations
116  * of the definitions of these functions.
117  *
118  * For applications using the Draft 6 definitions, the binary symbol is the
119  * same as the source symbol, and no explicit mapping is needed.  For the
120  * standard interface, the function func() is mapped to the binary symbol
121  * _posix_func().  The preferred mechanism for the remapping is a compiler
122  * #pragma.  If the compiler does not provide such a #pragma, the header file
123  * defines a static function func() which calls the _posix_func() version;
124  * this has to be done instead of #define since POSIX specifies that an
125  * application can #undef the symbol and still be bound to the correct
126  * implementation.  Unfortunately, the statics confuse lint so we fallback to
127  * #define in that case.
128  *
129  * NOTE: Support for the Draft 6 definitions is provided for compatibility
130  * only.  New applications/libraries should use the standard definitions.
131  */
132 
133 #if	defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || \
134 	(_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
135 
136 #if	defined(__STDC__)
137 
138 #if	(_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
139 
140 #ifdef __PRAGMA_REDEFINE_EXTNAME
141 #pragma redefine_extname getgrgid_r __posix_getgrgid_r
142 #pragma redefine_extname getgrnam_r __posix_getgrnam_r
143 extern int getgrgid_r(gid_t, struct group *, char *, int, struct group **);
144 extern int getgrnam_r(const char *, struct group *, char *, int,
145 							struct group **);
146 #else  /* __PRAGMA_REDEFINE_EXTNAME */
147 
148 extern int __posix_getgrgid_r(gid_t, struct group *, char *, size_t,
149     struct group **);
150 extern int __posix_getgrnam_r(const char *, struct group *, char *, size_t,
151     struct group **);
152 
153 #ifdef __lint
154 
155 #define	getgrgid_r __posix_getgrgid_r
156 #define	getgrnam_r __posix_getgrnam_r
157 
158 #else	/* !__lint */
159 
160 static int
161 getgrgid_r(gid_t __gid, struct group *__grp, char *__buf, int __len,
162     struct group **__res)
163 {
164 	return (__posix_getgrgid_r(__gid, __grp, __buf, __len, __res));
165 }
166 static int
167 getgrnam_r(const char *__cb, struct group *__grp, char *__buf, int __len,
168     struct group **__res)
169 {
170 	return (__posix_getgrnam_r(__cb, __grp, __buf, __len, __res));
171 }
172 
173 #endif /* !__lint */
174 #endif /* __PRAGMA_REDEFINE_EXTNAME */
175 
176 #else  /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
177 
178 extern struct group *getgrgid_r(gid_t, struct group *, char *, int);
179 extern struct group *getgrnam_r(const char *, struct group *, char *, int);
180 
181 #endif  /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
182 
183 #else  /* __STDC__ */
184 
185 #if	(_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
186 
187 #ifdef __PRAGMA_REDEFINE_EXTNAME
188 #pragma redefine_extname getgrgid_r __posix_getgrgid_r
189 #pragma redefine_extname getgrnam_r __posix_getgrnam_r
190 extern int getgrgid_r();
191 extern int getgrnam_r();
192 #else  /* __PRAGMA_REDEFINE_EXTNAME */
193 
194 extern int __posix_getgrgid_r();
195 extern int __posix_getgrnam_r();
196 
197 #ifdef	__lint
198 
199 #define	getgrgid_r __posix_getgrgid_r
200 #define	getgrnam_r __posix_getgrnam_r
201 
202 #else	/* !__lint */
203 
204 static int
205 getgrgid_r(__gid, __grp, __buf, __len, __res)
206 	gid_t __gid;
207 	struct group *__grp;
208 	char *__buf;
209 	int __len;
210 	struct group **__res;
211 {
212 	return (__posix_getgrgid_r(__gid, __grp, __buf, __len, __res));
213 }
214 static int
215 getgrnam_r(__cb, __grp, __buf, __len, __res)
216 	char *__cb;
217 	struct group *__grp;
218 	char *__buf;
219 	int __len;
220 	struct group **__res;
221 {
222 	return (__posix_getgrnam_r(__cb, __grp, __buf, __len, __res));
223 }
224 
225 #endif /* !__lint */
226 #endif /* __PRAGMA_REDEFINE_EXTNAME */
227 
228 #else  /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
229 
230 extern struct group *getgrgid_r();
231 extern struct group *getgrnam_r();
232 
233 #endif /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
234 
235 #endif /* __STDC__ */
236 
237 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)... */
238 
239 #ifdef	__cplusplus
240 }
241 #endif
242 
243 #endif	/* _GRP_H */
244