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
dnel...@allantgroup.com
___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to freebsd-hackers-unsubscr...@freebsd.org