setregid, setegid - set real and / or effective group ID


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

       int setregid(gid_t rgid, gid_t egid);
       int setegid(gid_t egid);


       setregid sets real and effective group ID's of the current
       process.  Un-privileged users may change the real group ID
       to the effective group ID and vice-versa.

       Prior  to  Linux  1.1.38, the saved ID paradigm, when used
       with setregid or setegid was broken.  Starting at  1.1.38,
       it is also possible to set the effective group ID from the
       saved group ID.

       Only the super-user may make other changes.

       Supplying a value of -1 for either the real  or  effective
       group ID forces the system to leave that ID unchanged.

       Currently   (libc-4.x.x),  setegid(egid)  is  functionally
       equivalent to setregid(-1, egid).

       If the real group ID is changed or the effective group  ID
       is set to a value not equal to the previous real group ID,
       the saved group ID will be set to the new effective  group


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


       EPERM  The current  process  is  not  the  super-user  and
              changes other than (i) swapping the effective group
              ID with the real group ID or (ii)  setting  one  to
              the  value of the other or (iii) setting the effec­
              tive group ID to the value of the  saved  group  ID
              was specified.


       BSD  4.3  (the  setregid  function  call first appeared in


       getgid(2), setgid(2)