diff options
Diffstat (limited to 'man3/getgrouplist.3')
-rw-r--r-- | man3/getgrouplist.3 | 200 |
1 files changed, 0 insertions, 200 deletions
diff --git a/man3/getgrouplist.3 b/man3/getgrouplist.3 deleted file mode 100644 index 33e344d..0000000 --- a/man3/getgrouplist.3 +++ /dev/null @@ -1,200 +0,0 @@ -'\" t -.\" Copyright (C) 2008, Linux Foundation, written by Michael Kerrisk -.\" <mtk.manpages@gmail.com> -.\" -.\" A few pieces remain from an earlier version written in -.\" 2002 by Walter Harms (walter.harms@informatik.uni-oldenburg.de) -.\" -.\" SPDX-License-Identifier: Linux-man-pages-copyleft -.\" -.TH getgrouplist 3 2024-03-16 "Linux man-pages 6.7" -.SH NAME -getgrouplist \- get list of groups to which a user belongs -.SH LIBRARY -Standard C library -.RI ( libc ", " \-lc ) -.SH SYNOPSIS -.nf -.B #include <grp.h> -.P -.BI "int getgrouplist(const char *" user ", gid_t " group , -.BI " gid_t *" groups ", int *" ngroups ); -.fi -.P -.RS -4 -Feature Test Macro Requirements for glibc (see -.BR feature_test_macros (7)): -.RE -.P -.BR getgrouplist (): -.nf - Since glibc 2.19: - _DEFAULT_SOURCE - glibc 2.19 and earlier: - _BSD_SOURCE -.fi -.SH DESCRIPTION -The -.BR getgrouplist () -function scans the group database (see -.BR group (5)) -to obtain the list of groups that -.I user -belongs to. -Up to -.I *ngroups -of these groups are returned in the array -.IR groups . -.P -If it was not among the groups defined for -.I user -in the group database, then -.I group -is included in the list of groups returned by -.BR getgrouplist (); -typically this argument is specified as the group ID from -the password record for -.IR user . -.P -The -.I ngroups -argument is a value-result argument: -on return it always contains the number of groups found for -.IR user , -including -.IR group ; -this value may be greater than the number of groups stored in -.IR groups . -.SH RETURN VALUE -If the number of groups of which -.I user -is a member is less than or equal to -.IR *ngroups , -then the value -.I *ngroups -is returned. -.P -If the user is a member of more than -.I *ngroups -groups, then -.BR getgrouplist () -returns \-1. -In this case, the value returned in -.I *ngroups -can be used to resize the buffer passed to a further call to -.BR getgrouplist (). -.SH ATTRIBUTES -For an explanation of the terms used in this section, see -.BR attributes (7). -.TS -allbox; -lbx lb lb -l l l. -Interface Attribute Value -T{ -.na -.nh -.BR getgrouplist () -T} Thread safety MT-Safe locale -.TE -.SH STANDARDS -None. -.SH HISTORY -glibc 2.2.4. -.SH BUGS -Before glibc 2.3.3, -the implementation of this function contains a buffer-overrun bug: -it returns the complete list of groups for -.I user -in the array -.IR groups , -even when the number of groups exceeds -.IR *ngroups . -.SH EXAMPLES -The program below displays the group list for the user named in its -first command-line argument. -The second command-line argument specifies the -.I ngroups -value to be supplied to -.BR getgrouplist (). -The following shell session shows examples of the use of this program: -.P -.in +4n -.EX -.RB "$" " ./a.out cecilia 0" -getgrouplist() returned \-1; ngroups = 3 -.RB "$" " ./a.out cecilia 3" -ngroups = 3 -16 (dialout) -33 (video) -100 (users) -.EE -.in -.SS Program source -\& -.\" SRC BEGIN (getgrouplist.c) -.EX -#include <grp.h> -#include <pwd.h> -#include <stdio.h> -#include <stdlib.h> -\& -int -main(int argc, char *argv[]) -{ - int ngroups; - gid_t *groups; - struct group *gr; - struct passwd *pw; -\& - if (argc != 3) { - fprintf(stderr, "Usage: %s <user> <ngroups>\en", argv[0]); - exit(EXIT_FAILURE); - } -\& - ngroups = atoi(argv[2]); -\& - groups = malloc(sizeof(*groups) * ngroups); - if (groups == NULL) { - perror("malloc"); - exit(EXIT_FAILURE); - } -\& - /* Fetch passwd structure (contains first group ID for user). */ -\& - pw = getpwnam(argv[1]); - if (pw == NULL) { - perror("getpwnam"); - exit(EXIT_SUCCESS); - } -\& - /* Retrieve group list. */ -\& - if (getgrouplist(argv[1], pw\->pw_gid, groups, &ngroups) == \-1) { - fprintf(stderr, "getgrouplist() returned \-1; ngroups = %d\en", - ngroups); - exit(EXIT_FAILURE); - } -\& - /* Display list of retrieved groups, along with group names. */ -\& - fprintf(stderr, "ngroups = %d\en", ngroups); - for (int j = 0; j < ngroups; j++) { - printf("%d", groups[j]); - gr = getgrgid(groups[j]); - if (gr != NULL) - printf(" (%s)", gr\->gr_name); - printf("\en"); - } -\& - exit(EXIT_SUCCESS); -} -.EE -.\" SRC END -.SH SEE ALSO -.BR getgroups (2), -.BR setgroups (2), -.BR getgrent (3), -.BR group_member (3), -.BR group (5), -.BR passwd (5) |