diff -rNu ./pppd/auth.c ../../work/ppp-2.3.11/pppd/auth.c
--- ./pppd/auth.c	Thu Dec 23 03:25:13 1999
+++ ../../work/ppp-2.3.11/pppd/auth.c	Thu Apr 22 14:49:05 2004
@@ -1137,7 +1137,7 @@
 	    if ((fd = open(_PATH_LASTLOG, O_RDWR, 0)) >= 0) {
 		(void)lseek(fd, (off_t)(pw->pw_uid * sizeof(ll)), SEEK_SET);
 		memset((void *)&ll, 0, sizeof(ll));
-		(void)time(&ll.ll_time);
+		ll.ll_time = time(NULL);
 		(void)strncpy(ll.ll_line, tty, sizeof(ll.ll_line));
 		(void)write(fd, (char *)&ll, sizeof(ll));
 		(void)close(fd);
diff -rNu ./pppd/sys-bsd.c ../../work/ppp-2.3.11/pppd/sys-bsd.c
--- ./pppd/sys-bsd.c	Thu Apr 22 14:48:03 2004
+++ ../../work/ppp-2.3.11/pppd/sys-bsd.c	Thu Apr 22 14:53:59 2004
@@ -182,6 +182,7 @@
     int s, ok;
     struct ifreq ifr;
     extern char *no_ppp_msg;
+    const char* modname = "if_ppp";
 
     if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
 	return 1;		/* can't tell */
@@ -189,12 +190,18 @@
     strlcpy(ifr.ifr_name, "ppp0", sizeof (ifr.ifr_name));
     ok = ioctl(s, SIOCGIFFLAGS, (caddr_t) &ifr) >= 0;
     close(s);
+    if (ok)
+	return 1;
+    if (modfind(modname) != -1)
+	return 1;
+    if (getuid() == 0 && kldload(modname) != -1)
+	return 1;
 
     no_ppp_msg = "\
 This system lacks kernel support for PPP.  To include PPP support\n\
-in the kernel, please follow the steps detailed in the README.bsd\n\
-file in the ppp-2.2 distribution.\n";
-    return ok;
+in the kernel, please add \"device ppp\" to your kernel config or \n\
+load the if_ppp module.\n";                                                    
+    return 0;       
 }
 
 /*
diff -rNu ./pppd/utils.c ../../work/ppp-2.3.11/pppd/utils.c
--- ./pppd/utils.c	Sat Sep 11 14:35:47 1999
+++ ../../work/ppp-2.3.11/pppd/utils.c	Thu Apr 22 14:49:50 2004
@@ -249,7 +249,7 @@
 	    break;
 	case 'r':
 	    f = va_arg(args, char *);
-#ifndef __powerpc__
+#if !defined(__powerpc__) && !defined(__amd64__)
 	    n = vslprintf(buf, buflen + 1, f, va_arg(args, va_list));
 #else
 	    /* On the powerpc, a va_list is an array of 1 structure */
