X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/76ae461853c7ac6e101704f6e6fd41dc520e9921..d547c00f76be21289a5ba403b3d94818d8696360:/ppp.c diff --git a/ppp.c b/ppp.c index f9a60ac..5ed8563 100644 --- a/ppp.c +++ b/ppp.c @@ -12,6 +12,11 @@ #include "tbf.h" #include "cluster.h" +#ifdef LAC +#include "l2tplac.h" +#endif +#include "pppoe.h" + extern tunnelt *tunnel; extern bundlet *bundle; extern fragmentationt *frag; @@ -100,6 +105,14 @@ void processpap(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l) LOG(3, s, t, "PAP login %s/%s\n", user, pass); } +#ifdef LAC + if ((!config->disable_lac_func) && lac_conf_forwardtoremotelns(s, user)) + { + // Creating a tunnel/session has been started + return; + } +#endif + if (session[s].ip || !(r = radiusnew(s))) { // respond now, either no RADIUS available or already authenticated @@ -251,6 +264,16 @@ void processchap(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l) packet.username = calloc(l + 1, 1); memcpy(packet.username, p, l); +#ifdef LAC + if ((!config->disable_lac_func) && lac_conf_forwardtoremotelns(s, packet.username)) + { + free(packet.username); + free(packet.password); + // Creating a tunnel/session has been started + return; + } +#endif + run_plugins(PLUGIN_PRE_AUTH, &packet); if (!packet.continue_auth) { @@ -403,7 +426,7 @@ void lcp_open(sessionidt s, tunnelidt t) } } -static void lcp_restart(sessionidt s) +void lcp_restart(sessionidt s) { session[s].ppp.phase = Establish; // This-Layer-Down @@ -536,7 +559,7 @@ void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l) if (session[s].die) // going down... return; - LOG((*p == EchoReq || *p == EchoReply) ? 4 : 3, s, t, + LOG(((*p == EchoReq || *p == EchoReply) ? 4 : 3), s, t, "LCP: recv %s\n", ppp_code(*p)); if (config->debug > 3) dumplcp(p, l); @@ -2499,6 +2522,11 @@ uint8_t *makeppp(uint8_t *b, int size, uint8_t *p, int l, sessionidt s, tunnelid uint16_t type = mtype; uint8_t *start = b; + if (t == TUNNEL_ID_PPPOE) + { + return pppoe_makeppp(b, size, p, l, s, t, mtype, prio, bid, mp_bits); + } + if (size < 16) // Need more space than this!! { LOG(0, s, t, "makeppp buffer too small for L2TP header (size=%d)\n", size);