Ruby Cannot Handle Some UIDs
This shows the main problem:
$ sudo ruby -r etc -e 'n = Etc.getpwnam("nobody"); p n.uid; Process.uid = n.uid'
ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-darwin9.4.0]
uid=': bignum too big to convert intolong' (RangeError)
The real UID for the nobody user on my system (Mac OS X 10.5.6) is -2. Thus it seems at least some systems use signed UID's and Ruby can't handle that.
The above example is from Ruby 1.8.6. Ruby 1.9 does seem to properly switch users, but it still shows the UID's incorrectly:
$ sudo ruby_dev -v -r etc -e 'n = Etc.getpwnam("nobody"); p n.uid; Process.uid = n.uid; p Process.uid; p Etc.getpwuid(Process.uid)'
ruby 1.9.1 (2008-12-30 patchlevel-0 revision 21203) [i386-darwin9.6.0]
Updated by shyouhei (Shyouhei Urabe) almost 11 years ago
Ondrej Bilka wrote:
On Thu, Jan 29, 2009 at 08:53:38AM +0100, Nobuyoshi Nakada wrote:
At Thu, 29 Jan 2009 01:23:48 +0900,
Ondrej Bilka wrote in [ruby-core:21642]:
Any reason why not handle UID and GID as signed?
Because they are defined as unsigned on that platform.
This can be ignored. It would only display incrorectly UIDs > 2000000000
Out of curiousity, on what basis you can believe that display (and ignore your
header instead)? I'd wather ignore that display and believe what header says
if I had such OS.