summaryrefslogtreecommitdiff
path: root/manual/users.texi
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-06-29 00:17:44 +0000
committerUlrich Drepper <drepper@redhat.com>2001-06-29 00:17:44 +0000
commit90e5b29e1470b218fe4288df7c58593e2f8fd753 (patch)
treef7e4469da4867fa59b5a3ec3732e872891e9f391 /manual/users.texi
parent5746ef6f2a918bcd476d4e33017edcec22684928 (diff)
Update.
* manual/users.texi (Setting Groups): Correct initgroups documentation. Add documentation for getgrouplist. 2001-06-28 H.J. Lu <hjl@gnu.org> * locale/findlocale.c (locale_file_list): Renamed to ... (_nl_locale_file_list): This. Make it extern. (free_mem): Move to ... * locale/setlocale.c (free_mem): Here. 2001-06-28 Mark Kettenis <kettenis@gnu.org> 2001-06-20 Isamu Hasegawa <isamu@yamato.ibm.com> 2001-06-26 Isamu Hasegawa <isamu@yamato.ibm.com> * posix/regex.c (count_mbs_length): Use binary search for optimization.
Diffstat (limited to 'manual/users.texi')
-rw-r--r--manual/users.texi52
1 files changed, 49 insertions, 3 deletions
diff --git a/manual/users.texi b/manual/users.texi
index d13139c4c5..406e48bfb5 100644
--- a/manual/users.texi
+++ b/manual/users.texi
@@ -454,10 +454,10 @@ The calling process is not privileged.
@comment grp.h
@comment BSD
-@deftypefun int initgroups (const char *@var{user}, gid_t @var{gid})
+@deftypefun int initgroups (const char *@var{user}, gid_t @var{group})
The @code{initgroups} function sets the process's supplementary group
-IDs to be the normal default for the user name @var{user}. If @var{gid}
-is not -1, it includes that group also.
+IDs to be the normal default for the user name @var{user}. The group
+@var{group} is automatically included.
This function works by scanning the group database for all the groups
@var{user} belongs to. It then calls @code{setgroups} with the list it
@@ -467,6 +467,52 @@ The return values and error conditions are the same as for
@code{setgroups}.
@end deftypefun
+If you are interested in the groups a particular user belongs to, but do
+not want to change the process's supplementary group IDs, you can use
+@code{getgrouplist}. To use @code{getgrouplist}, your programs should
+include the header file @file{grp.h}.
+@pindex grp.h
+
+@comment grp.h
+@comment BSD
+@deftypefun int getgrouplist (const char *@var{user}, gid_t @var{group}, gid_t *@var{groups}, int *@var{ngroups})
+The @code{getgrouplist} function scans the group database for all the
+groups @var{user} belongs to. Up to *@var{ngroups} group IDs
+corresponding to these groups are stored in the array @var{groups}; the
+return value from the function is the number of group IDs actually
+stored. If *@var{ngroups} is smaller than the total number of groups
+found, then @code{getgrouplist} returns a value of @code{-1} and stores
+the actual number of groups in *@var{ngroups}. The group @var{group} is
+automatically included in the list of groups returned by
+@code{getgrouplist}.
+
+Here's how to use @code{getgrouplist} to read all supplementary groups
+for @var{user}:
+
+@smallexample
+@group
+gid_t *
+supplementary_groups (char *user)
+@{
+ int ngroups = 16;
+ gid_t *groups
+ = (gid_t *) xmalloc (ngroups * sizeof (gid_t));
+ struct passwd *pw = getpwnam (user);
+
+ if (pw == NULL)
+ return NULL;
+
+ if (getgrouplist (pw->pw_name, pw->pw_gid, groups, &ngroups) < 0)
+ @{
+ groups = xrealloc (ngroups * sizeof (gid_t));
+ getgrouplist (pw->pw_name, pw->pw_gid, groups, &ngroups);
+ @}
+ return groups;
+@}
+@end group
+@end smallexample
+@end deftypefun
+
@node Enable/Disable Setuid
@section Enabling and Disabling Setuid Access