]> git.ipfire.org Git - thirdparty/glibc.git/blame - grp/grp.h
Update.
[thirdparty/glibc.git] / grp / grp.h
CommitLineData
8fee1bb0 1/* Copyright (C) 1991,92,95,96,97,98,99,2000,01 Free Software Foundation, Inc.
2c6fe0bd 2 This file is part of the GNU C Library.
28f540f4 3
2c6fe0bd
UD
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 License, or (at your option) any later version.
28f540f4 8
2c6fe0bd
UD
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 Library General Public License for more details.
28f540f4 13
2c6fe0bd
UD
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB. If not,
16 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. */
28f540f4
RM
18
19/*
20 * POSIX Standard: 9.2.1 Group Database Access <grp.h>
21 */
22
23#ifndef _GRP_H
28f540f4 24#define _GRP_H 1
5107cf1d 25
28f540f4
RM
26#include <features.h>
27
28__BEGIN_DECLS
29
5107cf1d 30#include <bits/types.h>
28f540f4 31
0f110f41
TBB
32#define __need_size_t
33#include <stddef.h>
34
28f540f4 35
9756dfe1 36/* For the Single Unix specification we must define this type here. */
7df789e0 37#if defined __USE_XOPEN && !defined __gid_t_defined
9756dfe1 38typedef __gid_t gid_t;
7df789e0 39# define __gid_t_defined
9756dfe1
UD
40#endif
41
28f540f4
RM
42/* The group structure. */
43struct 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
dfd2257a
UD
52#if defined __USE_SVID || defined __USE_GNU
53# define __need_FILE
54# include <stdio.h>
28f540f4
RM
55#endif
56
28f540f4 57
dfd2257a 58#if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
28f540f4 59/* Rewind the group-file stream. */
c1422e5b 60extern void setgrent (void) __THROW;
28f540f4
RM
61
62/* Close the group-file stream. */
c1422e5b 63extern void endgrent (void) __THROW;
28f540f4
RM
64
65/* Read an entry from the group-file stream, opening it if necessary. */
c1422e5b 66extern struct group *getgrent (void) __THROW;
28f540f4
RM
67#endif
68
69#ifdef __USE_SVID
70/* Read a group entry from STREAM. */
c1422e5b 71extern struct group *fgetgrent (FILE *__stream) __THROW;
28f540f4
RM
72#endif
73
7ce241a0
UD
74#ifdef __USE_GNU
75/* Write the given entry onto the given stream. */
c1422e5b
UD
76extern int putgrent (__const struct group *__restrict __p,
77 FILE *__restrict __f) __THROW;
7ce241a0
UD
78#endif
79
28f540f4 80/* Search for an entry with a matching group ID. */
c1422e5b 81extern struct group *getgrgid (__gid_t __gid) __THROW;
28f540f4
RM
82
83/* Search for an entry with a matching group name. */
c1422e5b 84extern struct group *getgrnam (__const char *__name) __THROW;
28f540f4 85
19361cb7
UD
86#if defined __USE_POSIX || defined __USE_MISC
87
dfd2257a 88# ifdef __USE_MISC
23396375
UD
89/* Reasonable value for the buffer sized used in the reentrant
90 functions below. But better use `sysconf'. */
dfd2257a
UD
91# define NSS_BUFLEN_GROUP 1024
92# endif
23396375
UD
93
94/* Reentrant versions of some of the functions above.
95
84384f5b
UD
96 PLEASE NOTE: the `getgrent_r' function is not (yet) standardized.
97 The interface may change in later versions of this library. But
98 the interface is designed following the principals used for the
99 other reentrant functions so the chances are good this is what the
100 POSIX people would choose. */
23396375 101
0ed99ce4 102# ifdef __USE_GNU
c1422e5b
UD
103extern int getgrent_r (struct group *__restrict __resultbuf,
104 char *__restrict __buffer, size_t __buflen,
105 struct group **__restrict __result) __THROW;
dfd2257a 106# endif
23396375
UD
107
108/* Search for an entry with a matching group ID. */
c1422e5b
UD
109extern int getgrgid_r (__gid_t __gid, struct group *__restrict __resultbuf,
110 char *__restrict __buffer, size_t __buflen,
111 struct group **__restrict __result) __THROW;
23396375
UD
112
113/* Search for an entry with a matching group name. */
c1422e5b
UD
114extern int getgrnam_r (__const char *__restrict __name,
115 struct group *__restrict __resultbuf,
116 char *__restrict __buffer, size_t __buflen,
117 struct group **__restrict __result) __THROW;
23396375 118
dfd2257a 119# ifdef __USE_SVID
84384f5b
UD
120/* Read a group entry from STREAM. This function is not standardized
121 an probably never will. */
c1422e5b
UD
122extern int fgetgrent_r (FILE *__restrict __stream,
123 struct group *__restrict __resultbuf,
124 char *__restrict __buffer, size_t __buflen,
125 struct group **__restrict __result) __THROW;
dfd2257a 126# endif
a8922de8 127
9d187dd4 128#endif /* POSIX or reentrant */
23396375 129
28f540f4
RM
130
131#ifdef __USE_BSD
132
dfd2257a
UD
133# define __need_size_t
134# include <stddef.h>
28f540f4
RM
135
136/* Set the group set for the current user to GROUPS (N of them). */
c1422e5b 137extern int setgroups (size_t __n, __const __gid_t *__groups) __THROW;
28f540f4 138
8fee1bb0
UD
139/* Store at most *NGROUPS members of the group set for USER into
140 *GROUPS. Also include GROUP. The actual number of groups found is
141 returned in *NGROUPS. Return -1 if the if *NGROUPS is too small. */
142extern int getgrouplist (__const char *__user, __gid_t __group,
143 __gid_t *__groups, int *__ngroups) __THROW;
144
28f540f4
RM
145/* Initialize the group set for the current user
146 by reading the group database and using all groups
147 of which USER is a member. Also include GROUP. */
c1422e5b 148extern int initgroups (__const char *__user, __gid_t __group) __THROW;
28f540f4
RM
149
150#endif /* Use BSD. */
151
152__END_DECLS
153
154#endif /* grp.h */