X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/99be8b127a607ddf8da0f77dcffd52d50a3b0613..0ac369f08301c60f499cc88b07a7238c2576b3aa:/ppp.c?ds=sidebyside diff --git a/ppp.c b/ppp.c index 21d9a21..6f5bacf 100644 --- a/ppp.c +++ b/ppp.c @@ -1,6 +1,6 @@ // L2TPNS PPP Stuff -char const *cvs_id_ppp = "$Id: ppp.c,v 1.18 2004-11-03 13:22:39 bodea Exp $"; +char const *cvs_id_ppp = "$Id: ppp.c,v 1.20 2004-11-05 02:21:55 bodea Exp $"; #include #include @@ -194,11 +194,15 @@ void processchap(tunnelidt t, sessionidt s, u8 *p, u16 l) { struct param_pre_auth packet = { &tunnel[t], &session[s], NULL, NULL, PPPCHAP, 1 }; - packet.username = calloc(l - 16 + 1, 1); - packet.password = calloc(16, 1); - memcpy(packet.username, p + 16, l - 16); + packet.password = calloc(17, 1); memcpy(packet.password, p, 16); + p += 16; + l -= 16; + + packet.username = calloc(l + 1, 1); + memcpy(packet.username, p, l); + run_plugins(PLUGIN_PRE_AUTH, &packet); if (!packet.continue_auth) { @@ -277,8 +281,8 @@ void dumplcp(u8 *p, int l) { int proto = ntohs(*(u16 *)(o + 2)); log(4, 0, 0, 0, " %s 0x%x (%s)\n", lcp_types[type], proto, - proto == 0xC223 ? "CHAP" : - proto == 0xC023 ? "PAP" : "UNKNOWN"); + proto == PPPCHAP ? "CHAP" : + proto == PPPPAP ? "PAP" : "UNKNOWN"); } else log(4, 0, 0, 0, " %s odd length %d\n", lcp_types[type], length); @@ -376,7 +380,7 @@ void processlcp(tunnelidt t, sessionidt s, u8 *p, u16 l) case 3: // Authentication-Protocol { int proto = ntohs(*(u16 *)(o + 2)); - if (proto == 0xC223) + if (proto == PPPCHAP) { log(2, session[s].ip, s, t, " Remote end is trying to do CHAP. Rejecting it.\n"); @@ -390,7 +394,7 @@ void processlcp(tunnelidt t, sessionidt s, u8 *p, u16 l) *q++ = ConfigNak; } memcpy(q, o, length); - *(u16 *)(q += 2) = htons(0xC023); // NAK -> Use PAP instead + *(u16 *)(q += 2) = htons(PPPPAP); // NAK -> Use PAP instead q += length; } break; @@ -686,6 +690,12 @@ void processipin(tunnelidt t, sessionidt s, u8 *p, u16 l) return; } + if (session[s].snoop_ip && session[s].snoop_port) + { + // Snooping this session + snoop_send_packet(p, l, session[s].snoop_ip, session[s].snoop_port); + } + // Add on the tun header p -= 4; *(u32 *)p = htonl(0x00000800); @@ -703,11 +713,6 @@ void processipin(tunnelidt t, sessionidt s, u8 *p, u16 l) session[s].pin++; eth_tx += l - 4; - if (session[s].snoop_ip && session[s].snoop_port) - { - // Snooping this session - snoop_send_packet(p, l, session[s].snoop_ip, session[s].snoop_port); - } STAT(tun_tx_packets); INC_STAT(tun_tx_bytes, l); @@ -911,7 +916,7 @@ void initlcp(tunnelidt t, sessionidt s) *(u32 *)(q + 6) = htonl(session[s].magic); *(u8 *)(q + 10) = 3; *(u8 *)(q + 11) = 4; - *(u16 *)(q + 12) = htons(0xC023); // PAP + *(u16 *)(q + 12) = htons(PPPPAP); // PAP tunnelsend(b, 12 + 14, t); }