From fa64a8010d72440412792553ff988fc99e212740 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 30 Mar 2025 15:21:21 +0200 Subject: [PATCH] chap: cope with our ack being lost --- ppp.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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; }