diff -ruN ppp-2.4.2/TODO ppp-cvs-20040427/TODO
--- ppp-2.4.2/TODO	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/TODO	1999-03-22 07:38:09.000000000 +0100
@@ -0,0 +1,16 @@
+* Things to do *
+
+- How should we handle the case where MTU > MRU?
+  Should we reduce the IP MTU to the link MRU (so TCP MSS is correct)?
+
+- Provide ways to:
+  + set the IP address, possibly based on the peer's identity
+  + have external checking of PAP user/password, CHAP response
+  + supply the PAP user/password, CHAP secret
+  + decide which tty to use (locking, DTR issues)
+
+- Integrate callback stuff?
+
+- Implement link quality monitoring
+
+- Implement other network control protocols
diff -ruN ppp-2.4.2/chat/chat.c ppp-cvs-20040427/chat/chat.c
--- ppp-2.4.2/chat/chat.c	2003-03-30 10:23:48.000000000 +0200
+++ ppp-cvs-20040427/chat/chat.c	2004-01-17 06:50:11.000000000 +0100
@@ -87,7 +87,7 @@
 #endif
 
 #ifndef lint
-static const char rcsid[] = "$Id: chat.c,v 1.29 2003/03/04 06:17:21 fcusack Exp $";
+static const char rcsid[] = "$Id: chat.c,v 1.30 2004/01/17 05:47:55 carlsonj Exp $";
 #endif
 
 #include <stdio.h>
@@ -213,7 +213,7 @@
 void *copy_of __P((char *s));
 char *grow __P((char *s, char **p, size_t len));
 void usage __P((void));
-void logf __P((const char *fmt, ...));
+void msgf __P((const char *fmt, ...));
 void fatal __P((int code, const char *fmt, ...));
 SIGTYPE sigalrm __P((int signo));
 SIGTYPE sigint __P((int signo));
@@ -495,7 +495,7 @@
 /*
  * Send a message to syslog and/or stderr.
  */
-void logf __V((const char *fmt, ...))
+void msgf __V((const char *fmt, ...))
 {
     va_list args;
 
@@ -558,7 +558,7 @@
 	fatal(2, "Can't set file mode flags on stdin: %m");
 
     if (verbose)
-	logf("alarm");
+	msgf("alarm");
 }
 
 void unalarm()
@@ -1001,9 +1001,9 @@
  * The expectation did not occur. This is terminal.
  */
     if (fail_reason)
-	logf("Failed (%s)", fail_reason);
+	msgf("Failed (%s)", fail_reason);
     else
-	logf("Failed");
+	msgf("Failed");
     terminate(exit_code);
 }
 
@@ -1079,7 +1079,7 @@
 	abort_string[n_aborts++] = s1;
 
 	if (verbose)
-	    logf("abort on (%v)", s);
+	    msgf("abort on (%v)", s);
 	return;
     }
 
@@ -1105,7 +1105,7 @@
 		pack++;
 		n_aborts--;
 		if (verbose)
-		    logf("clear abort on (%v)", s);
+		    msgf("clear abort on (%v)", s);
 	    }
 	}
         free(s1);
@@ -1129,7 +1129,7 @@
 	report_string[n_reports++] = s1;
 	
 	if (verbose)
-	    logf("report (%v)", s);
+	    msgf("report (%v)", s);
 	return;
     }
 
@@ -1155,7 +1155,7 @@
 		pack++;
 		n_reports--;
 		if (verbose)
-		    logf("clear report (%v)", s);
+		    msgf("clear report (%v)", s);
 	    }
 	}
         free(s1);
@@ -1173,7 +1173,7 @@
 	    timeout = DEFAULT_CHAT_TIMEOUT;
 
 	if (verbose)
-	    logf("timeout set to %d seconds", timeout);
+	    msgf("timeout set to %d seconds", timeout);
 
 	return;
     }
@@ -1236,7 +1236,7 @@
 	return ((int)c & 0x7F);
 
     default:
-	logf("warning: read() on stdin returned %d", status);
+	msgf("warning: read() on stdin returned %d", status);
 
     case -1:
 	if ((status = fcntl(0, F_GETFL, 0)) == -1)
@@ -1264,7 +1264,7 @@
 	return (0);
 	
     default:
-	logf("warning: write() on stdout returned %d", status);
+	msgf("warning: write() on stdout returned %d", status);
 	
     case -1:
 	if ((status = fcntl(0, F_GETFL, 0)) == -1)
@@ -1286,9 +1286,9 @@
 
 	if (verbose) {
 	    if (errno == EINTR || errno == EWOULDBLOCK)
-		logf(" -- write timed out");
+		msgf(" -- write timed out");
 	    else
-		logf(" -- write failed: %m");
+		msgf(" -- write failed: %m");
 	}
 	return (0);
     }
@@ -1303,9 +1303,9 @@
 
     if (verbose) {
 	if (quiet)
-	    logf("send (??????)");
+	    msgf("send (??????)");
 	else
-	    logf("send (%v)", s);
+	    msgf("send (%v)", s);
     }
 
     alarm(timeout); alarmed = 0;
@@ -1392,17 +1392,17 @@
     minlen = (len > sizeof(fail_buffer)? len: sizeof(fail_buffer)) - 1;
 
     if (verbose)
-	logf("expect (%v)", string);
+	msgf("expect (%v)", string);
 
     if (len > STR_LEN) {
-	logf("expect string is too long");
+	msgf("expect string is too long");
 	exit_code = 1;
 	return 0;
     }
 
     if (len == 0) {
 	if (verbose)
-	    logf("got it");
+	    msgf("got it");
 	return (1);
     }
 
@@ -1416,16 +1416,16 @@
 	    echo_stderr(c);
 	if (verbose && c == '\n') {
 	    if (s == logged)
-		logf("");	/* blank line */
+		msgf("");	/* blank line */
 	    else
-		logf("%0.*v", s - logged, logged);
+		msgf("%0.*v", s - logged, logged);
 	    logged = s + 1;
 	}
 
 	*s++ = c;
 
 	if (verbose && s >= logged + 80) {
-	    logf("%0.*v", s - logged, logged);
+	    msgf("%0.*v", s - logged, logged);
 	    logged = s;
 	}
 
@@ -1470,8 +1470,8 @@
 	    strncmp(s - len, string, len) == 0) {
 	    if (verbose) {
 		if (s > logged)
-		    logf("%0.*v", s - logged, logged);
-		logf(" -- got it\n");
+		    msgf("%0.*v", s - logged, logged);
+		msgf(" -- got it\n");
 	    }
 
 	    alarm(0);
@@ -1484,8 +1484,8 @@
 		strncmp(s - abort_len, abort_string[n], abort_len) == 0) {
 		if (verbose) {
 		    if (s > logged)
-			logf("%0.*v", s - logged, logged);
-		    logf(" -- failed");
+			msgf("%0.*v", s - logged, logged);
+		    msgf(" -- failed");
 		}
 
 		alarm(0);
@@ -1499,7 +1499,7 @@
 	if (s >= end) {
 	    if (logged < s - minlen) {
 		if (verbose)
-		    logf("%0.*v", s - logged, logged);
+		    msgf("%0.*v", s - logged, logged);
 		logged = s;
 	    }
 	    s -= minlen;
@@ -1509,16 +1509,16 @@
 	}
 
 	if (alarmed && verbose)
-	    logf("warning: alarm synchronization problem");
+	    msgf("warning: alarm synchronization problem");
     }
 
     alarm(0);
     
     if (verbose && printed) {
 	if (alarmed)
-	    logf(" -- read timed out");
+	    msgf(" -- read timed out");
 	else
-	    logf(" -- read failed: %m");
+	    msgf(" -- read failed: %m");
     }
 
     exit_code = 3;
diff -ruN ppp-2.4.2/configure ppp-cvs-20040427/configure
--- ppp-2.4.2/configure	2002-11-09 12:24:41.000000000 +0100
+++ ppp-cvs-20040427/configure	2004-01-17 06:50:11.000000000 +0100
@@ -1,5 +1,5 @@
 #!/bin/sh
-# $Id: configure,v 1.30 2002/11/02 19:48:12 carlsonj Exp $
+# $Id: configure,v 1.31 2004/01/17 05:47:55 carlsonj Exp $
 
 #  if [ -d /NextApps ]; then
 #    system="NeXTStep"
@@ -27,7 +27,7 @@
 	      esac;;
       5.[1-6]*)	state="known"; ksrc="solaris"; makext="sol2";;
     esac
-    if [ -x /opt/SUNWspro/bin/cc ] &&
+    if [ -x /opt/SUNWspro/bin/cc -a "$1" != "gcc" ] &&
        /opt/SUNWspro/bin/cc -flags >/dev/null 2>&1; then
       : # use Sun WorkShop compiler
     elif gcc --version >/dev/null 2>&1; then
diff -ruN ppp-2.4.2/contrib/pppgetpass/Makefile.linux ppp-cvs-20040427/contrib/pppgetpass/Makefile.linux
--- ppp-2.4.2/contrib/pppgetpass/Makefile.linux	1999-11-15 05:08:24.000000000 +0100
+++ ppp-cvs-20040427/contrib/pppgetpass/Makefile.linux	1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-all: pppgetpass.vt pppgetpass.gtk
-
-pppgetpass.vt: pppgetpass.vt.o
-
-pppgetpass.gtk: pppgetpass.gtk.o
-	$(CC) $(LDFLAGS) pppgetpass.gtk.o `gtk-config --libs` -o pppgetpass.gtk
-pppgetpass.gtk.o: pppgetpass.gtk.c
-	$(CC) $(CFLAGS) -c pppgetpass.gtk.c `gtk-config --cflags`
-
-install: all
-	install -m 755 pppgetpass.sh /usr/bin/pppgetpass
-	install -m 4755 -o root -g root pppgetpass.vt /usr/bin/
-	install -m 755 -o root -g root pppgetpass.gtk /usr/X11/bin/
-
-clean:
-	rm -f *.o pppgetpass.gtk pppgetpass.vt core
diff -ruN ppp-2.4.2/contrib/pppgetpass/pppgetpass.8 ppp-cvs-20040427/contrib/pppgetpass/pppgetpass.8
--- ppp-2.4.2/contrib/pppgetpass/pppgetpass.8	1999-11-15 05:08:24.000000000 +0100
+++ ppp-cvs-20040427/contrib/pppgetpass/pppgetpass.8	1970-01-01 01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-.TH PPPGETPASS 8 "26 Sep 1999"
-.SH NAME
-pppgetpass \- prompt for PAP password
-.SH SYNOPSIS
-.B pppgetpass
-.I client server fd
-.SH DESCRIPTION
-.B pppgetpass
-the outer half of a plugin for PAP password prompting in pppd.
-If the peer requires PAP, and the
-.B passprompt.so
-plugin is loaded into pppd, it will run
-.B /usr/sbin/pppgetpass
-(or another program specified by the
-.B promptprog
-option) to prompt the user for the password.
-.SH SEE ALSO
-pppd(8)
diff -ruN ppp-2.4.2/contrib/pppgetpass/pppgetpass.gtk.c ppp-cvs-20040427/contrib/pppgetpass/pppgetpass.gtk.c
--- ppp-2.4.2/contrib/pppgetpass/pppgetpass.gtk.c	1999-11-15 05:08:24.000000000 +0100
+++ ppp-cvs-20040427/contrib/pppgetpass/pppgetpass.gtk.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,92 +0,0 @@
-#include <glib.h>
-#include <gdk/gdk.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtksignal.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <syslog.h>
-
-int outfd;
-int err;
-
-static void okpressed(void *widget, void *clientdata)
-{
-  GtkWidget *answer=clientdata;
-  gchar *pass;
-  int passlen;
-  ssize_t wrote;
-  (void)widget;
-
-  pass=gtk_entry_get_text(GTK_ENTRY(answer));
-
-  passlen=strlen(pass);
-  if(!passlen)
-    return;
-
-  if((wrote=write(outfd, pass, passlen))!=passlen) {
-    if(wrote<0)
-      syslog(LOG_ERR, "write error on outpipe: %m");
-    else
-      syslog(LOG_ERR, "short write on outpipe");
-    err=1;
-  }
-  gtk_main_quit();
-}
-
-int main(int argc, char **argv)
-{
-  GtkWidget *mainwindow, *vbox, *question, *answer, *ok;
-  char buf[1024];
-  gtk_init(&argc, &argv);
-
-  openlog(argv[0], LOG_PID, LOG_DAEMON);
-  if(argc!=4) {
-    syslog(LOG_WARNING, "Usage error");
-    return 1;
-  }
-  outfd=atoi(argv[3]);
-  mainwindow=gtk_window_new(GTK_WINDOW_TOPLEVEL);
-  gtk_window_set_title(GTK_WINDOW(mainwindow), "pppgetpass");
-  gtk_signal_connect(GTK_OBJECT(mainwindow), "destroy",
-                     GTK_SIGNAL_FUNC(gtk_main_quit), 0);
-
-  vbox=gtk_vbox_new(FALSE, 5);
-  gtk_container_add(GTK_CONTAINER(mainwindow), vbox);
-  gtk_widget_show(vbox);
-
-  if(argv[1][0] && argv[2][0])
-    snprintf(buf, sizeof buf, "Password for PPP client %s on server %s: ", argv[1], argv[2]);
-  else if(argv[1][0] && !argv[2][0])
-    snprintf(buf, sizeof buf, "Password for PPP client %s: ", argv[1]);
-  else if(!argv[1][0] && argv[2][0])
-    snprintf(buf, sizeof buf, "Password for PPP on server %s: ", argv[2]);
-  else
-    snprintf(buf, sizeof buf, "Enter PPP password: ");
-  question=gtk_label_new(buf);
-  gtk_box_pack_start(GTK_BOX(vbox), question, FALSE, TRUE, 0);
-  gtk_widget_show(question);
-
-  answer=gtk_entry_new();
-  gtk_entry_set_visibility(GTK_ENTRY(answer), 0);
-  gtk_box_pack_start(GTK_BOX(vbox), answer, FALSE, TRUE, 0);
-  gtk_widget_show(answer);
-
-  ok=gtk_button_new_with_label("OK");
-  gtk_box_pack_start(GTK_BOX(vbox), ok, FALSE, TRUE, 0);
-  gtk_signal_connect(GTK_OBJECT(ok), "clicked",
-                     GTK_SIGNAL_FUNC(okpressed), answer);
-  gtk_widget_show(ok);
-
-  gtk_widget_show(mainwindow);
-  gtk_main();
-
-  return err;
-}
diff -ruN ppp-2.4.2/contrib/pppgetpass/pppgetpass.sh ppp-cvs-20040427/contrib/pppgetpass/pppgetpass.sh
--- ppp-2.4.2/contrib/pppgetpass/pppgetpass.sh	1999-11-15 05:08:24.000000000 +0100
+++ ppp-cvs-20040427/contrib/pppgetpass/pppgetpass.sh	1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-if [ -z "$DISPLAY" ]; then
-  exec pppgetpass.vt "$@"
-else
-  exec pppgetpass.gtk "$@"
-fi
diff -ruN ppp-2.4.2/contrib/pppgetpass/pppgetpass.vt.c ppp-cvs-20040427/contrib/pppgetpass/pppgetpass.vt.c
--- ppp-2.4.2/contrib/pppgetpass/pppgetpass.vt.c	1999-11-15 05:08:24.000000000 +0100
+++ ppp-cvs-20040427/contrib/pppgetpass/pppgetpass.vt.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,218 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <syslog.h>
-#include <termios.h>
-#include <sys/vt.h>
-
-static int console_owner(uid_t, int);
-
-int main(int argc, char **argv)
-{
-  int console;
-  uid_t uid;
-  struct vt_stat origstate;
-  int openvtnum;
-  char openvtname[256];
-  int openvt;
-  gid_t gid;
-  int chowned;
-  FILE *fp;
-  struct termios t;
-  char pass[256], *nl;
-  int outfd, passlen;
-  ssize_t wrote;
-  console=open("/dev/console", O_RDWR);
-
-  uid=getuid();
-  gid=getgid();
-  seteuid(uid);
-
-  openlog(argv[0], LOG_PID, LOG_DAEMON);
-
-  if(argc!=4) {
-    syslog(LOG_WARNING, "Usage error");
-    return 1;
-  }
-
-  if(console<0) {
-    syslog(LOG_ERR, "open(/dev/console): %m");
-    return 1;
-  }
-
-  if(ioctl(console, VT_GETSTATE, &origstate)<0) {
-    syslog(LOG_ERR, "VT_GETSTATE: %m");
-    return 1;
-  }
-
-  if(uid) {
-    if(!console_owner(uid, origstate.v_active)) {
-      int i;
-      for(i=0;i<64;++i) {
-        if(i!=origstate.v_active && console_owner(uid, i))
-          break;
-      }
-      if(i==64) {
-        syslog(LOG_WARNING, "run by uid %lu not at console", (unsigned long)uid);
-        return 1;
-      }
-    }
-  }
-
-  if(ioctl(console, VT_OPENQRY, &openvtnum)<0) {
-    syslog(LOG_ERR, "VT_OPENQRY: %m");
-    return 1;
-  }
-  if(openvtnum==-1) {
-    syslog(LOG_ERR, "No free VTs");
-    return 1;
-  }
-
-  snprintf(openvtname, sizeof openvtname, "/dev/tty%d", openvtnum);
-  seteuid(0);
-  openvt=open(openvtname, O_RDWR);
-  if(openvt<0) {
-    seteuid(uid);
-    syslog(LOG_ERR, "open(%s): %m", openvtname);
-    return 1;
-  }
-
-  chowned=fchown(openvt, uid, gid);
-  if(chowned<0) {
-    seteuid(uid);
-    syslog(LOG_ERR, "fchown(%s): %m", openvtname);
-    return 1;
-  }
-
-  close(console);
-
-  if(ioctl(openvt, VT_ACTIVATE, openvtnum)<0) {
-    seteuid(uid);
-    syslog(LOG_ERR, "VT_ACTIVATE(%d): %m", openvtnum);
-    return 1;
-  }
-
-  while(ioctl(openvt, VT_WAITACTIVE, openvtnum)<0) {
-    if(errno!=EINTR) {
-      ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-      seteuid(uid);
-      syslog(LOG_ERR, "VT_WAITACTIVE(%d): %m", openvtnum);
-      return 1;
-    }
-  }
-
-  seteuid(uid);
-  fp=fdopen(openvt, "r+");
-  if(!fp) {
-    seteuid(0);
-    ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-    seteuid(uid);
-    syslog(LOG_ERR, "fdopen(%s): %m", openvtname);
-    return 1;
-  }
-
-  if(tcgetattr(openvt, &t)<0) {
-    seteuid(0);
-    ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-    seteuid(uid);
-    syslog(LOG_ERR, "tcgetattr(%s): %m", openvtname);
-    return 1;
-  }
-  t.c_lflag &= ~ECHO;
-  if(tcsetattr(openvt, TCSANOW, &t)<0) {
-    seteuid(0);
-    ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-    seteuid(uid);
-    syslog(LOG_ERR, "tcsetattr(%s): %m", openvtname);
-    return 1;
-  }
-
-  if(fprintf(fp, "\033[2J\033[H")<0) {
-    seteuid(0);
-    ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-    seteuid(uid);
-    syslog(LOG_ERR, "write error on %s: %m", openvtname);
-    return 1;
-  }
-  if(argv[1][0] && argv[2][0]) {
-    if(fprintf(fp, "Password for PPP client %s on server %s: ", argv[1], argv[2])<0) {
-      seteuid(0);
-      ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-      seteuid(uid);
-      syslog(LOG_ERR, "write error on %s: %m", openvtname);
-      return 1;
-    }
-  } else if(argv[1][0] && !argv[2][0]) {
-    if(fprintf(fp, "Password for PPP client %s: ", argv[1])<0) {
-      syslog(LOG_ERR, "write error on %s: %m", openvtname);
-      seteuid(0);
-      ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-      seteuid(uid);
-      return 1;
-    }
-  } else if(!argv[1][0] && argv[2][0]) {
-    if(fprintf(fp, "Password for PPP on server %s: ", argv[2])<0) {
-      seteuid(0);
-      ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-      seteuid(uid);
-      syslog(LOG_ERR, "write error on %s: %m", openvtname);
-      return 1;
-    }
-  } else {
-    if(fprintf(fp, "Enter PPP password: ")<0) {
-      seteuid(0);
-      ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-      seteuid(uid);
-      syslog(LOG_ERR, "write error on %s: %m", openvtname);
-      return 1;
-    }
-  }
-
-  if(!fgets(pass, sizeof pass, fp)) {
-    seteuid(0);
-    ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-    seteuid(uid);
-    if(ferror(fp)) {
-      syslog(LOG_ERR, "read error on %s: %m", openvtname);
-    }
-    return 1;
-  }
-  if((nl=strchr(pass, '\n'))) 
-    *nl=0;
-  passlen=strlen(pass);
-  
-  outfd=atoi(argv[3]);
-  if((wrote=write(outfd, pass, passlen))!=passlen) {
-    seteuid(0);
-    ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-    seteuid(uid);
-    if(wrote<0)
-      syslog(LOG_ERR, "write error on outpipe: %m");
-    else
-      syslog(LOG_ERR, "short write on outpipe");
-    return 1;
-  }
-
-  seteuid(0);
-  ioctl(openvt, VT_ACTIVATE, origstate.v_active);
-  seteuid(uid);
-  return 0;
-}
-
-static int console_owner(uid_t uid, int cons)
-{
-  char name[256];
-  struct stat st;
-  snprintf(name, sizeof name, "/dev/tty%d", cons);
-  if(stat(name, &st)<0) {
-    if(errno!=ENOENT)
-      syslog(LOG_ERR, "stat(%s): %m", name);
-    return 0;
-  }
-  return uid==st.st_uid;
-}
diff -ruN ppp-2.4.2/include/linux/if_ether.h ppp-cvs-20040427/include/linux/if_ether.h
--- ppp-2.4.2/include/linux/if_ether.h	2001-05-21 05:31:50.000000000 +0200
+++ ppp-cvs-20040427/include/linux/if_ether.h	1970-01-01 01:00:00.000000000 +0100
@@ -1,99 +0,0 @@
-/*
- * INET		An implementation of the TCP/IP protocol suite for the LINUX
- *		operating system.  INET is implemented using the  BSD Socket
- *		interface as the means of communication with the user level.
- *
- *		Global definitions for the Ethernet IEEE 802.3 interface.
- *
- * Version:	@(#)if_ether.h	1.0.1a	02/08/94
- *
- * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
- *		Donald Becker, <becker@super.org>
- *		Alan Cox, <alan@redhat.com>
- *		Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
- *
- *		This program is free software; you can redistribute it and/or
- *		modify it under the terms of the GNU General Public License
- *		as published by the Free Software Foundation; either version
- *		2 of the License, or (at your option) any later version.
- */
- 
-#ifndef _LINUX_IF_ETHER_H
-#define _LINUX_IF_ETHER_H
-
-/*
- *	IEEE 802.3 Ethernet magic constants.  The frame sizes omit the preamble
- *	and FCS/CRC (frame check sequence). 
- */
-
-#define ETH_ALEN	6		/* Octets in one ethernet addr	 */
-#define ETH_HLEN	14		/* Total octets in header.	 */
-#define ETH_ZLEN	60		/* Min. octets in frame sans FCS */
-#define ETH_DATA_LEN	1500		/* Max. octets in payload	 */
-#define ETH_FRAME_LEN	1514		/* Max. octets in frame sans FCS */
-
-/*
- *	These are the defined Ethernet Protocol ID's.
- */
-
-#define ETH_P_LOOP	0x0060		/* Ethernet Loopback packet	*/
-#define ETH_P_PUP	0x0200		/* Xerox PUP packet		*/
-#define ETH_P_PUPAT	0x0201		/* Xerox PUP Addr Trans packet	*/
-#define ETH_P_IP	0x0800		/* Internet Protocol packet	*/
-#define ETH_P_X25	0x0805		/* CCITT X.25			*/
-#define ETH_P_ARP	0x0806		/* Address Resolution packet	*/
-#define	ETH_P_BPQ	0x08FF		/* G8BPQ AX.25 Ethernet Packet	[ NOT AN OFFICIALLY REGISTERED ID ] */
-#define ETH_P_IEEEPUP	0x0a00		/* Xerox IEEE802.3 PUP packet */
-#define ETH_P_IEEEPUPAT	0x0a01		/* Xerox IEEE802.3 PUP Addr Trans packet */
-#define ETH_P_DEC       0x6000          /* DEC Assigned proto           */
-#define ETH_P_DNA_DL    0x6001          /* DEC DNA Dump/Load            */
-#define ETH_P_DNA_RC    0x6002          /* DEC DNA Remote Console       */
-#define ETH_P_DNA_RT    0x6003          /* DEC DNA Routing              */
-#define ETH_P_LAT       0x6004          /* DEC LAT                      */
-#define ETH_P_DIAG      0x6005          /* DEC Diagnostics              */
-#define ETH_P_CUST      0x6006          /* DEC Customer use             */
-#define ETH_P_SCA       0x6007          /* DEC Systems Comms Arch       */
-#define ETH_P_RARP      0x8035		/* Reverse Addr Res packet	*/
-#define ETH_P_ATALK	0x809B		/* Appletalk DDP		*/
-#define ETH_P_AARP	0x80F3		/* Appletalk AARP		*/
-#define ETH_P_IPX	0x8137		/* IPX over DIX			*/
-#define ETH_P_IPV6	0x86DD		/* IPv6 over bluebook		*/
-#define ETH_P_PPP_DISC	0x8863		/* PPPoE discovery messages     */
-#define ETH_P_PPP_SES	0x8864		/* PPPoE session messages	*/
-#define ETH_P_ATMMPOA	0x884c		/* MultiProtocol Over ATM	*/
-#define ETH_P_ATMFATE	0x8884		/* Frame-based ATM Transport
-					 * over Ethernet
-					 */
-
-/*
- *	Non DIX types. Won't clash for 1500 types.
- */
- 
-#define ETH_P_802_3	0x0001		/* Dummy type for 802.3 frames  */
-#define ETH_P_AX25	0x0002		/* Dummy protocol id for AX.25  */
-#define ETH_P_ALL	0x0003		/* Every packet (be careful!!!) */
-#define ETH_P_802_2	0x0004		/* 802.2 frames 		*/
-#define ETH_P_SNAP	0x0005		/* Internal only		*/
-#define ETH_P_DDCMP     0x0006          /* DEC DDCMP: Internal only     */
-#define ETH_P_WAN_PPP   0x0007          /* Dummy type for WAN PPP frames*/
-#define ETH_P_PPP_MP    0x0008          /* Dummy type for PPP MP frames */
-#define ETH_P_LOCALTALK 0x0009		/* Localtalk pseudo type 	*/
-#define ETH_P_PPPTALK	0x0010		/* Dummy type for Atalk over PPP*/
-#define ETH_P_TR_802_2	0x0011		/* 802.2 frames 		*/
-#define ETH_P_MOBITEX	0x0015		/* Mobitex (kaz@cafe.net)	*/
-#define ETH_P_CONTROL	0x0016		/* Card specific control frames */
-#define ETH_P_IRDA	0x0017		/* Linux-IrDA			*/
-#define ETH_P_ECONET	0x0018		/* Acorn Econet			*/
-
-/*
- *	This is an Ethernet frame header.
- */
- 
-struct ethhdr 
-{
-	unsigned char	h_dest[ETH_ALEN];	/* destination eth addr	*/
-	unsigned char	h_source[ETH_ALEN];	/* source ether addr	*/
-	unsigned short	h_proto;		/* packet type ID field	*/
-};
-
-#endif	/* _LINUX_IF_ETHER_H */
diff -ruN ppp-2.4.2/include/pcap-int.h ppp-cvs-20040427/include/pcap-int.h
--- ppp-2.4.2/include/pcap-int.h	2000-08-01 03:37:24.000000000 +0200
+++ ppp-cvs-20040427/include/pcap-int.h	2000-08-01 03:37:24.000000000 +0200
@@ -30,7 +30,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * @(#) $Header: /data/cvs/ppp/include/pcap-int.h,v 1.1 2000/08/01 01:37:24 paulus Exp $ (LBL)
+ * @(#) $Header: /cvsroot/ppp/include/pcap-int.h,v 1.1 2000/08/01 01:37:24 paulus Exp $ (LBL)
  */
 
 #ifndef pcap_int_h
diff -ruN ppp-2.4.2/modules/bsd-comp.c ppp-cvs-20040427/modules/bsd-comp.c
--- ppp-2.4.2/modules/bsd-comp.c	1998-03-19 06:59:01.000000000 +0100
+++ ppp-cvs-20040427/modules/bsd-comp.c	2004-01-17 06:50:11.000000000 +0100
@@ -41,7 +41,7 @@
  * This version is for use with STREAMS under SunOS 4.x,
  * Digital UNIX, AIX 4.x, and SVR4 systems including Solaris 2.
  *
- * $Id: bsd-comp.c,v 1.20 1996/08/28 06:31:57 paulus Exp $
+ * $Id: bsd-comp.c,v 1.21 2004/01/17 05:47:55 carlsonj Exp $
  */
 
 #ifdef AIX4
@@ -66,6 +66,10 @@
 #define BSD_LITTLE_ENDIAN
 #endif
 
+#ifdef SOL2
+#include <sys/sunddi.h>
+#endif
+
 #define PACKETPTR	mblk_t *
 #include <net/ppp-comp.h>
 
diff -ruN ppp-2.4.2/modules/deflate.c ppp-cvs-20040427/modules/deflate.c
--- ppp-2.4.2/modules/deflate.c	2002-12-06 10:49:15.000000000 +0100
+++ ppp-cvs-20040427/modules/deflate.c	2004-01-17 06:50:11.000000000 +0100
@@ -35,7 +35,7 @@
  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $Id: deflate.c,v 1.11 2002/12/06 09:49:15 paulus Exp $
+ * $Id: deflate.c,v 1.12 2004/01/17 05:47:55 carlsonj Exp $
  */
 
 #ifdef AIX4
@@ -56,6 +56,10 @@
 #include "../common/zlib.h"
 #endif
 
+#ifdef SOL2
+#include <sys/sunddi.h>
+#endif
+
 #if DO_DEFLATE
 
 #define DEFLATE_DEBUG	1
diff -ruN ppp-2.4.2/modules/vjcompress.c ppp-cvs-20040427/modules/vjcompress.c
--- ppp-2.4.2/modules/vjcompress.c	1999-09-17 04:03:56.000000000 +0200
+++ ppp-cvs-20040427/modules/vjcompress.c	2004-01-17 06:50:11.000000000 +0100
@@ -29,7 +29,7 @@
  * This version is used under SunOS 4.x, Digital UNIX, AIX 4.x,
  * and SVR4 systems including Solaris 2.
  *
- * $Id: vjcompress.c,v 1.10 1999/09/15 23:49:06 masputra Exp $
+ * $Id: vjcompress.c,v 1.11 2004/01/17 05:47:55 carlsonj Exp $
  */
 
 #include <sys/types.h>
@@ -56,6 +56,10 @@
 #include <netinet/in_systm.h>
 #endif
 
+#ifdef SOL2
+#include <sys/sunddi.h>
+#endif
+
 #include <netinet/ip.h>
 #include <netinet/tcp.h>
 
diff -ruN ppp-2.4.2/ppp.texi ppp-cvs-20040427/ppp.texi
--- ppp-2.4.2/ppp.texi	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/ppp.texi	1996-08-28 08:30:33.000000000 +0200
@@ -0,0 +1,561 @@
+\input texinfo @c -*-texinfo-*-
+@setfilename ppp.info
+@settitle PPP
+
+@iftex
+@finalout
+@end iftex
+
+@ifinfo
+@format
+START-INFO-DIR-ENTRY
+* PPP: (ppp).                   Point-to-Point Protocol.
+END-INFO-DIR-ENTRY
+@end format
+
+@titlepage
+@title PPP-2.x Users' Guide
+@author by Paul Mackerras
+@end titlepage
+
+@node Top, Introduction, (dir), (dir)
+
+@ifinfo
+This file documents how to use the ppp-2.x package to set up network
+links over serial lines with the Point-to-Point Protocol.
+
+@end ifinfo
+
+@menu
+* Introduction::                Basic concepts of the Point-to-Point
+                                Protocol and the ppp-2.x package.
+* Installation::                How to compile and install the software.
+* Configuration::               How to set up your system for
+                                establishing a link to another system.
+* Security::                    Avoid creating security holes.
+* Compression::                 Using compression of various kinds
+                                to improve throughput.
+@end menu
+
+@node Introduction, Installation, Top, Top
+@chapter Introduction
+
+The Point-to-Point Protocol (PPP) is the protocol of choice for
+establishing network links over serial lines.  This package (ppp-2.x)
+provides an implementation of PPP which supports the Internet Protocols
+(TCP/IP, UDP/IP, etc.) and which runs on a range of Unix workstations.
+
+A typical use of PPP is to provide a network connection, via a modem,
+between a workstation and an Internet Service Provider (ISP).  When this
+connection is established, the workstation is connected to the internet,
+and applications running on the workstation can then make connections to
+other hosts anywhere on the internet.  This package can be used at
+either or both ends of such a link.
+
+Features of PPP include:
+@itemize @bullet
+@item
+Multi-protocol support.  The PPP packet encapsulation includes a
+protocol field, allowing packets from many different protocols to be
+multiplexed across a single link.
+@item
+Negotiation of link characteristics.  During link establishment, the two
+systems negotiate about the link configuration parameters, such as the
+IP addresses of each end of the link.
+@item
+Authentication.  Optionally, each system can be configured to require the
+other system to authenticate itself.  In this way, access can be
+restricted to authorized systems.
+@item
+Transparency.  On asynchronous serial lines, PPP can be configured to
+transmit certain characters as a two-character escape sequence.
+@item
+Compression.  PPP includes support for various kinds of compression to
+be applied to the packets before they are transmitted.
+@end itemize
+
+The ppp-2.x software consists of two parts:
+
+@itemize @bullet
+
+@item
+Kernel code, which establishes a network interface and passes packets
+between the serial port, the kernel networking code and the PPP daemon
+(@file{pppd}).  This code is implemented using STREAMS modules on
+Solaris 2, SunOS 4.x, AIX 4.1 and OSF/1, and as a tty line discipline
+under Ultrix, NextStep, NetBSD, FreeBSD, and Linux.
+
+@item
+The PPP daemon (@file{pppd}), which negotiates with the peer to
+establish the link and sets up the ppp network interface.  Pppd includes
+support for authentication.  It can authenticate itself to the other
+system and/or require the other system to authenticate itself, so that
+you can control which other systems may make a PPP connection and what
+IP addresses they may use.
+@end itemize
+
+@menu
+* PPP Concepts::                Basic concepts and terms used with PPP.
+* PPP packet format::           How data is packaged up for transmission.
+* LCP negotiation::             The parameters which are negotiated
+				using the Link Control Protocol.
+* IPCP negotiation::            The parameters which are negotiated
+				using the IP Control Protocol.
+@end menu
+
+@node PPP Concepts, PPP packet format, Introduction, Introduction
+@section PPP Concepts
+
+To use PPP to provide a network connection between two machines, there
+must be some way that a stream of bytes, or characters, can be passed
+from one to the other, in both directions independently.  We refer to
+this as the ``serial link''.  Very often the serial link involves
+asynchronous communications ports and modems, but other kinds of serial
+link are possible.
+
+The serial link must transmit (at least) 8 bits per character; PPP
+cannot work over a serial link which transmits only 7 bits per
+character.  However, it need not transmit all byte values transparently. 
+PPP has a mechanism to avoid sending certain characters if it is known
+that the some element of the serial link interprets them specially.  For
+example, the DC1 and DC3 ASCII characters (control-Q and control-S) may
+be trapped by a modem if it is set for ``software'' flow control.  PPP
+can send these characters as a two-character ``escape'' sequence.  The
+set of characters which are to be transmitted as an escape sequence is
+represented in an ``async control character map'' (ACCM).  The ``async''
+part refers to the fact that this facility is used for asynchronous
+serial links.  For synchronous serial connections, the HDLC bit-stuffing
+procedure is used instead.
+
+The two systems connected by the serial link are called ``peers''.  When
+we are talking from the point of view of one of the systems, the other
+is often referred to as ``the peer''.  Sometimes we may refer to one
+system as a ``client'' and the other as a ``server''.  This distinction
+refers mainly to the way the serial link is set up; usually the client
+is the peer that initiates the connection, for example by dialling the
+server with its modem.
+
+During the lifetime of a PPP connection, it proceeds through several
+phases:
+
+@enumerate
+@item
+Serial link establishment.  In this phase, the serial link is set up and
+PPP protocol software is attached to each end of the serial link.  The
+precise steps involved in doing this vary greatly, depending on the
+nature of the serial link.  For the common case of modems connected
+through the telephone network, this involves first sending commands to
+the modem to cause it to dial the remote system.  When the remote system
+answers, the local system usually has to supply a username and password,
+and then issue a command to invoke PPP software on the remote system.
+The ``chat'' program supplied with ppp-2.x provides a way to automate a
+dialog with the modem and the remote system.  This phase is not
+standardized; it is outside the scope of the PPP protocol
+specifications.
+
+@item
+Link Control Protocol (LCP) negotiation.  In this phase, the peers send
+LCP packets to each other to negotiate various parameters of the
+connection, such as the ACCM to be used in each direction, whether
+authentication is required, and whether or not to use various forms of
+compression.  When the peers reach agreement on these parameters, LCP is
+said to be ``up''.
+
+@item
+Authentication.  If one (or both) of the peers requires the other
+peer to authenticate itself, that occurs next.  If one of the peers
+cannot successfully authenticate itself, the other peer terminates the
+link.
+
+@item
+Network Control Protocol (NCP) negotiation.  PPP can potentially support
+several different network protocols, although IP is the only network
+protocol (NP) supported by the ppp-2.x package.  Each NP has an
+associated NCP defined for it, which is used to negotiate the specific
+parameters which affect that NP.  For example, the IP Control Protocol
+(IPCP) is used to negotiate the IP addresses for each end of the link,
+and whether the TCP header compression method described by Van Jacobsen
+in RFC 1144 (``VJ compression'') is to be used.
+
+@item
+Network communication.  When each NCP has successfully negotiated the
+parameters for its NP, that NCP is said to be ``up''.  At that point,
+the PPP link is made available for data traffic from that NP.  For
+example, when IPCP comes up, the PPP link is then available for carrying
+IP packets (which of course includes packets from those protocols which
+are layered above IP, such as TCP, UDP, etc.)
+
+@item
+Termination.  When the link is no longer required, it is terminated.
+Usually this involves an exchange of LCP packets so that one peer can
+notify the other that it is shutting down the link, enabling both peers
+to shut down in an orderly manner.  But of course there are occasions
+when the link terminates because the serial link is interrupted, for
+example, when a modem loses carrier and hangs up.
+
+@end enumerate
+
+The protocols in the PPP family are produced by the Point-to-Point
+Working Group of the Internet Engineering Task Force, and are specified
+in RFC (Request for Comments) documents, available by anonymous FTP from
+several sites.
+
+PPP is defined in several RFCs, in
+particular RFCs 1661, 1662, and 1334.  IPCP is defined in RFC 1332.
+Other RFCs describe the control protocols for other network protocols
+(e.g., DECnet, OSI, Appletalk).  RFCs are available by anonymous FTP
+from several sites including nic.ddn.mil, nnsc.nsf.net, nic.nordu.net,
+ftp.nisc.sri.com, and munnari.oz.au.
+
+@node PPP packet format, LCP negotiation, PPP Concepts, Introduction
+@section PPP packet format
+
+PPP transmits packets over the serial link using a simple encapsulation
+scheme.  First, a two-byte PPP Protocol field is inserted before the
+data to be sent.  The value in this field identifies
+which higher-level protocol (either a network protocol such as IP or a
+PPP control protocol such as LCP) should receive the data in the packet.
+By default, a one-byte Address field with the value 0xFF, and a one-byte
+Control field with the value 0x03, are inserted before the PPP Protocol
+field (apparently this is supposed to provide compatibility with HDLC,
+in case there is a synchronous to asynchronous converter in the serial
+link).
+
+On slow serial links, these fields can be compressed down to one byte in
+most cases.  The PPP Address and Control fields are compressed by simply
+omitting them (``address/control compression'').  The PPP Protocol field
+values are chosen so that bit 0 (the least-significant bit) of the first
+(most significant) byte is always 0, and bit 0 of the second byte is
+always 1.  The PPP Protocol field can be compressed by omitting the
+first byte, provided that it is 0 (``protocol compression'').  The
+values for this field are assigned so that the first byte is zero for
+all of the commonly-used network protocols.  For example, the PPP
+Protocol field value for IP is 0x21.
+
+For asynchronous serial links, which do not provide any packet framing
+or transparency, a further encapsulation is used as follows.  First a
+16-bit Frame Check Sequence (FCS) is computed over the packet to be
+sent, and appended as two bytes to the end of the packet.
+
+Then each byte of the packet is examined, and if it contains one of the
+characters which are to be escaped, it is replaced by a two byte
+sequence: the 0x7d character '}', followed by the character with bit 5
+inverted.  For example, the control-C character (0x03) could be replaced
+by the two-byte sequence 0x7d, 0x23 ('}#').  The 0x7d and 0x7e ('~')
+characters are always escaped, and the 0x5e ('^') character may not be
+escaped.
+
+Finally, a ``flag'' character (0x7e, '~') is inserted at the beginning
+and end of the packet to mark the packet boundaries.  The initial flag
+may be omitted if this packet immediately follows another packet, as the
+ending flag for the previous packet can serve as the beginning flag of
+this packet.
+
+@node LCP negotiation, IPCP negotiation, PPP packet format, Introduction
+@section LCP negotiation
+
+The LCP negotiation process actually involves two sets of negotiations,
+one for each direction of the PPP connection.  Thus A will send B
+packets (``Configure-Requests'') describing what characteristics A would
+like to have apply to the B -> A direction of the link, that is, to the
+packets that A will receive.  Similarly B will send A packets describing
+the characteristics it would like to have apply to the packets it will
+be receiving.  These characteristics need not necessarily be the same in
+both directions.
+
+The parameters which are negotiated for each direction of the connection
+using LCP are:
+
+@itemize @bullet
+@item
+Maximum Receive Unit (MRU): indicates the maximum packet size which we
+are prepared to receive (specifically the maximum size of the
+data portion of the packet).  The default value is 1500, but on
+slow serial links, smaller values give better response.  The choice of
+MRU is discussed below (see xxx).
+
+@item
+Async Control Character Map (ACCM): indicates the set of control
+characters (characters with ASCII values in the range 0 - 31) which we
+wish to receive in escaped form.  The default is that the sender should
+escape all characters in the range 0 - 31.
+
+@item
+Authentication Protocol: indicates which protocol we would like the peer
+to use to authenticate itself.  Common choices are the Password
+Authentication Protocol (PAP) and the Cryptographic Handshake
+Authentication Protocol (CHAP).
+
+@item
+Quality Protocol: indicates which protocol which we would like the peer
+to use to send us link quality reports.  The ppp-2.x package does not
+currently support link quality reports.
+
+@item
+Magic Number: a randomly-chosen number, different from the peer's magic
+number.  If we persistently receive our own magic number in the peer's
+configure-request packets, then we can conclude that the serial link is
+looped back.
+
+@item
+Protocol Field Compression: indicates that we wish the peer to compress
+the PPP Protocol field to one byte, where possible, in the packets it
+sends.
+
+@item
+Address/Control Field Compression: indicates that we wish the peer to
+compress the PPP Address/Control fields (by simply omitting them) in the
+packets it sends.
+@end itemize
+
+@node IPCP negotiation,  , LCP negotiation, Introduction
+@section IPCP negotiation
+
+The IPCP negotiation process is very similar to the LCP negotiation
+process, except that of course different parameters are negotiated.
+The parameters which are negotiated using IPCP are:
+
+@itemize @bullet
+@item
+IP Address: the IP address (32-bit host IP number) which we plan to use
+as the local address for our end of the link.
+
+@item
+TCP header compression: indicates (a) that we wish the peer to compress
+the TCP/IP headers of TCP/IP packets that it sends, using the Van
+Jacobson algorithm as described in RFC1144; (b) the maximum slot ID that
+we wish the peer to use, and (c) whether we are prepared to accept
+packets with the slot ID field compressed (omitted).
+
+With Van Jacobson (VJ) compression, the receiver and transmitter (for
+one direction of the connection) both keep a table, with a certain
+number of ``slots'', where each slot holds the TCP/IP header of the most
+recently transmitted packet for one TCP connection.  If a packet is to
+be transmitted for a TCP connection which does not have a slot currently
+allocated, the VJ scheme will allocate one of the slots and send the
+entire TCP/IP header, together with the slot number.  For many packets,
+there will be a slot already allocated for the TCP connection, and the
+VJ scheme will then often be able to replace the entire TCP/IP header
+with a much smaller compressed header (typically only 3 - 7 bytes)
+describing which fields of the TCP/IP header have changed, and by how
+much.  If there are many more active connections than slots, the
+efficiency of the VJ scheme will drop, because it will not be able to
+send compressed headers as often.
+
+Usually the compressed header includes a one-byte slot index, indicating
+which TCP connection the packet is for.  It is possible to reduce the
+header size by omitting the slot index when the packet has the same slot
+index as the previous packet.  However, this introduces a danger if the
+lower levels of the PPP software can sometimes drop damaged packets
+without informing the VJ decompressor, as it may then assume the wrong
+slot index for packets which have the slot index field omitted.  With
+the ppp-2.x software, however, the probability of this happening is
+generally very small (see xxx).
+
+@end itemize
+
+@node Installation, Configuration, Introduction, Top
+@chapter Installation
+
+Because ppp-2.x includes code which must be incorporated into the
+kernel, its installation process is necessarily quite heavily
+system-dependent.  In addition, you will require super-user privileges
+(root access) to install the code.
+
+Some systems provide a ``modload'' facility, which allows you to load
+new code into a running kernel without relinking the kernel or
+rebooting.  Under Solaris 2, SunOS 4.x, Linux, OSF/1 and NextStep, this
+is the recommended (or only) way to install the kernel portion of the
+ppp-2.x package.
+
+Under the remaining supported operating systems (NetBSD, FreeBSD,
+Ultrix), it is necessary to go through the process of creating a new
+kernel image and reboot.  (Note that NetBSD and FreeBSD have a modload
+facility, but ppp-2.x is currently not configured to take advantage of
+it.)
+
+Detailed installation instructions for each operating system are
+contained in the README files in the ppp-2.x distribution.  In general,
+the process involves executing the commands @samp{./configure},
+@samp{make} and (as root) @samp{make install} in the ppp-2.x
+distribution directory.  (The Linux port requires the installation of
+some header files before compiling; see README.linux for details.)
+
+@node Configuration, Security, Installation, Top
+@chapter Configuration
+
+Once the ppp-2.x software is installed, you need to configure your
+system for the particular PPP connections you wish to allow.  Typically,
+the elements you need to configure are:
+
+@itemize @bullet
+@item
+How the serial link is established and how pppd gets invoked.
+@item
+Setting up syslog to log messages from pppd to the console and/or
+system log files.
+@item
+Pppd options to be used.
+@item
+Authentication secrets to use in authenticating us to the peer
+and/or the peer to us.
+@item
+The IP addresses for each end of the link.
+@end itemize
+
+In most cases, the system you are configuring will either be a
+@dfn{client} system, actively initiating a PPP connection on user
+request, or it will be a @dfn{server} system, passively waiting for
+connections from client systems.  Other arrangements are possible, but
+the instructions in this system assume that you are configuring either a
+client or a server.
+
+These instructions also assume that the serial link involves a serial
+communications port (that is, a tty device), since pppd requires a
+serial port.
+
+@menu
+* Client machines::  
+* Server machines::  
+* Setting up syslog::           
+* Pppd options::                
+* Authentication secrets files::  
+* IP Addresses::                
+@end menu
+
+@node Client machines, Server machines, Configuration, Configuration
+@section Client machines
+
+On a client machine, the way that the user requests that a connection be
+established is by running pppd, either directly or through a shell
+script.  Pppd should be given the name of the serial port to use as an
+option.  In this mode, pppd will fork and detach itself from its
+controlling terminal, so that the shell will return to its prompt.  (If
+this behaviour is not desired, use the -detach option.)
+
+Usually, the connect option should also be used.  The connect option
+takes an argument which is a command to run to establish the serial link
+and invoke PPP software on the remote machine.  This command is run with
+its standard input and standard output connected to the serial port.
+Giving the connect option to pppd also has the side-effect of causing
+pppd to open the serial port without waiting for the modem carrier
+detect signal.
+
+The process of establishing the serial link often involves a dialog.  If
+the serial port is connected to a modem, we first need to send some
+commands to the modem to configure it and dial the remote system.  Often
+there is then a dialog with the remote system to supply a username and
+password.  The @file{chat} program supplied with the ppp-2.x package is
+useful for automating such dialogs.  Chat uses a @dfn{script} consisting
+of alternately strings to expect to receive on the serial port, and
+strings to send on the serial port.  The script can also specify strings
+which indicate an error and abort the dialog.
+
+@node Server machines, , Client machines, Configuration
+@section Server machines
+
+There are generally three ways in which a server machine can be set up
+to allow client machines to establish a PPP link:
+
+@enumerate
+@item
+Client machines log in as regular users (often via a serial port
+connected to a modem, but possibly through a telnet or rlogin session)
+and then run pppd as a shell command.
+@item
+Client machines log in using a username whose login shell is pppd
+or a script which runs pppd.
+@item
+Client machines connect to a serial port which has a pppd running
+permanently on it (instead of a "getty" or other program providing a
+login service).
+@end enumerate
+
+Method 1 is very simple to set up, and is useful where existing users of
+a system have remote machines (for example at home) from which they want
+to establish a PPP connection from time to time.  Methods 2 and 3
+possibly have a security advantage in that they do not allow PPP client
+systems access to a shell.  Method 2 allows regular logins and PPP
+connections on the same port, while with method 3, would-be crackers may
+well be frustrated (unless they speak fluent PPP).
+
+With any of these methods, I strongly recommend that you configure PPP
+to require authentication from the client, by including the `auth'
+option in the /etc/ppp/options file.
+
+@node Setting up syslog, , Server machines, Configuration
+@section Setting up syslog
+
+Pppd uses the @file{syslog} facility to report information about the
+state of the connection, as does @file{chat}.  It is useful to set up
+syslog to print some of these messages on the console, and to record
+most of them to a file.  The messages from pppd are logged with facility
+@samp{daemon} and one of three levels:
+@itemize @bullet
+@item
+@samp{notice} for messages about important events such as the
+connection becoming available for IP traffic and the local and remote IP
+addresses in use.
+@item
+@samp{info} for messages about less important events, such as
+detecting a modem hangup.
+@item
+@samp{debug} for messages which are of use in working out why the
+connection is not working properly.
+@end itemize
+
+The messages from chat are logged with facility @samp{local2} and level
+@samp{debug}.
+
+Syslog is controlled by the syslog configuration file
+@file{/etc/syslog.conf}.  Generally the standard configuration will log
+facility @samp{daemon} messages with level @samp{notice} and above to a
+system log file such as @file{/var/log/syslog} (the name may vary on
+different systems).  I find it useful to have the notice level messages
+from pppd displayed on the console, and all messages from pppd and chat
+logged to a file such as @file{/etc/ppp/log}.  To achieve this,
+find the line in /etc/syslog.conf which has /dev/console
+on the right-hand side, and add `daemon.notice' on the left.  This
+line should end up something like this:
+
+@example
+*.err;kern.debug;auth.notice;mail.crit;daemon.notice    /dev/console
+@end example
+
+And add a line like this:
+
+@example
+daemon,local2.debug                                     /etc/ppp/log
+@end example
+
+The space between the left and right hand sides is one or more tabs, not
+spaces, and there are no tabs or spaces at the beginning of the line.
+
+You will need to create an empty @file{/etc/ppp/log} file; syslogd will
+not create it.  Once you have modified @file{/etc/syslog.conf}, you need
+to either reboot or notify syslogd to re-read the file.  On most
+systems, you notify syslogd by sending it a SIGHUP signal.  Syslogd's
+process ID is usually stored in a file such as @file{/etc/syslogd.pid}
+or @file{/var/run/syslog.pid}.  Thus you can notify syslogd to re-read
+the file by executing a command such as:
+
+@example
+kill -HUP `cat /etc/syslogd.pid`
+@end example
+
+@node Pppd options, , Setting up syslog, Configuration
+@section Pppd options
+
+@node Authentication secrets files, , Pppd options, Configuration
+@section Authentication secrets files
+
+@node IP Addresses,  , Authentication secrets files, Configuration
+@section IP Addresses
+
+@node Security, Compression, Configuration, Top
+@chapter Security
+
+@node Compression,  , Security, Top
+@chapter Compression
+
+@bye
diff -ruN ppp-2.4.2/pppd/Makefile.sol2 ppp-cvs-20040427/pppd/Makefile.sol2
--- ppp-2.4.2/pppd/Makefile.sol2	2003-11-27 22:25:25.000000000 +0100
+++ ppp-cvs-20040427/pppd/Makefile.sol2	2002-11-02 20:50:09.000000000 +0100
@@ -1,6 +1,6 @@
 #
 # Makefile for pppd under Solaris 2.
-# $Id: Makefile.sol2,v 1.24 2003/11/27 21:25:25 paulus Exp $
+# $Id: Makefile.sol2,v 1.23 2002/11/02 19:48:12 carlsonj Exp $
 #
 
 include ../Makedefs.com
@@ -8,8 +8,8 @@
 CFLAGS	=  -I../include -DSVR4 -DSOL2 $(COPTS)
 LIBS	= -lsocket -lnsl
 
-OBJS	=  main.o magic.o fsm.o lcp.o ipcp.o upap.o chap-new.o eap.o md5.o \
-	tty.o ccp.o ecp.o auth.o options.o demand.o utils.o sys-solaris.o
+OBJS	=  main.o magic.o fsm.o lcp.o ipcp.o upap.o chap.o eap.o md5.o tty.o \
+	ccp.o ecp.o auth.o options.o demand.o utils.o sys-solaris.o
 
 #
 # uncomment the following to enable plugins
diff -ruN ppp-2.4.2/pppd/Makefile.sunos4 ppp-cvs-20040427/pppd/Makefile.sunos4
--- ppp-2.4.2/pppd/Makefile.sunos4	2003-11-27 22:25:25.000000000 +0100
+++ ppp-cvs-20040427/pppd/Makefile.sunos4	2002-11-02 20:50:09.000000000 +0100
@@ -1,6 +1,6 @@
 #
 # Makefile for pppd under SunOS 4.
-# $Id: Makefile.sunos4,v 1.14 2003/11/27 21:25:25 paulus Exp $
+# $Id: Makefile.sunos4,v 1.13 2002/11/02 19:48:12 carlsonj Exp $
 #
 
 include ../sunos4/Makedefs
@@ -12,7 +12,7 @@
 
 all: pppd
 
-OBJS = main.o magic.o fsm.o lcp.o ipcp.o upap.o chap-new.o md5.o ccp.o ecp.o \
+OBJS = main.o magic.o fsm.o lcp.o ipcp.o upap.o chap.o md5.o ccp.o ecp.o \
 	auth.o options.o demand.o utils.o sys-sunos4.o tty.o eap.o
 
 pppd:	$(OBJS)
diff -ruN ppp-2.4.2/pppd/chap-new.c ppp-cvs-20040427/pppd/chap-new.c
--- ppp-2.4.2/pppd/chap-new.c	2003-11-27 23:22:36.000000000 +0100
+++ ppp-cvs-20040427/pppd/chap-new.c	2004-01-17 06:50:11.000000000 +0100
@@ -33,7 +33,7 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#define RCSID	"$Id: chap-new.c,v 1.3 2003/11/27 22:22:36 paulus Exp $"
+#define RCSID	"$Id: chap-new.c,v 1.4 2004/01/17 05:47:55 carlsonj Exp $"
 
 #include <stdlib.h>
 #include <string.h>
@@ -49,7 +49,7 @@
 int (*chap_verify_hook)(char *name, char *ourname, int id,
 			struct chap_digest_type *digest,
 			unsigned char *challenge, unsigned char *response,
-			unsigned char *message, int message_space) = NULL;
+			char *message, int message_space) = NULL;
 
 /*
  * Option variables.
@@ -119,7 +119,7 @@
 static int chap_verify_response(char *name, char *ourname, int id,
 		struct chap_digest_type *digest,
 		unsigned char *challenge, unsigned char *response,
-		unsigned char *message, int message_space);
+		char *message, int message_space);
 static void chap_respond(struct chap_client_state *cs, int id,
 		unsigned char *pkt, int len);
 static void chap_handle_status(struct chap_client_state *cs, int code, int id,
@@ -306,11 +306,11 @@
 {
 	int response_len, ok, mlen;
 	unsigned char *response, *p;
-	unsigned char *name = NULL;	/* initialized to shut gcc up */
+	char *name = NULL;	/* initialized to shut gcc up */
 	int (*verifier)(char *, char *, int, struct chap_digest_type *,
-		unsigned char *, unsigned char *, unsigned char *, int);
+		unsigned char *, unsigned char *, char *, int);
 	char rname[MAXNAMELEN+1];
-	unsigned char message[256];
+	char message[256];
 
 	if ((ss->flags & LOWERUP) == 0)
 		return;
@@ -322,7 +322,7 @@
 		response = pkt;
 		GETCHAR(response_len, pkt);
 		len -= response_len + 1;	/* length of name */
-		name = pkt + response_len;
+		name = (char *)pkt + response_len;
 		if (len < 0)
 			return;
 
@@ -391,14 +391,14 @@
 chap_verify_response(char *name, char *ourname, int id,
 		     struct chap_digest_type *digest,
 		     unsigned char *challenge, unsigned char *response,
-		     unsigned char *message, int message_space)
+		     char *message, int message_space)
 {
 	int ok;
-	char secret[MAXSECRETLEN];
+	unsigned char secret[MAXSECRETLEN];
 	int secret_len;
 
 	/* Get the secret that the peer is supposed to know */
-	if (!get_secret(0, name, ourname, secret, &secret_len, 1)) {
+	if (!get_secret(0, name, ourname, (char *)secret, &secret_len, 1)) {
 		error("No CHAP secret found for authenticating %q", name);
 		return 0;
 	}
diff -ruN ppp-2.4.2/pppd/chap-new.h ppp-cvs-20040427/pppd/chap-new.h
--- ppp-2.4.2/pppd/chap-new.h	2003-06-11 14:47:31.000000000 +0200
+++ ppp-cvs-20040427/pppd/chap-new.h	2004-01-17 06:50:12.000000000 +0100
@@ -123,7 +123,7 @@
 extern int (*chap_verify_hook)(char *name, char *ourname, int id,
 			struct chap_digest_type *digest,
 			unsigned char *challenge, unsigned char *response,
-			unsigned char *message, int message_space);
+			char *message, int message_space);
 
 /* Called by digest code to register a digest type */
 extern void chap_register_digest(struct chap_digest_type *);
diff -ruN ppp-2.4.2/pppd/chap_ms.c ppp-cvs-20040427/pppd/chap_ms.c
--- ppp-2.4.2/pppd/chap_ms.c	2003-11-18 11:42:56.000000000 +0100
+++ ppp-cvs-20040427/pppd/chap_ms.c	2004-04-14 04:40:21.000000000 +0200
@@ -74,7 +74,7 @@
  *
  */
 
-#define RCSID	"$Id: chap_ms.c,v 1.30 2003/07/10 17:59:33 fcusack Exp $"
+#define RCSID	"$Id: chap_ms.c,v 1.31 2004/04/14 02:39:39 carlsonj Exp $"
 
 #ifdef CHAPMS
 
@@ -164,9 +164,11 @@
 chapms_generate_challenge(unsigned char *challenge)
 {
 	*challenge++ = 8;
+#ifdef DEBUGMPPEKEY
 	if (mschap_challenge && strlen(mschap_challenge) == 8)
 		memcpy(challenge, mschap_challenge, 8);
 	else
+#endif
 		random_bytes(challenge, 8);
 }
 
@@ -174,9 +176,11 @@
 chapms2_generate_challenge(unsigned char *challenge)
 {
 	*challenge++ = 16;
+#ifdef DEBUGMPPEKEY
 	if (mschap_challenge && strlen(mschap_challenge) == 16)
 		memcpy(challenge, mschap_challenge, 16);
 	else
+#endif
 		random_bytes(challenge, 16);
 }
 
@@ -207,7 +211,7 @@
 #endif
 
 	/* Generate the expected response. */
-	ChapMS(challenge, secret, secret_len, &md);
+	ChapMS(challenge, (char *)secret, secret_len, &md);
 
 #ifdef MSLANMAN
 	/* Determine which part of response to verify against */
@@ -250,8 +254,8 @@
 
 	/* Generate the expected response and our mutual auth. */
 	ChapMS2(challenge, rmd->PeerChallenge, name,
-		secret, secret_len, &md,
-		saresponse, MS_CHAP2_AUTHENTICATOR);
+		(char *)secret, secret_len, &md,
+		(unsigned char *)saresponse, MS_CHAP2_AUTHENTICATOR);
 
 	/* compare MDs and send the appropriate status */
 	/*
@@ -326,8 +330,13 @@
 {
 	challenge++;	/* skip length, should be 16 */
 	*response++ = MS_CHAP2_RESPONSE_LEN;
-	ChapMS2(challenge, mschap2_peer_challenge, our_name,
-		secret, secret_len,
+	ChapMS2(challenge,
+#ifdef DEBUGMPPEKEY
+		mschap2_peer_challenge,
+#else
+		NULL,
+#endif
+		our_name, secret, secret_len,
 		(MS_Chap2Response *) response, private,
 		MS_CHAP2_AUTHENTICATEE);
 }
@@ -335,7 +344,8 @@
 static int
 chapms2_check_success(unsigned char *msg, int len, unsigned char *private)
 {
-	if ((len < MS_AUTH_RESPONSE_LENGTH + 2) || strncmp(msg, "S=", 2)) {
+	if ((len < MS_AUTH_RESPONSE_LENGTH + 2) ||
+	    strncmp((char *)msg, "S=", 2) != 0) {
 		/* Packet does not start with "S=" */
 		error("MS-CHAPv2 Success packet is badly formed.");
 		return 0;
@@ -351,7 +361,7 @@
 	/* Authenticator Response matches. */
 	msg += MS_AUTH_RESPONSE_LENGTH; /* Eat it */
 	len -= MS_AUTH_RESPONSE_LENGTH;
-	if ((len >= 3) && !strncmp(msg, " M=", 3)) {
+	if ((len >= 3) && !strncmp((char *)msg, " M=", 3)) {
 		msg += 3; /* Eat the delimiter */
 	} else if (len) {
 		/* Packet has extra text which does not begin " M=" */
@@ -477,7 +487,7 @@
     SHA1_Init(&sha1Context);
     SHA1_Update(&sha1Context, PeerChallenge, 16);
     SHA1_Update(&sha1Context, rchallenge, 16);
-    SHA1_Update(&sha1Context, user, strlen(user));
+    SHA1_Update(&sha1Context, (unsigned char *)user, strlen(user));
     SHA1_Final(sha1Hash, &sha1Context);
 
     BCOPY(sha1Hash, Challenge, 8);
@@ -512,7 +522,7 @@
     MD4_CTX		md4Context;
 
     MD4Init(&md4Context);
-    MD4Update(&md4Context, secret, mdlen);
+    MD4Update(&md4Context, (unsigned char *)secret, mdlen);
     MD4Final(hash, &md4Context);
 
 }
@@ -526,7 +536,7 @@
 
     /* Hash the Unicode version of the secret (== password). */
     ascii2unicode(secret, secret_len, unicodePassword);
-    NTPasswordHash(unicodePassword, secret_len * 2, PasswordHash);
+    NTPasswordHash((char *)unicodePassword, secret_len * 2, PasswordHash);
 
     ChallengeResponse(rchallenge, PasswordHash, NTResponse);
 }
@@ -539,11 +549,12 @@
     u_char	PasswordHash[MD4_SIGNATURE_SIZE];
     u_char	Challenge[8];
 
-    ChallengeHash(PeerChallenge, rchallenge, username, Challenge);
+    ChallengeHash(PeerChallenge, (unsigned char *)rchallenge, username,
+		  Challenge);
 
     /* Hash the Unicode version of the secret (== password). */
     ascii2unicode(secret, secret_len, unicodePassword);
-    NTPasswordHash(unicodePassword, secret_len * 2, PasswordHash);
+    NTPasswordHash((char *)unicodePassword, secret_len * 2, PasswordHash);
 
     ChallengeResponse(Challenge, PasswordHash, NTResponse);
 }
@@ -603,8 +614,9 @@
 
     /* Hash (x2) the Unicode version of the secret (== password). */
     ascii2unicode(secret, secret_len, unicodePassword);
-    NTPasswordHash(unicodePassword, secret_len * 2, PasswordHash);
-    NTPasswordHash(PasswordHash, sizeof(PasswordHash), PasswordHashHash);
+    NTPasswordHash((char *)unicodePassword, secret_len * 2, PasswordHash);
+    NTPasswordHash((char *)PasswordHash, sizeof(PasswordHash),
+		   PasswordHashHash);
 
     SHA1_Init(&sha1Context);
     SHA1_Update(&sha1Context, PasswordHashHash, sizeof(PasswordHashHash));
@@ -622,7 +634,7 @@
 
     /* Convert to ASCII hex string. */
     for (i = 0; i < MAX((MS_AUTH_RESPONSE_LENGTH / 2), sizeof(Digest)); i++)
-	sprintf(&authResponse[i * 2], "%02X", Digest[i]);
+	sprintf((char *)&authResponse[i * 2], "%02X", Digest[i]);
 }
 
 
@@ -825,7 +837,7 @@
 	      sizeof(response->PeerChallenge));
 
     /* Generate the NT-Response */
-    ChapMS2_NT(rchallenge, response->PeerChallenge, user,
+    ChapMS2_NT((char *)rchallenge, response->PeerChallenge, user,
 	       secret, secret_len, response->NTResp);
 
     /* Generate the Authenticator Response. */
diff -ruN ppp-2.4.2/pppd/fsm.c ppp-cvs-20040427/pppd/fsm.c
--- ppp-2.4.2/pppd/fsm.c	2003-06-29 12:06:14.000000000 +0200
+++ ppp-cvs-20040427/pppd/fsm.c	2004-02-02 05:00:11.000000000 +0100
@@ -40,7 +40,7 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#define RCSID	"$Id: fsm.c,v 1.20 2003/06/29 10:06:14 paulus Exp $"
+#define RCSID	"$Id: fsm.c,v 1.22 2004/02/02 03:57:19 carlsonj Exp $"
 
 /*
  * TODO:
@@ -201,6 +201,44 @@
     }
 }
 
+/*
+ * terminate_layer - Start process of shutting down the FSM
+ *
+ * Cancel any timeout running, notify upper layers we're done, and
+ * send a terminate-request message as configured.
+ */
+static void
+terminate_layer(f, nextstate)
+    fsm *f;
+    int nextstate;
+{
+    if( f->state != OPENED )
+	UNTIMEOUT(fsm_timeout, f);	/* Cancel timeout */
+    else if( f->callbacks->down )
+	(*f->callbacks->down)(f);	/* Inform upper layers we're down */
+
+    /* Init restart counter and send Terminate-Request */
+    f->retransmits = f->maxtermtransmits;
+    fsm_sdata(f, TERMREQ, f->reqid = ++f->id,
+	      (u_char *) f->term_reason, f->term_reason_len);
+
+    if (f->retransmits == 0) {
+	/*
+	 * User asked for no terminate requests at all; just close it.
+	 * We've already fired off one Terminate-Request just to be nice
+	 * to the peer, but we're not going to wait for a reply.
+	 */
+	f->state = nextstate == CLOSING ? CLOSED : STOPPED;
+	if( f->callbacks->finished )
+	    (*f->callbacks->finished)(f);
+	return;
+    }
+
+    TIMEOUT(fsm_timeout, f, f->timeouttime);
+    --f->retransmits;
+
+    f->state = nextstate;
+}
 
 /*
  * fsm_close - Start closing connection.
@@ -230,19 +268,7 @@
     case ACKRCVD:
     case ACKSENT:
     case OPENED:
-	if( f->state != OPENED )
-	    UNTIMEOUT(fsm_timeout, f);	/* Cancel timeout */
-	else if( f->callbacks->down )
-	    (*f->callbacks->down)(f);	/* Inform upper layers we're down */
-
-	/* Init restart counter, send Terminate-Request */
-	f->retransmits = f->maxtermtransmits;
-	fsm_sdata(f, TERMREQ, f->reqid = ++f->id,
-		  (u_char *) f->term_reason, f->term_reason_len);
-	TIMEOUT(fsm_timeout, f, f->timeouttime);
-	--f->retransmits;
-
-	f->state = CLOSING;
+	terminate_layer(f, CLOSING);
 	break;
     }
 }
@@ -689,17 +715,7 @@
 	break;
 
     case OPENED:
-	if( f->callbacks->down )
-	    (*f->callbacks->down)(f);
-
-	/* Init restart counter, send Terminate-Request */
-	f->retransmits = f->maxtermtransmits;
-	fsm_sdata(f, TERMREQ, f->reqid = ++f->id,
-		  (u_char *) f->term_reason, f->term_reason_len);
-	TIMEOUT(fsm_timeout, f, f->timeouttime);
-	--f->retransmits;
-
-	f->state = STOPPING;
+	terminate_layer(f, STOPPING);
 	break;
 
     default:
diff -ruN ppp-2.4.2/pppd/main.c ppp-cvs-20040427/pppd/main.c
--- ppp-2.4.2/pppd/main.c	2004-01-13 05:00:34.000000000 +0100
+++ ppp-cvs-20040427/pppd/main.c	2004-04-12 13:25:19.000000000 +0200
@@ -40,7 +40,7 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#define RCSID	"$Id: main.c,v 1.131 2004/01/13 04:00:34 paulus Exp $"
+#define RCSID	"$Id: main.c,v 1.136 2004/04/12 11:20:19 paulus Exp $"
 
 #include <stdio.h>
 #include <ctype.h>
@@ -150,6 +150,7 @@
 int got_sigterm;
 int got_sighup;
 
+static sigset_t signals_handled;
 static int waiting;
 static sigjmp_buf sigjmp;
 
@@ -648,16 +649,15 @@
 handle_events()
 {
     struct timeval timo;
-    sigset_t mask;
 
     kill_link = open_ccp_flag = 0;
     if (sigsetjmp(sigjmp, 1) == 0) {
-	sigprocmask(SIG_BLOCK, &mask, NULL);
+	sigprocmask(SIG_BLOCK, &signals_handled, NULL);
 	if (got_sighup || got_sigterm || got_sigusr2 || got_sigchld) {
-	    sigprocmask(SIG_UNBLOCK, &mask, NULL);
+	    sigprocmask(SIG_UNBLOCK, &signals_handled, NULL);
 	} else {
 	    waiting = 1;
-	    sigprocmask(SIG_UNBLOCK, &mask, NULL);
+	    sigprocmask(SIG_UNBLOCK, &signals_handled, NULL);
 	    wait_input(timeleft(&timo));
 	}
     }
@@ -692,19 +692,18 @@
 setup_signals()
 {
     struct sigaction sa;
-    sigset_t mask;
 
     /*
      * Compute mask of all interesting signals and install signal handlers
      * for each.  Only one signal handler may be active at a time.  Therefore,
      * all other signals should be masked when any handler is executing.
      */
-    sigemptyset(&mask);
-    sigaddset(&mask, SIGHUP);
-    sigaddset(&mask, SIGINT);
-    sigaddset(&mask, SIGTERM);
-    sigaddset(&mask, SIGCHLD);
-    sigaddset(&mask, SIGUSR2);
+    sigemptyset(&signals_handled);
+    sigaddset(&signals_handled, SIGHUP);
+    sigaddset(&signals_handled, SIGINT);
+    sigaddset(&signals_handled, SIGTERM);
+    sigaddset(&signals_handled, SIGCHLD);
+    sigaddset(&signals_handled, SIGUSR2);
 
 #define SIGNAL(s, handler)	do { \
 	sa.sa_handler = handler; \
@@ -712,7 +711,7 @@
 	    fatal("Couldn't establish signal handler (%d): %m", s); \
     } while (0)
 
-    sa.sa_mask = mask;
+    sa.sa_mask = signals_handled;
     sa.sa_flags = 0;
     SIGNAL(SIGHUP, hup);		/* Hangup */
     SIGNAL(SIGINT, term);		/* Interrupt */
@@ -1173,6 +1172,7 @@
        info("Connect time %d.%d minutes.", t/10, t%10);
        info("Sent %u bytes, received %u bytes.",
 	    link_stats.bytes_out, link_stats.bytes_in);
+       link_stats_valid = 0;
     }
 }
 
@@ -1329,6 +1329,7 @@
 
 /*
  * kill_my_pg - send a signal to our process group, and ignore it ourselves.
+ * We assume that sig is currently blocked.
  */
 static void
 kill_my_pg(sig)
@@ -1336,10 +1337,22 @@
 {
     struct sigaction act, oldact;
 
+    sigemptyset(&act.sa_mask);		/* unnecessary in fact */
     act.sa_handler = SIG_IGN;
     act.sa_flags = 0;
-    sigaction(sig, &act, &oldact);
     kill(0, sig);
+    /*
+     * The kill() above made the signal pending for us, as well as
+     * the rest of our process group, but we don't want it delivered
+     * to us.  It is blocked at the moment.  Setting it to be ignored
+     * will cause the pending signal to be discarded.  If we did the
+     * kill() after setting the signal to be ignored, it is unspecified
+     * (by POSIX) whether the signal is immediately discarded or left
+     * pending, and in fact Linux would leave it pending, and so it
+     * would be delivered after the current signal handler exits,
+     * leading to an infinite loop.
+     */
+    sigaction(sig, &act, &oldact);
     sigaction(sig, &oldact, NULL);
 }
 
diff -ruN ppp-2.4.2/pppd/plugins/Makefile ppp-cvs-20040427/pppd/plugins/Makefile
--- ppp-2.4.2/pppd/plugins/Makefile	2004-01-13 04:56:24.000000000 +0100
+++ ppp-cvs-20040427/pppd/plugins/Makefile	1970-01-01 01:00:00.000000000 +0100
@@ -1,38 +0,0 @@
-CC	= gcc
-COPTS	= -O2 -g
-CFLAGS	= $(COPTS) -I.. -I../../include -fPIC
-LDFLAGS	= -shared
-INSTALL	= install -o root
-
-SUBDIRS := rp-pppoe
-# Uncomment the next line to include the radius authentication plugin
-# SUBDIRS += radius
-PLUGINS := minconn.so passprompt.so passwordfd.so
-
-# include dependencies if present
-ifeq (.depend,$(wildcard .depend))
-include .depend
-endif
-
-all:	$(PLUGINS)
-	for d in $(SUBDIRS); do $(MAKE) $(MFLAGS) -C $$d all; done
-
-%.so: %.c
-	$(CC) -o $@ $(LDFLAGS) $(CFLAGS) $^
-
-VERSION = $(shell awk -F '"' '/VERSION/ { print $$2; }' ../patchlevel.h)
-LIBDIR	= $(DESTDIR)/usr/lib/pppd/$(VERSION)
-
-install: $(PLUGINS)
-	$(INSTALL) -d $(LIBDIR)
-	$(INSTALL) $? $(LIBDIR)
-	for d in $(SUBDIRS); do $(MAKE) $(MFLAGS) -C $$d INSTALL=$(INSTALL) \
-				LIBDIR=$(LIBDIR) install; done
-
-clean:
-	rm -f *.o *.so *.a
-	for d in $(SUBDIRS); do $(MAKE) $(MFLAGS) -C $$d clean; done
-
-depend:
-	$(CPP) -M $(CFLAGS) *.c >.depend
-	for d in $(SUBDIRS); do $(MAKE) $(MFLAGS) -C $$d depend; done
diff -ruN ppp-2.4.2/pppd/plugins/radius/CVS/Entries ppp-cvs-20040427/pppd/plugins/radius/CVS/Entries
--- ppp-2.4.2/pppd/plugins/radius/CVS/Entries	2002-12-04 22:49:09.000000000 +0100
+++ ppp-cvs-20040427/pppd/plugins/radius/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-/pppd-radattr.8/1.1/Tue Jan 22 16:03:00 2002//
-/pppd-radius.8/1.4/Tue Apr  2 13:55:00 2002//
-/radattr.c/1.1/Tue Jan 22 16:03:00 2002//
-D/radiusclient////
-/Makefile.linux/1.5/Sat Nov  9 11:24:42 2002//
-/radrealms.c/1.1/Sat Oct  5 04:35:24 2002//
-/radius.c/1.18/Wed Dec  4 21:49:09 2002//
diff -ruN ppp-2.4.2/pppd/plugins/radius/CVS/Repository ppp-cvs-20040427/pppd/plugins/radius/CVS/Repository
--- ppp-2.4.2/pppd/plugins/radius/CVS/Repository	2002-09-07 12:37:51.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/radius
diff -ruN ppp-2.4.2/pppd/plugins/radius/CVS/Root ppp-cvs-20040427/pppd/plugins/radius/CVS/Root
--- ppp-2.4.2/pppd/plugins/radius/CVS/Root	2002-09-07 12:37:51.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/radius/Makefile ppp-cvs-20040427/pppd/plugins/radius/Makefile
--- ppp-2.4.2/pppd/plugins/radius/Makefile	2002-11-09 12:24:42.000000000 +0100
+++ ppp-cvs-20040427/pppd/plugins/radius/Makefile	1970-01-01 01:00:00.000000000 +0100
@@ -1,74 +0,0 @@
-# Makefile for RADIUS plugin
-#
-# Copyright 2002 Roaring Penguin Software Inc.
-#
-
-MANDIR=/usr/man
-PLUGIN=radius.so radattr.so radrealms.so
-CFLAGS=-I../.. -I../../../include -Iradiusclient/include -O2
-
-# Uncomment the next line to include support for Microsoft's
-# MS-CHAP authentication protocol.
-CHAPMS=y
-# Uncomment the next line to include support for MPPE.
-MPPE=y
-# Uncomment the next lint to include support for traffic limiting
-MAXOCTETS=y
-
-ifdef CHAPMS
-CFLAGS += -DCHAPMS=1
-ifdef MPPE
-CFLAGS += -DMPPE=1
-endif
-endif
-ifdef MAXOCTETS
-CFLAGS += -DMAXOCTETS=1
-endif
-
-all: $(PLUGIN)
-
-install: all
-	$(MAKE) $(MFLAGS) -C radiusclient install
-	$(INSTALL) -d -m 755 $(LIBDIR)
-	$(INSTALL) -s -c -m 755 radius.so $(LIBDIR)
-	$(INSTALL) -s -c -m 755 radattr.so $(LIBDIR)
-	$(INSTALL) -s -c -m 755 radrealms.so $(LIBDIR)
-	$(INSTALL) -c -m 444 pppd-radius.8 $(MANDIR)/man8
-	$(INSTALL) -c -m 444 pppd-radattr.8 $(MANDIR)/man8
-
-radius.so: radiusclient/lib/.libs/libradiusclient.a radius.o
-	gcc -o radius.so -shared radius.o radiusclient/lib/.libs/libradiusclient.a
-
-radattr.so: radattr.o
-	gcc -o radattr.so -shared radattr.o
-
-radrealms.so: radrealms.o
-	gcc -o radrealms.so -shared radrealms.o
-
-radius.o: radius.c
-	gcc $(CFLAGS) -c -o radius.o -fPIC radius.c
-
-radattr.o: radattr.c
-	gcc $(CFLAGS) -c -o radattr.o -fPIC radattr.c
-
-radrealms.o: radrealms.c
-	gcc $(CFLAGS) -c -o radrealms.o -fPIC radrealms.c
-
-radiusclient/lib/.libs/libradiusclient.a:
-	test -r radiusclient/Makefile ||           \
-		(cd radiusclient;                  \
-		 ./configure --prefix=/usr         \
-			     --sysconfdir=/etc     \
-			     --enable-shared       \
-			     --enable-static)
-	$(MAKE) -C radiusclient
-
-clean:
-	$(MAKE) $(MFLAGS) -C radiusclient clean
-	rm -f *.o *.so
-
-distclean:
-	rm -f *.o *.so
-	$(MAKE) $(MFLAGS) -C radiusclient distclean
-
-dist-clean: distclean
diff -ruN ppp-2.4.2/pppd/plugins/radius/pppd-radius.8 ppp-cvs-20040427/pppd/plugins/radius/pppd-radius.8
--- ppp-2.4.2/pppd/plugins/radius/pppd-radius.8	2002-04-02 15:55:00.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/pppd-radius.8	2004-03-26 14:30:16.000000000 +0100
@@ -1,5 +1,5 @@
 .\" manual page [] for RADIUS plugin for pppd 2.4
-.\" $Id: pppd-radius.8,v 1.4 2002/04/02 13:55:00 dfs Exp $
+.\" $Id: pppd-radius.8,v 1.5 2004/03/26 13:27:17 kad Exp $
 .\" SH section heading
 .\" SS subsection heading
 .\" LP paragraph
@@ -40,6 +40,15 @@
 used, then the plugin uses
 .I /etc/radiusclient/radiusclient.conf
 as the configuration file.
+.TP
+.BI "avpair " attribute=value
+Adds an Attribute-Value pair to be passed on to the RADIUS server on each request.
+.TP
+.BI map-to-ifname
+Sets Radius NAS-Port attribute to number equal to interface name (Default)
+.TP
+.BI map-to-ttyname
+Sets Radius NAS-Port attribute value via libradiusclient library
 
 .SH USAGE
 To use the plugin, simply supply the
diff -ruN ppp-2.4.2/pppd/plugins/radius/radius.c ppp-cvs-20040427/pppd/plugins/radius/radius.c
--- ppp-2.4.2/pppd/plugins/radius/radius.c	2004-01-13 03:26:11.000000000 +0100
+++ ppp-cvs-20040427/pppd/plugins/radius/radius.c	2004-04-12 07:20:16.000000000 +0200
@@ -24,7 +24,7 @@
 *
 ***********************************************************************/
 static char const RCSID[] =
-"$Id: radius.c,v 1.22 2004/01/11 08:01:30 paulus Exp $";
+"$Id: radius.c,v 1.25 2004/04/12 05:16:37 kad Exp $";
 
 #include "pppd.h"
 #include "chap-new.h"
@@ -52,10 +52,15 @@
     char *vpstr;
     struct avpopt *next;
 } *avpopt = NULL;
+static bool portnummap = 0;
 
 static option_t Options[] = {
     { "radius-config-file", o_string, &config_file },
     { "avpair", o_special, add_avp },
+    { "map-to-ttyname", o_bool, &portnummap,
+	"Set Radius NAS-Port attribute value via libradiusclient library", OPT_PRIO | 1 },
+    { "map-to-ifname", o_bool, &portnummap,
+	"Set Radius NAS-Port attribute to number as in interface name (Default)", OPT_PRIOSUB | 0 },
     { NULL }
 };
 
@@ -264,7 +269,7 @@
 
     /* Hack... the "port" is the ppp interface number.  Should really be
        the tty */
-    rstate.client_port = get_client_port(ifname);
+    rstate.client_port = get_client_port(portnummap ? devnam : ifname);
 
     av_type = PW_FRAMED;
     rc_avpair_add(&send, PW_SERVICE_TYPE, &av_type, 0, VENDOR_NONE);
@@ -363,7 +368,7 @@
     /* Put user with potentially realm added in rstate.user */
     if (!rstate.done_chap_once) {
 	make_username_realm(user);
-	rstate.client_port = get_client_port (ifname);
+	rstate.client_port = get_client_port (portnummap ? devnam : ifname);
 	if (radius_pre_auth_hook) {
 	    radius_pre_auth_hook(rstate.user,
 				 &rstate.authserver,
@@ -881,7 +886,7 @@
     rc_avpair_add(&send, PW_ACCT_AUTHENTIC, &av_type, 0, VENDOR_NONE);
 
 
-    av_type = PW_ASYNC;
+    av_type = ( using_pty ? PW_VIRTUAL : ( sync_serial ? PW_SYNC : PW_ASYNC ) );
     rc_avpair_add(&send, PW_NAS_PORT_TYPE, &av_type, 0, VENDOR_NONE);
 
     hisaddr = ho->hisaddr;
@@ -981,9 +986,56 @@
 		       remote_number, 0, VENDOR_NONE);
     }
 
-    av_type = PW_ASYNC;
+    av_type = ( using_pty ? PW_VIRTUAL : ( sync_serial ? PW_SYNC : PW_ASYNC ) );
     rc_avpair_add(&send, PW_NAS_PORT_TYPE, &av_type, 0, VENDOR_NONE);
 
+    av_type = PW_NAS_ERROR;
+    switch( status ) {
+	case EXIT_OK:
+	case EXIT_USER_REQUEST:
+	    av_type = PW_USER_REQUEST;
+	    break;
+
+	case EXIT_HANGUP:
+	case EXIT_PEER_DEAD:
+	case EXIT_CONNECT_FAILED:
+	    av_type = PW_LOST_CARRIER;
+	    break;
+
+	case EXIT_INIT_FAILED:
+	case EXIT_OPEN_FAILED:
+	case EXIT_LOCK_FAILED:
+	case EXIT_PTYCMD_FAILED:
+	    av_type = PW_PORT_ERROR;
+	    break;
+
+	case EXIT_PEER_AUTH_FAILED:
+	case EXIT_AUTH_TOPEER_FAILED:
+	case EXIT_NEGOTIATION_FAILED:
+	case EXIT_CNID_AUTH_FAILED:
+	    av_type = PW_SERVICE_UNAVAILABLE;
+	    break;
+
+	case EXIT_IDLE_TIMEOUT:
+	    av_type = PW_ACCT_IDLE_TIMEOUT;
+	    break;
+
+	case EXIT_CONNECT_TIME:
+	    av_type = PW_ACCT_SESSION_TIMEOUT;
+	    break;
+	    
+#ifdef MAXOCTETS
+	case EXIT_TRAFFIC_LIMIT:
+	    av_type = PW_NAS_REQUEST;
+	    break;
+#endif
+
+	default:
+	    av_type = PW_NAS_ERROR;
+	    break;
+    }
+    rc_avpair_add(&send, PW_ACCT_TERMINATE_CAUSE, &av_type, 0, VENDOR_NONE);
+
     hisaddr = ho->hisaddr;
     av_type = htonl(hisaddr);
     rc_avpair_add(&send, PW_FRAMED_IP_ADDRESS , &av_type , 0, VENDOR_NONE);
@@ -1077,7 +1129,7 @@
 		       remote_number, 0, VENDOR_NONE);
     }
 
-    av_type = PW_ASYNC;
+    av_type = ( using_pty ? PW_VIRTUAL : ( sync_serial ? PW_SYNC : PW_ASYNC ) );
     rc_avpair_add(&send, PW_NAS_PORT_TYPE, &av_type, 0, VENDOR_NONE);
 
     hisaddr = ho->hisaddr;
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/CVS/Entries ppp-cvs-20040427/pppd/plugins/radius/radiusclient/CVS/Entries
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/CVS/Entries	2002-09-07 12:37:54.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,28 +0,0 @@
-/BUGS/1.1/Tue Jan 22 16:03:00 2002//
-/CHANGES/1.1/Tue Jan 22 16:03:00 2002//
-/COPYRIGHT/1.1/Tue Jan 22 16:03:00 2002//
-/Makefile.am/1.1/Tue Jan 22 16:03:00 2002//
-/Makefile.in/1.1/Tue Jan 22 16:03:00 2002//
-/README/1.1/Tue Jan 22 16:03:00 2002//
-/README.radexample/1.1/Tue Jan 22 16:03:00 2002//
-/acconfig.h/1.1/Tue Jan 22 16:03:00 2002//
-/aclocal.m4/1.2/Mon Jun 24 12:57:15 2002//
-/config.guess/1.1/Tue Jan 22 16:03:00 2002//
-/config.h.in/1.3/Thu Jul 25 16:29:16 2002//
-/config.sub/1.1/Tue Jan 22 16:03:00 2002//
-/configure/1.1/Tue Jan 22 16:03:00 2002//
-/configure.in/1.1/Tue Jan 22 16:03:00 2002//
-/install-sh/1.1/Tue Jan 22 16:03:00 2002//
-/ltconfig/1.1/Tue Jan 22 16:03:00 2002//
-/ltmain.sh/1.1/Tue Jan 22 16:03:00 2002//
-/missing/1.1/Tue Jan 22 16:03:00 2002//
-/mkinstalldirs/1.1/Tue Jan 22 16:03:00 2002//
-/stamp-h.in/1.1/Tue Jan 22 16:03:00 2002//
-D/doc////
-D/etc////
-D/include////
-D/lib////
-D/login.radius////
-D/man////
-D/patches////
-D/src////
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/CVS/Repository ppp-cvs-20040427/pppd/plugins/radius/radiusclient/CVS/Repository
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/CVS/Repository	2002-09-07 12:37:51.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/radius/radiusclient
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/CVS/Root ppp-cvs-20040427/pppd/plugins/radius/radiusclient/CVS/Root
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/CVS/Root	2002-09-07 12:37:51.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/doc/CVS/Entries ppp-cvs-20040427/pppd/plugins/radius/radiusclient/doc/CVS/Entries
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/doc/CVS/Entries	2002-09-07 12:37:52.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/doc/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-/Makefile.am/1.1/Tue Jan 22 16:03:01 2002//
-/Makefile.in/1.1/Tue Jan 22 16:03:01 2002//
-/instop.html/1.1/Tue Jan 22 16:03:01 2002//
-D
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/doc/CVS/Repository ppp-cvs-20040427/pppd/plugins/radius/radiusclient/doc/CVS/Repository
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/doc/CVS/Repository	2002-09-07 12:37:52.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/doc/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/radius/radiusclient/doc
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/doc/CVS/Root ppp-cvs-20040427/pppd/plugins/radius/radiusclient/doc/CVS/Root
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/doc/CVS/Root	2002-09-07 12:37:52.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/doc/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/etc/CVS/Entries ppp-cvs-20040427/pppd/plugins/radius/radiusclient/etc/CVS/Entries
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/etc/CVS/Entries	2002-11-09 12:24:42.000000000 +0100
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/etc/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,13 +0,0 @@
-/dictionary.ascend/1.1/Tue Jan 22 16:03:01 2002//
-/dictionary.compat/1.1/Tue Jan 22 16:03:01 2002//
-/dictionary.merit/1.1/Tue Jan 22 16:03:01 2002//
-/dictionary.microsoft/1.1/Wed Mar  6 13:23:09 2002//
-/issue/1.1/Tue Jan 22 16:03:01 2002//
-/port-id-map/1.1/Tue Jan 22 16:03:01 2002//
-/servers/1.1/Tue Jan 22 16:03:01 2002//
-/Makefile.am/1.4/Sat Nov  9 11:24:42 2002//
-/Makefile.in/1.5/Sat Nov  9 11:24:42 2002//
-/dictionary/1.9/Sat Nov  9 11:24:42 2002//
-/radiusclient.conf.in/1.2/Sat Nov  9 11:24:42 2002//
-/realms/1.1/Sat Oct  5 04:35:24 2002//
-D
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/etc/CVS/Repository ppp-cvs-20040427/pppd/plugins/radius/radiusclient/etc/CVS/Repository
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/etc/CVS/Repository	2002-09-07 12:37:52.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/etc/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/radius/radiusclient/etc
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/etc/CVS/Root ppp-cvs-20040427/pppd/plugins/radius/radiusclient/etc/CVS/Root
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/etc/CVS/Root	2002-09-07 12:37:52.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/etc/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/include/CVS/Entries ppp-cvs-20040427/pppd/plugins/radius/radiusclient/include/CVS/Entries
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/include/CVS/Entries	2002-12-04 22:49:09.000000000 +0100
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/include/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-/Makefile.am/1.1/Tue Jan 22 16:03:01 2002//
-/Makefile.in/1.1/Tue Jan 22 16:03:01 2002//
-/includes.h/1.2/Wed Feb 27 15:51:19 2002//
-/messages.h/1.2/Wed Feb 27 15:51:19 2002//
-/pathnames.h/1.2/Wed Feb 27 15:51:19 2002//
-/radiusclient.h/1.9/Wed Dec  4 21:49:09 2002//
-D
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/include/CVS/Repository ppp-cvs-20040427/pppd/plugins/radius/radiusclient/include/CVS/Repository
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/include/CVS/Repository	2002-09-07 12:37:52.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/include/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/radius/radiusclient/include
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/include/CVS/Root ppp-cvs-20040427/pppd/plugins/radius/radiusclient/include/CVS/Root
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/include/CVS/Root	2002-09-07 12:37:52.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/include/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/lib/CVS/Entries ppp-cvs-20040427/pppd/plugins/radius/radiusclient/lib/CVS/Entries
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/lib/CVS/Entries	2002-12-04 22:49:09.000000000 +0100
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/lib/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,20 +0,0 @@
-/Makefile.am/1.1/Tue Jan 22 16:03:02 2002//
-/Makefile.in/1.2/Wed Feb 20 02:22:35 2002//
-/clientid.c/1.2/Wed Feb 27 15:51:20 2002//
-/dict.c/1.2/Tue Mar  5 15:14:06 2002//
-/env.c/1.2/Wed Feb 27 15:51:20 2002//
-/ip_util.c/1.2/Wed Feb 27 15:51:20 2002//
-/lock.c/1.2/Wed Feb 27 15:51:20 2002//
-/log.c/1.2/Wed Feb 27 15:51:20 2002//
-/md5.c/1.2/Wed Feb 27 15:51:20 2002//
-/memcmp.c/1.2/Wed Feb 27 15:51:20 2002//
-/sendserver.c/1.4/Tue Apr  2 14:09:35 2002//
-/strcasecmp.c/1.2/Wed Feb 27 15:51:20 2002//
-/strdup.c/1.2/Wed Feb 27 15:51:20 2002//
-/strerror.c/1.2/Wed Feb 27 15:51:20 2002//
-/util.c/1.2/Wed Feb 27 15:51:20 2002//
-/buildreq.c/1.4/Sat Nov  9 11:24:43 2002//
-/config.c/1.3/Sat Nov  9 11:24:43 2002//
-/options.h/1.2/Sat Nov  9 11:24:43 2002//
-/avpair.c/1.3/Wed Dec  4 21:49:09 2002//
-D
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/lib/CVS/Repository ppp-cvs-20040427/pppd/plugins/radius/radiusclient/lib/CVS/Repository
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/lib/CVS/Repository	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/lib/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/radius/radiusclient/lib
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/lib/CVS/Root ppp-cvs-20040427/pppd/plugins/radius/radiusclient/lib/CVS/Root
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/lib/CVS/Root	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/lib/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/CVS/Entries ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/CVS/Entries
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/CVS/Entries	2002-09-07 12:37:54.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,5 +0,0 @@
-/Makefile.am/1.1/Tue Jan 22 16:03:02 2002//
-/Makefile.in/1.1/Tue Jan 22 16:03:02 2002//
-/README/1.1/Tue Jan 22 16:03:02 2002//
-/login.radius/1.1/Tue Jan 22 16:03:02 2002//
-D/migs////
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/CVS/Repository ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/CVS/Repository
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/CVS/Repository	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/radius/radiusclient/login.radius
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/CVS/Root ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/CVS/Root
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/CVS/Root	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Entries ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Entries
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Entries	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-/Makefile.am/1.1/Tue Jan 22 16:03:02 2002//
-/Makefile.in/1.1/Tue Jan 22 16:03:02 2002//
-/README/1.1/Tue Jan 22 16:03:02 2002//
-/ip-down/1.1/Tue Jan 22 16:03:02 2002//
-/ip-up/1.1/Tue Jan 22 16:03:02 2002//
-/login.radius/1.1/Tue Jan 22 16:03:02 2002//
-D
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Repository ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Repository
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Repository	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/radius/radiusclient/login.radius/migs
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Root ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Root
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Root	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/login.radius/migs/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/man/CVS/Entries ppp-cvs-20040427/pppd/plugins/radius/radiusclient/man/CVS/Entries
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/man/CVS/Entries	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/man/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-/Makefile.am/1.1/Tue Jan 22 16:03:02 2002//
-/Makefile.in/1.1/Tue Jan 22 16:03:02 2002//
-D
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/man/CVS/Repository ppp-cvs-20040427/pppd/plugins/radius/radiusclient/man/CVS/Repository
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/man/CVS/Repository	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/man/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/radius/radiusclient/man
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/man/CVS/Root ppp-cvs-20040427/pppd/plugins/radius/radiusclient/man/CVS/Root
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/man/CVS/Root	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/man/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/patches/CVS/Entries ppp-cvs-20040427/pppd/plugins/radius/radiusclient/patches/CVS/Entries
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/patches/CVS/Entries	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/patches/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-/Makefile.am/1.1/Tue Jan 22 16:03:03 2002//
-/Makefile.in/1.1/Tue Jan 22 16:03:03 2002//
-/README/1.1/Tue Jan 22 16:03:03 2002//
-/merit-2.4.21-CHAP.diff/1.1/Tue Jan 22 16:03:04 2002//
-/radiusd-1.16.accounting.diff/1.1/Tue Jan 22 16:03:04 2002//
-/radiusd-1.16.shadow.diff/1.1/Tue Jan 22 16:03:04 2002//
-D
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/patches/CVS/Repository ppp-cvs-20040427/pppd/plugins/radius/radiusclient/patches/CVS/Repository
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/patches/CVS/Repository	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/patches/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/radius/radiusclient/patches
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/patches/CVS/Root ppp-cvs-20040427/pppd/plugins/radius/radiusclient/patches/CVS/Root
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/patches/CVS/Root	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/patches/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/src/CVS/Entries ppp-cvs-20040427/pppd/plugins/radius/radiusclient/src/CVS/Entries
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/src/CVS/Entries	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/src/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-/Makefile.am/1.1/Tue Jan 22 16:03:04 2002//
-/Makefile.in/1.1/Tue Jan 22 16:03:04 2002//
-/local.c/1.1/Tue Jan 22 16:03:04 2002//
-/radacct.c/1.1/Tue Jan 22 16:03:04 2002//
-/radexample-debug/1.1/Tue Jan 22 16:03:04 2002//
-/radexample.c/1.2/Tue Apr  2 14:09:35 2002//
-/radius.c/1.2/Tue Apr  2 14:09:35 2002//
-/radlogin.c/1.1/Tue Jan 22 16:03:04 2002//
-/radlogin.h/1.1/Tue Jan 22 16:03:05 2002//
-/radstatus.c/1.1/Tue Jan 22 16:03:05 2002//
-D
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/src/CVS/Repository ppp-cvs-20040427/pppd/plugins/radius/radiusclient/src/CVS/Repository
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/src/CVS/Repository	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/src/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/radius/radiusclient/src
diff -ruN ppp-2.4.2/pppd/plugins/radius/radiusclient/src/CVS/Root ppp-cvs-20040427/pppd/plugins/radius/radiusclient/src/CVS/Root
--- ppp-2.4.2/pppd/plugins/radius/radiusclient/src/CVS/Root	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/radius/radiusclient/src/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/rp-pppoe/CVS/Entries ppp-cvs-20040427/pppd/plugins/rp-pppoe/CVS/Entries
--- ppp-2.4.2/pppd/plugins/rp-pppoe/CVS/Entries	2002-09-07 12:37:54.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/rp-pppoe/CVS/Entries	1970-01-01 01:00:00.000000000 +0100
@@ -1,9 +0,0 @@
-/Makefile.linux/1.1/Fri Dec 14 02:55:20 2001//
-/common.c/1.1/Fri Dec 14 02:55:20 2001//
-/config.h/1.1/Fri Dec 14 02:55:20 2001//
-/debug.c/1.1/Fri Dec 14 02:55:20 2001//
-/discovery.c/1.1/Fri Dec 14 02:55:20 2001//
-/if.c/1.1/Fri Dec 14 02:55:20 2001//
-/plugin.c/1.7/Tue Apr  2 13:11:00 2002//
-/pppoe.h/1.1/Fri Dec 14 02:55:20 2001//
-D
diff -ruN ppp-2.4.2/pppd/plugins/rp-pppoe/CVS/Repository ppp-cvs-20040427/pppd/plugins/rp-pppoe/CVS/Repository
--- ppp-2.4.2/pppd/plugins/rp-pppoe/CVS/Repository	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/rp-pppoe/CVS/Repository	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ppp/pppd/plugins/rp-pppoe
diff -ruN ppp-2.4.2/pppd/plugins/rp-pppoe/CVS/Root ppp-cvs-20040427/pppd/plugins/rp-pppoe/CVS/Root
--- ppp-2.4.2/pppd/plugins/rp-pppoe/CVS/Root	2002-09-07 12:37:53.000000000 +0200
+++ ppp-cvs-20040427/pppd/plugins/rp-pppoe/CVS/Root	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-samba.org:/data/cvs
diff -ruN ppp-2.4.2/pppd/plugins/rp-pppoe/Makefile ppp-cvs-20040427/pppd/plugins/rp-pppoe/Makefile
--- ppp-2.4.2/pppd/plugins/rp-pppoe/Makefile	2004-01-13 04:57:55.000000000 +0100
+++ ppp-cvs-20040427/pppd/plugins/rp-pppoe/Makefile	1970-01-01 01:00:00.000000000 +0100
@@ -1,50 +0,0 @@
-# Generated automatically from Makefile.in by configure.
-#***********************************************************************
-#
-# Makefile
-#
-# Makefile for Roaring Penguin's Linux PPPoE plugin.
-#
-# Copyright (C) 2001 Roaring Penguin Software Inc.
-#
-# This program may be distributed according to the terms of the GNU
-# General Public License, version 2 or (at your option) any later version.
-#
-# $Id: Makefile.linux,v 1.2 2004/01/13 03:57:55 paulus Exp $
-#***********************************************************************
-
-# Version is set ONLY IN THE MAKEFILE!  Don't delete this!
-VERSION=3.3
-
-COPTS=-O2 -g
-CFLAGS=$(COPTS) -I../../../include/linux
-all: rp-pppoe.so
-
-rp-pppoe.so: libplugin.a plugin.o
-	gcc -o rp-pppoe.so -shared plugin.o libplugin.a
-
-install: all
-	$(INSTALL) -d -m 755 $(LIBDIR)
-	$(INSTALL) -s -c -m 4550 rp-pppoe.so $(LIBDIR)
-
-clean:
-	rm -f *.o *.so
-
-plugin.o: plugin.c
-	gcc '-DRP_VERSION="$(VERSION)"' $(CFLAGS) -I../../..  -c -o plugin.o -fPIC plugin.c
-
-libplugin.a: discovery.o if.o common.o debug.o
-	ar -rc $@ $^
-
-discovery.o: discovery.c
-	gcc $(CFLAGS) '-DVERSION="$(VERSION)"' -c -o discovery.o -fPIC discovery.c
-
-if.o: if.c
-	gcc $(CFLAGS) '-DVERSION="$(VERSION)"' -c -o if.o -fPIC if.c
-
-debug.o: debug.c
-	gcc $(CFLAGS) '-DVERSION="$(VERSION)"' -c -o debug.o -fPIC debug.c
-
-common.o: common.c
-	gcc $(CFLAGS) '-DVERSION="$(VERSION)"' -c -o common.o -fPIC common.c
-
diff -ruN ppp-2.4.2/pppd/pppd.8 ppp-cvs-20040427/pppd/pppd.8
--- ppp-2.4.2/pppd/pppd.8	2004-01-15 06:09:00.000000000 +0100
+++ ppp-cvs-20040427/pppd/pppd.8	2004-04-27 20:25:12.000000000 +0200
@@ -1,5 +1,5 @@
 .\" manual page [] for pppd 2.4
-.\" $Id: pppd.8,v 1.76 2004/01/15 05:09:00 paulus Exp $
+.\" $Id: pppd.8,v 1.77 2004/04/27 18:22:58 fcusack Exp $
 .\" SH section heading
 .\" SS subsection heading
 .\" LP paragraph
@@ -955,11 +955,11 @@
 Require the use of MPPE, with 128\-bit encryption.
 .TP
 .B require-mschap
-Require the peer to authenticate itself using MS-CHAP [Microsft Challenge
+Require the peer to authenticate itself using MS-CHAP [Microsoft Challenge
 Handshake Authentication Protocol] authentication.
 .TP
 .B require-mschap-v2
-Require the peer to authenticate itself using MS-CHAPv2 [Microsft Challenge
+Require the peer to authenticate itself using MS-CHAPv2 [Microsoft Challenge
 Handshake Authentication Protocol, Version 2] authentication.
 .TP
 .B require-eap
diff -ruN ppp-2.4.2/pppd/tty.c ppp-cvs-20040427/pppd/tty.c
--- ppp-2.4.2/pppd/tty.c	2004-01-13 05:17:59.000000000 +0100
+++ ppp-cvs-20040427/pppd/tty.c	2004-01-17 06:50:12.000000000 +0100
@@ -73,7 +73,7 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#define RCSID	"$Id: tty.c,v 1.13 2004/01/13 04:17:59 paulus Exp $"
+#define RCSID	"$Id: tty.c,v 1.14 2004/01/17 05:47:55 carlsonj Exp $"
 
 #include <stdio.h>
 #include <ctype.h>
@@ -512,7 +512,9 @@
 {
 	char *connector;
 	int fdflags;
+#ifndef __linux__
 	struct stat statbuf;
+#endif
 	char numbuf[16];
 
 	/*
diff -ruN ppp-2.4.2/pppdump/bsd-comp.c ppp-cvs-20040427/pppdump/bsd-comp.c
--- ppp-2.4.2/pppdump/bsd-comp.c	1999-04-16 13:34:42.000000000 +0200
+++ ppp-cvs-20040427/pppdump/bsd-comp.c	2004-01-17 06:50:12.000000000 +0100
@@ -38,12 +38,14 @@
  */
 
 /*
- * $Id: bsd-comp.c,v 1.3 1999/04/16 11:35:59 paulus Exp $
+ * $Id: bsd-comp.c,v 1.4 2004/01/17 05:47:55 carlsonj Exp $
  */
 
 #include <sys/types.h>
+#include <stdio.h>
 #include <stddef.h>
 #include <stdlib.h>
+#include <string.h>
 #include "ppp_defs.h"
 #include "ppp-comp.h"
 
diff -ruN ppp-2.4.2/pppdump/deflate.c ppp-cvs-20040427/pppdump/deflate.c
--- ppp-2.4.2/pppdump/deflate.c	2002-12-06 10:49:16.000000000 +0100
+++ ppp-cvs-20040427/pppdump/deflate.c	2004-01-17 06:50:12.000000000 +0100
@@ -33,12 +33,14 @@
  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $Id: deflate.c,v 1.4 2002/12/06 09:49:16 paulus Exp $
+ * $Id: deflate.c,v 1.5 2004/01/17 05:47:55 carlsonj Exp $
  */
 
 #include <sys/types.h>
+#include <stdio.h>
 #include <stddef.h>
 #include <stdlib.h>
+#include <string.h>
 #include "ppp_defs.h"
 #include "ppp-comp.h"
 #include "zlib.h"
diff -ruN ppp-2.4.2/pppdump/pppdump.c ppp-cvs-20040427/pppdump/pppdump.c
--- ppp-2.4.2/pppdump/pppdump.c	2002-12-06 10:17:02.000000000 +0100
+++ ppp-cvs-20040427/pppdump/pppdump.c	2004-01-17 06:50:12.000000000 +0100
@@ -35,6 +35,7 @@
  */
 #include <stdio.h>
 #include <unistd.h>
+#include <stdlib.h>
 #include <time.h>
 #include <sys/types.h>
 #include "ppp_defs.h"
@@ -53,6 +54,12 @@
 extern int optind;
 extern char *optarg;
 
+void dumplog();
+void dumpppp();
+void show_time();
+void handle_ccp();
+
+int
 main(ac, av)
     int ac;
     char **av;
@@ -105,6 +112,7 @@
     exit(0);
 }
 
+void
 dumplog(f)
     FILE *f;
 {
@@ -244,6 +252,7 @@
 
 unsigned char dbuf[8192];
 
+void
 dumpppp(f)
     FILE *f;
 {
@@ -429,6 +438,7 @@
     NULL
 };
 
+void
 handle_ccp(cp, dp, len)
     struct pkt *cp;
     u_char *dp;
@@ -485,6 +495,7 @@
     }
 }
 
+void
 show_time(f, c)
     FILE *f;
     int c;
diff -ruN ppp-2.4.2/scripts/callback ppp-cvs-20040427/scripts/callback
--- ppp-2.4.2/scripts/callback	1995-08-09 04:49:51.000000000 +0200
+++ ppp-cvs-20040427/scripts/callback	2004-04-12 07:30:11.000000000 +0200
@@ -33,7 +33,7 @@
 	ABORT		'\nNO ANSWER\r'			\
 	ABORT		'\nRINGING\r\n\r\nRINGING\r'	\
 	''		AT				\
-	'OK-+++\c-OK'	'AT&C0&D2S0=0H0			\
+	'OK-+++\c-OK'	'AT&C0&D2S0=0H0'		\
 	TIMEOUT		30				\
 	OK		ATDT$TELEPHONE			\
 	CONNECT		''				\
diff -ruN ppp-2.4.2/scripts/ipv6-down.sample ppp-cvs-20040427/scripts/ipv6-down.sample
--- ppp-2.4.2/scripts/ipv6-down.sample	1999-08-23 08:07:07.000000000 +0200
+++ ppp-cvs-20040427/scripts/ipv6-down.sample	2004-04-12 07:45:18.000000000 +0200
@@ -8,24 +8,24 @@
 # Kill the router advertisement daemon on this interface.
 # The killing procedure is copied from RedHat 6.0 initscripts.
 
-DEVICE=$1
+DEVICE="$1"
 
-PIDFILE=/var/run/radvd-$DEVICE.pid
+PIDFILE="/var/run/radvd-$DEVICE.pid"
 
-[ -f $PIDFILE ] || exit 0
+[ -f "$PIDFILE" ] || exit 0
 
-PID=`cat $PIDFILE`
+PID="$(cat "$PIDFILE")"
 if [ "$PID" != "" ]; then
-    if ps h $PID >/dev/null 2>&1; then
-	kill -TERM $PID
+    if ps h "$PID" >/dev/null 2>&1; then
+	kill -TERM "$PID"
 	usleep 10000
-	if ps h $PID >/dev/null 2>&1; then
+	if ps h "$PID" >/dev/null 2>&1; then
 	    sleep 1
-	    if ps h $PID >/dev/null 2>&1; then
-		kill -KILL $PID
+	    if ps h "$PID" >/dev/null 2>&1; then
+		kill -KILL "$PID"
 	    fi
 	fi
     fi
 fi
 
-rm -f $PIDFILE
+rm -f "$PIDFILE"
diff -ruN ppp-2.4.2/scripts/ipv6-up.sample ppp-cvs-20040427/scripts/ipv6-up.sample
--- ppp-2.4.2/scripts/ipv6-up.sample	1999-08-23 08:07:07.000000000 +0200
+++ ppp-cvs-20040427/scripts/ipv6-up.sample	2004-04-12 07:45:18.000000000 +0200
@@ -8,26 +8,27 @@
 # Start router advertisements on this link.
 # Based on radvd 0.5.0 behaviour
 
-DEVICE=$1
+DEVICE="$1"
 
-CFGFILE=/usr/inet6/etc/radvd.conf-$DEVICE
-PIDFILE=/var/run/radvd-$DEVICE.pid
+CFGFILE="/etc/radvd.conf-$DEVICE"
+PIDFILE="/var/run/radvd-$DEVICE.pid"
+EXEFILE="/usr/sbin/radvd"
 
-if [ -x /usr/inet6/sbin/radvd && -f $CFGFILE ]; then
-    touch $PIDFILE
-    if [ ! -f $PIDFILE ]; then
+if [ -x "$EXEFILE" -a -f "$CFGFILE" ]; then
+    touch "$PIDFILE"
+    if [ ! -f "$PIDFILE" ]; then
 	echo "error: $PIDFILE is not a regular file. Aborting"
 	exit 0
     fi
 
-    PID=`cat $PIDFILE`
-    if [ "$PID" != "" ]; then
-	ps h $PID >/dev/null 2>&1 && exit 0
+    PID="$(cat "$PIDFILE")"
+    if [ -n "$PID" ]; then
+	ps h "$PID" >/dev/null 2>&1 && exit 0
     fi
 
     # radvd 0.5.0 doesn't write a pid-file so we do it here
     # enabling debugging keeps radvd in foreground, putting it
     # on background gives us the PID.
-    /usr/inet6/sbin/radvd -d 1 -C $CFGFILE &
-    echo $! >$PIDFILE
+    "$EXEFILE" -d 1 -C "$CFGFILE" &
+    echo $! >"$PIDFILE"
 fi
diff -ruN ppp-2.4.2/scripts/pon ppp-cvs-20040427/scripts/pon
--- ppp-2.4.2/scripts/pon	2002-11-25 00:30:44.000000000 +0100
+++ ppp-cvs-20040427/scripts/pon	2004-04-12 07:45:18.000000000 +0200
@@ -1,10 +1,12 @@
 #!/bin/sh
 
+PPP_ON_BOOT=/etc/ppp/ppp_on_boot
+
 case "$1" in
   -*) echo "
 Usage: pon [provider] [arguments]
 
-If pon is invoked without arguments, /etc/ppp/ppp_on_boot file will be
+If pon is invoked without arguments, $PPP_ON_BOOT file will be
 run, presuming it exists and is executable. Otherwise, a PPP connection
 will be started using settings from /etc/ppp/peers/provider.
 If you specify one argument, a PPP connection will be started using
@@ -16,8 +18,8 @@
       ;;
 esac
 
-if [ -z "$1" -a -x /etc/ppp/ppp_on_boot ]; then
-  exec /etc/ppp/ppp_on_boot
+if [ -z "$1" -a -x "$PPP_ON_BOOT" ]; then
+  exec "$PPP_ON_BOOT"
 fi
 
 if [ -z "$1" -a ! -f /etc/ppp/peers/provider ]; then
diff -ruN ppp-2.4.2/svr4/Makedefs ppp-cvs-20040427/svr4/Makedefs
--- ppp-2.4.2/svr4/Makedefs	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/Makedefs	2000-06-09 03:36:34.000000000 +0200
@@ -0,0 +1,16 @@
+#
+# defines common to several Makefiles
+#
+
+INSTALL= /usr/sbin/install
+
+BINDIR = /usr/local/bin
+MANDIR = /usr/local/man
+ETCDIR = /etc/ppp
+
+COPTS = -O -Xa
+
+# For compiling with gcc, comment out the COPTS definition above and
+# uncomment the next 2 definitions.
+#CC = gcc
+#COPTS = -O2
diff -ruN ppp-2.4.2/svr4/Makedefs.sol2 ppp-cvs-20040427/svr4/Makedefs.sol2
--- ppp-2.4.2/svr4/Makedefs.sol2	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/Makedefs.sol2	1999-09-21 22:50:31.000000000 +0200
@@ -0,0 +1,59 @@
+#
+# Generic make definitions for Solaris 2
+#
+# $Id: Makedefs.sol2,v 1.3 1999/09/21 20:37:20 masputra Exp $
+#
+
+include ../svr4/Makedefs
+
+CPPFLAGS	= -D_KERNEL -DSVR4 -DSOL2 -DPRIOQ -DDEBUG -I../include
+CFLAGS		= $(CPPFLAGS) $(COPTS)
+
+# lint-specific variables
+LINT            = lint
+LINT_OPT_32     =
+LINT_OPT_64     = -Xarch=v9 -errchk=longptr64
+
+LINT_32     	=
+LINT_32     	+= -erroff=E_BAD_PTR_CAST_ALIGN
+LINT_32     	+= -erroff=E_SUPPRESSION_DIRECTIVE_UNUSED
+LINT_32     	+= -erroff=E_SUSPICIOUS_COMPARISON
+LINT_32     	+= -erroff=E_CAST_UINT_TO_SIGNED_INT
+LINT_32     	+= -erroff=E_PASS_UINT_TO_SIGNED_INT
+LINT_32     	+= -erroff=E_INVALID_ANNOTATION_NAME
+LINT_32     	+= -erroff=E_FUNC_ARG_UNUSED
+# This might be needed, but zlib.c and vjcompress.c will squawk 
+# when not ignored
+LINT_32		+= -erroff=E_CASE_FALLTHRU
+LINT_32		+= -erroff=E_RET_INT_IMPLICITLY
+LINT_32		+= -erroff=E_FUNC_NO_RET_VAL
+# Some STREAMS macros will be noisy too when this isn't ignored
+LINT_32		+= -erroff=E_CONSTANT_CONDITION
+LINT_32		+= -erroff=E_CONST_EXPR
+
+# Extra noise suppressant for 64-bit
+EXTRA_OFF 	=
+EXTRA_OFF 	+= -erroff=E_CAST_INT_TO_SMALL_INT
+EXTRA_OFF 	+= -erroff=E_CAST_INT_CONST_TO_SMALL_INT
+EXTRA_OFF 	+= -erroff=E_CAST_TO_PTR_FROM_INT
+EXTRA_OFF 	+= -erroff=E_ASSIGN_INT_TO_SMALL_INT
+EXTRA_OFF 	+= -erroff=E_ASSIGN_INT_FROM_BIG_CONST
+EXTRA_OFF 	+= -erroff=E_CONST_PROMOTED_UNSIGNED_LL
+EXTRA_OFF 	+= -erroff=E_CONST_PROMOTED_LONG_LONG
+EXTRA_OFF 	+= -erroff=E_CONST_TRUNCATED_BY_ASSIGN
+EXTRA_OFF 	+= -erroff=E_PASS_INT_FROM_BIG_CONST
+EXTRA_OFF 	+= -erroff=E_COMP_INT_WITH_LARGE_INT
+EXTRA_OFF 	+= -erroff=E_ASSIGN_UINT_TO_SIGNED_INT
+EXTRA_OFF 	+= -erroff=E_ASSIGN_NARROW_CONV
+EXTRA_OFF 	+= -erroff=E_PASS_INT_TO_SMALL_INT
+EXTRA_OFF 	+= -erroff=E_PTR_CONV_LOSES_BITS
+
+LINT_64     	= $(LINT_32)
+LINT_64     	+= $(EXTRA_OFF)
+
+LINTFLAGS64     = -Xa -nsxmuF -errtags=yes $(LINT_OPT_64) $(LINT_64)
+LINT64          = $(LINT) -c $(LINTFLAGS64) $(CPPFLAGS)
+
+LINTFLAGS32     = -Xa -nsxmuF -errtags=yes $(LINT_OPT_32) $(LINT_32)
+LINT32          = $(LINT) -c $(LINTFLAGS32) $(CPPFLAGS)
+
diff -ruN ppp-2.4.2/svr4/Makefile.sol2 ppp-cvs-20040427/svr4/Makefile.sol2
--- ppp-2.4.2/svr4/Makefile.sol2	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/Makefile.sol2	1999-09-21 22:50:32.000000000 +0200
@@ -0,0 +1,66 @@
+#
+# Makefile for STREAMS modules for Solaris 2.
+#
+# $Id: Makefile.sol2,v 1.18 1999/09/21 20:37:20 masputra Exp $
+#
+
+include Makedefs.sol2
+
+COPTS += -xO2 -xspace -W0,-Lt
+
+COMP_OBJS = ppp_comp.o bsd-comp.o deflate.o zlib.o vjcompress.o \
+	ppp_comp_mod.o
+
+all:	ppp ppp_ahdl ppp_comp
+
+ppp:	ppp.o ppp_mod.o
+	ld -r -o $@ ppp.o ppp_mod.o
+	chmod +x $@
+
+ppp_ahdl: ppp_ahdlc.o ppp_ahdlc_mod.o
+	ld -r -o $@ ppp_ahdlc.o ppp_ahdlc_mod.o
+	chmod +x $@
+
+ppp_comp: $(COMP_OBJS)
+	ld -r -o $@ $(COMP_OBJS)
+	chmod +x $@
+
+bsd-comp.o:	../modules/bsd-comp.c
+	$(CC) $(CFLAGS) -c $?
+deflate.o:	../modules/deflate.c
+	$(CC) $(CFLAGS) -c $?
+ppp.o:	../modules/ppp.c
+	$(CC) $(CFLAGS) -c $?
+ppp_mod.o:	ppp_mod.c
+	$(CC) $(CFLAGS) -c $?
+ppp_ahdlc_mod.o: ppp_ahdlc_mod.c
+	$(CC) $(CFLAGS) -c $?
+ppp_ahdlc.o: ../modules/ppp_ahdlc.c
+	$(CC) $(CFLAGS) -c $?
+ppp_comp.o: ../modules/ppp_comp.c
+	$(CC) $(CFLAGS) -c $?
+ppp_comp_mod.o:	ppp_comp_mod.c
+	$(CC) $(CFLAGS) -c $?
+vjcompress.o:	../modules/vjcompress.c
+	$(CC) $(CFLAGS) -c $?
+zlib.o:	../common/zlib.c
+	$(CC) $(CFLAGS) -c $?
+
+install:
+	cp ppp ppp.conf /kernel/drv
+	cp ppp_comp ppp_ahdl /kernel/strmod
+	if grep clone:ppp /etc/minor_perm; then :; else \
+	  echo clone:ppp 0644 root sys >>/etc/minor_perm; fi
+	/usr/sbin/rem_drv ppp 2>/dev/null || true
+	/usr/sbin/add_drv ppp
+
+SRCS	= ../modules/ppp.c ppp_mod.c ../modules/ppp_ahdlc.c ppp_ahdlc_mod.c \
+	../modules/ppp_comp.c ../modules/bsd-comp.c ../modules/deflate.c \
+	../common/zlib.c ../modules/vjcompress.c ppp_comp_mod.c
+
+lint:
+	$(LINT32) $(SRCS)
+
+clean:
+	rm -f ppp ppp_comp ppp_ahdl *.o *~ core
+	rm -f *.ln
diff -ruN ppp-2.4.2/svr4/Makefile.sol2-64 ppp-cvs-20040427/svr4/Makefile.sol2-64
--- ppp-2.4.2/svr4/Makefile.sol2-64	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/Makefile.sol2-64	1999-09-21 22:50:33.000000000 +0200
@@ -0,0 +1,85 @@
+#
+# Makefile for 64-bit STREAMS modules for Solaris 2.
+#
+# $Id: Makefile.sol2-64,v 1.3 1999/09/21 20:37:20 masputra Exp $
+#
+
+include Makedefs.sol2
+
+# Sun's cc flag for LP64 compilation / linkage
+COPTS 		+= -xchip=ultra -xarch=v9 -Wc,-xcode=abs32 -Wc,-Qiselect-regsym=0 -xO3 -xspace -W0,-Lt
+
+# subdirectory where 64-bit objects / binaries will be placed
+LP64DIR		= sparcv9
+
+# Name of legacy Makefile (for 32-bit binaries)
+STD_MAKE	= Makefile.sol2
+
+COMP_OBJS	= $(LP64DIR)/ppp_comp.o $(LP64DIR)/bsd-comp.o \
+		$(LP64DIR)/deflate.o $(LP64DIR)/zlib.o $(LP64DIR)/vjcompress.o \
+		$(LP64DIR)/ppp_comp_mod.o
+
+all:	std_objs $(LP64DIR) ppp ppp_ahdl ppp_comp
+
+std_objs:
+	$(MAKE) -f $(STD_MAKE) all
+
+ppp:	$(LP64DIR)/ppp.o $(LP64DIR)/ppp_mod.o
+	ld -r -o $(LP64DIR)/$@ $(LP64DIR)/ppp.o $(LP64DIR)/ppp_mod.o
+	chmod +x $(LP64DIR)/$@
+
+ppp_ahdl: $(LP64DIR)/ppp_ahdlc.o $(LP64DIR)/ppp_ahdlc_mod.o
+	ld -r -o $(LP64DIR)/$@ $(LP64DIR)/ppp_ahdlc.o $(LP64DIR)/ppp_ahdlc_mod.o
+	chmod +x $(LP64DIR)/$@
+
+ppp_comp: $(COMP_OBJS)
+	ld -r -o $(LP64DIR)/$@ $(COMP_OBJS)
+	chmod +x $(LP64DIR)/$@
+
+$(LP64DIR)/bsd-comp.o: ../modules/bsd-comp.c
+	$(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/deflate.o: ../modules/deflate.c
+	$(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp.o:	../modules/ppp.c
+	$(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_mod.o:	ppp_mod.c
+	$(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_ahdlc_mod.o: ppp_ahdlc_mod.c
+	$(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_ahdlc.o: ../modules/ppp_ahdlc.c
+	$(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_comp.o: ../modules/ppp_comp.c
+	$(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_comp_mod.o: ppp_comp_mod.c
+	$(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/vjcompress.o: ../modules/vjcompress.c
+	$(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/zlib.o:	../common/zlib.c
+	$(CC) $(CFLAGS) -c $? -o $@
+
+$(LP64DIR):
+	mkdir -m 755 -p $@
+
+install:
+	cp ppp ppp.conf /kernel/drv
+	cp ppp_comp ppp_ahdl /kernel/strmod
+	cp $(LP64DIR)/ppp /kernel/drv/$(LP64DIR)
+	cp $(LP64DIR)/ppp_comp $(LP64DIR)/ppp_ahdl /kernel/strmod/$(LP64DIR)
+	if grep clone:ppp /etc/minor_perm; then :; else \
+	  echo clone:ppp 0644 root sys >>/etc/minor_perm; fi
+	/usr/sbin/rem_drv ppp 2>/dev/null || true
+	/usr/sbin/add_drv ppp
+
+SRCS	= ../modules/ppp.c ppp_mod.c ../modules/ppp_ahdlc.c ppp_ahdlc_mod.c \
+	../modules/ppp_comp.c ../modules/bsd-comp.c ../modules/deflate.c \
+	../common/zlib.c ../modules/vjcompress.c ppp_comp_mod.c
+
+lint:
+	$(LINT64) $(SRCS)
+
+lint-32:
+	$(LINT32) $(SRCS)
+
+clean:
+	$(MAKE) -f $(STD_MAKE) clean
+	rm -f $(LP64DIR)/ppp $(LP64DIR)/ppp_comp $(LP64DIR)/ppp_ahdl $(LP64DIR)/*.o $(LP64DIR)/*~ $(LP64DIR)/core
diff -ruN ppp-2.4.2/svr4/Makefile.top ppp-cvs-20040427/svr4/Makefile.top
--- ppp-2.4.2/svr4/Makefile.top	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/Makefile.top	1999-04-01 14:37:44.000000000 +0200
@@ -0,0 +1,50 @@
+#
+# ppp top level makefile for SVR4 and Solaris 2
+#
+# $Id: Makefile.top,v 1.8 1999/04/01 11:44:55 paulus Exp $
+#
+
+include svr4/Makedefs
+
+all:
+	cd chat; $(MAKE) all
+	cd pppd; $(MAKE) all
+	cd pppstats; $(MAKE) all
+	cd pppdump; $(MAKE) all
+	cd svr4; $(MAKE) all
+
+install: $(BINDIR) $(MANDIR)/man8 install-progs install-etcppp
+
+install-progs:
+	cd chat; $(MAKE) install
+	cd pppd; $(MAKE) install
+	cd pppstats; $(MAKE) install
+	cd pppdump; $(MAKE) install
+	cd svr4; $(MAKE) install
+
+install-etcppp: $(ETCDIR) $(ETCDIR)/options $(ETCDIR)/pap-secrets \
+	$(ETCDIR)/chap-secrets
+
+$(ETCDIR)/options:
+	cp etc.ppp/options $@
+	chmod go-w $@
+$(ETCDIR)/pap-secrets:
+	$(INSTALL) -f $(ETCDIR) -m 600 etc.ppp/pap-secrets
+$(ETCDIR)/chap-secrets:
+	$(INSTALL) -f $(ETCDIR) -m 600 etc.ppp/chap-secrets
+
+$(BINDIR):
+	mkdir -m 755 -p $@
+$(MANDIR)/man8:
+	mkdir -m 755 -p $@
+$(ETCDIR):
+	mkdir -m 755 -p $@
+
+clean:
+	rm -f *~
+	cd chat; $(MAKE) clean
+	cd pppd; $(MAKE) clean
+	cd pppstats; $(MAKE) clean
+	cd pppdump; $(MAKE) clean
+	cd svr4; $(MAKE) clean
+
diff -ruN ppp-2.4.2/svr4/ppp.Master ppp-cvs-20040427/svr4/ppp.Master
--- ppp-2.4.2/svr4/ppp.Master	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/ppp.Master	1995-10-27 04:58:28.000000000 +0100
@@ -0,0 +1 @@
+ppp	-	Sciof	ppp	0	0	1	128	-1
diff -ruN ppp-2.4.2/svr4/ppp.Node ppp-cvs-20040427/svr4/ppp.Node
--- ppp-2.4.2/svr4/ppp.Node	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/ppp.Node	1995-10-27 04:58:36.000000000 +0100
@@ -0,0 +1 @@
+clone	ppp	c	ppp
diff -ruN ppp-2.4.2/svr4/ppp.System ppp-cvs-20040427/svr4/ppp.System
--- ppp-2.4.2/svr4/ppp.System	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/ppp.System	1995-10-27 04:58:37.000000000 +0100
@@ -0,0 +1 @@
+ppp	Y	1	0	0	0	0	0	0	0
diff -ruN ppp-2.4.2/svr4/ppp.conf ppp-cvs-20040427/svr4/ppp.conf
--- ppp-2.4.2/svr4/ppp.conf	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/ppp.conf	1995-06-01 06:39:00.000000000 +0200
@@ -0,0 +1 @@
+name="ppp" parent="pseudo" instance=0;
diff -ruN ppp-2.4.2/svr4/ppp_ahdl.Master ppp-cvs-20040427/svr4/ppp_ahdl.Master
--- ppp-2.4.2/svr4/ppp_ahdl.Master	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/ppp_ahdl.Master	1995-10-27 04:58:32.000000000 +0100
@@ -0,0 +1 @@
+ppp_ahdl	-	iSf	phdl	0	0	1	1	-1
diff -ruN ppp-2.4.2/svr4/ppp_ahdl.System ppp-cvs-20040427/svr4/ppp_ahdl.System
--- ppp-2.4.2/svr4/ppp_ahdl.System	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/ppp_ahdl.System	1995-10-27 04:58:38.000000000 +0100
@@ -0,0 +1 @@
+ppp_ahdl	Y	1	0	0	0	0	0	0	0
diff -ruN ppp-2.4.2/svr4/ppp_ahdlc_mod.c ppp-cvs-20040427/svr4/ppp_ahdlc_mod.c
--- ppp-2.4.2/svr4/ppp_ahdlc_mod.c	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/ppp_ahdlc_mod.c	1995-12-11 06:21:02.000000000 +0100
@@ -0,0 +1,49 @@
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/conf.h>
+#include <sys/modctl.h>
+#include <sys/sunddi.h>
+
+extern struct streamtab ppp_ahdlcinfo;
+
+static struct fmodsw fsw = {
+    "ppp_ahdl",
+    &ppp_ahdlcinfo,
+    D_NEW | D_MP | D_MTQPAIR
+};
+
+extern struct mod_ops mod_strmodops;
+
+static struct modlstrmod modlstrmod = {
+    &mod_strmodops,
+    "PPP async HDLC module",
+    &fsw
+};
+
+static struct modlinkage modlinkage = {
+    MODREV_1,
+    (void *) &modlstrmod,
+    NULL
+};
+
+/*
+ * Entry points for modloading.
+ */
+int
+_init(void)
+{
+    return mod_install(&modlinkage);
+}
+
+int
+_fini(void)
+{
+    return mod_remove(&modlinkage);
+}
+
+int
+_info(mip)
+    struct modinfo *mip;
+{
+    return mod_info(&modlinkage, mip);
+}
diff -ruN ppp-2.4.2/svr4/ppp_comp.Master ppp-cvs-20040427/svr4/ppp_comp.Master
--- ppp-2.4.2/svr4/ppp_comp.Master	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/ppp_comp.Master	1995-10-27 04:58:34.000000000 +0100
@@ -0,0 +1 @@
+ppp_comp	-	iSf	pcmp	0	0	1	1	-1
diff -ruN ppp-2.4.2/svr4/ppp_comp.System ppp-cvs-20040427/svr4/ppp_comp.System
--- ppp-2.4.2/svr4/ppp_comp.System	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/ppp_comp.System	1995-10-27 04:58:40.000000000 +0100
@@ -0,0 +1 @@
+ppp_comp	Y	1	0	0	0	0	0	0	0
diff -ruN ppp-2.4.2/svr4/ppp_comp_mod.c ppp-cvs-20040427/svr4/ppp_comp_mod.c
--- ppp-2.4.2/svr4/ppp_comp_mod.c	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/ppp_comp_mod.c	2002-12-06 10:50:10.000000000 +0100
@@ -0,0 +1,89 @@
+/*
+ * ppp_comp_mod.c - modload support for PPP compression STREAMS module.
+ *
+ * Copyright (c) 1994 Paul Mackerras. 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. The name(s) of the authors of this software must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission.
+ *
+ * 4. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by Paul Mackerras
+ *     <paulus@samba.org>".
+ *
+ * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
+ * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $Id: ppp_comp_mod.c,v 1.3 2002/12/06 09:49:16 paulus Exp $
+ */
+
+/*
+ * This file is used under Solaris 2.
+ */
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/conf.h>
+#include <sys/modctl.h>
+#include <sys/sunddi.h>
+
+extern struct streamtab ppp_compinfo;
+
+static struct fmodsw fsw = {
+    "ppp_comp",
+    &ppp_compinfo,
+    D_NEW | D_MP | D_MTQPAIR
+};
+
+extern struct mod_ops mod_strmodops;
+
+static struct modlstrmod modlstrmod = {
+    &mod_strmodops,
+    "PPP compression module",
+    &fsw
+};
+
+static struct modlinkage modlinkage = {
+    MODREV_1,
+    (void *) &modlstrmod,
+    NULL
+};
+
+/*
+ * Entry points for modloading.
+ */
+int
+_init(void)
+{
+    return mod_install(&modlinkage);
+}
+
+int
+_fini(void)
+{
+    return mod_remove(&modlinkage);
+}
+
+int
+_info(mip)
+    struct modinfo *mip;
+{
+    return mod_info(&modlinkage, mip);
+}
diff -ruN ppp-2.4.2/svr4/ppp_mod.c ppp-cvs-20040427/svr4/ppp_mod.c
--- ppp-2.4.2/svr4/ppp_mod.c	1970-01-01 01:00:00.000000000 +0100
+++ ppp-cvs-20040427/svr4/ppp_mod.c	2002-12-06 10:50:10.000000000 +0100
@@ -0,0 +1,182 @@
+/*
+ * ppp_mod.c - modload support for PPP pseudo-device driver.
+ *
+ * Copyright (c) 1994 Paul Mackerras. 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. The name(s) of the authors of this software must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission.
+ *
+ * 4. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by Paul Mackerras
+ *     <paulus@samba.org>".
+ *
+ * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
+ * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $Id: ppp_mod.c,v 1.4 2002/12/06 09:49:16 paulus Exp $
+ */
+
+/*
+ * This file is used under Solaris 2.
+ */
+
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/conf.h>
+#include <sys/modctl.h>
+#include <sys/sunddi.h>
+#include <sys/ksynch.h>
+
+#ifdef __STDC__
+#define __P(x)	x
+#else
+#define __P(x)	()
+#endif
+
+static int ppp_identify __P((dev_info_t *));
+static int ppp_attach __P((dev_info_t *, ddi_attach_cmd_t));
+static int ppp_detach __P((dev_info_t *, ddi_detach_cmd_t));
+static int ppp_devinfo __P((dev_info_t *, ddi_info_cmd_t, void *, void **));
+
+extern struct streamtab pppinfo;
+extern krwlock_t ppp_lower_lock;
+
+static dev_info_t *ppp_dip;
+
+static struct cb_ops cb_ppp_ops = {
+    nulldev, nulldev, nodev, nodev,	/* cb_open, ... */
+    nodev, nodev, nodev, nodev,		/* cb_dump, ... */
+    nodev, nodev, nodev, nochpoll,	/* cb_devmap, ... */
+    ddi_prop_op,			/* cb_prop_op */
+    &pppinfo,				/* cb_stream */
+    D_NEW|D_MP|D_MTQPAIR|D_MTOUTPERIM|D_MTOCEXCL	/* cb_flag */
+};
+
+static struct dev_ops ppp_ops = {
+    DEVO_REV,				/* devo_rev */
+    0,					/* devo_refcnt */
+    ppp_devinfo,			/* devo_getinfo */
+    ppp_identify,			/* devo_identify */
+    nulldev,				/* devo_probe */
+    ppp_attach,				/* devo_attach */
+    ppp_detach,				/* devo_detach */
+    nodev,				/* devo_reset */
+    &cb_ppp_ops,			/* devo_cb_ops */
+    NULL				/* devo_bus_ops */
+};
+
+/*
+ * Module linkage information
+ */
+
+static struct modldrv modldrv = {
+    &mod_driverops,			/* says this is a pseudo driver */
+    "PPP-2.3 multiplexing driver",
+    &ppp_ops				/* driver ops */
+};
+
+static struct modlinkage modlinkage = {
+    MODREV_1,
+    (void *) &modldrv,
+    NULL
+};
+
+int
+_init(void)
+{
+    return mod_install(&modlinkage);
+}
+
+int
+_fini(void)
+{
+    return mod_remove(&modlinkage);
+}
+
+int
+_info(mip)
+    struct modinfo *mip;
+{
+    return mod_info(&modlinkage, mip);
+}
+
+static int
+ppp_identify(dip)
+    dev_info_t *dip;
+{
+    return strcmp(ddi_get_name(dip), "ppp") == 0? DDI_IDENTIFIED:
+	DDI_NOT_IDENTIFIED;
+}
+
+static int
+ppp_attach(dip, cmd)
+    dev_info_t *dip;
+    ddi_attach_cmd_t cmd;
+{
+
+    if (cmd != DDI_ATTACH)
+	return DDI_FAILURE;
+    if (ddi_create_minor_node(dip, "ppp", S_IFCHR, 0, DDI_PSEUDO, CLONE_DEV)
+	== DDI_FAILURE) {
+	ddi_remove_minor_node(dip, NULL);
+	return DDI_FAILURE;
+    }
+    rw_init(&ppp_lower_lock, NULL, RW_DRIVER, NULL);
+    return DDI_SUCCESS;
+}
+
+static int
+ppp_detach(dip, cmd)
+    dev_info_t *dip;
+    ddi_detach_cmd_t cmd;
+{
+    rw_destroy(&ppp_lower_lock);
+    ddi_remove_minor_node(dip, NULL);
+    return DDI_SUCCESS;
+}
+
+static int
+ppp_devinfo(dip, cmd, arg, result)
+    dev_info_t *dip;
+    ddi_info_cmd_t cmd;
+    void *arg;
+    void **result;
+{
+    int error;
+
+    error = DDI_SUCCESS;
+    switch (cmd) {
+    case DDI_INFO_DEVT2DEVINFO:
+	if (ppp_dip == NULL)
+	    error = DDI_FAILURE;
+	else
+	    *result = (void *) ppp_dip;
+	break;
+    case DDI_INFO_DEVT2INSTANCE:
+	*result = NULL;
+	break;
+    default:
+	error = DDI_FAILURE;
+    }
+    return error;
+}
