]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/ipcp.c
Fixed the old chap.c so that it works with the new auth.c, since
[ppp.git] / pppd / ipcp.c
index c3b052160f949ad74b679bec3c9cac3b15b97fa8..c2a7f27337fa0c1874c01d68439a42dcce88b6e2 100644 (file)
@@ -40,7 +40,7 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#define RCSID  "$Id: ipcp.c,v 1.62 2002/12/04 23:03:32 paulus Exp $"
+#define RCSID  "$Id: ipcp.c,v 1.64 2003/07/28 12:25:41 carlsonj Exp $"
 
 /*
  * TODO:
@@ -91,6 +91,7 @@ static int default_route_set[NUM_PPP];        /* Have set up a default route */
 static int proxy_arp_set[NUM_PPP];     /* Have created proxy arp entry */
 static bool usepeerdns;                        /* Ask peer for DNS addrs */
 static int ipcp_is_up;                 /* have called np_up() */
+static int ipcp_is_open;               /* haven't called np_finished() */
 static bool ask_for_local;             /* request our address from peer */
 static char vj_value[8];               /* string form of vj option value */
 static char netmask_str[20];           /* string form of netmask value */
@@ -602,6 +603,7 @@ ipcp_open(unit)
     int unit;
 {
     fsm_open(&ipcp_fsm[unit]);
+    ipcp_is_open = 1;
 }
 
 
@@ -1096,10 +1098,10 @@ ipcp_nakci(f, p, len)
      * If they want to negotiate about IP addresses, we comply.
      * If they want us to ask for compression, we refuse.
      */
-    while (len > CILEN_VOID) {
+    while (len >= CILEN_VOID) {
        GETCHAR(citype, p);
        GETCHAR(cilen, p);
-       if( (len -= cilen) < 0 )
+       if ( cilen < CILEN_VOID || (len -= cilen) < 0 )
            goto bad;
        next = p + cilen - 2;
 
@@ -1894,7 +1896,10 @@ static void
 ipcp_finished(f)
     fsm *f;
 {
-    np_finished(f->unit, PPP_IP);
+       if (ipcp_is_open) {
+               ipcp_is_open = 0;
+               np_finished(f->unit, PPP_IP);
+       }
 }