8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / man / man3c / getgrnam.3c
blob8afde21decbda90ef418c06eb00ca098f0db5b37
1 '\" te
2 .\" Copyright (c) 2004, Sun Microsystems, Inc.  All Rights Reserved.
3 .\" Copyright 1989 AT&T
4 .\" Portions Copyright (c) 2001, the Institute of Electrical and Electronics Engineers, Inc. and The Open Group. All Rights Reserved.
5 .\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for permission to reproduce portions of its copyrighted documentation. Original documentation from The Open Group can be obtained online at
6 .\" http://www.opengroup.org/bookstore/.
7 .\" The Institute of Electrical and Electronics Engineers and The Open Group, have given us permission to reprint portions of their documentation. In the following statement, the phrase "this text" refers to portions of the system documentation. Portions of this text are reprinted and reproduced in electronic form in the Sun OS Reference Manual, from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2004 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between these versions and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html.
8 .\"  This notice shall appear on any product containing this material.
9 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
10 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
11 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
12 .TH GETGRNAM 3C "Feb 25, 2017"
13 .SH NAME
14 getgrnam, getgrnam_r, getgrent, getgrent_r, getgrgid, getgrgid_r, setgrent,
15 endgrent, fgetgrent, fgetgrent_r \- group database entry functions
16 .SH SYNOPSIS
17 .LP
18 .nf
19 #include <grp.h>
21 \fBstruct group *\fR\fBgetgrnam\fR(\fBconst char *\fR\fIname\fR);
22 .fi
24 .LP
25 .nf
26 \fBstruct group *\fR\fBgetgrnam_r\fR(\fBconst char *\fR\fIname\fR, \fBstruct group *\fR\fIgrp\fR,
27      \fBchar *\fR\fIbuffer\fR, \fBint\fR \fIbufsize\fR);
28 .fi
30 .LP
31 .nf
32 \fBstruct group *\fR\fBgetgrent\fR(\fBvoid\fR);
33 .fi
35 .LP
36 .nf
37 \fBstruct group *\fR\fBgetgrent_r\fR(\fBstruct group *\fR\fIgrp\fR, \fBchar *\fR\fIbuffer\fR, \fBint\fR \fIbufsize\fR);
38 .fi
40 .LP
41 .nf
42 \fBstruct group *\fR\fBgetgrgid\fR(\fBgid_t\fR \fIgid\fR);
43 .fi
45 .LP
46 .nf
47 \fBstruct group *\fR\fBgetgrgid_r\fR(\fBgid_t\fR \fIgid\fR, \fBstruct group *\fR\fIgrp\fR, \fBchar *\fR\fIbuffer\fR,
48      \fBint\fR \fIbufsize\fR);
49 .fi
51 .LP
52 .nf
53 \fBvoid\fR \fBsetgrent\fR(\fBvoid\fR);
54 .fi
56 .LP
57 .nf
58 \fBvoid\fR \fBendgrent\fR(\fBvoid\fR);
59 .fi
61 .LP
62 .nf
63 \fBstruct group *\fR\fBfgetgrent\fR(\fBFILE *\fR\fIf\fR);
64 .fi
66 .LP
67 .nf
68 \fBstruct group *\fR\fBfgetgrent_r\fR(\fBFILE *\fR\fIf\fR, \fBstruct group *\fR\fIgrp\fR, \fBchar *\fR\fIbuffer\fR,
69      \fBint\fR \fIbufsize\fR);
70 .fi
72 .SS "Standard conforming"
73 .LP
74 .nf
75 cc [ \fIflag\fR... ] \fIfile\fR... \fB-D_POSIX_PTHREAD_SEMANTICS\fR [ \fIlibrary\fR... ]
77 \fBint\fR \fBgetgrnam_r\fR(\fBconst char *\fR\fIname\fR, \fBstruct group *\fR\fIgrp\fR, \fBchar *\fR\fIbuffer\fR,
78      \fBsize_t\fR \fIbufsize\fR, \fBstruct group **\fR\fIresult\fR);
79 .fi
81 .LP
82 .nf
83 \fBint\fR \fBgetgrgid_r\fR(\fBgid_t\fR \fIgid\fR, \fBstruct group *\fR\fIgrp\fR, \fBchar *\fR\fIbuffer\fR,
84      \fBsize_t\fR \fIbufsize\fR, \fBstruct group **\fR\fIresult\fR);
85 .fi
87 .SH DESCRIPTION
88 .LP
89 These functions are used to obtain entries describing user groups. Entries can
90 come from any of the sources for \fBgroup\fR specified in the
91 \fB/etc/nsswitch.conf\fR file (see \fBnsswitch.conf\fR(4)).
92 .sp
93 .LP
94 The \fBgetgrnam()\fR function searches the group database for an entry with the
95 group name specified by the character string parameter \fIname\fR.
96 .sp
97 .LP
98 The \fBgetgrgid()\fR function searches the group database for an entry with the
99 (numeric) group id specified by \fIgid\fR.
102 The \fBsetgrent()\fR, \fBgetgrent()\fR, and \fBendgrent()\fR functions are used
103 to enumerate group entries from the database.
106 The \fBsetgrent()\fR function effectively rewinds the group database to allow
107 repeated searches. It sets (or resets) the enumeration to the beginning of the
108 set of group entries.  This function should be called before the first call to
109 \fBgetgrent()\fR.
112 The \fBgetgrent()\fR function returns a pointer to a structure containing the
113 broken-out fields of an entry in the group database.  When first called,
114 \fBgetgrent()\fR returns a pointer to a \fBgroup\fR structure containing the
115 next group structure in the group database. Successive calls can be used to
116 search the entire database.
119 The \fBendgrent()\fR function can be called to close the group database and
120 deallocate resources when processing is complete. It is permissible, though
121 possibly less efficient, for the process to call more group functions after
122 calling \fBendgrent()\fR.
125 The \fBfgetgrent()\fR function, unlike the other functions above, does not use
126 \fBnsswitch.conf\fR. It reads and parses the next line from the stream \fIf\fR,
127 which is assumed to have the format of the \fBgroup\fR file (see
128 \fBgroup\fR(4)).
129 .SS "Reentrant Interfaces"
131 The  \fBgetgrnam()\fR, \fBgetgrgid()\fR, \fBgetgrent()\fR, and
132 \fBfgetgrent()\fR functions use thread-specific storage that is reused in each
133 call to one of these functions by the same thread, making them safe to use but
134 not recommended for multithreaded applications.
137 The parallel functions \fBgetgrnam_r()\fR, \fBgetgrgid_r()\fR,
138 \fBgetgrent_r()\fR, and \fBfgetgrent_r()\fR provide reentrant interfaces for
139 these operations.
142 Each reentrant interface performs the same operation as its non-reentrant
143 counterpart, named by removing the  \fB_r\fR suffix.  The reentrant interfaces,
144 however, use buffers supplied by the caller to store returned results instead
145 of using thread-specific data that can be overwritten by each call. They are
146 safe for use in both single-threaded and multithreaded applications.
149 Each reentrant interface takes the same arguments as its non-reentrant
150 counterpart, as well as the following additional parameters. The \fIgrp\fR
151 argument must be a pointer to a \fBstruct group\fR structure allocated by the
152 caller.  On successful completion, the function returns the group entry in this
153 structure. Storage referenced by the group structure is allocated from the
154 memory provided with the \fIbuffer\fR argument that is \fIbufsize\fR characters
155 in size.  The maximum size needed for  this buffer can be determined with the
156 \fB_SC_GETGR_R_SIZE_MAX\fR \fBsysconf\fR(3C) parameter. The standard-conforming
157 versions place a pointer to the modified \fIgrp\fR structure in the
158 \fIresult\fR parameter, instead of returning a pointer to this structure. A
159 null pointer is returned at the location pointed to by \fIresult\fR on error or
160 if the requested entry is not found.
163 For enumeration in multithreaded applications, the position within the
164 enumeration is a process-wide property shared by all threads. The
165 \fBsetgrent()\fR function can be used in a multithreaded application but resets
166 the enumeration position for all threads.  If multiple threads interleave calls
167 to \fBgetgrent_r()\fR, the threads will enumerate disjoint subsets of the group
168 database. Like their non-reentrant counterparts, \fBgetgrnam_r()\fR and
169 \fBgetgrgid_r()\fR leave the enumeration position in an indeterminate state.
170 .SS "group Structure"
172 Group entries are represented by the \fBstruct group\fR structure defined in
173 <\fBgrp.h\fR>:
175 .in +2
177 struct group {
178     char *gr_name;          /* the name of the group */
179     char *gr_passwd;        /* the encrypted group password */
180     gid_t gr_gid;           /* the numerical group ID */
181     char **gr_mem;          /* vector of pointers to member
182                                names */
185 .in -2
187 .SH RETURN VALUES
189 The \fBgetgrnam()\fR, \fBgetgrnam_r()\fR, \fBgetgrgid()\fR, and
190 \fBgetgrgid_r()\fR functions each return a pointer to a \fBstruct group\fR if
191 they successfully locate the requested entry. They return a null pointer if
192 either the requested entry was not found or an error occurred. On error,
193 \fBerrno\fR is set to indicate the error. The standard-conforming functions
194 \fBgetgrnam_r()\fR and \fBgetgrgid_r()\fR return \fB0\fR upon success or an
195 error number in case of failure.
198 The  \fBgetgrent()\fR, \fBgetgrent_r()\fR, \fBfgetgrent()\fR, and
199 \fBfgetgrent_r()\fR functions each return a pointer to a \fBstruct group\fR if
200 they successfully enumerate an entry; otherwise they return a null pointer on
201 end-of-file or error. On error, \fBerrno\fR is set to indicate the error.
204 The \fBgetgrnam()\fR, \fBgetgrgid()\fR, \fBgetgrent()\fR, and \fBfgetgrent()\fR
205 functions use thread-specific data storage, so returned data must be copied
206 before a subsequent call to any of these functions if the data are to be saved.
209 When the pointer returned by the reentrant functions \fBgetgrnam_r()\fR,
210 \fBgetgrgid_r()\fR, \fBgetgrent_r()\fR, and \fBfgetgrent_r()\fR is non-null, it
211 is always equal to the \fIgrp\fR pointer that was supplied by the caller.
214 Applications wishing to check for error situations should set \fBerrno\fR to 0
215 before calling \fBgetgrnam()\fR, \fBgetgrnam_r()\fR, \fBgetgrent()\fR,
216 \fBgetgrent_r()\fR\fBgetgrgid()\fR, \fBgetgrgid_r()\fR, \fBfgetgrent()\fR, and
217 \fBfgetgrent_r()\fR. If these functions return a null pointer and \fBerrno\fR
218 is non-zero, an error occurred.
219 .SH ERRORS
221 The \fBgetgrent_r()\fR, \fBfgetgrent()\fR, and \fBfgetgrent_r()\fR functions
222 will fail if:
224 .ne 2
226 \fB\fBEIO\fR\fR
228 .RS 10n
229 An I/O error has occurred.
233 .ne 2
235 \fB\fBERANGE\fR\fR
237 .RS 10n
238 Insufficient storage was supplied by \fIbuffer\fR and \fIbufsize\fR to contain
239 the data to be referenced by the resulting \fBgroup\fR structure.
244 The \fBgetgrent_r()\fR function will fail if:
246 .ne 2
248 \fB\fBEMFILE\fR\fR
250 .RS 10n
251 There are {\fBOPEN_MAX\fR} file descriptors currently open in the calling
252 process.
256 .ne 2
258 \fB\fBENFILE\fR\fR
260 .RS 10n
261 The maximum allowable number of files is currently open in the system.
266 The \fBgetgrnam()\fR, \fBgetgrnam_r()\fR, \fBgetgrgid()\fR, \fBgetgrgid_r()\fR,
267 and \fBgetgrent()\fR functions may fail if:
269 .ne 2
271 \fB\fBEINTR\fR\fR
273 .RS 10n
274 A signal was caught during the operation.
278 .ne 2
280 \fB\fBEIO\fR\fR
282 .RS 10n
283 An I/O error has occurred.
287 .ne 2
289 \fB\fBEMFILE\fR\fR
291 .RS 10n
292 There are {\fBOPEN_MAX\fR} file descriptors currently open in the calling
293 process.
297 .ne 2
299 \fB\fBENFILE\fR\fR
301 .RS 10n
302 The maximum allowable number of files is currently open in the system.
307 The \fBgetgrnam_r()\fR and \fBgetgrgid_r()\fR functions may fail if:
309 .ne 2
311 \fB\fBERANGE\fR\fR
313 .RS 10n
314 Insufficient storage was supplied by \fIbuffer\fR and \fIbufsize\fR to contain
315 the data to be referenced by the resulting \fBgroup\fR structure.
318 .SH ATTRIBUTES
320 See \fBattributes\fR(5) for descriptions of the following attributes:
325 box;
326 c | c
327 l | l .
328 ATTRIBUTE TYPE  ATTRIBUTE VALUE
330 Interface Stability     See below.
332 MT-Level        See \fBReentrant Interfaces\fR in \fBDESCRIPTION\fR.
337 The \fBendgrent()\fR, \fBgetgrent()\fR, \fBgetgrgid()\fR, \fBgetgrgid_r()\fR,
338 \fBgetgrnam()\fR, \fBgetgrnam_r()\fR, and \fBsetgrent()\fR functions are
339 Standard.
340 .SH SEE ALSO
342 \fBIntro\fR(3), \fBgetpwnam\fR(3C), \fBgroup\fR(4), \fBnsswitch.conf\fR(4),
343 \fBpasswd\fR(4), \fBattributes\fR(5), \fBstandards\fR(5)
344 .SH NOTES
346 When compiling multithreaded programs, see \fBIntro\fR(3).
349 Use of the enumeration interfaces \fBgetgrent()\fR and \fBgetgrent_r()\fR is
350 discouraged; enumeration is supported for the group file and \fBNIS\fR
351 but in general is not efficient and might not be supported for all
352 database sources.  The semantics of enumeration are discussed further in
353 \fBnsswitch.conf\fR(4).
356 Previous releases allowed the use of ``+'' and ``-'' entries in
357 \fB/etc/group\fR to selectively include and exclude entries from \fBNIS.\fR The
358 primary usage of these entries is superseded by the name service switch, so the
359 ``+/-'' form might not be supported in future releases.
362 If required, the ``+/-'' functionality can still be obtained for \fBNIS\fR by
363 specifying \fBcompat\fR as the source for \fBgroup\fR.
366 If the ``+/-'' functionality is required in conjunction with \fBLDAP,\fR
367 specify both \fBcompat\fR as the source for \fBgroup\fR and \fBldap\fR as
368 the source for the pseudo-database \fBgroup_compat\fR. See \fBgroup\fR(4), and
369 \fBnsswitch.conf\fR(4) for details.
372 Solaris 2.4 and earlier releases provided definitions of the \fBgetgrnam_r()\fR
373 and \fBgetgrgid_r()\fR functions as specified in POSIX.1c Draft 6. The final
374 POSIX.1c standard changed the interface for these functions. Support for the
375 Draft 6 interface is provided for compatibility only and might not be supported
376 in future releases. New applications and libraries should use the
377 standard-conforming interface.
380 For POSIX.1c-conforming applications, the \fB_POSIX_PTHREAD_SEMANTICS\fR and
381 \fB_REENTRANT\fR flags are automatically turned on by defining the
382 \fB_POSIX_C_SOURCE\fR flag with a value \(>=199506L.