Issue #6831 has been updated by nobu (Nobuyoshi Nakada).


BTW, I found the following statement in getpwnam(3) on Lion.

     The functions getpwnam() and getpwuid() search the password database for the given login name or user uid, respectively, always returning the first one encountered.

This definitely states which entry should be returned when multiple logins are sharing the same UID.
Has this changed on Mountain Lion?
----------------------------------------
Bug #6831: test_getpwuid() on Mountain Lion 
https://bugs.ruby-lang.org/issues/6831#change-28693

Author: kosaki (Motohiro KOSAKI)
Status: Closed
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: ext
Target version: 2.0.0
ruby -v:  ruby 2.0.0dev (2012-08-04 trunk 36617) [x86_64-darwin12.0.0]


When using Mountain Lion, following test failure occur.

  1) Failure:
test_getpwuid(TestEtc) [/ruby/git/test/etc/test_etc.rb:34]:
<#<struct Struct::Passwd
 name="_appleevents",
 passwd="*",
 uid=55,
 gid=55,
 gecos="AppleEvents Daemon",
 dir="/var/empty",
 shell="/usr/bin/false",
 change=0,
 uclass="",
 expire=0>> expected but was
<#<struct Struct::Passwd
 name="_pcastagent",
 passwd="*",
 uid=55,
 gid=55,
 gecos="Podcast Producer Agent",
 dir="/var/pcast/agent",
 shell="/usr/bin/false",
 change=0,
 uclass="",
 expire=0>>.
------------------------------------------

getpwent() of Mountain Lion seems buggy. see below:

test_getpwent.c
-----------------------------------------
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <pwd.h>

int main(void)
{
  struct passwd *ent;

  while((ent = getpwent()) != NULL) {
    if (ent->pw_uid == 55)
	printf("%s:%d:%s\n", ent->pw_name, ent->pw_uid, ent->pw_gecos);
  }

  return 0;
}


result
----------------
_appleevents:55:AppleEvents Daemon
_pcastagent:55:Podcast Producer Agent


mrkn, what do you think?




-- 
http://bugs.ruby-lang.org/