1 /* Copyright (C) 1991-2022 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 __attr_access ((__write_only__, 2, 3)); 135 # endif 136 137 /* Search for an entry with a matching group ID. 138 139 This function is a possible cancellation point and therefore not 140 marked with __THROW. */ 141 extern int getgrgid_r (__gid_t __gid, struct group *__restrict __resultbuf, 142 char *__restrict __buffer, size_t __buflen, 143 struct group **__restrict __result) 144 __attr_access ((__write_only__, 3, 4)); 145 146 /* Search for an entry with a matching group name. 147 148 This function is a possible cancellation point and therefore not 149 marked with __THROW. */ 150 extern int getgrnam_r (const char *__restrict __name, 151 struct group *__restrict __resultbuf, 152 char *__restrict __buffer, size_t __buflen, 153 struct group **__restrict __result) 154 __attr_access ((__write_only__, 3, 4)); 155 156 # ifdef __USE_MISC 157 /* Read a group entry from STREAM. This function is not standardized 158 an probably never will. 159 160 This function is not part of POSIX and therefore no official 161 cancellation point. But due to similarity with an POSIX interface 162 or due to the implementation it is a cancellation point and 163 therefore not marked with __THROW. */ 164 extern int fgetgrent_r (FILE *__restrict __stream, 165 struct group *__restrict __resultbuf, 166 char *__restrict __buffer, size_t __buflen, 167 struct group **__restrict __result) 168 __attr_access ((__write_only__, 3, 4)); 169 # endif 170 171 #endif /* POSIX or reentrant */ 172 173 174 #ifdef __USE_MISC 175 176 # define __need_size_t 177 # include <stddef.h> 178 179 /* Set the group set for the current user to GROUPS (N of them). */ 180 extern int setgroups (size_t __n, const __gid_t *__groups) __THROW; 181 182 /* Store at most *NGROUPS members of the group set for USER into 183 *GROUPS. Also include GROUP. The actual number of groups found is 184 returned in *NGROUPS. Return -1 if the if *NGROUPS is too small. 185 186 This function is not part of POSIX and therefore no official 187 cancellation point. But due to similarity with an POSIX interface 188 or due to the implementation it is a cancellation point and 189 therefore not marked with __THROW. */ 190 extern int getgrouplist (const char *__user, __gid_t __group, 191 __gid_t *__groups, int *__ngroups); 192 193 /* Initialize the group set for the current user 194 by reading the group database and using all groups 195 of which USER is a member. Also include GROUP. 196 197 This function is not part of POSIX and therefore no official 198 cancellation point. But due to similarity with an POSIX interface 199 or due to the implementation it is a cancellation point and 200 therefore not marked with __THROW. */ 201 extern int initgroups (const char *__user, __gid_t __group); 202 203 #endif /* Use misc. */ 204 205 __END_DECLS 206 207 #endif /* grp.h */ 208