Line data Source code
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 26 : 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 26 : 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 1540 : 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 3019 : 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 2483 : 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 1448 : 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 3861 : extern int getgrgid_r (__gid_t __gid, struct group *__restrict __resultbuf, 141 518 : 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 1920 : extern int getgrnam_r (const char *__restrict __name, 149 : struct group *__restrict __resultbuf, 150 161 : 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 0 : 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 47505 : 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 1736 : 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 0 : __END_DECLS 202 : 203 : #endif /* grp.h */