Etsushi Kato
ekato****@ees*****
2004年 2月 29日 (日) 14:31:04 JST
On Sun, Feb 29, 2004 at 12:56:04AM +0900, KIHARA Hideto <deton****@m1*****> wrote: > Fri, Feb 27, 2004 at 08:22:32PM +0900 において > Etsushi Kato さん曰く: > > > NetBSD ではおそらく、setsockopt() に LOCAL_CREDS を使うようなコードが > > > 必要みたいですが、試すことができないので ssh-agent と同様に fallback > ... > > するセキュリティが保てますし、NetBSD でも少しの変更で問題ないと思いま > > す (postresql の Unix ドメンインソケットの認証が参考にできると思います)。 > > NetBSDのLOCAL_CREDSを使うコードを追加してみました。 > PostgreSQLのものをほとんどそのまま持ってきただけですが。 すばらしいです。 > Sat, Feb 28, 2004 at 10:41:58AM +0900 において > Etsushi Kato さん曰く: > > なるほど、openldap にも getpeereid() が OS に無い場合のコードがありま > > すね。NetBSD でもこれならいけそうです。ただ、このコードだと、Mac OS X また読み間違えてました… openldap のコードでは NetBSD に対応してません ね。LOCAL_PEERCRED というのは FreeBSD 用でした (ただ今の FreeBSD の libc には、そのままこれが getpeereid(3) としてありますから、意味ないで すけど)。 > > 10.3 では -1 が戻ってしまい (SO_PEERCRED, LOCAL_PEERCRED, > > msg_accrights のすべてがありません)、openssh のように geteuid() の > > msg_accrightsの代わりにmsg_controlがありませんか? > 4.3BSDではmsg_accrightsで、 > 4.3BSD Renoからはmsg_controlに変更されたとのことなので[*]、 > msg_controlを使うようにすればいいのではないかと思います。 なるほど。勉強になります。確かに Mac OS X でも msg_control が struct msghdr にありました。msg_accrights は struct omsghdr に含まれています。 openldap のDO_SENDMSG の場合のコードを msg_control に対応したように書 きかえたところ、手元でも uid が得られました。ちょうど、木原さんのダミー リクエストのコードが役立ちました。 もう少しきれいに修正してからパッチを送りたいと思います。 -- Etsushi Kato ekato****@ees*****