[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: libshadow



Patches to shadow enclosed. These are for the build tree rather than the
package, and break compatibility with Linux. Make sure that you compile
without PAM enabled.

-- 
Matthew Garrett | mjg59@srcf.ucam.org
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/lib/Makefile.in ./Makefile.in
--- /tmp/shadow-20000902/build-tree/shadow-20000902/lib/Makefile.in	Sat Sep  2 19:25:59 2000
+++ ./Makefile.in	Fri Feb 15 15:43:03 2002
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
 
 # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
@@ -310,51 +310,13 @@
 	@for file in $(DISTFILES); do \
 	  d=$(srcdir); \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$/$$file $(distdir)/$$file; \
+	    cp -pr $$d/$$file $(distdir)/$$file; \
 	  else \
 	    test -f $(distdir)/$$file \
 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
 	  fi; \
 	done
-commonio.lo commonio.o : commonio.c ../config.h rcsid.h defines.h \
-	gshadow_.h commonio.h
-dialchk.lo dialchk.o : dialchk.c ../config.h rcsid.h defines.h \
-	gshadow_.h prototypes.h dialup.h dialchk.h
-dialup.lo dialup.o : dialup.c ../config.h rcsid.h prototypes.h defines.h \
-	gshadow_.h dialup.h
-encrypt.lo encrypt.o : encrypt.c ../config.h rcsid.h prototypes.h \
-	defines.h gshadow_.h
-fputsx.lo fputsx.o : fputsx.c ../config.h defines.h gshadow_.h rcsid.h
-getdef.lo getdef.o : getdef.c ../config.h rcsid.h prototypes.h defines.h \
-	gshadow_.h getdef.h
-getpass.lo getpass.o : getpass.c ../config.h rcsid.h defines.h \
-	gshadow_.h getdef.h
-groupio.lo groupio.o : groupio.c ../config.h rcsid.h prototypes.h \
-	defines.h gshadow_.h commonio.h groupio.h
-gshadow.lo gshadow.o : gshadow.c ../config.h rcsid.h prototypes.h \
-	defines.h gshadow_.h
-lockpw.lo lockpw.o : lockpw.c ../config.h
-port.lo port.o : port.c ../config.h rcsid.h defines.h gshadow_.h port.h
-putgrent.lo putgrent.o : putgrent.c ../config.h prototypes.h defines.h \
-	gshadow_.h
-pwauth.lo pwauth.o : pwauth.c ../config.h rcsid.h prototypes.h defines.h \
-	gshadow_.h pwauth.h getdef.h
-pwio.lo pwio.o : pwio.c ../config.h rcsid.h prototypes.h defines.h \
-	gshadow_.h commonio.h pwio.h
-rad64.lo rad64.o : rad64.c ../config.h rcsid.h
-sgetgrent.lo sgetgrent.o : sgetgrent.c ../config.h rcsid.h defines.h \
-	gshadow_.h
-sgetpwent.lo sgetpwent.o : sgetpwent.c ../config.h rcsid.h defines.h \
-	gshadow_.h
-sgroupio.lo sgroupio.o : sgroupio.c ../config.h rcsid.h prototypes.h \
-	defines.h gshadow_.h commonio.h sgroupio.h
-shadowio.lo shadowio.o : shadowio.c ../config.h rcsid.h prototypes.h \
-	defines.h gshadow_.h commonio.h shadowio.h
-shadow.lo shadow.o : shadow.c ../config.h
-tcfsio.lo tcfsio.o : tcfsio.c ../config.h
-utent.lo utent.o : utent.c ../config.h
-
 info-am:
 info: info-am
 dvi-am:
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/lib/commonio.c ./commonio.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/lib/commonio.c	Sat Feb  2 01:54:01 2002
+++ ./commonio.c	Fri Feb 15 15:42:35 2002
@@ -12,6 +12,7 @@
 #include <stdio.h>
 #include <signal.h>
 #include <pwd.h>
+#include <util.h>
 #ifdef HAVE_SHADOW_H
 #include <shadow.h>
 #endif
@@ -27,6 +28,7 @@
 static void add_one_entry(struct commonio_db *, struct commonio_entry *);
 static int name_is_nis(const char *);
 static int write_all(const struct commonio_db *);
+static int grpwrite_all(const struct commonio_db *);
 static struct commonio_entry *find_entry_by_name(struct commonio_db *, const char *);
 
 static int lock_count = 0;
@@ -56,7 +58,7 @@
 	int retval;
 	char buf[32];
 
-	if ((fd = open(file, O_CREAT|O_EXCL|O_WRONLY, 0600)) == -1)
+	if ((fd = open(file, O_CREAT|O_WRONLY, 0600)) == -1)
 		return 0;
 
 	pid = getpid();
@@ -529,19 +531,28 @@
 {
 	const struct commonio_entry *p;
 	void *eptr;
-
+	FILE *fh;
+	int fd;
+	fd=pw_lock(0);
+	if(fd==-1) {
+	  return -1;
+	}
+	fh=fdopen(fd,"w");
 	for (p = db->head; p; p = p->next) {
 		if (p->changed) {
 			eptr = p->eptr;
-			if (db->ops->put(eptr, db->fp))
+			if (db->ops->put(eptr, fh))
 				return -1;
 		} else if (p->line) {
-			if (db->ops->fputs(p->line, db->fp) == EOF)
+			if (db->ops->fputs(p->line, fh) == EOF)
 				return -1;
-			if (putc('\n', db->fp) == EOF)
+			if (putc('\n', fh) == EOF)
 				return -1;
 		}
 	}
+	fclose(fh);
+	if (pw_mkdb() <0)
+		pw_error((char *)NULL, 0, 1);
 	return 0;
 }
 
@@ -598,25 +609,25 @@
 		sb.st_gid = 0;
 	}
 
-	snprintf(buf, sizeof buf, "%s+", db->filename);
-
-	db->fp = fopen_set_perms(buf, "w", &sb);
-	if (!db->fp)
-		goto fail;
+//	snprintf(buf, sizeof buf, "%s+", db->filename);
+//
+//	db->fp = fopen_set_perms(buf, "w", &sb);
+//	if (!db->fp)
+//		goto fail;
 
 	if (write_all(db))
 		errors++;
 
-	if (fflush(db->fp))
-		errors++;
+//	if (fflush(db->fp))
+//		errors++;
 #ifdef HAVE_FSYNC
-	if (fsync(fileno(db->fp)))
-		errors++;
+//	if (fsync(fileno(db->fp)))
+//		errors++;
 #else
 	sync();
 #endif
-	if (fclose(db->fp))
-		errors++;
+//	if (fclose(db->fp))
+//		errors++;
 
 	db->fp = NULL;
 
@@ -625,9 +636,6 @@
 		goto fail;
 	}
 
-	if (rename(buf, db->filename))
-		goto fail;
-
 	nscd_need_reload = 1;
 
 success:
@@ -803,3 +811,147 @@
 	}
 	return NULL;
 }
+
+/* Duplicate functions so that we can still write group files properly */
+
+int
+grpcommonio_close(struct commonio_db *db)
+{
+        char buf[1024];
+        int errors = 0;
+        struct stat sb;
+
+        if (!db->isopen) {
+                errno = EINVAL;
+                return 0;
+        }
+        db->isopen = 0;
+
+        if (!db->changed || db->readonly) {
+                fclose(db->fp);
+                db->fp = NULL;
+                goto success;
+        }
+
+        memzero(&sb, sizeof sb);
+        if (db->fp) {
+                if (fstat(fileno(db->fp), &sb)) {
+                        fclose(db->fp);
+                        db->fp = NULL;
+                        goto fail;
+                }
+
+                /*
+                 * Create backup file.
+                 */
+                snprintf(buf, sizeof buf, "%s-", db->filename);
+
+                if (create_backup(buf, db->fp))
+                        errors++;
+
+                if (fclose(db->fp))
+                        errors++;
+
+                if (errors) {
+                        db->fp = NULL;
+                        goto fail;
+                }
+        } else {
+                /*
+                 * Default permissions for new [g]shadow files.
+                 * (passwd and group always exist...)
+                 */
+                sb.st_mode = 0400;
+                sb.st_uid = 0;
+                sb.st_gid = 0;
+        }
+
+        snprintf(buf, sizeof buf, "%s+", db->filename);
+
+        db->fp = fopen_set_perms(buf, "w", &sb);
+        if (!db->fp)
+                goto fail;
+
+        if (grpwrite_all(db))
+                errors++;
+
+        if (fflush(db->fp))
+                errors++;
+#ifdef HAVE_FSYNC
+        if (fsync(fileno(db->fp)))
+                errors++;
+#else
+        sync();
+#endif
+        if (fclose(db->fp))
+                errors++;
+
+        db->fp = NULL;
+
+        if (errors) {
+                unlink(buf);
+                goto fail;
+        }
+
+        if (rename(buf, db->filename))
+                goto fail;
+
+        nscd_need_reload = 1;
+
+success:
+        free_linked_list(db);
+        return 1;
+
+fail:
+        free_linked_list(db);
+        return 0;
+}
+
+int
+grpcommonio_unlock(struct commonio_db *db)
+{
+        char lock[1024];
+
+        if (db->isopen) {
+                db->readonly = 1;
+                if (!grpcommonio_close(db)) {
+                        if (db->locked)
+                                dec_lock_count();
+                        return 0;
+                }
+        }
+        if (db->locked) {
+                /*
+                 * Unlock in reverse order: remove the lock file,
+                 * then call ulckpwdf() (if used) on last unlock.
+                 */
+                db->locked = 0;
+                snprintf(lock, sizeof lock, "%s.lock", db->filename);
+                unlink(lock);
+                dec_lock_count();
+                return 1;
+        }
+        return 0;
+}
+
+static int
+grpwrite_all(const struct commonio_db *db)
+{
+        const struct commonio_entry *p;
+        void *eptr;
+
+        for (p = db->head; p; p = p->next) {
+                if (p->changed) {
+                        eptr = p->eptr;
+                        if (db->ops->put(eptr, db->fp))
+                                return -1;
+                } else if (p->line) {
+                        if (db->ops->fputs(p->line, db->fp) == EOF)
+                                return -1;
+                        if (putc('\n', db->fp) == EOF)
+                                return -1;
+                }
+        }
+        return 0;
+}
+
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/lib/commonio.h ./commonio.h
--- /tmp/shadow-20000902/build-tree/shadow-20000902/lib/commonio.h	Sat Sep  2 18:40:43 2000
+++ ./commonio.h	Tue Feb  5 17:45:53 2002
@@ -98,3 +98,6 @@
 extern int commonio_unlock(struct commonio_db *);
 extern void commonio_del_entry(struct commonio_db *, const struct commonio_entry *);
 
+/* Duplicate entries so we can write groups */
+extern int grpcommonio_close(struct commonio_db *);
+extern int grpcommonio_unlock(struct commonio_db *);
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/lib/defines.h ./defines.h
--- /tmp/shadow-20000902/build-tree/shadow-20000902/lib/defines.h	Sat Sep  2 18:40:43 2000
+++ ./defines.h	Sat Jan 19 16:42:14 2002
@@ -290,7 +290,11 @@
 #endif
 
 #ifndef PASSWD_FILE
-#define PASSWD_FILE "/etc/passwd"
+#ifdef __NetBSD__
+#define PASSWD_FILE "/etc/master.passwd"
+#else
+define PASSWD_FILE "/etc/passwd"
+#endif
 #endif
 
 #ifndef GROUP_FILE
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/lib/groupio.c ./groupio.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/lib/groupio.c	Sat Sep  2 18:40:43 2000
+++ ./groupio.c	Tue Feb  5 17:50:16 2002
@@ -156,13 +156,13 @@
 int
 gr_close(void)
 {
-	return commonio_close(&group_db);
+	return grpcommonio_close(&group_db);
 }
 
 int
 gr_unlock(void)
 {
-	return commonio_unlock(&group_db);
+	return grpcommonio_unlock(&group_db);
 }
 
 void
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/lib/prototypes.h ./prototypes.h
--- /tmp/shadow-20000902/build-tree/shadow-20000902/lib/prototypes.h	Sat Sep  2 18:07:50 2000
+++ ./prototypes.h	Sat Jan 19 17:05:16 2002
@@ -26,6 +26,9 @@
 extern int add_groups(const char *);
 extern void add_cons_grps(void);
 
+
+#undef SHADOWPWD
+
 /* age.c */
 #ifdef SHADOWPWD
 extern void agecheck(const struct passwd *, const struct spwd *);
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/lib/putpwent.c ./putpwent.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/lib/putpwent.c	Sun Dec  7 23:26:54 1997
+++ ./putpwent.c	Sat Jan 19 19:20:02 2002
@@ -55,18 +55,7 @@
 		p->pw_name, p->pw_passwd, p->pw_uid, p->pw_gid,
 		p->pw_gecos, p->pw_comment, p->pw_dir, p->pw_shell) == EOF;
 #else
-	status = fprintf (f, "%s:%s", p->pw_name, p->pw_passwd) == EOF;
-#ifdef	ATT_AGE
-	if (p->pw_age && p->pw_age[0])
-		status |= fprintf (f, ",%s", p->pw_age) == EOF;
-#endif
-	status |= fprintf (f, ":%d:%d:%s", p->pw_uid, p->pw_gid,
-		p->pw_gecos) == EOF;
-#ifdef	ATT_COMMENT
-	if (p->pw_comment && p->pw_comment[0])
-		status |= fprintf (f, ",%s", p->pw_comment) == EOF;
-#endif
-	status |= fprintf (f, ":%s:%s\n", p->pw_dir, p->pw_shell) == EOF;
+		status = fprintf (f, "%s:%s:%d:%d:%s:%d:%d:%s:%s:%s\n", p->pw_name, p->pw_passwd, p->pw_uid, p->pw_gid, p->pw_class, p->pw_change, p->pw_expire, p->pw_gecos, p->pw_dir, p->pw_shell) == EOF;
 #endif
 	return status;
 }
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/lib/putpwent.c.orig ./putpwent.c.orig
--- /tmp/shadow-20000902/build-tree/shadow-20000902/lib/putpwent.c.orig	Thu Jan  1 00:00:00 1970
+++ ./putpwent.c.orig	Sat Jan 19 17:45:08 2002
@@ -0,0 +1,72 @@
+/*
+ * Copyright 1989 - 1994, Julianne Frances Haugh
+ * 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.
+ */
+
+#include <config.h>
+
+#include "rcsid.h"
+RCSID("$Id: putpwent.c,v 1.3 1997/12/07 23:26:54 marekm Exp $")
+
+#include "defines.h"
+#include <stdio.h>
+#include <pwd.h>
+
+/*
+ * putpwent - Output a (struct passwd) in character format
+ *
+ *	putpwent() writes out a (struct passwd) in the format it appears
+ *	in in flat ASCII files.
+ *
+ *	(Author: Dr. Micheal Newberry)
+ */
+
+int
+putpwent(const struct passwd *p, FILE *f)
+{
+	int status;
+
+#if defined(SUN) || defined(BSD) || defined(SUN4)
+	status = fprintf (f, "%s:%s:%d:%d:%s,%s:%s:%s\n",
+		p->pw_name, p->pw_passwd, p->pw_uid, p->pw_gid,
+		p->pw_gecos, p->pw_comment, p->pw_dir, p->pw_shell) == EOF;
+#else
+	status = fprintf (f, "%s:%s", p->pw_name, p->pw_passwd) == EOF;
+#ifdef	ATT_AGE
+	if (p->pw_age && p->pw_age[0])
+		status |= fprintf (f, ",%s", p->pw_age) == EOF;
+#endif
+	status |= fprintf (f, ":%d:%d:%s", p->pw_uid, p->pw_gid,
+		p->pw_gecos) == EOF;
+#ifdef	ATT_COMMENT
+	if (p->pw_comment && p->pw_comment[0])
+		status |= fprintf (f, ",%s", p->pw_comment) == EOF;
+#endif
+	status |= fprintf (f, ":%s:%s\n", p->pw_dir, p->pw_shell) == EOF;
+#endif
+	return status;
+}
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/lib/pwio.c ./pwio.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/lib/pwio.c	Sat Sep  2 18:40:43 2000
+++ ./pwio.c	Sat Jan 19 18:18:39 2002
@@ -120,7 +120,7 @@
 }
 
 int
-pw_lock(void)
+pw_filelock(void)
 {
 	return commonio_lock(&passwd_db);
 }
@@ -134,7 +134,8 @@
 const struct passwd *
 pw_locate(const char *name)
 {
-	return commonio_locate(&passwd_db, name);
+//	return commonio_locate(&passwd_db, name);
+	return getpwnam(name);
 }
 
 int
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/lib/pwio.h ./pwio.h
--- /tmp/shadow-20000902/build-tree/shadow-20000902/lib/pwio.h	Fri Aug 25 19:18:08 2000
+++ ./pwio.h	Sat Jan 19 17:05:43 2002
@@ -2,7 +2,7 @@
 extern void __pw_set_changed(void);
 extern int pw_close(void);
 extern const struct passwd *pw_locate(const char *);
-extern int pw_lock(void);
+extern int pw_filelock(void);
 extern int pw_name(const char *);
 extern const struct passwd *pw_next(void);
 extern int pw_open(int);
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/Makefile.in ./Makefile.in
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/Makefile.in	Sat Sep  2 19:26:04 2000
+++ ./Makefile.in	Sat Jan 19 16:45:16 2002
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
 
 # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
@@ -129,7 +129,7 @@
 
 ubin_PROGRAMS = faillog lastlog  chage chfn chsh expiry gpasswd newgrp passwd
 
-usbin_PROGRAMS = chpasswd dpasswd groupadd groupdel groupmod  logoutd mkpasswd newusers  useradd userdel usermod grpck pwck vipw  grpconv grpunconv pwconv pwunconv
+usbin_PROGRAMS = chpasswd dpasswd groupadd groupdel groupmod  logoutd mkpasswd newusers  useradd userdel usermod grpck pwck vipw  grpconv grpunconv pwconv pwunconv cppw
 
 
 EXTRA_DIST = shadowconfig.sh
@@ -162,7 +162,7 @@
 # chage chfn chsh expiry gpasswd newgrp passwd \
 # sulogin
 
-shlibs = ../lib/libshadow.la
+shlibs = #../lib/libshadow.la
 # With glibc2, almost all programs need libcrypt for some reason,
 # even those that don't actually use crypt().
 LDADD = ${shlibs} ../libmisc/libmisc.a ../lib/libshadow.a @INTLLIBS@ @LIBCRYPT@ @LIBTCFS@ @LIBSKEY@ @LIBMD@
@@ -184,191 +184,164 @@
 LIBS = @LIBS@
 login_SOURCES = login.c
 login_OBJECTS =  login.o
-login_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+login_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 login_LDFLAGS = 
 su_SOURCES = su.c
 su_OBJECTS =  su.o
-su_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+su_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 su_LDFLAGS = 
 groups_SOURCES = groups.c
 groups_OBJECTS =  groups.o
 groups_LDADD = $(LDADD)
-groups_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+groups_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 groups_LDFLAGS = 
 id_SOURCES = id.c
 id_OBJECTS =  id.o
 id_LDADD = $(LDADD)
-id_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+id_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 id_LDFLAGS = 
 sulogin_SOURCES = sulogin.c
 sulogin_OBJECTS =  sulogin.o
 sulogin_LDADD = $(LDADD)
-sulogin_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+sulogin_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 sulogin_LDFLAGS = 
 faillog_SOURCES = faillog.c
 faillog_OBJECTS =  faillog.o
 faillog_LDADD = $(LDADD)
-faillog_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+faillog_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 faillog_LDFLAGS = 
 lastlog_SOURCES = lastlog.c
 lastlog_OBJECTS =  lastlog.o
 lastlog_LDADD = $(LDADD)
-lastlog_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+lastlog_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 lastlog_LDFLAGS = 
 chage_SOURCES = chage.c
 chage_OBJECTS =  chage.o
 chage_LDADD = $(LDADD)
-chage_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+chage_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 chage_LDFLAGS = 
 chfn_SOURCES = chfn.c
 chfn_OBJECTS =  chfn.o
-chfn_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+chfn_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 chfn_LDFLAGS = 
 chsh_SOURCES = chsh.c
 chsh_OBJECTS =  chsh.o
-chsh_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+chsh_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 chsh_LDFLAGS = 
 expiry_SOURCES = expiry.c
 expiry_OBJECTS =  expiry.o
 expiry_LDADD = $(LDADD)
-expiry_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+expiry_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 expiry_LDFLAGS = 
 gpasswd_SOURCES = gpasswd.c
 gpasswd_OBJECTS =  gpasswd.o
 gpasswd_LDADD = $(LDADD)
-gpasswd_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+gpasswd_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 gpasswd_LDFLAGS = 
 newgrp_SOURCES = newgrp.c
 newgrp_OBJECTS =  newgrp.o
 newgrp_LDADD = $(LDADD)
-newgrp_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+newgrp_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 newgrp_LDFLAGS = 
 passwd_SOURCES = passwd.c
 passwd_OBJECTS =  passwd.o
-passwd_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+passwd_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 passwd_LDFLAGS = 
 chpasswd_SOURCES = chpasswd.c
 chpasswd_OBJECTS =  chpasswd.o
 chpasswd_LDADD = $(LDADD)
-chpasswd_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+chpasswd_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 chpasswd_LDFLAGS = 
 dpasswd_SOURCES = dpasswd.c
 dpasswd_OBJECTS =  dpasswd.o
 dpasswd_LDADD = $(LDADD)
-dpasswd_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+dpasswd_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 dpasswd_LDFLAGS = 
 groupadd_SOURCES = groupadd.c
 groupadd_OBJECTS =  groupadd.o
 groupadd_LDADD = $(LDADD)
-groupadd_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+groupadd_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 groupadd_LDFLAGS = 
 groupdel_SOURCES = groupdel.c
 groupdel_OBJECTS =  groupdel.o
 groupdel_LDADD = $(LDADD)
-groupdel_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+groupdel_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 groupdel_LDFLAGS = 
 groupmod_SOURCES = groupmod.c
 groupmod_OBJECTS =  groupmod.o
 groupmod_LDADD = $(LDADD)
-groupmod_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+groupmod_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 groupmod_LDFLAGS = 
 logoutd_SOURCES = logoutd.c
 logoutd_OBJECTS =  logoutd.o
 logoutd_LDADD = $(LDADD)
-logoutd_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+logoutd_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 logoutd_LDFLAGS = 
 mkpasswd_SOURCES = mkpasswd.c
 mkpasswd_OBJECTS =  mkpasswd.o
 mkpasswd_LDADD = $(LDADD)
-mkpasswd_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+mkpasswd_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 mkpasswd_LDFLAGS = 
 newusers_SOURCES = newusers.c
 newusers_OBJECTS =  newusers.o
 newusers_LDADD = $(LDADD)
-newusers_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+newusers_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 newusers_LDFLAGS = 
 useradd_SOURCES = useradd.c
 useradd_OBJECTS =  useradd.o
 useradd_LDADD = $(LDADD)
-useradd_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+useradd_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 useradd_LDFLAGS = 
 userdel_SOURCES = userdel.c
 userdel_OBJECTS =  userdel.o
 userdel_LDADD = $(LDADD)
-userdel_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+userdel_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 userdel_LDFLAGS = 
 usermod_SOURCES = usermod.c
 usermod_OBJECTS =  usermod.o
 usermod_LDADD = $(LDADD)
-usermod_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+usermod_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 usermod_LDFLAGS = 
 grpck_SOURCES = grpck.c
 grpck_OBJECTS =  grpck.o
 grpck_LDADD = $(LDADD)
-grpck_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+grpck_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 grpck_LDFLAGS = 
 pwck_SOURCES = pwck.c
 pwck_OBJECTS =  pwck.o
 pwck_LDADD = $(LDADD)
-pwck_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+pwck_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 pwck_LDFLAGS = 
 vipw_SOURCES = vipw.c
 vipw_OBJECTS =  vipw.o
 vipw_LDADD = $(LDADD)
-vipw_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+vipw_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 vipw_LDFLAGS = 
 grpconv_SOURCES = grpconv.c
 grpconv_OBJECTS =  grpconv.o
 grpconv_LDADD = $(LDADD)
-grpconv_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+grpconv_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 grpconv_LDFLAGS = 
 grpunconv_SOURCES = grpunconv.c
 grpunconv_OBJECTS =  grpunconv.o
 grpunconv_LDADD = $(LDADD)
-grpunconv_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+grpunconv_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 grpunconv_LDFLAGS = 
 pwconv_SOURCES = pwconv.c
 pwconv_OBJECTS =  pwconv.o
 pwconv_LDADD = $(LDADD)
-pwconv_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+pwconv_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 pwconv_LDFLAGS = 
 pwunconv_SOURCES = pwunconv.c
 pwunconv_OBJECTS =  pwunconv.o
 pwunconv_LDADD = $(LDADD)
-pwunconv_DEPENDENCIES =  ../lib/libshadow.la ../libmisc/libmisc.a \
-../lib/libshadow.a
+pwunconv_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
 pwunconv_LDFLAGS = 
+cppw_SOURCES = cppw.c
+cppw_OBJECTS =  cppw.o
+cppw_LDADD = $(LDADD)
+cppw_DEPENDENCIES =  ../libmisc/libmisc.a ../lib/libshadow.a
+cppw_LDFLAGS = 
 CFLAGS = @CFLAGS@
 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -383,8 +356,8 @@
 
 TAR = tar
 GZIP_ENV = --best
-SOURCES = login.c su.c groups.c id.c sulogin.c faillog.c lastlog.c chage.c chfn.c chsh.c expiry.c gpasswd.c newgrp.c passwd.c chpasswd.c dpasswd.c groupadd.c groupdel.c groupmod.c logoutd.c mkpasswd.c newusers.c useradd.c userdel.c usermod.c grpck.c pwck.c vipw.c grpconv.c grpunconv.c pwconv.c pwunconv.c
-OBJECTS = login.o su.o groups.o id.o sulogin.o faillog.o lastlog.o chage.o chfn.o chsh.o expiry.o gpasswd.o newgrp.o passwd.o chpasswd.o dpasswd.o groupadd.o groupdel.o groupmod.o logoutd.o mkpasswd.o newusers.o useradd.o userdel.o usermod.o grpck.o pwck.o vipw.o grpconv.o grpunconv.o pwconv.o pwunconv.o
+SOURCES = login.c su.c groups.c id.c sulogin.c faillog.c lastlog.c chage.c chfn.c chsh.c expiry.c gpasswd.c newgrp.c passwd.c chpasswd.c dpasswd.c groupadd.c groupdel.c groupmod.c logoutd.c mkpasswd.c newusers.c useradd.c userdel.c usermod.c grpck.c pwck.c vipw.c grpconv.c grpunconv.c pwconv.c pwunconv.c cppw.c
+OBJECTS = login.o su.o groups.o id.o sulogin.o faillog.o lastlog.o chage.o chfn.o chsh.o expiry.o gpasswd.o newgrp.o passwd.o chpasswd.o dpasswd.o groupadd.o groupdel.o groupmod.o logoutd.o mkpasswd.o newusers.o useradd.o userdel.o usermod.o grpck.o pwck.o vipw.o grpconv.o grpunconv.o pwconv.o pwunconv.o cppw.o
 
 all: all-redirect
 .SUFFIXES:
@@ -647,6 +620,10 @@
 	@rm -f pwunconv
 	$(LINK) $(pwunconv_LDFLAGS) $(pwunconv_OBJECTS) $(pwunconv_LDADD) $(LIBS)
 
+cppw: $(cppw_OBJECTS) $(cppw_DEPENDENCIES)
+	@rm -f cppw
+	$(LINK) $(cppw_LDFLAGS) $(cppw_OBJECTS) $(cppw_LDADD) $(LIBS)
+
 tags: TAGS
 
 ID: $(HEADERS) $(SOURCES) $(LISP)
@@ -684,106 +661,13 @@
 	@for file in $(DISTFILES); do \
 	  d=$(srcdir); \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$/$$file $(distdir)/$$file; \
+	    cp -pr $$d/$$file $(distdir)/$$file; \
 	  else \
 	    test -f $(distdir)/$$file \
 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
 	  fi; \
 	done
-chage.o: chage.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/pwio.h \
-	../lib/shadowio.h
-chfn.o: chfn.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/pwio.h \
-	../lib/getdef.h ../lib/pwauth.h
-chpasswd.o: chpasswd.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/pwio.h \
-	../lib/shadowio.h
-chsh.o: chsh.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/pwio.h \
-	../lib/getdef.h ../lib/pwauth.h
-dpasswd.o: dpasswd.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/dialup.h
-expiry.o: expiry.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h
-faillog.o: faillog.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/faillog.h
-gpasswd.o: gpasswd.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/groupio.h \
-	../lib/sgroupio.h
-groupadd.o: groupadd.c ../config.h ../lib/rcsid.h ../lib/defines.h \
-	../lib/gshadow_.h ../lib/prototypes.h ../libmisc/chkname.h \
-	../lib/getdef.h ../lib/groupio.h ../lib/sgroupio.h
-groupdel.o: groupdel.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/groupio.h \
-	../lib/sgroupio.h
-groupmod.o: groupmod.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../libmisc/chkname.h \
-	../lib/groupio.h ../lib/sgroupio.h
-groups.o: groups.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h
-grpck.o: grpck.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../libmisc/chkname.h \
-	../lib/commonio.h ../lib/groupio.h ../lib/sgroupio.h
-grpconv.o: grpconv.c ../config.h ../lib/prototypes.h ../lib/defines.h \
-	../lib/gshadow_.h ../lib/groupio.h ../lib/sgroupio.h \
-	../lib/rcsid.h
-grpunconv.o: grpunconv.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/groupio.h \
-	../lib/sgroupio.h
-id.o: id.c ../config.h ../lib/rcsid.h ../lib/defines.h ../lib/gshadow_.h
-lastlog.o: lastlog.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h
-login.o: login.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/faillog.h \
-	../libmisc/failure.h ../lib/pwauth.h ../lib/getdef.h \
-	../lib/dialchk.h
-logoutd.o: logoutd.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h
-mkpasswd.o: mkpasswd.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h
-newgrp.o: newgrp.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/getdef.h
-newusers.o: newusers.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/getdef.h \
-	../lib/pwio.h ../lib/groupio.h ../lib/shadowio.h
-passwd.o: passwd.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/pwauth.h \
-	../lib/shadowio.h ../lib/pwio.h ../lib/getdef.h
-pwck.o: pwck.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../libmisc/chkname.h \
-	../lib/commonio.h ../lib/pwio.h ../lib/shadowio.h
-pwconv.o: pwconv.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/pwio.h \
-	../lib/shadowio.h ../lib/getdef.h
-pwunconv.o: pwunconv.c ../config.h ../lib/rcsid.h ../lib/defines.h \
-	../lib/gshadow_.h ../lib/prototypes.h ../lib/pwio.h \
-	../lib/shadowio.h
-sulogin.o: sulogin.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/getdef.h \
-	../lib/pwauth.h
-su.o: su.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/pwauth.h \
-	../lib/getdef.h
-useradd.o: useradd.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../libmisc/chkname.h \
-	../lib/pwauth.h ../lib/faillog.h ../lib/groupio.h \
-	../lib/sgroupio.h ../lib/pwio.h ../lib/shadowio.h \
-	../lib/getdef.h
-userdel.o: userdel.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../lib/getdef.h \
-	../lib/pwauth.h ../lib/groupio.h ../lib/pwio.h \
-	../lib/shadowio.h ../lib/sgroupio.h
-usermod.o: usermod.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
-	../lib/defines.h ../lib/gshadow_.h ../libmisc/chkname.h \
-	../lib/faillog.h ../lib/pwauth.h ../lib/getdef.h \
-	../lib/groupio.h ../lib/sgroupio.h ../lib/pwio.h \
-	../lib/shadowio.h
-vipw.o: vipw.c ../config.h ../lib/rcsid.h ../lib/defines.h \
-	../lib/gshadow_.h ../lib/prototypes.h ../lib/pwio.h \
-	../lib/shadowio.h ../lib/groupio.h ../lib/sgroupio.h
-
 info-am:
 info: info-am
 dvi-am:
@@ -889,6 +773,7 @@
 	done
 	rm -f $(DESTDIR)$(ubindir)/sg
 	ln -s newgrp $(DESTDIR)$(ubindir)/sg
+	ln -s cpgr $(DESTDIR)$(ubindir)/cppw
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/chage.c ./chage.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/chage.c	Sat Sep  2 18:40:43 2000
+++ ./chage.c	Sat Jan 19 18:48:48 2002
@@ -506,7 +506,7 @@
 	 * to the password file entry for the requested user.
 	 */
 	/* We don't lock the password file if we are not root */
-	if (amroot && !pw_lock()) {
+	if (amroot && !pw_filelock()) {
 		fprintf(stderr, _("%s: can't lock password file\n"), Prog);
 		SYSLOG((LOG_ERR, LOCK_FAIL, PASSWD_FILE));
 		closelog();
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/chfn.c ./chfn.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/chfn.c	Sat Sep  2 18:40:43 2000
+++ ./chfn.c	Sat Jan 19 18:49:12 2002
@@ -518,7 +518,7 @@
 	 * the password file.  Get a lock on the file and open it.
 	 */
 
-	if (!pw_lock()) {
+	if (!pw_filelock()) {
 		fprintf(stderr, _("Cannot lock the password file; try again later.\n"));
 		SYSLOG((LOG_WARN, PWDBUSY2));
 		closelog();
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/chpasswd.c ./chpasswd.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/chpasswd.c	Sat Aug 26 18:27:18 2000
+++ ./chpasswd.c	Sat Jan 19 18:49:00 2002
@@ -116,7 +116,7 @@
 	 * updated.
 	 */
 
-	if (!pw_lock()) {
+	if (!pw_filelock()) {
 		fprintf(stderr, _("%s: can't lock password file\n"), Prog);
 		exit(1);
 	}
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/chsh.c ./chsh.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/chsh.c	Sat Sep  2 18:40:43 2000
+++ ./chsh.c	Sat Jan 19 18:49:22 2002
@@ -354,7 +354,7 @@
 	 * the password file.  Get a lock on the file and open it.
 	 */
 
-	if (!pw_lock()) {
+	if (!pw_filelock()) {
 		SYSLOG((LOG_WARN, PWDBUSY2));
 		closelog();
 		fprintf(stderr,
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/cppw.c ./cppw.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/cppw.c	Sat Feb  2 01:53:37 2002
+++ ./cppw.c	Sat Jan 19 18:49:52 2002
@@ -185,7 +185,7 @@
       cppwcopy(SHADOW_FILE, in_file, spw_lock, spw_unlock);
     else
 #endif
-      cppwcopy(PASSWD_FILE, in_file, pw_lock, pw_unlock);
+      cppwcopy(PASSWD_FILE, in_file, pw_filelock, pw_unlock);
   }
   else {
 #ifdef SHADOWGRP
Binary files /tmp/shadow-20000902/build-tree/shadow-20000902/src/ktrace.out and ./ktrace.out differ
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/lastlog.c ./lastlog.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/lastlog.c	Sat Feb  2 01:53:35 2002
+++ ./lastlog.c	Sat Jan 19 18:52:54 2002
@@ -42,8 +42,8 @@
 #include "defines.h"
 #if HAVE_LASTLOG_H
 #include <lastlog.h>
-#else
-#include "lastlog_.h"
+//#else
+//#include "lastlog_.h"
 #endif
 
 /*
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/login.c ./login.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/login.c	Sat Feb  2 01:54:05 2002
+++ ./login.c	Sat Jan 19 18:48:01 2002
@@ -48,8 +48,8 @@
 
 #if HAVE_LASTLOG_H
 #include <lastlog.h>
-#else
-#include "lastlog_.h"
+//#else
+//#include "lastlog_.h"
 #endif
 
 #include "faillog.h"
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/logoutd.c ./logoutd.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/logoutd.c	Sat Feb  2 01:53:40 2002
+++ ./logoutd.c	Sat Jan 19 18:55:23 2002
@@ -275,7 +275,7 @@
 			if ((tty_fd = open (tty_name, O_RDONLY|O_NDELAY)) == -1)
 				continue;
 
-			vhangup (tty_fd);
+	//		vhangup (tty_fd);
 			close (tty_fd);
 #endif  /* BSD || SUN || SUN4 */
 
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/newusers.c ./newusers.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/newusers.c	Sat Sep  2 18:02:07 2000
+++ ./newusers.c	Sat Jan 19 18:57:19 2002
@@ -55,9 +55,9 @@
 
 #ifdef	SHADOWPWD
 #include "shadowio.h"
-
 static int is_shadow;
 #endif
+#undef SHADOWPWD
 
 /* local function prototypes */
 static void usage(void);
@@ -271,11 +271,10 @@
 	 * Shadow files are harder since there are zillions of
 	 * things to do ...
 	 */
-
-	if (!is_shadow) {
-		update_passwd(pwd, passwd);
-		return 0;
-	}
+#ifndef SHADOWPWD	 
+	update_passwd(pwd, passwd);
+	return 0;
+#endif
 
 #ifdef SHADOWPWD
 	/*
@@ -360,7 +359,7 @@
 	 * be locked right away.
 	 */
 
-	if (!pw_lock()) {
+	if (!pw_filelock()) {
 		fprintf (stderr, _("%s: can't lock /etc/passwd.\n"), Prog);
 		exit (1);
 	}
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/passwd.c ./passwd.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/passwd.c	Sat Feb  2 01:53:41 2002
+++ ./passwd.c	Sat Jan 19 19:19:20 2002
@@ -58,7 +58,7 @@
 #ifndef CHSH_PROGRAM
 #define CHSH_PROGRAM "chsh"
 #endif
-
+#undef SHADOWPWD
 #include <pwd.h>
 #ifndef	HAVE_USERSEC_H
 #ifdef	SHADOWPWD
@@ -730,7 +730,7 @@
 	char *cp;
 #endif
 
-	if (!pw_lock()) {
+	if (!pw_filelock()) {
 		fprintf(stderr,
 			_("Cannot lock the password file; try again later.\n"));
 		SYSLOG((LOG_WARN, PWDBUSY2));
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/pwck.c ./pwck.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/pwck.c	Sat Sep  2 18:40:44 2000
+++ ./pwck.c	Sat Jan 19 18:50:14 2002
@@ -212,7 +212,7 @@
 	 */
 
 	if (!read_only) {
-		if (!pw_lock()) {
+		if (!pw_filelock()) {
 			fprintf(stderr, _("%s: cannot lock file %s\n"),
 				Prog, pwd_file);
 			if (optind == argc)
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/pwconv.c ./pwconv.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/pwconv.c	Sat Aug 26 18:27:18 2000
+++ ./pwconv.c	Sat Jan 19 18:50:23 2002
@@ -90,7 +90,7 @@
 	bindtextdomain(PACKAGE, LOCALEDIR);
 	textdomain(PACKAGE);
 
-	if (!pw_lock()) {
+	if (!pw_filelock()) {
 		fprintf(stderr, _("%s: can't lock passwd file\n"), Prog);
 		fail_exit(E_PWDBUSY);
 	}
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/pwunconv.c ./pwunconv.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/pwunconv.c	Sat Aug 26 18:27:18 2000
+++ ./pwunconv.c	Sat Jan 19 18:50:33 2002
@@ -104,7 +104,7 @@
 		/* shadow not installed, do nothing */
 		exit(0);
 
-	if (!pw_lock()) {
+	if (!pw_filelock()) {
 		fprintf(stderr, _("%s: can't lock passwd file\n"), Prog);
 		fail_exit(5);
 	}
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/useradd.c ./useradd.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/useradd.c	Sat Feb  2 01:53:36 2002
+++ ./useradd.c	Sat Jan 19 18:58:39 2002
@@ -48,8 +48,8 @@
 #include "pwauth.h"
 #if HAVE_LASTLOG_H
 #include <lastlog.h>
-#else
-#include "lastlog_.h"
+//#else
+//#include "lastlog_.h"
 #endif
 #include "faillog.h"
 
@@ -513,9 +513,9 @@
 		} else if (!out_expire && MATCH(buf, EXPIRE)) {
 			fprintf(ofp, EXPIRE "%s\n", def_expire);
 			out_expire++;
-		}
 #endif
-		else if (!out_shell && MATCH(buf, SHELL)) {
+		}
+			else if (!out_shell && MATCH(buf, SHELL)) {
 			fprintf(ofp, SHELL "%s\n", def_shell);
 			out_shell++;
 		}
@@ -1416,7 +1416,7 @@
 static void
 open_files(void)
 {
-	if (!pw_lock()) {
+	if (!pw_filelock()) {
 		fprintf(stderr, _("%s: unable to lock password file\n"), Prog);
 		exit(E_PW_UPDATE);
 	}
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/userdel.c ./userdel.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/userdel.c	Sat Feb  2 01:53:56 2002
+++ ./userdel.c	Sat Jan 19 18:50:51 2002
@@ -364,7 +364,7 @@
 static void
 open_files(void)
 {
-	if (!pw_lock()) {
+	if (!pw_filelock()) {
 		fprintf(stderr, _("%s: unable to lock password file\n"), Prog);
 		exit(E_PW_UPDATE);
 	}
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/usermod.c ./usermod.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/usermod.c	Sat Sep  2 18:40:44 2000
+++ ./usermod.c	Sat Jan 19 18:59:11 2002
@@ -48,8 +48,8 @@
 #include "faillog.h"
 #if HAVE_LASTLOG_H
 #include <lastlog.h>
-#else
-#include "lastlog_.h"
+//#else
+//#include "lastlog_.h"
 #endif
 #include "pwauth.h"
 #include "getdef.h"
@@ -1261,7 +1261,7 @@
 static void
 open_files(void)
 {
-	if (!pw_lock()) {
+	if (!pw_filelock()) {
 		fprintf(stderr, _("%s: unable to lock password file\n"), Prog);
 		exit(E_PW_UPDATE);
 	}
diff -u -N /tmp/shadow-20000902/build-tree/shadow-20000902/src/vipw.c ./vipw.c
--- /tmp/shadow-20000902/build-tree/shadow-20000902/src/vipw.c	Sat Aug 26 18:27:19 2000
+++ ./vipw.c	Sat Jan 19 18:51:11 2002
@@ -237,7 +237,7 @@
       vipwedit(SHADOW_FILE, spw_lock, spw_unlock);
     else
 #endif
-      vipwedit(PASSWD_FILE, pw_lock, pw_unlock);
+      vipwedit(PASSWD_FILE, pw_filelock, pw_unlock);
   }
   else {
 #ifdef SHADOWGRP

Reply to: