]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/main.c
device_script(): fix our close() action for the case where in or out <= 2;
[ppp.git] / pppd / main.c
index b4271f837087e520f12f19b36da3370f44f5ba89..5f30dd1867cbfd530a5786cfa4970b85e76e7247 100644 (file)
@@ -1,23 +1,46 @@
 /*
  * main.c - Point-to-Point Protocol main module
  *
- * Copyright (c) 1989 Carnegie Mellon University.
- * All rights reserved.
+ * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved.
  *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by Carnegie Mellon University.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * 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 "Carnegie Mellon University" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For permission or any legal
+ *    details, please contact
+ *      Office of Technology Transfer
+ *      Carnegie Mellon University
+ *      5000 Forbes Avenue
+ *      Pittsburgh, PA  15213-3890
+ *      (412) 268-4387, fax: (412) 268-7395
+ *      tech-transfer@andrew.cmu.edu
+ *
+ * 4. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by Computing Services
+ *     at Carnegie Mellon University (http://www.cmu.edu/computing/)."
+ *
+ * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
+ * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY 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.
  */
 
-#define RCSID  "$Id: main.c,v 1.116 2002/10/12 02:30:21 fcusack Exp $"
+#define RCSID  "$Id: main.c,v 1.122 2003/02/24 12:46:37 fcusack Exp $"
 
 #include <stdio.h>
 #include <ctype.h>
@@ -52,6 +75,7 @@
 #endif
 #include "upap.h"
 #include "chap.h"
+#include "eap.h"
 #include "ccp.h"
 #include "ecp.h"
 #include "pathnames.h"
@@ -146,7 +170,7 @@ int ngroups;                        /* How many groups valid in groups */
 static struct timeval start_time;      /* Time when link was started. */
 
 struct pppd_stats link_stats;
-int link_connect_time;
+unsigned link_connect_time;
 int link_stats_valid;
 
 /*
@@ -229,6 +253,7 @@ struct protent *protocols[] = {
 #ifdef AT_CHANGE
     &atcp_protent,
 #endif
+    &eap_protent,
     NULL
 };
 
@@ -990,7 +1015,7 @@ get_input()
      * Toss all non-LCP packets unless LCP is OPEN.
      */
     if (protocol != PPP_LCP && lcp_fsm[0].state != OPENED) {
-       MAINDEBUG(("get_input: Received non-LCP packet when LCP not open."));
+       dbglog("Discarded non-LCP packet when LCP not open");
        return;
     }
 
@@ -1000,9 +1025,10 @@ get_input()
      */
     if (phase <= PHASE_AUTHENTICATE
        && !(protocol == PPP_LCP || protocol == PPP_LQR
-            || protocol == PPP_PAP || protocol == PPP_CHAP)) {
-       MAINDEBUG(("get_input: discarding proto 0x%x in phase %d",
-                  protocol, phase));
+            || protocol == PPP_PAP || protocol == PPP_CHAP ||
+               protocol == PPP_EAP)) {
+       dbglog("discarding proto 0x%x in phase %d",
+                  protocol, phase);
        return;
     }
 
@@ -1116,11 +1142,11 @@ update_link_stats(u)
     link_connect_time = now.tv_sec - start_time.tv_sec;
     link_stats_valid = 1;
 
-    slprintf(numbuf, sizeof(numbuf), "%d", link_connect_time);
+    slprintf(numbuf, sizeof(numbuf), "%u", link_connect_time);
     script_setenv("CONNECT_TIME", numbuf, 0);
-    slprintf(numbuf, sizeof(numbuf), "%d", link_stats.bytes_out);
+    slprintf(numbuf, sizeof(numbuf), "%u", link_stats.bytes_out);
     script_setenv("BYTES_SENT", numbuf, 0);
-    slprintf(numbuf, sizeof(numbuf), "%d", link_stats.bytes_in);
+    slprintf(numbuf, sizeof(numbuf), "%u", link_stats.bytes_in);
     script_setenv("BYTES_RCVD", numbuf, 0);
 }
 
@@ -1429,12 +1455,19 @@ device_script(program, in, out, dont_wait)
     }
 
     /* dup in and out to fds > 2 */
-    in = dup(in);
-    out = dup(out);
-    if (log_to_fd >= 0) {
-       errfd = dup(log_to_fd);
-    } else {
-       errfd = open(_PATH_CONNERRS, O_WRONLY | O_APPEND | O_CREAT, 0600);
+    {
+       int fd1 = in, fd2 = out, fd3 = log_to_fd;
+
+       in = dup(in);
+       out = dup(out);
+       if (log_to_fd >= 0) {
+           errfd = dup(log_to_fd);
+       } else {
+           errfd = open(_PATH_CONNERRS, O_WRONLY | O_APPEND | O_CREAT, 0600);
+       }
+       close(fd1);
+       close(fd2);
+       close(fd3);
     }
 
     /* close fds 0 - 2 and any others we can think of */