SETRESUID(2)

NAZWA
setresuid, setresgid - ustawienie rzeczywistego, efektywnego i zachowanego ID użytkownika lub grupy

SKŁADNIA
#define _GNU_SOURCE
#include <unistd.h>

int setresuid(uid_t ruid, uid_t euid, uid_t suid);
int setresgid(gid_t rgid, gid_t egid, gid_t sgid);

OPIS
setresuid() ustawia dla bieżącego procesu rzeczywisty i efektywny identyfikator użytkownika (UID) oraz wartość zachowanego set-user-ID. Proces nieuprzywilejowany może zmienić rzeczywisty UID, efektywny UID i zachowany set-user-ID na jeden z: bieżący rzeczywisty UID, bieżący efektywny UID lub bieżący zachowany UID Proces uprzywilejowany (pod Linuksem - mający atrybut CAP_SETUID) może ustawić rzeczywisty UID, efektywny UID i zachowany set-user-ID na dowolne wartości. Jeżeli którykolwiek z parametrów jest równy -1, to odpowiadająca mu wartość nie jest zmieniana. Niezależnie od zmian rzeczywistego UID, efektywnego UID i zachowanego set-user-ID, file-system-UID jest zawsze ustawiany na taką samą wartość, jaką ma (być może nowy) efektywny UID. Analogicznie, setresgid() ustawia rzeczywisty identyfikator grupy (GID), efektywny GID i zachowany set-group-ID bieżącego procesu (i zawsze ustawia file-system-GID na wartość efektywnego GID), z takimi samymi ograniczeniami dla procesów nieuprzywilejowanych.

WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest -1 i odpowiednio ustawiane errno.

BŁĘDY

EAGAIN
    uid nie pasuje do obecnego ID użytkownika, a to wywołanie pozwoliłoby obejść użytkownikowi limit NPROC.

EPERM
    Proces wywołujący nie jest procesem uprzywilejowanym (nie ma atrybutu CAP_SETUID) i próbował ustawić niedozwoloną wartość któregoś z identyfikatorów.

ZGODNE Z
To wywołanie systemowe jest niestandardowe.

HISTORIA
To wywołanie systemowe pojawiło się po raz pierwszy w HP-UX. Jest dostępne pod Linuksem od wersji 2.1.44. Obecnie można je znaleźć także w FreeBSD (dla emulacji programów linuksowych).

UWAGI
Na HP-UX i FreeBSD prototyp funkcji można znaleźć w <unistd.h>.Pod Liniksem prototyp jest dostarczany przez glibc od wersji 2.3.2, pod warunkiem, że zdefiniowano _GNU_SOURCE.

ZOBACZ TAKŻE
getresuid(2), getuid(2), setfsuid(2), setfsgid(2), setreuid(2), setuid(2), capabilities(7)