1 /* Copyright (C) 1991-2021 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 <https://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 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 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 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 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 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 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 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 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 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 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 extern int initgroups (const char *__user, __gid_t __group); 198 199 #endif /* Use misc. */ 200 201 __END_DECLS 202 203 #endif /* grp.h */ 204