// L2TPNS PPP Stuff
-char const *cvs_id_ppp = "$Id: ppp.c,v 1.93 2006/01/19 21:06:39 bodea Exp $";
+char const *cvs_id_ppp = "$Id: ppp.c,v 1.95 2006/02/17 14:35:54 bodea Exp $";
#include <stdio.h>
#include <string.h>
if (mru >= MINMTU)
{
session[s].mru = mru;
+ cluster_send_session(s);
break;
}
session[s].magic = ntohl(*(uint32_t *)(o + 2));
LOG(3, s, t, " Remote requested magic-no %x\n", session[s].magic);
if (!session[s].magic) session[s].magic = time_now; // Netgear DG814 sends zero??
+ cluster_send_session(s);
break;
}
// ConfigRej: fallthrough
while (length > 2)
{
+ if (!o[1] || o[1] > length) return;
+
switch (*o)
{
case 3: // ip address
gotip++; // seen address
- if (o[1] != 6 || o[1] > length) return;
+ if (o[1] != 6) return;
addr = htonl(session[s].ip);
if (memcmp(o + 2, &addr, (sizeof addr)))
break;
case 129: // primary DNS
- if (o[1] != 6 || o[1] > length) return;
+ if (o[1] != 6) return;
addr = htonl(session[s].dns1);
if (memcmp(o + 2, &addr, (sizeof addr)))
break;
case 131: // secondary DNS
- if (o[1] != 6 || o[1] > length) return;
+ if (o[1] != 6) return;
addr = htonl(session[s].dns2);
if (memcmp(o + 2, &addr, sizeof(addr)))
while (length > 2)
{
+ if (!o[1] || o[1] > length) return;
+
switch (*o)
{
case 1: // interface identifier
gotip++; // seen address
- if (o[1] != 10 || o[1] > length) return;
+ if (o[1] != 10) return;
*(uint32_t *) ident = htonl(session[s].ip);
*(uint32_t *) (ident + 4) = 0;