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.
STANDARDS CONFORMANCE
setuid(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1
setgid(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1