From: "植田裕之" Date: 2007-03-15T12:36:10+09:00 Subject: [ruby-dev:30586] Etc.getgrgid が getgid の値に固定されています 植田と申します。  既出かもしれませんが、ruby 1.8.6, 1.8.5-p32 共に「ruby-1.8.5-p12 まで は大丈夫だった Etc.getgrgid がおかしい」という報告が社内でありました。 -------------------------------------------------------------------- [root@example ~]# egrep '^root|^users' /etc/group root:x:0:root users:x:100:foo,bar,hoge,fuga [root@example ~]$ irb irb(main):001:0> require 'etc' => true irb(main):002:0> Etc.getgrgid(100) => # irb(main):003:0> RUBY_VERSION => "1.8.5" irb(main):004:0> RUBY_PLATFORM => "i686-linux" [root@example ~]$ irb irb(main):001:0> require 'etc' => true irb(main):002:0> Etc.getgrgid(100) => # irb(main):003:0> RUBY_VERSION => "1.8.6" irb(main):004:0> RUBY_PLATFORM => "i686-linux" -------------------------------------------------------------------- 以下の変更による影響のようです。 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/tags/v1_8_5_35/ext/etc/etc.c?r1=10775&r2=11521 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/tags/v1_8_6/ext/etc/etc.c?r1=10979&r2=11526 getgrgid() に渡す値を getgid() で取得しているのですが、これだと etc_getgrgid(obj, id) の id が全く使われませんし...  正しくないことは承知で以下の修正をすると、とりあえず i386 の CentOS 4.4 上では正しい結果が得られています。 --- etc.c.orig 2007-03-15 12:07:33.000000000 +0900 +++ etc.c 2007-03-15 12:15:06.000000000 +0900 @@ -337,7 +337,8 @@ struct group *grp; rb_secure(4); - gid = getgid(); +/* gid = getgid(); */ + gid = NUM2INT(id); grp = getgrgid(gid); if (grp == 0) rb_raise(rb_eArgError, "can't find group for %d", gid); return setup_group(grp) ________________Network × People_  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  株式会社 ネットフォレスト  事業推進室 Dr.WEB 担当       植田 裕之  http://www.netforest.ad.jp/    ueda@netforest.ad.jp  tel:045-663-6277 fax:045-663-6278 ________________________________  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  http://www.kamome.or.jp/ <<< ISP FTTH/ADSL/AIR-EDGE/8&16IP  http://drweb.jp/     <<< 予測するアンチウィルス