Provided by: manpages-dev_2.17-1_all bug

NAME

       getgroups, setgroups - get/set list of supplementary group IDs

SYNOPSIS

       #include <sys/types.h>
       #include <unistd.h>

       int getgroups(int size, gid_t list[]);

       #include <grp.h>

       int setgroups(size_t size, const gid_t *list);

DESCRIPTION

       getgroups()
              Up  to size supplementary group IDs (of the calling process) are
              returned in 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  getegid(2)  and  add  or
              remove  the  resulting  value.)   If  size  is zero, list is not
              modified, but the total number of supplementary  group  IDs  for
              the process is returned.

       setgroups()
              Sets  the  supplementary group IDs for the process.  Appropriate
              privileges (Linux: the CAP_SETGID capability) are required.

RETURN VALUE

       getgroups()
              On success, the number of supplementary group IDs  is  returned.
              On error, -1 is returned, and errno is set appropriately.

       setgroups()
              On  success,  zero  is  returned.  On error, -1 is returned, and
              errno is set appropriately.

ERRORS

       EFAULT list has an invalid address.

       EINVAL For setgroups(), size is greater  than  NGROUPS  (32  for  Linux
              2.0.32).   For  getgroups(),  size  is  less  than the number of
              supplementary group IDs, but is not zero.

       EPERM  The  calling  process  has  insufficient   privilege   to   call
              setgroups().

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
       setgroups().  The maximum number of  supplementary  group  IDs  can  be
       found using sysconf(3):
           long ngroups_max;
           ngroups_max = sysconf(_SC_NGROUPS_MAX);
       The  maximal return value of getgroups() cannot be larger than one more
       than the value obtained this way.

       The prototype for setgroups()  is  only  available  if  _BSD_SOURCE  is
       defined   (either   explicitly,   or   implicitly,   by   not  defining
       _POSIX_SOURCE or compiling with the -ansi flag).

CONFORMING TO

       SVr4, SVID (issue 4 only;  these  calls  were  not  present  in  SVr3),
       X/OPEN,  4.3BSD.   The  getgroups()  function  is  in  POSIX.1.   Since
       setgroups() requires privilege, it is not covered by POSIX.1.

SEE ALSO

       getgid(2), setgid(2), initgroups(3), capabilities(7)