setuid()
Set the real, effective and saved user IDs
Synopsis:
#include <unistd.h>
int setuid( uid_t uid );
Arguments:
- uid
- The user ID that you want to use for the process.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The setuid() function lets the calling process set the real, effective and saved user IDs based on the following:
- If the process has the PROCMGR_AID_SETUID ability enabled (see procmgr_ability() ), setuid() sets the real user ID, effective user ID and saved user ID to uid.
- If the process doesn't have the PROCMGR_AID_SETUID ability enabled, but uid is equal to the real user ID or saved set-user ID, setuid() sets the effective user ID to uid; the real and saved user IDs aren't changed.
If a set-UID process sets its effective user ID to its real user ID,
it can still set its effective user ID back to the saved set-UID.
If you wish to change only the effective user ID, you should consider using the seteuid() function.
Returns:
0 for success, or -1 if an error occurs (errno is set).
Errors:
- EINVAL
- The value of uid is out of range.
- EPERM
- The process doesn't have the PROCMGR_AID_SETUID ability enabled, and uid doesn't match the real user ID or saved set-user ID.
Examples:
/* * This process sets its userid to 0 (root) */ #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> int main( void ) { uid_t ouid; ouid = getuid(); if( setuid( 0 ) == -1 ) { perror( "setuid" ); return EXIT_FAILURE; } printf( "userid %d switched to 0\n", ouid ); return EXIT_SUCCESS; }
Classification:
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |