[Mono-dev] UnixUserInfo issues in OpenBSD

Jonathan Pryor jonpryor at vt.edu
Wed Oct 13 12:56:17 EDT 2010


On Wed, 2010-10-13 at 16:38 +0200, pablosantosluac at terra.es wrote:
> This is what I get:
> 
> $ ./a.out tester
> # checking return value 1; errno=13

That's...horribly wrong.

First, what's errno=13?  (i.e. what EVALUE is 13?  I'm sure OpenBSD has
different values than Linux does.)

Regardless, OpenBSD doesn't appear to be conforming to the standard
here:

        http://www.opengroup.org/onlinepubs/009695399/functions/getpwnam_r.html

        If successful, the getpwnam_r() function shall return zero;
        otherwise, an error number shall be returned to indicate the
        error. 

The value '1' is likely not the correct errno for ERANGE (Under Linux,
EPERM has the value 1), and since the return value isn't -1
recheck_range() won't check errno against ERANGE either.

However, this does point out a bug in MonoPosixHelper: if getpwnam_r()
returns non-zero it should treat it as an error, which is clearly not
happening here (and is why we're printing garbage data to the screen).

This would only marginally help you, though, as it would result in no
users being found, ever.

The fundamental problem is that Mono_Posix_Syscall_getpwnam_r()'s logic
for checking for ERANGE (so it'll resize the buffer and try the call
again) is failing under OpenBSD, and from what I can see here the
problem is within OpenBSD, not MonoPosixHelper.

Patches welcome to properly support OpenBSD. :-)

 - Jon




More information about the Mono-devel-list mailing list