DO_SETRESUID(9)

DO_SETRESUID(9) | Kernel Developer's Manual | DO_SETRESUID(9)

# NAME

`do_setresuid`, `do_setresgid` —
set process uid and gid

# SYNOPSIS

`#include <sys/ucred.h>`

int
`do_setresuid`(struct lwp *lwp, uid_t ruid, uid_t euid, uid_t svuid, u_int flags);

int
`do_setresgid`(struct lwp *lwp, uid_t ruid, uid_t euid, uid_t svuid, u_int flags);

# DESCRIPTION

The `do_setresuid` and `do_setresgid` functions are used to implement the various system calls that allow a process to change its real, effective, and saved uid and gid values.

The `do_setresuid` function sets the specified process's real user ID to ruid, its effective user ID to euid, and its saved user ID to svuid. If any of the uid arguments are -1 then that assignment is skipped.

If `suser`() is true, then any values may be assigned, otherwise the new uid values must match one of the existing values and the caller must have set the relevant bit in flags.

The flags argument specifies which of the existing uid values the new value must match. It should be set to a logical OR of ID_{R,E,S}_EQ_{R,E,S}, where ID_E_EQ_R means that it is valid to set the effective ID to the current value of the real ID.

The `do_setresgid` function sets the group IDs but otherwise behaves in the same manner as `do_setresuid`. The processes group list is neither examined nor effected.

# CODE REFERENCES

These functions are implemented in: sys/kern/kern_prot.c.

# SEE ALSO

setregid(2), setreuid(2), setuid(2)

# HISTORY

Implemented for NetBSD 2.0 to replace ad-hoc code in each system call routine and in the various compat modules.

September 28, 2003 | NetBSD 10.1