diff --git a/ChangeLog b/ChangeLog
index 6b02ba1..b92f9bf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,9 @@
  - Added autoconf option to enable AFS support (untested)
  - Added autoconf option to enable S/Key support (untested)
  - Added autoconf option to enable TCP wrappers support (compiles OK)
+ - Renamed BSD helper function files to bsd-*
+ - Added tests for login and daemon and OpenBSD replacements for when they
+   are absent.
 
 19991118
  - Merged OpenBSD CVS changes
diff --git a/Makefile.in b/Makefile.in
index 4daa810..fec1d13 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -27,18 +27,18 @@
 		hostfile.o log-client.o login.o log-server.o match.o mpaux.o \
 		packet.o pty.o readconf.o readpass.o rsa.o servconf.o serverloop.o \
 		sshconnect.o tildexpand.o ttymodes.o uidswap.o xmalloc.o \
-		helper.o mktemp.o strlcpy.o rc4.o
+		helper.o bsd-mktemp.o bsd-strlcpy.o bsd-daemon.o bsd-login.o rc4.o
 
 all: $(OBJS) $(TARGETS)
 
-libssh.a: authfd.o authfile.o bufaux.o buffer.o canohost.o channels.o cipher.o compat.o compress.o crc32.o deattack.o hostfile.o match.o mpaux.o nchan.o packet.o readpass.o rsa.o tildexpand.o ttymodes.o uidswap.o xmalloc.o helper.o rc4.o mktemp.o strlcpy.o log.o fingerprint.o
+libssh.a: authfd.o authfile.o bufaux.o buffer.o canohost.o channels.o cipher.o compat.o compress.o crc32.o deattack.o hostfile.o match.o mpaux.o nchan.o packet.o readpass.o rsa.o tildexpand.o ttymodes.o uidswap.o xmalloc.o helper.o rc4.o bsd-mktemp.o bsd-strlcpy.o log.o fingerprint.o
 	$(AR) rv $@ $^
 	$(RANLIB) $@
 
 ssh: ssh.o sshconnect.o log-client.o readconf.o clientloop.o libssh.a
 	$(CC) -o $@ $^ $(LFLAGS) $(LIBS) 
 
-sshd:	sshd.o auth-rhosts.o auth-passwd.o auth-rsa.o auth-rh-rsa.o pty.o log-server.o login.o servconf.o serverloop.o libssh.a
+sshd:	sshd.o auth-rhosts.o auth-passwd.o auth-rsa.o auth-rh-rsa.o pty.o log-server.o login.o servconf.o serverloop.o bsd-login.o bsd-daemon.o libssh.a
 	$(CC) -o $@ $^ $(LFLAGS) $(LIBS) 
 
 scp:	scp.o libssh.a
diff --git a/README b/README
index c9427da..f6dbcdd 100644
--- a/README
+++ b/README
@@ -10,9 +10,9 @@
 http://www.openssh.com/
 
 This port consists of the re-introduction of autoconf support, PAM
-support (for Linux and Solaris), EGD[1] support, and replacements for
-OpenBSD library functions that are (regrettably) absent from most
-other unices. This patch has been best tested on Linux, though some 
+support (for Linux and Solaris), EGD[1] support, and replacements
+for OpenBSD library functions that are (regrettably) absent from
+other unices. This port has been best tested on Linux, though some
 Solaris support is beginning to filter in. This version actively
 tracks changes in the OpenBSD CVS repository.
 
@@ -22,8 +22,8 @@
 
 All new code is released under a XFree style license, which is very
 liberal. Please refer to the source files for details. The code in
-strlcpy.c and mktemp.c is from the OpenBSD project and has its own
-license (again, see source file for details).
+bsd-*.[ch] is from the OpenBSD project and has its own license (again,
+see the source files for details).
 
 OpenSSH depends on Zlib[2], OpenSSL[3] and optionally PAM[4]. To build
 the GNOME[5] pass-phrase requester (--with-gnome-askpass), you will
@@ -52,13 +52,14 @@
 Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, 
 Theo de Raadt, and Dug Song - Creators of OpenSSH
 'jonchen' - the original author of PAM support of SSH
+Chip Salzenberg <chip@valinux.com> - Assorted patches
 Dan Brosemer <odin@linuxfreak.com> - Autoconf and build fixes & Debian scripts
-Nalin Dahyabhai <nalin.dahyabhai@pobox.com> - PAM environment patch
-Phil Hands <phil@hands.com> - Debian scripts, assorted patches
-Niels Kristian Bech Jensen <nkbj@image.dk> - Assorted patches
-Marc G. Fournier <marc.fournier@acadiau.ca> - Solaris patches
-Thomas Neumann <tom@smart.ruhr.de> - Shadow passwords
 Jim Knoble <jmknoble@pobox.com> - RPM spec file fixes
+Marc G. Fournier <marc.fournier@acadiau.ca> - Solaris patches
+Nalin Dahyabhai <nalin.dahyabhai@pobox.com> - PAM environment patch
+Niels Kristian Bech Jensen <nkbj@image.dk> - Assorted patches
+Phil Hands <phil@hands.com> - Debian scripts, assorted patches
+Thomas Neumann <tom@smart.ruhr.de> - Shadow passwords
 
 Miscellania - 
 
diff --git a/acconfig.h b/acconfig.h
index 44c5c1a..2732c26 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -42,6 +42,12 @@
 /* Define if you want TCP Wrappers support */
 #undef LIBWRAP
 
+/* Define if your libraries define login() */
+#undef HAVE_LOGIN
+
+/* Define if your libraries define daemon() */
+#undef HAVE_DAEMON
+
 @BOTTOM@
 
 /* ******************* Shouldn't need to edit below this line ************** */
diff --git a/bsd-daemon.c b/bsd-daemon.c
new file mode 100644
index 0000000..7b292c1
--- /dev/null
+++ b/bsd-daemon.c
@@ -0,0 +1,78 @@
+/*-
+ * Copyright (c) 1990, 1993
+ *	The Regents of the University of California.  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. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University 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 THE REGENTS 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 THE REGENTS 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"
+
+#ifndef HAVE_DAEMON
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char rcsid[] = "$OpenBSD: daemon.c,v 1.2 1996/08/19 08:22:13 tholo Exp $";
+#endif /* LIBC_SCCS and not lint */
+
+#include <fcntl.h>
+#include <paths.h>
+#include <unistd.h>
+
+int
+daemon(nochdir, noclose)
+	int nochdir, noclose;
+{
+	int fd;
+
+	switch (fork()) {
+	case -1:
+		return (-1);
+	case 0:
+		break;
+	default:
+		_exit(0);
+	}
+
+	if (setsid() == -1)
+		return (-1);
+
+	if (!nochdir)
+		(void)chdir("/");
+
+	if (!noclose && (fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) {
+		(void)dup2(fd, STDIN_FILENO);
+		(void)dup2(fd, STDOUT_FILENO);
+		(void)dup2(fd, STDERR_FILENO);
+		if (fd > 2)
+			(void)close (fd);
+	}
+	return (0);
+}
+
+#endif /* !HAVE_DAEMON */
+
diff --git a/bsd-daemon.h b/bsd-daemon.h
new file mode 100644
index 0000000..cd91ea0
--- /dev/null
+++ b/bsd-daemon.h
@@ -0,0 +1,9 @@
+#ifndef _BSD_DAEMON_H
+#define _BSD_DAEMON_H
+
+#include "config.h"
+#ifndef HAVE_DAEMON
+int daemon(int nochdir, int noclose);
+#endif /* !HAVE_DAEMON */
+
+#endif /* _BSD_DAEMON_H */
diff --git a/bsd-login.c b/bsd-login.c
new file mode 100644
index 0000000..8c84272
--- /dev/null
+++ b/bsd-login.c
@@ -0,0 +1,83 @@
+/*	$OpenBSD: login.c,v 1.5 1998/07/13 02:11:12 millert Exp $	*/
+/*
+ * Copyright (c) 1988, 1993
+ *	The Regents of the University of California.  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. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University 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 THE REGENTS 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 THE REGENTS 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"
+#ifndef HAVE_LOGIN
+
+#if defined(LIBC_SCCS) && !defined(lint)
+/* from: static char sccsid[] = "@(#)login.c	8.1 (Berkeley) 6/4/93"; */
+static char *rcsid = "$Id: bsd-login.c,v 1.1 1999/11/19 04:32:34 damien Exp $";
+#endif /* LIBC_SCCS and not lint */
+
+#include <sys/types.h>
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <utmp.h>
+#include <stdio.h>
+
+void
+login(utp)
+	struct utmp *utp;
+{
+	struct utmp old_ut;
+	register int fd;
+	int tty;
+
+	tty = ttyslot();
+	if (tty > 0 && (fd = open(_PATH_UTMP, O_RDWR|O_CREAT, 0644)) >= 0) {
+		(void)lseek(fd, (off_t)(tty * sizeof(struct utmp)), SEEK_SET);
+		/*
+		 * Prevent luser from zero'ing out ut_host.
+		 * If the new ut_line is empty but the old one is not
+		 * and ut_line and ut_name match, preserve the old ut_line.
+		 */
+		if (read(fd, &old_ut, sizeof(struct utmp)) ==
+		    sizeof(struct utmp) && utp->ut_host[0] == '\0' &&
+		    old_ut.ut_host[0] != '\0' &&
+		    strncmp(old_ut.ut_line, utp->ut_line, UT_LINESIZE) == 0 &&
+		    strncmp(old_ut.ut_name, utp->ut_name, UT_NAMESIZE) == 0)
+			(void)memcpy(utp->ut_host, old_ut.ut_host, UT_HOSTSIZE);
+		(void)lseek(fd, (off_t)(tty * sizeof(struct utmp)), SEEK_SET);
+		(void)write(fd, utp, sizeof(struct utmp));
+		(void)close(fd);
+	}
+	if ((fd = open(_PATH_WTMP, O_WRONLY|O_APPEND, 0)) >= 0) {
+		(void)write(fd, utp, sizeof(struct utmp));
+		(void)close(fd);
+	}
+}
+
+#endif /* HAVE_LOGIN */
diff --git a/bsd-login.h b/bsd-login.h
new file mode 100644
index 0000000..26a8505
--- /dev/null
+++ b/bsd-login.h
@@ -0,0 +1,13 @@
+#ifndef _BSD_LOGIN_H
+#define _BSD_LOGIN_H
+
+#include "config.h"
+#ifndef HAVE_LOGIN
+
+#include <utmp.h>
+
+void login(struct utmp *utp);
+
+#endif /* !HAVE_LOGIN */
+
+#endif /* _BSD_LOGIN_H */
diff --git a/mktemp.c b/bsd-mktemp.c
similarity index 99%
rename from mktemp.c
rename to bsd-mktemp.c
index be03ac9..cdef62d 100644
--- a/mktemp.c
+++ b/bsd-mktemp.c
@@ -34,6 +34,10 @@
  * SUCH DAMAGE.
  */
 
+#include "config.h"
+
+#ifndef HAVE_MKDTEMP
+
 #if defined(LIBC_SCCS) && !defined(lint)
 static char rcsid[] = "$OpenBSD: mktemp.c,v 1.13 1998/06/30 23:03:13 deraadt Exp $";
 #endif /* LIBC_SCCS and not lint */
@@ -47,11 +51,8 @@
 #include <ctype.h>
 #include <unistd.h>
 
-#include "config.h"
 #include "helper.h"
 
-#ifndef HAVE_MKDTEMP
-
 static int _gettemp(char *, int *, int, int);
 
 int
diff --git a/mktemp.h b/bsd-mktemp.h
similarity index 69%
rename from mktemp.h
rename to bsd-mktemp.h
index ac92cba..faddc91 100644
--- a/mktemp.h
+++ b/bsd-mktemp.h
@@ -1,5 +1,5 @@
-#ifndef _MKTEMP_H
-#define _MKTEMP_H
+#ifndef _BSD_MKTEMP_H
+#define _BSD_MKTEMP_H
 
 #include "config.h"
 #ifndef HAVE_MKDTEMP
@@ -8,4 +8,4 @@
 char *mkdtemp(char *path);
 #endif /* !HAVE_MKDTEMP */
 
-#endif /* _MKTEMP_H */
+#endif /* _BSD_MKTEMP_H */
diff --git a/strlcpy.c b/bsd-strlcpy.c
similarity index 99%
rename from strlcpy.c
rename to bsd-strlcpy.c
index 4df4080..276c25c 100644
--- a/strlcpy.c
+++ b/bsd-strlcpy.c
@@ -27,6 +27,9 @@
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "config.h"
+#ifndef HAVE_STRLCPY
+
 #if defined(LIBC_SCCS) && !defined(lint)
 static char *rcsid = "$OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $";
 #endif /* LIBC_SCCS and not lint */
@@ -34,9 +37,6 @@
 #include <sys/types.h>
 #include <string.h>
 
-#include "config.h"
-#ifndef HAVE_STRLCPY
-
 /*
  * Copy src to string dst of size siz.  At most siz-1 characters
  * will be copied.  Always NUL terminates (unless siz == 0).
diff --git a/bsd-strlcpy.h b/bsd-strlcpy.h
new file mode 100644
index 0000000..dafa44a
--- /dev/null
+++ b/bsd-strlcpy.h
@@ -0,0 +1,10 @@
+#ifndef _BSD_STRLCPY_H
+#define _BSD_STRLCPY_H
+
+#include "config.h"
+#ifndef HAVE_STRLCPY
+#include <sys/types.h>
+size_t strlcpy(char *dst, const char *src, size_t siz);
+#endif /* !HAVE_STRLCPY */
+
+#endif /* _BSD_STRLCPY_H */
diff --git a/configure.in b/configure.in
index 0b54fd5..dd74b3b 100644
--- a/configure.in
+++ b/configure.in
@@ -60,6 +60,16 @@
 dnl Checks for library functions.
 AC_CHECK_FUNCS(openpty strlcpy mkdtemp arc4random setproctitle setlogin)
 
+AC_CHECK_FUNC(login, 
+	[AC_DEFINE(HAVE_LOGIN)],
+	[AC_CHECK_LIB(bsd, login, [LIBS="$LIBS -lbsd"; AC_DEFINE(HAVE_LOGIN)])]
+)
+
+AC_CHECK_FUNC(daemon, 
+	[AC_DEFINE(HAVE_DAEMON)],
+	[AC_CHECK_LIB(bsd, daemon, [LIBS="$LIBS -lbsd"; AC_DEFINE(HAVE_DAEMON)])]
+)
+
 dnl Check whether use wants to disable the external ssh-askpass
 INSTALL_ASKPASS="yes"
 AC_MSG_CHECKING([whether to enable external ssh-askpass support])
@@ -156,7 +166,7 @@
 
 AC_MSG_CHECKING([whether libc defines __progname])
 AC_TRY_LINK([], 
-	[extern char *__progname;], 
+	[extern char *__progname; printf("%s", __progname);], 
 	[
 		AC_DEFINE(HAVE___PROGNAME)
 		AC_MSG_RESULT(yes)
diff --git a/includes.h b/includes.h
index 75349cf..06245fd 100644
--- a/includes.h
+++ b/includes.h
@@ -67,12 +67,12 @@
 #endif
 #ifdef HAVE_LIBPAM
 # include <security/pam_appl.h>
-#endif /* HAVE_PAM */
+#endif
 
 #include "version.h"
 #include "helper.h"
-#include "mktemp.h"
-#include "strlcpy.h"
+#include "bsd-strlcpy.h"
+#include "bsd-mktemp.h"
 
 /* Define this to be the path of the xauth program. */
 #ifndef XAUTH_PATH
diff --git a/strlcpy.h b/strlcpy.h
deleted file mode 100644
index 9afbd39..0000000
--- a/strlcpy.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _STRLCPY_H
-#define _STRLCPY_H
-
-#include "config.h"
-#ifndef HAVE_STRLCPY
-size_t strlcpy(char *dst, const char *src, size_t siz);
-#endif /* !HAVE_STRLCPY */
-
-#endif /* _STRLCPY_H */
