diff --git a/include/grp_.h b/include/grp_.h
index 7cb0d4a..b212b0b 100644
--- a/include/grp_.h
+++ b/include/grp_.h
@@ -1,39 +1,116 @@
-#ifndef	__CONFIG_GRP_H
-#define	__CONFIG_GRP_H
+/* Copyright (C) 1991,92,95,96,97,98,99,2000,01 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/*
+ *	POSIX Standard: 9.2.1 Group Database Access	<grp.h>
+ */
+
 
 #if !defined CONFIG_USE_BB_PWD_GRP
 #include <grp.h>
 
 #else
 
+#ifndef	_GRP_H
+#define	_GRP_H	1
+
+
 #include <sys/types.h>
 #include <features.h>
 #include <stdio.h>
 
 
-/* The group structure */
+/* The group structure.	 */
 struct group
 {
-  char *gr_name;		/* Group name.	*/
-  char *gr_passwd;		/* Password.	*/
-  gid_t gr_gid;			/* Group ID.	*/
-  char **gr_mem;		/* Member list.	*/
+    char *gr_name;		/* Group name.	*/
+    char *gr_passwd;		/* Password.	*/
+    gid_t gr_gid;		/* Group ID.	*/
+    char **gr_mem;		/* Member list.	*/
 };
 
-extern void setgrent __P ((void));
-extern void endgrent __P ((void));
-extern struct group * getgrent __P ((void));
 
-extern struct group * getgrgid __P ((__const gid_t gid));
-extern struct group * getgrnam __P ((__const char * name));
+/* Rewind the group-file stream.  */
+extern void setgrent (void);
 
-extern struct group * fgetgrent __P ((FILE * file));
+/* Close the group-file stream.  */
+extern void endgrent (void);
 
-extern int setgroups __P ((size_t n, __const gid_t * groups));
-extern int initgroups __P ((__const char * user, gid_t gid));
+/* Read an entry from the group-file stream, opening it if necessary.  */
+extern struct group *getgrent (void);
 
-extern struct group * bb_getgrent __P ((int grp_fd));
+/* Read a group entry from STREAM.  */
+extern struct group *fgetgrent (FILE *__stream);
 
-#endif /* USE_SYSTEM_PWD_GRP */
-#endif /* __CONFIG_GRP_H */
+/* Write the given entry onto the given stream.  */
+extern int putgrent (__const struct group *__restrict __p,
+		     FILE *__restrict __f);
 
+/* Search for an entry with a matching group ID.  */
+extern struct group *getgrgid (gid_t __gid);
+
+/* Search for an entry with a matching group name.  */
+extern struct group *getgrnam (__const char *__name);
+
+/* Reentrant versions of some of the functions above.
+
+   PLEASE NOTE: the `getgrent_r' function is not (yet) standardized.
+   The interface may change in later versions of this library.  But
+   the interface is designed following the principals used for the
+   other reentrant functions so the chances are good this is what the
+   POSIX people would choose.  */
+
+extern int getgrent_r (struct group *__restrict __resultbuf,
+		       char *__restrict __buffer, size_t __buflen,
+		       struct group **__restrict __result);
+
+/* Search for an entry with a matching group ID.  */
+extern int getgrgid_r (gid_t __gid, struct group *__restrict __resultbuf,
+		       char *__restrict __buffer, size_t __buflen,
+		       struct group **__restrict __result);
+
+/* Search for an entry with a matching group name.  */
+extern int getgrnam_r (__const char *__restrict __name,
+		       struct group *__restrict __resultbuf,
+		       char *__restrict __buffer, size_t __buflen,
+		       struct group **__restrict __result);
+
+/* Read a group entry from STREAM.  This function is not standardized
+   an probably never will.  */
+extern int fgetgrent_r (FILE *__restrict __stream,
+			struct group *__restrict __resultbuf,
+			char *__restrict __buffer, size_t __buflen,
+			struct group **__restrict __result);
+
+/* Set the group set for the current user to GROUPS (N of them).  */
+extern int setgroups (size_t __n, __const gid_t *__groups);
+
+/* Store at most *NGROUPS members of the group set for USER into
+   *GROUPS.  Also include GROUP.  The actual number of groups found is
+   returned in *NGROUPS.  Return -1 if the if *NGROUPS is too small.  */
+extern int getgrouplist (__const char *__user, gid_t __group,
+			 gid_t *__groups, int *__ngroups);
+
+/* Initialize the group set for the current user
+   by reading the group database and using all groups
+   of which USER is a member.  Also include GROUP.  */
+extern int initgroups (__const char *__user, gid_t __group);
+
+
+#endif /* grp.h  */
+#endif
diff --git a/include/pwd_.h b/include/pwd_.h
index 3f081e8..7215120 100644
--- a/include/pwd_.h
+++ b/include/pwd_.h
@@ -1,11 +1,33 @@
-#ifndef	__CONFIG_PWD_H
-#define	__CONFIG_PWD_H
+/* Copyright (C) 1991,92,95,96,97,98,99,2001 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/*
+ *	POSIX Standard: 9.2.2 User Database Access	<pwd.h>
+ */
 
 #if !defined CONFIG_USE_BB_PWD_GRP
 #include <pwd.h>
 
 #else
 
+#ifndef	_PWD_H
+#define	_PWD_H	1
+
 #include <sys/types.h>
 #include <features.h>
 #include <stdio.h>
@@ -13,29 +35,72 @@
 /* The passwd structure.  */
 struct passwd
 {
-  char *pw_name;		/* Username.  */
-  char *pw_passwd;		/* Password.  */
-  uid_t pw_uid;			/* User ID.  */
-  gid_t pw_gid;			/* Group ID.  */
-  char *pw_gecos;		/* Real name.  */
-  char *pw_dir;			/* Home directory.  */
-  char *pw_shell;		/* Shell program.  */
+    char *pw_name;		/* Username.  */
+    char *pw_passwd;		/* Password.  */
+    uid_t pw_uid;			/* User ID.  */
+    gid_t pw_gid;			/* Group ID.  */
+    char *pw_gecos;		/* Real name.  */
+    char *pw_dir;			/* Home directory.  */
+    char *pw_shell;		/* Shell program.  */
 };
 
-extern void setpwent __P ((void));
-extern void endpwent __P ((void));
-extern struct passwd * getpwent __P ((void));
 
-extern int putpwent __P ((__const struct passwd * __p, FILE * __f));
-extern int getpw __P ((uid_t uid, char *buf));
+/* Rewind the password-file stream.  */
+extern void setpwent (void);
 
-extern struct passwd * fgetpwent __P ((FILE * file));
+/* Close the password-file stream.  */
+extern void endpwent (void);
 
-extern struct passwd * getpwuid __P ((__const uid_t));
-extern struct passwd * getpwnam __P ((__const char *));
+/* Read an entry from the password-file stream, opening it if necessary.  */
+extern struct passwd *getpwent (void);
 
-extern struct passwd * __getpwent __P ((__const int passwd_fd));
+/* Read an entry from STREAM.  */
+extern struct passwd *fgetpwent (FILE *__stream);
 
-#endif /* USE_SYSTEM_PWD_GRP */
-#endif /* __CONFIG_PWD_H  */
+/* Write the given entry onto the given stream.  */
+extern int putpwent (__const struct passwd *__restrict __p,
+		     FILE *__restrict __f);
 
+/* Search for an entry with a matching user ID.  */
+extern struct passwd *getpwuid (uid_t __uid);
+
+/* Search for an entry with a matching username.  */
+extern struct passwd *getpwnam (__const char *__name);
+
+/* Reentrant versions of some of the functions above.
+
+   PLEASE NOTE: the `getpwent_r' function is not (yet) standardized.
+   The interface may change in later versions of this library.  But
+   the interface is designed following the principals used for the
+   other reentrant functions so the chances are good this is what the
+   POSIX people would choose.  */
+
+extern int getpwent_r (struct passwd *__restrict __resultbuf,
+		       char *__restrict __buffer, size_t __buflen,
+		       struct passwd **__restrict __result);
+
+extern int getpwuid_r (uid_t __uid,
+		       struct passwd *__restrict __resultbuf,
+		       char *__restrict __buffer, size_t __buflen,
+		       struct passwd **__restrict __result);
+
+extern int getpwnam_r (__const char *__restrict __name,
+		       struct passwd *__restrict __resultbuf,
+		       char *__restrict __buffer, size_t __buflen,
+		       struct passwd **__restrict __result);
+
+
+/* Read an entry from STREAM.  This function is not standardized and
+   probably never will.  */
+extern int fgetpwent_r (FILE *__restrict __stream,
+			struct passwd *__restrict __resultbuf,
+			char *__restrict __buffer, size_t __buflen,
+			struct passwd **__restrict __result);
+
+/* Re-construct the password-file line for the given uid
+   in the given buffer.  This knows the format that the caller
+   will expect, but this need not be the format of the password file.  */
+extern int getpw (uid_t __uid, char *__buffer);
+
+#endif /* pwd.h  */
+#endif
diff --git a/include/shadow_.h b/include/shadow_.h
index a677d52..1b14f0a 100644
--- a/include/shadow_.h
+++ b/include/shadow_.h
@@ -1,82 +1,98 @@
-/*
- * Copyright 1988 - 1994, Julianne Frances Haugh <jockgrrl@austin.rr.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
+/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
 
-#ifndef	_H_SHADOW
-#define	_H_SHADOW
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
 
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
 
-#ifdef USE_SYSTEM_SHADOW
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* Declaration of types and functions for shadow password suite.  */
+
+#if !defined CONFIG_USE_BB_SHADOW
 #include <shadow.h>
 #else
 
-/*
- * This information is not derived from AT&T licensed sources.  Posted
- * to the USENET 11/88, and updated 11/90 with information from SVR4.
- *
- *	$Id: shadow_.h,v 1.1 2002/06/23 04:24:20 andersen Exp $
- */
+#ifndef _SHADOW_H
+#define _SHADOW_H	1
 
-typedef long sptime;
+#include <stdio.h>
 
-/*
- * Shadow password security file structure.
- */
+/* Paths to the user database files.  */
+#ifndef _PATH_SHADOW
+#define	_PATH_SHADOW	"/etc/shadow"
+#endif
+#define	SHADOW _PATH_SHADOW
 
-struct spwd {
-	char *sp_namp;				/* login name */
-	char *sp_pwdp;				/* encrypted password */
-	sptime sp_lstchg;			/* date of last change */
-	sptime sp_min;				/* minimum number of days between changes */
-	sptime sp_max;				/* maximum number of days between changes */
-	sptime sp_warn;				/* number of days of warning before password
-								   expires */
-	sptime sp_inact;			/* number of days after password expires
-								   until the account becomes unusable. */
-	sptime sp_expire;			/* days since 1/1/70 until account expires */
-	unsigned long sp_flag;		/* reserved for future use */
+
+/* Structure of the password file.  */
+struct spwd
+{
+    char *sp_namp;		/* Login name.  */
+    char *sp_pwdp;		/* Encrypted password.  */
+    long int sp_lstchg;		/* Date of last change.  */
+    long int sp_min;		/* Minimum number of days between changes.  */
+    long int sp_max;		/* Maximum number of days between changes.  */
+    long int sp_warn;		/* Number of days to warn user to change
+				   the password.  */
+    long int sp_inact;		/* Number of days the account may be
+				   inactive.  */
+    long int sp_expire;		/* Number of days since 1970-01-01 until
+				   account expires.  */
+    unsigned long int sp_flag;	/* Reserved.  */
 };
 
-/*
- * Shadow password security file functions.
- */
 
-#include <stdio.h>				/* for FILE */
+/* Open database for reading.  */
+extern void setspent (void);
 
-extern struct spwd *getspent(void);
-extern struct spwd *sgetspent(const char *);
-extern struct spwd *fgetspent(FILE *);
-extern void setspent(void);
-extern void endspent(void);
-extern int putspent(const struct spwd *, FILE *);
-extern struct spwd *getspnam(const char *name);
-extern struct spwd *pwd_to_spwd(const struct passwd *pw);
+/* Close database.  */
+extern void endspent (void);
 
-#endif							/* USE_LOCAL_SHADOW */
+/* Get next entry from database, perhaps after opening the file.  */
+extern struct spwd *getspent (void);
 
-#endif							/* _H_SHADOW */
+/* Get shadow entry matching NAME.  */
+extern struct spwd *getspnam (__const char *__name);
+
+/* Read shadow entry from STRING.  */
+extern struct spwd *sgetspent (__const char *__string);
+
+/* Read next shadow entry from STREAM.  */
+extern struct spwd *fgetspent (FILE *__stream);
+
+/* Write line containing shadow password entry to stream.  */
+extern int putspent (__const struct spwd *__p, FILE *__stream);
+
+/* Reentrant versions of some of the functions above.  */
+extern int getspent_r (struct spwd *__result_buf, char *__buffer,
+		       size_t __buflen, struct spwd **__result);
+
+extern int getspnam_r (__const char *__name, struct spwd *__result_buf,
+		       char *__buffer, size_t __buflen,
+		       struct spwd **__result)__THROW;
+
+extern int sgetspent_r (__const char *__string, struct spwd *__result_buf,
+			char *__buffer, size_t __buflen,
+			struct spwd **__result);
+
+extern int fgetspent_r (FILE *__stream, struct spwd *__result_buf,
+			char *__buffer, size_t __buflen,
+			struct spwd **__result);
+/* Protect password file against multi writers.  */
+extern int lckpwdf (void);
+
+/* Unlock password file.  */
+extern int ulckpwdf (void);
+
+#endif /* shadow.h */
+#endif
