永井@知能.九工大です.

From: nobu.nakada / nifty.ne.jp
Subject: [ruby-dev:14672] Re: How to abondon saved uid privilege
Date: Wed, 5 Sep 2001 15:21:14 +0900
Message-ID: <200109050616.f856GUt02650 / sharui.nakada.kanuma.tochigi.jp>
nobu.nakada> At Wed, 5 Sep 2001 12:15:05 +0900,
nobu.nakada> nagai / ai.kyutech.ac.jp wrote:
nobu.nakada> > こんなサンプルで分かります?
nobu.nakada>  いや、setresuid()を使ってるのは1.7の方なので、と書こうとした
nobu.nakada> ら、1.6の最新でも違う結果になりました。なんで?と思ったらuid=は
nobu.nakada> setreuid()なのにeuid=はseteuid()を使ってるからのようです。
nobu.nakada>  いずれにしても、それぞれ1.6は(6)で1.7は(7)でエラーになります
nobu.nakada> が、それを無視すると(9)は通ってしまいます。

う゛,本当だ.いつの間に...
これは困りましたね.
同じソース (1.6) で,gcc-2.7.2.3 + libc 5.4.38 では
サンプルのようになるのに対し,
egcs-2.91.66 + libc-2.1.3 では (7) でエラーになりました.
念のため,process.c で seteuid を使わずに 
setreuid の方を使うようにソースを書き換えてみると,
サンプルのような結果になります.
man の記述によると,
「現在では seteuid(euid) は機能的に setreuid(-1,euid) と等価」
ってことになっているようですが,
これが違ってるってことになるのでしょうね.

そうであるとして,Ruby としてはどうすべきでしょう?
少なくとも,特権ユーザに戻れなくする手段に欠ける現状というのは
問題がありますよね.
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai / ai.kyutech.ac.jp