From: Hidetoshi NAGAI Date: 2003-07-22T18:05:01+09:00 Subject: [ruby-list:37933] Re: control user ID / group ID 永井@知能.九工大です. From: Takahiro Kambe Subject: [ruby-list:37932] Re: control user ID / group ID Date: Tue, 22 Jul 2003 16:06:07 +0900 Message-ID: <20030722.160558.76201133.taca@back-street.net> > (1) NetBSD 1.1リリース以降にOpenBSDが分かれる。 > (2) NetBSD 1.2リリースの段階までにsetreuid(2)が再実装される。 > ということなので、枝分かれした時点ではsetreuid(2)は4.4BSDセマンティッ > クスで、あとずっとそのままなのではないかと思います。 (中略) > やはり必要性がないという位置づけなんでしょう。setreuid(2)の冒頭が、 > DESCRIPTION > This interface is made obsolete by the saved ID functionality in > setuid(2) and seteuid(2). > となっていて、DESCRIPTIONの直後の最初の行が強調されています。 やはり 4.4 BSD 系の場合は,「 setreuid()/setregid() は使用不可」 ということで良さそうですね. とりあえず, --------------------------------------------------- #if defined(__APPLE__) && defined(__MACH__) && !defined(__MacOS_X__) #define __MacOS_X__ 1 #endif #if defined(__OpenBSD__) || defined(__bsdi__) #define HAVE_44BSD_SETUID 1 #define HAVE_44BSD_SETGID 1 #endif #if defined(HAVE_44BSD_SETUID) || defined(__MacOS_X__) #if !defined(USE_SETREUID) #define BROKEN_SETREUID 1 #define BROKEN_SETREGID 1 #endif #endif --------------------------------------------------- というような条件判断とし, ・HAVE_44BSD_SETUID のときは,一般ユーザ権限で実ユーザ ID と同じ ID に 変更しようとした場合に変更に成功し,そのとき保存 ID も変わる. (r,e,s) == (uid,?,?) ==> (uid,uid,uid) (ただし ? は root ではない) ・BROKEN_SETREUID の時は setreuid() が存在しても使用しない ということにしています. で,NetBSD はどうしましょう? (^_^; -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp