setreuid() functionality in sysV

Guy Middleton gamiddleton at watmath.waterloo.edu
Fri Jan 29 07:25:17 AEST 1988


In article <1962 at munnari.oz> kre at munnari.oz (Robert Elz) writes:
> The Sys V developers at AT&T saw the need (correctly) for this facility,
> (that is, real and effective uid switching) .. its been added to unix
> ever since Waterloo (and probably others) did it in V6.
> 
> However, they seem to have a real phobia about adding anything new,
> so rather than add a new system call, which could have worked sanely,
> without annoying limitations, they just added the internal, hidden,
> saved set_user value, and allowed the old setuid() sys call to use
> that whenever it wanted.

As a point of information, here is the way it worked at Waterloo:

	Instead of two uids (real and effetive), there were three: real,
	effective, and effective-at-exec-time.  This third uid (called the
	euid) was not directly settable, and was never (well, almost never)
	examined.

	Two new syscalls were provided --

		schizo(), which would set the effective uid to either of
		the other two.

		become(), which would set the effective uid to an arbitrary
		value.  It would only work if the effective-at-exec uid was
		zero [this was the only place the euid was looked at].

	setuid() did the usual thing, except it left the euid unaffected.

We don't use this any more.  The BSD setreuid() makes it unnecessary.

 -Guy Middleton, University of Waterloo Institute for Computer Research
 gamiddleton at math.waterloo.edu, watmath!gamiddleton



More information about the Comp.unix.wizards mailing list