kludge around problem with Netgear DM602 authentication
authorBrendan O'Dea <bod@optus.net>
Sat, 3 Jun 2006 08:16:46 +0000 (08:16 +0000)
committerBrendan O'Dea <bod@optus.net>
Sat, 3 Jun 2006 08:16:46 +0000 (08:16 +0000)
Changes
ppp.c

diff --git a/Changes b/Changes
index 0029cfd..7927769 100644 (file)
--- a/Changes
+++ b/Changes
@@ -4,6 +4,7 @@
 - Add Multilink support from Khaled Al Hamwi.
 - Remove non-working setuid option.
 - Convert manual.html to Docbook.
+- Kludge around problem with Netgear DM602 authentication.
 
 * Tue Apr 18 2006 Brendan O'Dea <bod@optus.net> 2.1.18
 - Don't shutdown on TerminateReq, wait for CDN.
diff --git a/ppp.c b/ppp.c
index c369f37..8c1c9a3 100644 (file)
--- a/ppp.c
+++ b/ppp.c
@@ -1,6 +1,6 @@
 // L2TPNS PPP Stuff
 
-char const *cvs_id_ppp = "$Id: ppp.c,v 1.100 2006-04-27 09:53:50 bodea Exp $";
+char const *cvs_id_ppp = "$Id: ppp.c,v 1.101 2006-06-03 08:16:46 bodea Exp $";
 
 #include <stdio.h>
 #include <string.h>
@@ -179,16 +179,24 @@ void processchap(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
                return;
        }
 
-       r = sess_local[s].radius;
-       if (!r)
+       if (session[s].ppp.phase != Authenticate)
        {
-               LOG(3, s, t, "Unexpected CHAP message\n");
+               LOG(2, s, t, "CHAP ignored in %s phase\n", ppp_phase(session[s].ppp.phase));
                return;
        }
 
-       if (session[s].ppp.phase != Authenticate)
+       r = sess_local[s].radius;
+       if (!r)
        {
-               LOG(2, s, t, "CHAP ignored in %s phase\n", ppp_phase(session[s].ppp.phase));
+               LOG(3, s, t, "Unexpected CHAP message\n");
+
+               // Some modems (Netgear DM602, possibly others) persist in using CHAP even
+               // after ACKing our ConfigReq for PAP.
+               if (sess_local[s].lcp_authtype == AUTHPAP && config->radius_authtypes & AUTHCHAP)
+               {
+                       sess_local[s].lcp_authtype = AUTHCHAP;
+                       sendchap(s, t);
+               }
                return;
        }