近永と申します。

たびたびすみません。
先刻はりつけたパッチに間違いがありましたので再送します。
失礼しました。

現在 trunk のソースツリーをチェックアウトして手元の環境で
make test-all すると拡張ライブラリ etc のテストで 2 failures に
なります(他にもありますがとりあえず)。

ldap を導入していて /etc/passwd と ldap で uid/gid や name が重複する
エントリがあり、なおかつ gecos フィールドなどに差異があるためです。
そういう設定がよくないということもあるとは思いますが、
getpwnam(3) 等は最初にマッチしたエントリを返すようなのでテストも
そのようにするのはどうでしょうか。

以上、ご検討ください。
以下 test_etc.rb のパッチです。

Index: test/etc/test_etc.rb
===================================================================
--- test/etc/test_etc.rb        (revision 22011)
+++ test/etc/test_etc.rb        (working copy)
@@ -37,9 +37,9 @@
   end

   def test_getpwnam
-    passwd = []
-    Etc.passwd {|s| passwd << s }
-    passwd.each do |s|
+    passwd = {}
+    Etc.passwd {|s| passwd[s.name] = s unless passwd[s.name] }
+    passwd.values.each do |s|
       assert_equal(s, Etc.getpwnam(s.name))
     end
   end
@@ -67,22 +67,26 @@
   end

   def test_getgrgid
-    groups = []
+    groups = {}
     Etc.group do |s|
-      groups << s
+      unless groups[s.gid]
+        groups[s.gid] = s
+      end
     end
-    groups.each do |s|
+    groups.values.each do |s|
       assert_equal(s, Etc.getgrgid(s.gid))
       assert_equal(s, Etc.getgrgid) if Process.egid == s.gid
     end
   end

   def test_getgrnam
-    groups = []
+    groups = {}
     Etc.group do |s|
-      groups << s
+      unless groups[s.name]
+        groups[s.name] = s
+      end
     end
-    groups.each do |s|
+    groups.values.each do |s|
       assert_equal(s, Etc.getgrnam(s.name))
     end
   end