diff --git a/ppp.c b/ppp.c index 7a849bd..80ffb17 100644 --- a/ppp.c +++ b/ppp.c @@ -207,7 +207,20 @@ void processchap(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l) if (session[s].ppp.phase != Authenticate) { - LOG(2, s, t, "CHAP ignored in %s phase\n", ppp_phase(session[s].ppp.phase)); + if (session[s].ppp.phase == Network) + { + uint8_t b[MAXETHER]; + uint8_t *p2; + LOG(2, s, t, "CHAP in Network phase, peer probably missed our ack, confirming it\n"); + p2 = makeppp(b, sizeof(b), 0, 0, s, t, PPPCHAP, 0, 0, 0); + if (!p2) return; + *p2 = 3; // ack + p2[1] = p[1]; + *(uint16_t *) (p2 + 2) = ntohs(4); // no message + tunnelsend(b, (p2 - b) + 4, t); // send it + } + else + LOG(2, s, t, "CHAP ignored in %s phase\n", ppp_phase(session[s].ppp.phase)); return; }