setresuid, setresgid - set real, effective and saved user or group ID
int setresuid(uid_t ruid, uid_t euid, uid_t suid);
int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
setresuid sets the real user ID, the effective user ID, and the saved
set-user-ID of the current process.
Unprivileged user processes (i.e., processes with each of real, effec-
tive and saved user ID nonzero) may change the real, effective and
saved user ID, each to one of: the current uid, the current effective
uid or the current saved uid.
The super-user may set real, effective and saved user ID to arbitrary
If one of the parameters equals -1, the corresponding value is not
Completely analogously, setresgid sets the real, effective and saved
group ID's of the current process, with the same restrictions for pro-
cesses with each of real, effective and saved user ID nonzero.
On success, zero is returned. On error, -1 is returned, and errno is
EPERM The current process was not privileged and tried to change the
IDs is a not allowed way.
This call is nonstandard.
This system call was first introduced in HP-UX. It is available under
Linux since Linux 2.1.44. These days it is also found in FreeBSD (for
emulation of Linux binaries).
Under HP-UX and FreeBSD the prototype is found in <unistd.h>. Under
Linux there is so far no include file giving the prototype - this is a
glibc bug. Programs using this system call must add the prototype them-
getuid(2), setuid(2), setreuid(2), getresuid(2)