setuid(2)
NAME
setuid, setgid − set user and group IDs
SYNOPSIS
#include <unistd.h>
int setuid(uid_t uid);
int setgid(gid_t gid);
DESCRIPTION
setuid() sets the real-user- ID (ruid),effective-user- ID (euid), and/or saved-user- ID (suid) of the calling process. The super-user’s euid is zero. The following conditions govern setuid’s behavior:
• If the euid is zero, setuid() sets the ruid, euid, and suid to uid.
• If the euid is not zero, but the argument uid is equal to the ruid or the suid, setuid() sets the euid to uid; the ruid and suid remain unchanged. (If a set-user- ID program is not running as super-user, it can change its euid to match its ruid and reset itself to the previous euid value.)
• If euid is not zero, but the argument uid is equal to the euid, and the calling process is a member of a group that has the PRIV_SETRUGID privilege (see privgrp(4)), setuid() sets the ruid to uid; the euid and suid remain unchanged.
setgid() sets the real-group- ID (rgid), effective-group- ID (egid), and/or saved-group- ID (sgid) of the calling process. The following conditions govern setgid()’s behavior:
• If euid is zero, setgid() sets the rgid and egid to gid.
• If euid is not zero, but the argument gid is equal to the rgid or the sgid, setgid() sets the egid to gid; the rgid and sgid remain unchanged.
• If euid is not zero, but the argument gid is equal to the egid, and the calling process is a member of a group that has the PRIV_SETRUGID privilege (see privgrp(4)), setgid() sets the rgid to gid; the egid and sgid remain unchanged.
RETURN VALUE
Upon successful completion, setuid() and setgid() returned 0; otherwise, they return −1 and set errno to indicate the error.
ERRORS
setuid() and setgid() fail and return −1 if any of the following conditions are encountered:
[EPERM] None of the conditions above are met.
[EINVAL] uid (gid) is not a valid user (group) ID.
WARNINGS
It is recommended that the PRIV_SETRUGID capability be avoided, as it is provided for backward compatibility. This feature may be modified or dropped from future HP-UX releases. When changing the real user ID and real group ID, use of setresuid() and setresgid() (see setresuid(2)) are recommended instead.
AUTHOR
setuid() was developed by AT&T, the University of California, Berkeley, and HP.
setgid() was developed by AT&T.
SEE ALSO
exec(2), getprivgrp(2), getuid(2), setresuid(2) privgrp(4).
STANDARDS CONFORMANCE
setuid(): AES, SVID2, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1
setgid(): AES, SVID2, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1
Hewlett-Packard Company — HP-UX Release 9.0: August 1992