Linux x86_64Usuários & permissões#117
setresuid
Define independentemente o UID real, efetivo e saved-set do processo.
Descrição
Interface mais completa e recomendada para trocas de privilégio precisas — evita as sutilezas de comportamento de `setuid`/`setreuid` em relação ao saved-set-UID.
man 2Desde o kernel 2.1.44
Assinatura
int setresuid(uid_t ruid, uid_t euid, uid_t suid);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| ruid | uid_t | Novo UID real, ou -1 para não alterar. |
| euid | uid_t | Novo UID efetivo, ou -1 para não alterar. |
| suid | uid_t | Novo UID saved-set, ou -1 para não alterar. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | ruiduid_t |
| rsi | argumento 2 | euiduid_t |
| rdx | argumento 3 | suiduid_t |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- EPERM(1)
- Operação não permitida (falta de privilégio).