WARNING: This is highly experimental code that alters libc. It is possible that installing this code will cause login to break and render your machine unusable. Take proper backups, have rescue floppies at hand, and don't install it on a machine that has any kind of important function of any kind.
I have only run this code on FreeBSD 4.x series systems and these instructions apply specifically to FreeBSD 4.x. It may very well work as-is on other BSD systems, but I don't guarantee anything. I won't even guarantee that this code won't do nasty things to your FreeBSD 4.x machine, because it just might. USE AT YOUR OWN RISK!
One last warning: The NIS/YP client code in FreeBSD 4.x is tied into the standard getpwent.c and I did not reimplement it. In other words, understand that if you use this getpwent.c replacement, you will not be able to use NIS/YP as a client. I suppose it could still work as an NIS server, but you read the previous two paragraphs and wouldn't think of doing that.
Still with me?
Fetch and, as root, run pw2userdir.pl, a Perl script that converts your current /etc/passwd into an /etc/users hierarchy. I encourage you to do some sanity checks to see that the contents of /etc/users corresponds to your existing password file before continuing.
Fetch getpwent.c, the userdir replacement for the standard FreeBSD source file. Copy this file to /usr/src/lib/libc/gen/getpwent.c (assuming you have full sources installed under /usr/src). Make a backup copy of the original getpwent.c if you like before overwriting it.
cd /usr/src && make buildworld to rebuild your system with userdir.
You may wish to try out the new libc before installing it. Set LD_LIBRARY_PATH=/usr/obj/usr/src/lib/libc and try some commands that use the getpw* functions like id and finger. Note that some commands like ls and ps are statically linked in FreeBSD, and will not be using the new userdir-enabled libc at this point unless you try something like /usr/obj/usr/src/bin/ls/ls.
cd /usr/src && make installworld, reboot your system, and then let me and members of the mailing list know how it went.