SETREGID(2) System Calls Manual SETREGID(2)
setregid - set real and effective group IDs
int setregid(rgid, egid)
int rgid, egid;
setregid() is used to set the real and effective group IDs of the call-
ing process. If rgid is -1, the real GID is not changed; if egid is
-1, the effective GID is not changed. The real and effective GIDs may
be set to different values in the same call.
If the effective user ID of the calling process is super-user, the real
GID and the effective GID can be set to any legal value.
If the effective user ID of the calling process is not super-user,
either the real GID can be set to the saved setGID from execve(2V), or
the effective GID can either be set to the saved setGID or the real
GID. Note: if a setGID process sets its effective GID to its real GID,
it can still set its effective GID back to the saved setGID.
In either case, if the real GID is being changed (that is, if rgid is
not -1), or the effective GID is being changed to a value not equal to
the real GID, the saved setGID is set equal to the new effective GID.
0 on success.
-1 on failure and sets errno to indicate the error.
setregid() will fail and neither of the group IDs will be changed if:
EINVAL The value of rgid or egid is less than 0 or greater than
USHRT_MAX (defined in <<sys/limits.h>>).
EPERM The calling process' effective UID is not the super-user
and a change other than changing the real GID to the
saved setGID, or changing the effective GID to the real
GID or the saved GID, was specified.
execve(2V), getgid(2V), setreuid(2), setuid(3V)
21 January 1990 SETREGID(2)