setfsuid()
specifico per Linux / setfsgid()
sono per thread piuttosto che per processo. Sono progettati specificamente per questo caso d'uso (file server).
Nota che access()
controllerà comunque l'accesso utilizzando il vero uid e gid, ovvero per impostazione predefinita (ha lo scopo di rispondere alla domanda "l'utente che ha eseguito questo file binario dovrebbe avere l'accesso consentito a questo file" ). Per il setfsuid()
/ setfsgid()
caso dovresti semplicemente provare l'operazione richiesta e rilevare l'errore dovuto alla mancanza di autorizzazione a quel punto.
Per modificare l'uid solo per un thread è necessario utilizzare direttamente la syscall:syscall(SYS_setresuid, ...); La funzione libc setresuid() lo sincronizzerà per tutti i thread (usando un singal che invia a tutti i thread)!