Setting the effective user (group) ID to the saved set-user-ID (saved
set-group-ID) is possible since Linux 1.1.37 (1.1.38). On an arbitrary
system one should check _POSIX_SAVED_IDS.
Under glibc 2.0,
seteuid(euid
) is equivalent
to setreuid(-1, euid
) and
hence may change the saved set-user-ID. Under glibc 2.1 and later, it is
equivalent to setresuid(-1, euid
,
-1) and hence does not change the saved set-user-ID. Analogous
remarks hold for setegid(), with the difference that
the change in implementation from setregid(-1,
egid) to setresgid(-1,
egid, -1) occurred in glibc 2.2 or 2.3 (depending
on the hardware architecture).
According to POSIX.1, seteuid()
(setegid()) need not permit euid
(egid
) to be the same value as the current effective user
(group) ID, and some implementations do not permit this.
C library/kernel differences
On Linux, seteuid() and setegid()
are implemented as library functions that call, respectively,
setresuid(2) and setresgid(2).