_SC_GETPW_R_SIZE_MAX undefined in sysconf.c, what is correct
value?
Dan Nelson
dnelson at allantgroup.com
Mon Oct 24 00:10:39 UTC 2011
In the last episode (Oct 23), Christopher J. Ruwe said:
> I need to get the maximum size of an pwd-entry to determine the correct
> buffersize for calling getpwnam_r("uname",&pwd, buf, bufsize, &pwdp). I
> would like to use sysconf(_SC_GETPW_R_SIZE_MAX) to determine bufsize,
> which unfornutately fails (returns -1). Currently, I used 16384, which
> seems to be too much, bit works for the time being.
>
> From recent mails I get that _SC_GETPW_R_SIZE_MAX is not available on
> FreeBSD, e.g.,
> http://lists.freebsd.org/pipermail/freebsd-ports-bugs/2009-September/173081.html
> and http://www.redhat.com/archives/libvir-list/2011-May/msg01013.html.
> This assertion seems to be backed by /usr/srclib/libc/gen/sysconf.c, line
> 374.
>
> From Stevens & Rago, Adavanced Programming in the UNIX Environment, I can
> get that FreeBSD supports all possible members in the passwd structure,
> but where can I determine the maximum size of these so that I can
> calculate the ax size of the pwd struct therefrom? Does anybody know or
> know where to look what maximum size a pwd-entry can have?
>
> Knowing the maximum size a pwd structure can have, it seems like to be an
> idea to define the correct value in sysconf.c. As that is not done though
> suggested in the code, are there any obstacles in defining that value so
> nobody has done that so far?
>From looking at the libc/gen/getpwent.c file, it looks like a maximum size
might be 1MB. The wrapper functions that convert getpw*_r functions into
ones that simply return a pointer to malloced data all use the getpw()
helper function, which starts with a 1k buffer and keeps doubling its size
until the data fits or it hits PWD_STORAGE_MAX (1MB). PWD_STORAGE_MAX is
only checked within that getpw() function, though, so it's possible that an
nss library might return an even longer string to a get*_r call. It's up to
you to decide what your own limit is :)
--
Dan Nelson
dnelson at allantgroup.com
More information about the freebsd-hackers
mailing list