In message <86ofopevkv.wl / archon.local.idaemons.org>
	on Wed, 5 Sep 2001 20:16:49 +0900,
	"Akinori MUSHA" <knu / iDaemons.org> wrote:
>  ちょっと脱線します。 :)
...
> とあり、 setreuid はユーザランドからほぼ一掃されています。
> 
>  ただし、 setuid/seteuid/setreuid の実装にもよりますが
> 
> http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=893121+0+current/cvs-all
> 
> に挙げられているようなケースではまだ必要(有用)なようです。
なるほど。

これも参考に話を元に戻すと、永井さんが出されていたサンプルに違和感を感
じていたのですが、BSD系(4.4BSD由来)では、

setuid(id)		ruid, euid, saved uid全部idに変える。
seteuid(id)		euidだけidに変える。
setreuid(rid, eid)	ruidをridに、eidをeuidに変える。
			ruidが変わった場合は、saved uidもeuidに変わる。
			但し、-1をridやeuidに指定した場合は今のまま。

ruid: real uid (実ユーザID)
euid: effective uid (実効ユーザID)
saved uid: setuidビット付きで実行された時点での実効ユーザID

saved uidを含めて単純に権限を放棄したいなら、setuid(2)。
ruidを変えずにeuidとsaved uidを変えたいなら、setreuid(2)。

でいいのかな。おっと、setreuid(2)のHISTORYに、

     The setreuid() function call appeared in 4.2BSD.  An incompatible version
     was implemented in 4.4BSD.  It was reimplemented in NetBSD 1.2 in a way
     compatible with 4.3BSD, SunOS and Linux, but should not be used in new
     code.

なんて記述がある!

--
神戸 隆博(かんべ たかひろ) at home