summaryrefslogtreecommitdiffstats
path: root/man2/getgroups.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/getgroups.2')
-rw-r--r--man2/getgroups.2130
1 files changed, 130 insertions, 0 deletions
diff --git a/man2/getgroups.2 b/man2/getgroups.2
new file mode 100644
index 000000000..f4f0ee13b
--- /dev/null
+++ b/man2/getgroups.2
@@ -0,0 +1,130 @@
+.\" Hey Emacs! This file is -*- nroff -*- source.
+.\"
+.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of this
+.\" manual under the conditions for verbatim copying, provided that the
+.\" entire resulting derived work is distributed under the terms of a
+.\" permission notice identical to this one.
+.\"
+.\" Since the Linux kernel and libraries are constantly changing, this
+.\" manual page may be incorrect or out-of-date. The author(s) assume no
+.\" responsibility for errors or omissions, or for damages resulting from
+.\" the use of the information contained herein. The author(s) may not
+.\" have taken the same level of care in the production of this manual,
+.\" which is licensed free of charge, as they might when working
+.\" professionally.
+.\"
+.\" Formatted or processed versions of this manual, if unaccompanied by
+.\" the source, must acknowledge the copyright and authors of this work.
+.\"
+.\" Modified Thu Oct 31 12:04:29 1996 by Eric S. Raymond <esr@thyrsus.com>
+.\" Modified, 27 May 2004, Michael Kerrisk <mtk16@ext.canterbury.ac.nz>
+.\" Added notes on capability requirements
+.\"
+.TH GETGROUPS 2 2004-05-27 "Linux 2.6.6" "Linux Programmer's Manual"
+.SH NAME
+getgroups, setgroups \- get/set list of supplementary group IDs
+.SH SYNOPSIS
+.B #include <sys/types.h>
+.br
+.B #include <unistd.h>
+.sp
+.BI "int getgroups(int " size ", gid_t " list []);
+.sp
+.B #include <grp.h>
+.sp
+.BI "int setgroups(size_t " size ", const gid_t *" list );
+.SH DESCRIPTION
+.TP
+.B getgroups
+Up to
+.I size
+supplementary group IDs (of the calling process) are returned in
+.IR list .
+It is unspecified whether the effective group ID of the calling process
+is included in the returned list. (Thus, an application should also call
+.BR getegid (2)
+and add or remove the resulting value.)
+If
+.I size
+is zero,
+.I list
+is not modified, but the total number of supplementary group IDs for the
+process is returned.
+.TP
+.B setgroups
+Sets the supplementary group IDs for the process.
+Appropriate privileges (Linux: the
+.B CAP_SETGID
+capability) are required.
+.SH "RETURN VALUE"
+.TP
+.B getgroups
+On success, the number of supplementary group IDs is returned.
+On error, \-1 is returned, and
+.I errno
+is set appropriately.
+.TP
+.B setgroups
+On success, zero is returned. On error, \-1 is returned, and
+.I errno
+is set appropriately.
+.SH ERRORS
+.TP
+.B EFAULT
+.I list
+has an invalid address.
+.TP
+.B EINVAL
+For
+.BR setgroups ,
+.I size
+is greater than
+.B NGROUPS
+(32 for Linux 2.0.32).
+For
+.BR getgroups ,
+.I size
+is less than the number of supplementary group IDs, but is not zero.
+.TP
+.B EPERM
+The calling process has insufficient privilege to call
+.BR setgroups .
+.SH NOTES
+A process can have up to at least NGROUPS_MAX supplementary group IDs
+in addition to the effective group ID. The set of supplementary group IDs
+is inherited from the parent process and may be changed using
+.BR setgroups .
+The maximum number of supplementary group IDs can be found using
+.BR sysconf (3):
+.nf
+ long ngroups_max;
+ ngroups_max = sysconf(_SC_NGROUPS_MAX);
+.fi
+The maximal return value of
+.B getgroups
+cannot be larger than one more than the value obtained this way.
+.LP
+The prototype for
+.B setgroups
+is only available if
+.B _BSD_SOURCE
+is defined (either explicitly, or implicitly, by not defining
+_POSIX_SOURCE or compiling with the -ansi flag).
+.SH "CONFORMING TO"
+SVr4, SVID (issue 4 only; these calls were not present in SVr3),
+X/OPEN, 4.3BSD. The
+.B getgroups
+function is in POSIX.1. Since
+.B setgroups
+requires privilege, it is not covered by POSIX.1.
+.SH "SEE ALSO"
+.BR getgid (2),
+.BR setgid (2),
+.BR initgroups (3),
+.BR capabilities (7)