[#30549] [ANN] Ruby 1.8.6 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.6 をリリースしました。

14 messages 2007/03/12

[#30553] help: lib/shell for ruby 1.9 — keiju@... (Keiju ISHITSUKA)

けいじゅ@いしつかです.

13 messages 2007/03/13
[#30585] Re: help: lib/shell for ruby 1.9 — Yukihiro Matsumoto <matz@...> 2007/03/15

まつもと ゆきひろです

[#30587] Re: help: lib/shell for ruby 1.9 — keiju@... (石塚圭樹) 2007/03/15

けいじゅ@いしつかです.

[#30588] Re: help: lib/shell for ruby 1.9 — Yukihiro Matsumoto <matz@...> 2007/03/15

まつもと ゆきひろです

[ruby-dev:30586] Etc.getgrgid が getgid の値に固定されています

From: 植田裕之 <ueda@...>
Date: 2007-03-15 03:36:10 UTC
List: ruby-dev #30586
植田と申します。


 既出かもしれませんが、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)
=> #<struct Struct::Group name="users", passwd="x", gid=100, mem=["foo", "bar", "hoge", "fuga"]>
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)
=> #<struct Struct::Group name="root", passwd="x", gid=0, mem=["root"]>
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/     <<< 予測するアンチウィルス


In This Thread

Prev Next