
1: /* Copyright (C) 1991,1992,1995-2001,2003,2004 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, write to the Free 16: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 17: 02111-1307 USA. */ 18: 19: /* 20: * POSIX Standard: 9.2.1 Group Database Access <grp.h> 21: */ 22: 23: #ifndef _GRP_H 24: #define _GRP_H 1 25: 26: #include <features.h> 27: 28: __BEGIN_DECLS 29: 30: #include <bits/types.h> 31: 32: #define __need_size_t 33: #include <stddef.h> 34: 35: 36: /* For the Single Unix specification we must define this type here. */ 37: #if (defined __USE_XOPEN || defined __USE_XOPEN2K) && !defined __gid_t_defined 38: typedef __gid_t gid_t; 39: # define __gid_t_defined 40: #endif 41: 42: /* The group structure. */ 43: struct group 44: { 45: char *gr_name; /* Group name. */ 46: char *gr_passwd; /* Password. */ 47: __gid_t gr_gid; /* Group ID. */ 48: char **gr_mem; /* Member list. */ 49: }; 50: 51: 52: #if defined __USE_SVID || defined __USE_GNU 53: # define __need_FILE 54: # include <stdio.h> 55: #endif 56: 57: 58: #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED 59: /* Rewind the group-file stream. 60: 61: This function is a possible cancellation point and therefore not 62: marked with __THROW. */ 63: extern void setgrent (void); 64: 65: /* Close the group-file stream. 66: 67: This function is a possible cancellation point and therefore not 68: marked with __THROW. */ 69: extern void endgrent (void); 70: 71: /* Read an entry from the group-file stream, opening it if necessary. 72: 73: This function is a possible cancellation point and therefore not 74: marked with __THROW. */ 75: extern struct group *getgrent (void); 76: #endif 77: 78: #ifdef __USE_SVID 79: /* Read a group entry from STREAM. 80: 81: This function is not part of POSIX and therefore no official 82: cancellation point. But due to similarity with an POSIX interface 83: or due to the implementation it is a cancellation point and 84: therefore not marked with __THROW. */ 85: extern struct group *fgetgrent (FILE *__stream); 86: #endif 87: 88: #ifdef __USE_GNU 89: /* Write the given entry onto the given stream. 90: 91: This function is not part of POSIX and therefore no official 92: cancellation point. But due to similarity with an POSIX interface 93: or due to the implementation it is a cancellation point and 94: therefore not marked with __THROW. */ 95: extern int putgrent (__const struct group *__restrict __p, 96: FILE *__restrict __f); 97: #endif 98: 99: /* Search for an entry with a matching group ID. 100: 101: This function is a possible cancellation point and therefore not 102: marked with __THROW. */ 103: extern struct group *getgrgid (__gid_t __gid); 104: 105: /* Search for an entry with a matching group name. 106: 107: This function is a possible cancellation point and therefore not 108: marked with __THROW. */ 109: extern struct group *getgrnam (__const char *__name); 110: 111: #if defined __USE_POSIX || defined __USE_MISC 112: 113: # ifdef __USE_MISC 114: /* Reasonable value for the buffer sized used in the reentrant 115: functions below. But better use `sysconf'. */ 116: # define NSS_BUFLEN_GROUP 1024 117: # endif 118: 119: /* Reentrant versions of some of the functions above. 120: 121: PLEASE NOTE: the `getgrent_r' function is not (yet) standardized. 122: The interface may change in later versions of this library. But 123: the interface is designed following the principals used for the 124: other reentrant functions so the chances are good this is what the 125: POSIX people would choose. 126: 127: This function is not part of POSIX and therefore no official 128: cancellation point. But due to similarity with an POSIX interface 129: or due to the implementation it is a cancellation point and 130: therefore not marked with __THROW. */ 131: 132: # ifdef __USE_GNU 133: extern int getgrent_r (struct group *__restrict __resultbuf, 134: char *__restrict __buffer, size_t __buflen, 135: struct group **__restrict __result); 136: # endif 137: 138: /* Search for an entry with a matching group ID. 139: 140: This function is a possible cancellation point and therefore not 141: marked with __THROW. */ 142: extern int getgrgid_r (__gid_t __gid, struct group *__restrict __resultbuf, 143: char *__restrict __buffer, size_t __buflen, 144: struct group **__restrict __result); 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: 155: # ifdef __USE_SVID 156: /* Read a group entry from STREAM. This function is not standardized 157: an probably never will. 158: 159: This function is not part of POSIX and therefore no official 160: cancellation point. But due to similarity with an POSIX interface 161: or due to the implementation it is a cancellation point and 162: therefore not marked with __THROW. */ 163: extern int fgetgrent_r (FILE *__restrict __stream, 164: struct group *__restrict __resultbuf, 165: char *__restrict __buffer, size_t __buflen, 166: struct group **__restrict __result); 167: # endif 168: 169: #endif /* POSIX or reentrant */ 170: 171: 172: #ifdef __USE_BSD 173: 174: # define __need_size_t 175: # include <stddef.h> 176: 177: /* Set the group set for the current user to GROUPS (N of them). */ 178: extern int setgroups (size_t __n, __const __gid_t *__groups) __THROW; 179: 180: /* Store at most *NGROUPS members of the group set for USER into 181: *GROUPS. Also include GROUP. The actual number of groups found is 182: returned in *NGROUPS. Return -1 if the if *NGROUPS is too small. 183: 184: This function is not part of POSIX and therefore no official 185: cancellation point. But due to similarity with an POSIX interface 186: or due to the implementation it is a cancellation point and 187: therefore not marked with __THROW. */ 188: extern int getgrouplist (__const char *__user, __gid_t __group, 189: __gid_t *__groups, int *__ngroups); 190: 191: /* Initialize the group set for the current user 192: by reading the group database and using all groups 193: of which USER is a member. Also include GROUP. 194: 195: This function is not part of POSIX and therefore no official 196: cancellation point. But due to similarity with an POSIX interface 197: or due to the implementation it is a cancellation point and 198: therefore not marked with __THROW. */ 199: extern int initgroups (__const char *__user, __gid_t __group); 200: 201: #endif /* Use BSD. */ 202: 203: __END_DECLS 204: 205: #endif /* grp.h */