mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2024-11-26 19:39:53 +03:00
Treating empty IPCP requests as IPCP requests with IP-Address option zeroed out
This commit is contained in:
parent
b9109211d3
commit
f20e99f8e4
@ -1089,8 +1089,6 @@ bool PPPProcessLCPRequestPacket(PPP_SESSION *p, PPP_PACKET *pp)
|
|||||||
// MSCHAPv2 code
|
// MSCHAPv2 code
|
||||||
UCHAR ms_chap_v2_code[3];
|
UCHAR ms_chap_v2_code[3];
|
||||||
|
|
||||||
UINT currentMagic = 0;
|
|
||||||
|
|
||||||
WRITE_USHORT(ms_chap_v2_code, PPP_LCP_AUTH_CHAP);
|
WRITE_USHORT(ms_chap_v2_code, PPP_LCP_AUTH_CHAP);
|
||||||
ms_chap_v2_code[2] = PPP_CHAP_ALG_MS_CHAP_V2;
|
ms_chap_v2_code[2] = PPP_CHAP_ALG_MS_CHAP_V2;
|
||||||
|
|
||||||
@ -1364,6 +1362,8 @@ bool PPPProcessIPCPRequestPacket(PPP_SESSION *p, PPP_PACKET* pp)
|
|||||||
{
|
{
|
||||||
PPP_IPOPTION o;
|
PPP_IPOPTION o;
|
||||||
PPP_IPOPTION res;
|
PPP_IPOPTION res;
|
||||||
|
PPP_OPTION *dummyIpOption;
|
||||||
|
UINT dummyIp = 0;
|
||||||
DHCP_OPTION_LIST cao;
|
DHCP_OPTION_LIST cao;
|
||||||
IP client_ip;
|
IP client_ip;
|
||||||
IP subnet;
|
IP subnet;
|
||||||
@ -1371,21 +1371,27 @@ bool PPPProcessIPCPRequestPacket(PPP_SESSION *p, PPP_PACKET* pp)
|
|||||||
IP gw;
|
IP gw;
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
bool processed = false;
|
bool processed = false;
|
||||||
|
bool isEmptyIpAddress = false;
|
||||||
|
PPP_LCP* c;
|
||||||
|
|
||||||
if (p->IPv4_State == PPP_PROTO_STATUS_REJECTED)
|
if (p->IPv4_State == PPP_PROTO_STATUS_REJECTED)
|
||||||
{
|
{
|
||||||
Debug("We got an IPCP packet after we had it rejected");
|
Debug("We got an IPCP packet after we had it rejected\n");
|
||||||
return PPPRejectUnsupportedPacketEx(p, pp, true);
|
return PPPRejectUnsupportedPacketEx(p, pp, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PPPGetIPOptionFromLCP(&o, pp->Lcp))
|
if (!PPPGetIPOptionFromLCP(&o, pp->Lcp))
|
||||||
{
|
{
|
||||||
Debug("Unsupported IPCP request!");
|
Debug("IPCP request without client IP address received! Treating as zeroed out client IP...\n");
|
||||||
ok = false;
|
isEmptyIpAddress = true;
|
||||||
|
dummyIpOption = NewPPPOption(PPP_IPCP_OPTION_IP, &dummyIp, sizeof(UINT));
|
||||||
|
dummyIpOption->IsSupported = true;
|
||||||
|
dummyIpOption->IsAccepted = false;
|
||||||
|
Add(pp->Lcp->OptionList, dummyIpOption);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process if not configured yet by server
|
// Process if not configured yet by server
|
||||||
if (IsZero(&p->ClientAddressOption, sizeof(DHCP_OPTION_LIST)) && ok)
|
if ((IsZero(&p->ClientAddressOption, sizeof(DHCP_OPTION_LIST)) || isEmptyIpAddress) && ok)
|
||||||
{
|
{
|
||||||
// Decide if we received a static IP from client and it is allowed
|
// Decide if we received a static IP from client and it is allowed
|
||||||
if (IsZeroIP(&o.IpAddress) == false)
|
if (IsZeroIP(&o.IpAddress) == false)
|
||||||
@ -1623,6 +1629,7 @@ bool PPPProcessIPCPRequestPacket(PPP_SESSION *p, PPP_PACKET* pp)
|
|||||||
Zero(&res, sizeof(res));
|
Zero(&res, sizeof(res));
|
||||||
// We will try to reconfigure if we receive another request by wiping all data
|
// We will try to reconfigure if we receive another request by wiping all data
|
||||||
Zero(&p->ClientAddressOption, sizeof(DHCP_OPTION_LIST));
|
Zero(&p->ClientAddressOption, sizeof(DHCP_OPTION_LIST));
|
||||||
|
p->UseStaticIPAddress = false;
|
||||||
|
|
||||||
PPPSetIPOptionToLCP(&res, pp->Lcp, true);
|
PPPSetIPOptionToLCP(&res, pp->Lcp, true);
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,6 @@
|
|||||||
// LCP Option Type
|
// LCP Option Type
|
||||||
#define PPP_LCP_OPTION_MRU 1
|
#define PPP_LCP_OPTION_MRU 1
|
||||||
#define PPP_LCP_OPTION_AUTH 3
|
#define PPP_LCP_OPTION_AUTH 3
|
||||||
#define PPP_LCP_OPTION_MAGIC 5
|
|
||||||
|
|
||||||
// IPCP option type
|
// IPCP option type
|
||||||
#define PPP_IPCP_OPTION_IP 3
|
#define PPP_IPCP_OPTION_IP 3
|
||||||
|
Loading…
Reference in New Issue
Block a user