xref: /freebsd/lib/libc/gen/getgrent.3 (revision 05f98035ee9621a9dc87e02ab9536390aa9025cb)
158f0484fSRodney W. Grimes.\" Copyright (c) 1989, 1991, 1993
258f0484fSRodney W. Grimes.\"	The Regents of the University of California.  All rights reserved.
358f0484fSRodney W. Grimes.\"
458f0484fSRodney W. Grimes.\" Redistribution and use in source and binary forms, with or without
558f0484fSRodney W. Grimes.\" modification, are permitted provided that the following conditions
658f0484fSRodney W. Grimes.\" are met:
758f0484fSRodney W. Grimes.\" 1. Redistributions of source code must retain the above copyright
858f0484fSRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer.
958f0484fSRodney W. Grimes.\" 2. Redistributions in binary form must reproduce the above copyright
1058f0484fSRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer in the
1158f0484fSRodney W. Grimes.\"    documentation and/or other materials provided with the distribution.
1258f0484fSRodney W. Grimes.\" 3. All advertising materials mentioning features or use of this software
1358f0484fSRodney W. Grimes.\"    must display the following acknowledgement:
1458f0484fSRodney W. Grimes.\"	This product includes software developed by the University of
1558f0484fSRodney W. Grimes.\"	California, Berkeley and its contributors.
1658f0484fSRodney W. Grimes.\" 4. Neither the name of the University nor the names of its contributors
1758f0484fSRodney W. Grimes.\"    may be used to endorse or promote products derived from this software
1858f0484fSRodney W. Grimes.\"    without specific prior written permission.
1958f0484fSRodney W. Grimes.\"
2058f0484fSRodney W. Grimes.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2158f0484fSRodney W. Grimes.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2258f0484fSRodney W. Grimes.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2358f0484fSRodney W. Grimes.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2458f0484fSRodney W. Grimes.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2558f0484fSRodney W. Grimes.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2658f0484fSRodney W. Grimes.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2758f0484fSRodney W. Grimes.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2858f0484fSRodney W. Grimes.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2958f0484fSRodney W. Grimes.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3058f0484fSRodney W. Grimes.\" SUCH DAMAGE.
3158f0484fSRodney W. Grimes.\"
326af9798fSGarrett Wollman.\"     From: @(#)getgrent.3	8.2 (Berkeley) 4/19/94
337f3dea24SPeter Wemm.\" $FreeBSD$
3458f0484fSRodney W. Grimes.\"
3505f98035SJacques Vidrine.Dd April 16, 2003
3658f0484fSRodney W. Grimes.Dt GETGRENT 3
3758f0484fSRodney W. Grimes.Os
3858f0484fSRodney W. Grimes.Sh NAME
3958f0484fSRodney W. Grimes.Nm getgrent ,
4005f98035SJacques Vidrine.Nm getgrent_r ,
4158f0484fSRodney W. Grimes.Nm getgrnam ,
4205f98035SJacques Vidrine.Nm getgrnam_r ,
4358f0484fSRodney W. Grimes.Nm getgrgid ,
4405f98035SJacques Vidrine.Nm getgrgid_r ,
4558f0484fSRodney W. Grimes.Nm setgroupent ,
4658f0484fSRodney W. Grimes.Nm setgrent ,
4758f0484fSRodney W. Grimes.Nm endgrent
4858f0484fSRodney W. Grimes.Nd group database operations
4925bb73e0SAlexey Zelkin.Sh LIBRARY
5025bb73e0SAlexey Zelkin.Lb libc
5158f0484fSRodney W. Grimes.Sh SYNOPSIS
5232eef9aeSRuslan Ermilov.In grp.h
5358f0484fSRodney W. Grimes.Ft struct group *
5458f0484fSRodney W. Grimes.Fn getgrent void
5505f98035SJacques Vidrine.Ft int
5605f98035SJacques Vidrine.Fn getgrent_r "struct group *grp" "char *buffer" "size_t bufsize" "struct group **result"
5758f0484fSRodney W. Grimes.Ft struct group *
5858f0484fSRodney W. Grimes.Fn getgrnam "const char *name"
5905f98035SJacques Vidrine.Ft int
6005f98035SJacques Vidrine.Fn getgrnam_r "const char *name" "struct group *grp" "char *buffer" "size_t bufsize" "struct group **result"
6158f0484fSRodney W. Grimes.Ft struct group *
6258f0484fSRodney W. Grimes.Fn getgrgid "gid_t gid"
63712dc76eSMike Pritchard.Ft int
6405f98035SJacques Vidrine.Fn getgrgid_r "gid_t gid" "struct group *grp" "char *buffer" "size_t bufsize" "struct group **result"
6505f98035SJacques Vidrine.Ft int
6658f0484fSRodney W. Grimes.Fn setgroupent "int stayopen"
6758f0484fSRodney W. Grimes.Ft int
6858f0484fSRodney W. Grimes.Fn setgrent void
6958f0484fSRodney W. Grimes.Ft void
7058f0484fSRodney W. Grimes.Fn endgrent void
7158f0484fSRodney W. Grimes.Sh DESCRIPTION
7258f0484fSRodney W. GrimesThese functions operate on the group database file
7358f0484fSRodney W. Grimes.Pa /etc/group
7458f0484fSRodney W. Grimeswhich is described
7558f0484fSRodney W. Grimesin
7658f0484fSRodney W. Grimes.Xr group 5 .
7758f0484fSRodney W. GrimesEach line of the database is defined by the structure
785c564baeSRuslan Ermilov.Vt group
7958f0484fSRodney W. Grimesfound in the include
8058f0484fSRodney W. Grimesfile
8158f0484fSRodney W. Grimes.Aq Pa grp.h :
8258f0484fSRodney W. Grimes.Bd -literal -offset indent
8358f0484fSRodney W. Grimesstruct group {
8458f0484fSRodney W. Grimes	char	*gr_name;	/* group name */
8558f0484fSRodney W. Grimes	char	*gr_passwd;	/* group password */
865567b258SMark Murray	gid_t	gr_gid;		/* group id */
871ffa6450SMike Pritchard	char	**gr_mem;	/* group members */
8858f0484fSRodney W. Grimes};
8958f0484fSRodney W. Grimes.Ed
9058f0484fSRodney W. Grimes.Pp
9158f0484fSRodney W. GrimesThe functions
9258f0484fSRodney W. Grimes.Fn getgrnam
9358f0484fSRodney W. Grimesand
9458f0484fSRodney W. Grimes.Fn getgrgid
9558f0484fSRodney W. Grimessearch the group database for the given group name pointed to by
965c564baeSRuslan Ermilov.Fa name
9758f0484fSRodney W. Grimesor the group id pointed to by
985c564baeSRuslan Ermilov.Fa gid ,
9958f0484fSRodney W. Grimesrespectively, returning the first one encountered.  Identical group
10058f0484fSRodney W. Grimesnames or group gids may result in undefined behavior.
10158f0484fSRodney W. Grimes.Pp
10258f0484fSRodney W. GrimesThe
10358f0484fSRodney W. Grimes.Fn getgrent
10458f0484fSRodney W. Grimesfunction
10558f0484fSRodney W. Grimessequentially reads the group database and is intended for programs
10658f0484fSRodney W. Grimesthat wish to step through the complete list of groups.
10758f0484fSRodney W. Grimes.Pp
10805f98035SJacques VidrineThe functions
10905f98035SJacques Vidrine.Fn getgrent_r ,
11005f98035SJacques Vidrine.Fn getgrnam_r ,
11105f98035SJacques Vidrineand
11205f98035SJacques Vidrine.Fn getgrgid_r
11305f98035SJacques Vidrineare thread-safe versions of
11405f98035SJacques Vidrine.Fn getgrent ,
11505f98035SJacques Vidrine.Fn getgrnam ,
11605f98035SJacques Vidrineand
11705f98035SJacques Vidrine.Fn getgrgid ,
11805f98035SJacques Vidrinerespectively.
11905f98035SJacques VidrineThe caller must provide storage for the results of the search in
12005f98035SJacques Vidrinethe
12105f98035SJacques Vidrine.Fa grp ,
12205f98035SJacques Vidrine.Fa buffer ,
12305f98035SJacques Vidrine.Fa bufsize ,
12405f98035SJacques Vidrineand
12505f98035SJacques Vidrine.Fa result
12605f98035SJacques Vidrinearguments.
12705f98035SJacques VidrineWhen these functions are successful, the
12805f98035SJacques Vidrine.Fa grp
12905f98035SJacques Vidrineargument will be filled-in, and a pointer to that argument will be
13005f98035SJacques Vidrinestored in
13105f98035SJacques Vidrine.Fa result .
13205f98035SJacques VidrineIf an entry is not found or an error occurs,
13305f98035SJacques Vidrine.Fa result
13405f98035SJacques Vidrinewill be set to
13505f98035SJacques Vidrine.Dv NULL .
13605f98035SJacques Vidrine.Pp
13705f98035SJacques VidrineThese functions will open the group file for reading, if necessary.
13858f0484fSRodney W. Grimes.Pp
13958f0484fSRodney W. GrimesThe
14058f0484fSRodney W. Grimes.Fn setgroupent
14158f0484fSRodney W. Grimesfunction
14258f0484fSRodney W. Grimesopens the file, or rewinds it if it is already open.  If
14358f0484fSRodney W. Grimes.Fa stayopen
14458f0484fSRodney W. Grimesis non-zero, file descriptors are left open, significantly speeding
14558f0484fSRodney W. Grimesfunctions subsequent calls.  This functionality is unnecessary for
14658f0484fSRodney W. Grimes.Fn getgrent
14758f0484fSRodney W. Grimesas it doesn't close its file descriptors by default.  It should also
14858f0484fSRodney W. Grimesbe noted that it is dangerous for long-running programs to use this
14958f0484fSRodney W. Grimesfunctionality as the group file may be updated.
15058f0484fSRodney W. Grimes.Pp
15158f0484fSRodney W. GrimesThe
15258f0484fSRodney W. Grimes.Fn setgrent
15358f0484fSRodney W. Grimesfunction
15458f0484fSRodney W. Grimesis identical to
15558f0484fSRodney W. Grimes.Fn setgroupent
15658f0484fSRodney W. Grimeswith an argument of zero.
15758f0484fSRodney W. Grimes.Pp
15858f0484fSRodney W. GrimesThe
15958f0484fSRodney W. Grimes.Fn endgrent
16058f0484fSRodney W. Grimesfunction
16158f0484fSRodney W. Grimescloses any open files.
16258f0484fSRodney W. Grimes.Sh RETURN VALUES
16358f0484fSRodney W. GrimesThe functions
16458f0484fSRodney W. Grimes.Fn getgrent ,
16558f0484fSRodney W. Grimes.Fn getgrnam ,
16658f0484fSRodney W. Grimesand
16758f0484fSRodney W. Grimes.Fn getgrgid ,
16805f98035SJacques Vidrinereturn a pointer to a group structure on success or
16905f98035SJacques Vidrine.Dv NULL
17005f98035SJacques Vidrineif the entry is not found or if an error occurs.
17105f98035SJacques VidrineIn the latter case,
17205f98035SJacques Vidrine.Va errno
17305f98035SJacques Vidrinewill be set.
17405f98035SJacques VidrineThe functions
17505f98035SJacques Vidrine.Fn getgrent_r ,
17605f98035SJacques Vidrine.Fn getgrnam_r ,
17705f98035SJacques Vidrineand
17805f98035SJacques Vidrine.Fn getgrgid_r
17905f98035SJacques Vidrinereturn 0 if no error occurred, or an error number to indicate failure.
18005f98035SJacques VidrineIt is not an error if a matching entry is not found.
18105f98035SJacques Vidrine(Thus, if
18205f98035SJacques Vidrine.Fa result
18305f98035SJacques Vidrineis set to
18405f98035SJacques Vidrine.Dv NULL
18505f98035SJacques Vidrineand the return value is 0, no matching entry exists.)
18605f98035SJacques Vidrine.Pp
18758f0484fSRodney W. GrimesThe functions
18858f0484fSRodney W. Grimes.Fn setgroupent
18958f0484fSRodney W. Grimesand
19058f0484fSRodney W. Grimes.Fn setgrent
19158f0484fSRodney W. Grimesreturn the value 1 if successful, otherwise the value
19258f0484fSRodney W. Grimes0 is returned.
19358f0484fSRodney W. GrimesThe functions
19458f0484fSRodney W. Grimes.Fn endgrent
19558f0484fSRodney W. Grimesand
19658f0484fSRodney W. Grimes.Fn setgrfile
19758f0484fSRodney W. Grimeshave no return value.
19858f0484fSRodney W. Grimes.Sh FILES
19958f0484fSRodney W. Grimes.Bl -tag -width /etc/group -compact
20058f0484fSRodney W. Grimes.It Pa /etc/group
20158f0484fSRodney W. Grimesgroup database file
20258f0484fSRodney W. Grimes.El
20358f0484fSRodney W. Grimes.Sh SEE ALSO
20428f86af2SMike Pritchard.Xr getpwent 3 ,
205248aee62SJacques Vidrine.Xr group 5 ,
206491a8429SRuslan Ermilov.Xr nsswitch.conf 5 ,
207491a8429SRuslan Ermilov.Xr yp 8
20858f0484fSRodney W. Grimes.Sh HISTORY
20958f0484fSRodney W. GrimesThe functions
21058f0484fSRodney W. Grimes.Fn endgrent ,
21158f0484fSRodney W. Grimes.Fn getgrent ,
21258f0484fSRodney W. Grimes.Fn getgrnam ,
21358f0484fSRodney W. Grimes.Fn getgrgid ,
21458f0484fSRodney W. Grimesand
21558f0484fSRodney W. Grimes.Fn setgrent
21658f0484fSRodney W. Grimesappeared in
21758f0484fSRodney W. Grimes.At v7 .
21858f0484fSRodney W. GrimesThe functions
21958f0484fSRodney W. Grimes.Fn setgrfile
22058f0484fSRodney W. Grimesand
22158f0484fSRodney W. Grimes.Fn setgroupent
22258f0484fSRodney W. Grimesappeared in
22358f0484fSRodney W. Grimes.Bx 4.3 Reno .
22405f98035SJacques VidrineThe functions
22505f98035SJacques Vidrine.Fn getgrent_r ,
22605f98035SJacques Vidrine.Fn getgrnam_r ,
22705f98035SJacques Vidrineand
22805f98035SJacques Vidrine.Fn getgrgid_r
22905f98035SJacques Vidrineappeared in
23005f98035SJacques Vidrine.Fx 5.1 .
23105f98035SJacques Vidrine.Sh STANDARDS
23205f98035SJacques VidrineThe
23305f98035SJacques Vidrine.Fn getgrent ,
23405f98035SJacques Vidrine.Fn getgrnam ,
23505f98035SJacques Vidrine.Fn getgrnam_r ,
23605f98035SJacques Vidrine.Fn getgrgid ,
23705f98035SJacques Vidrine.Fn getgrgid_r
23805f98035SJacques Vidrineand
23905f98035SJacques Vidrine.Fn endgrent
24005f98035SJacques Vidrinefunctions conform to
24105f98035SJacques Vidrine.St -p1003.1-96 .
24205f98035SJacques VidrineThe
24305f98035SJacques Vidrine.Fn setgrent
24405f98035SJacques Vidrinefunction differs from that standard in that its return type is
24505f98035SJacques Vidrine.Vt int
24605f98035SJacques Vidrinerather than
24705f98035SJacques Vidrine.Vt void .
24858f0484fSRodney W. Grimes.Sh COMPATIBILITY
24958f0484fSRodney W. GrimesThe historic function
25058f0484fSRodney W. Grimes.Fn setgrfile ,
25158f0484fSRodney W. Grimeswhich allowed the specification of alternate password databases, has
25258f0484fSRodney W. Grimesbeen deprecated and is no longer available.
25358f0484fSRodney W. Grimes.Sh BUGS
25458f0484fSRodney W. GrimesThe functions
25558f0484fSRodney W. Grimes.Fn getgrent ,
25658f0484fSRodney W. Grimes.Fn getgrnam ,
25758f0484fSRodney W. Grimes.Fn getgrgid ,
25858f0484fSRodney W. Grimes.Fn setgroupent
25958f0484fSRodney W. Grimesand
26058f0484fSRodney W. Grimes.Fn setgrent
26158f0484fSRodney W. Grimesleave their results in an internal static object and return
262c6ff3a1bSSheldon Hearna pointer to that object.
263c6ff3a1bSSheldon HearnSubsequent calls to
26458f0484fSRodney W. Grimesthe same function
26558f0484fSRodney W. Grimeswill modify the same object.
266248aee62SJacques Vidrine.Pp
267248aee62SJacques VidrineThe functions
268248aee62SJacques Vidrine.Fn getgrent ,
26905f98035SJacques Vidrine.Fn getgrent_r ,
270248aee62SJacques Vidrine.Fn endgrent ,
271248aee62SJacques Vidrine.Fn setgroupent ,
272248aee62SJacques Vidrineand
273248aee62SJacques Vidrine.Fn setgrent
274248aee62SJacques Vidrineare fairly useless in a networked environment and should be
275248aee62SJacques Vidrineavoided, if possible.
27695f4226bSRuslan ErmilovThe
277248aee62SJacques Vidrine.Fn getgrent
27805f98035SJacques Vidrineand
27905f98035SJacques Vidrine.Fn getgrent_r
28005f98035SJacques Vidrinefunctions
28105f98035SJacques Vidrinemake no attempt to suppress duplicate information if multiple
282248aee62SJacques Vidrinesources are specified in
283248aee62SJacques Vidrine.Xr nsswitch.conf 5 .
284