+Occorre però tenere conto che tutto questo non è possibile con root, in tal
+caso infatti l'esecuzione una \func{setuid} comporta il cambiamento di tutti
+gli identificatori associati al processo rendendo impossibile riguadagnare i
+privilegi di amministratore. Questo comportamento è corretto per l'uso che ne
+fa \cmd{login} una volta che crea una nuova shell per l'utente; ma quando si
+vuole cambiare soltanto l'\textit{effective user id} del processo per cedere i
+privilegi occorre ricorrere ad altre funzioni (si veda ad esempio
+\secref{sec:proc_seteuid}).
+
+
+\subsection{Le funzioni \func{setreuid} e \func{setresuid}}
+\label{sec:proc_setreuid}
+
+Queste due funzioni derivano da BSD che non supportando\footnote{almeno fino
+ alla versione 4.3+BSD TODO, verificare e aggiornare la nota} i \textit{saved
+ id} le usava per poter scambiare fra di loro effective e real id. I
+prototipi sono:
+
+\begin{functions}
+\headdecl{unistd.h}
+\headdecl{sys/types.h}
+
+\funcdecl{int setreuid(uid\_t ruid, uid\_t euid)} setta il \textit{real user
+ ID} e l'\textit{effective user ID} del processo corrente ai valori
+specificati da \var{ruid} e \var{euid}.
+
+\funcdecl{int setregid(gid\_t rgid, gid\_t egid)} setta il \textit{real group
+ ID} e l'\textit{effective group ID} del processo corrente ai valori
+specificati da \var{rgid} e \var{egid}.
+
+Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento:
+l'unico errore possibile è \macro{EPERM}.
+\end{functions}
+
+Gli utenti normali possono settare gli identificatori soltanto ai valori del
+loro \textit{effective id} o \textit{real id}, valori diversi comportano il
+fallimento della chiamata; l'amministratore invece può specificare un valore
+qualunque. Specificando -1 come valore l'identificatore corrispondente viene
+lasciato inalterato.
+
+Con queste funzione si possono scambiare fra loro \textit{real id} e
+\textit{effective id}, e pertanto è possibile implementare un comportamento
+simile a quello visto in precedenza per \func{setgid}, cedendo i privilegi con
+un primo scambio, e recuperandoli, eseguito il lavoro non privilegiato, con un
+secondo scambio.
+
+In questo caso però occorre porre molta attenzione quando si creano nuovi
+processi nella fase intermedia, questi infatti avranno un \textit{real id}
+privilegiato, che dovrà essere esplicitamente eliminato prima di porre in
+esecuzione un nuovo processo, che altrimenti potrebbero riottenere detti
+privilegi.
+
+Come accennato le funzioni derivano da un'implementazione che non prevedeva la
+presenza di \textit{saved id}, per evitare che questo possa essere
+riutilizzato nella fase intermedia per recuperare un \textit{effective id}
+(privilegiato) originale, tutte le volte che uno degli identificatori viene
+modificato da una di queste funzioni, il \textit{saved id} viene sempre
+settato al nuovo valore che viene ad assumere l'\textit{effective id}.
+