/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* Copyright (c) 1988 AT&T */ /* All Rights Reserved */ /* * Copyright 2014 Garrett D'Amore * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * * Copyright 2020 Joyent, Inc. */ #ifndef _GRP_H #define _GRP_H #include #include #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) #include #endif #ifdef __cplusplus extern "C" { #endif struct group { /* see getgrent(3C) */ char *gr_name; char *gr_passwd; gid_t gr_gid; char **gr_mem; }; extern struct group *getgrgid(gid_t); /* MT-unsafe */ extern struct group *getgrnam(const char *); /* MT-unsafe */ #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) extern struct group *getgrent_r(struct group *, char *, int); extern struct group *fgetgrent_r(FILE *, struct group *, char *, int); extern struct group *fgetgrent(FILE *); /* MT-unsafe */ extern int initgroups(const char *, gid_t); extern int getgrouplist(const char *, gid_t, gid_t *, int *); #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) */ #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || defined(_XPG4_2) extern void endgrent(void); extern void setgrent(void); extern struct group *getgrent(void); /* MT-unsafe */ #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)... */ /* * getgrgid_r() & getgrnam_r() prototypes are defined here. */ /* * Previous releases of Solaris, starting at 2.3, provided definitions of * various functions as specified in POSIX.1c, Draft 6. For some of these * functions, the final POSIX 1003.1c standard had a different number of * arguments and return values. * * The following segment of this header provides support for the standard * interfaces while supporting applications written under earlier * releases. The application defines appropriate values of the feature * test macros _POSIX_C_SOURCE and _POSIX_PTHREAD_SEMANTICS to indicate * whether it was written to expect the Draft 6 or standard versions of * these interfaces, before including this header. This header then * provides a mapping from the source version of the interface to an * appropriate binary interface. Such mappings permit an application * to be built from libraries and objects which have mixed expectations * of the definitions of these functions. * * For applications using the Draft 6 definitions, the binary symbol is the * same as the source symbol, and no explicit mapping is needed. For the * standard interface, the function func() is mapped to the binary symbol * _posix_func(). The preferred mechanism for the remapping is a compiler * #pragma. If the compiler does not provide such a #pragma, the header file * defines a static function func() which calls the _posix_func() version; * this has to be done instead of #define since POSIX specifies that an * application can #undef the symbol and still be bound to the correct * implementation. Unfortunately, the statics confuse lint so we fallback to * #define in that case. * * NOTE: Support for the Draft 6 definitions is provided for compatibility * only. New applications/libraries should use the standard definitions. */ #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || \ (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS) #if (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS) #ifdef __PRAGMA_REDEFINE_EXTNAME #pragma redefine_extname getgrgid_r __posix_getgrgid_r #pragma redefine_extname getgrnam_r __posix_getgrnam_r extern int getgrgid_r(gid_t, struct group *, char *, size_t, struct group **); extern int getgrnam_r(const char *, struct group *, char *, size_t, struct group **); #else /* __PRAGMA_REDEFINE_EXTNAME */ extern int __posix_getgrgid_r(gid_t, struct group *, char *, size_t, struct group **); extern int __posix_getgrnam_r(const char *, struct group *, char *, size_t, struct group **); static int getgrgid_r(gid_t __gid, struct group *__grp, char *__buf, size_t __len, struct group **__res) { return (__posix_getgrgid_r(__gid, __grp, __buf, __len, __res)); } static int getgrnam_r(const char *__cb, struct group *__grp, char *__buf, size_t __len, struct group **__res) { return (__posix_getgrnam_r(__cb, __grp, __buf, __len, __res)); } #endif /* __PRAGMA_REDEFINE_EXTNAME */ #else /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */ extern struct group *getgrgid_r(gid_t, struct group *, char *, int); extern struct group *getgrnam_r(const char *, struct group *, char *, int); #endif /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */ #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)... */ #ifdef __cplusplus } #endif #endif /* _GRP_H */