setregid()

Set real and effective group IDs

Synopsis:

#include <unistd.h>

int setregid( gid_t rgid, 
              gid_t egid );

Arguments:

rgid
The real group ID that you want to use for the process, or -1 if you don't want to change it.
egid
The effective group ID that you want to use for the process, or -1 if you don't want to change it.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The setregid() function sets the real and effective group IDs of the calling process. If rgid or egid is -1, the corresponding real or effective group ID is left unchanged.

If the process has the PROCMGR_AID_SETGID ability enabled (see procmgr_ability()), you can set the real group ID and the effective group ID to any legal value.

If the process doesn't have the PROCMGR_AID_SETGID ability enabled, you can set either the real group ID to the saved set-group ID, or the effective group ID to either the saved set-group ID or the real group ID.

Note: If a set-group ID process sets its effective group ID to its real group ID, it can still set its effective group ID back to the saved set-group ID.

In either case, if you're changing the real group ID (i.e. rgid isn't -1), or you're changing the effective group ID to a value that isn't equal to the real group ID, the saved set-group ID is set to the new effective group ID.

Returns:

0
Success.
-1
An error occurred (errno is set).

Errors:

EINVAL
The rgid or egid is out of range.
EPERM
The calling process doesn't have the PROCMGR_AID_SETGID ability enabled, and you tried to change the effective group ID to a value other than the real or saved set-group ID.

Or:

The calling process doesn't have the PROCMGR_AID_SETGID ability enabled, and you tried to change the real group ID to a value other than the effective group ID.

Classification:

POSIX 1003.1

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes