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