Skip to content

Commit

Permalink
v4.37-9758-beta
Browse files Browse the repository at this point in the history
  • Loading branch information
dnobori committed Aug 15, 2021
1 parent ddc99f0 commit 005285b
Show file tree
Hide file tree
Showing 19 changed files with 140 additions and 20 deletions.
2 changes: 1 addition & 1 deletion src/BuildUtil/UnixBuildSoftwares.cs
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,7 @@ public virtual StringWriter GenerateMakeFileForRelease(string srcDir)
sr.WriteLine("# You have to read and agree the license agreement at the same directory");
sr.WriteLine("# before using this software.");
sr.WriteLine();
sr.WriteLine("i_read_and_agree_the_license_agreement:");
sr.WriteLine("main:");

sr.WriteLine("\t@echo \"Preparing {0}...\"", BuildHelper.GetSoftwareTitle(this.Software));

Expand Down
14 changes: 7 additions & 7 deletions src/Cedar/Cedar.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,10 +126,10 @@


// Version number
#define CEDAR_VER 436
#define CEDAR_VER 437

// Build Number
#define CEDAR_BUILD 9754
#define CEDAR_BUILD 9758

// Beta number
//#define BETA_NUMBER 3
Expand All @@ -149,11 +149,11 @@

// Specifies the build date
#define BUILD_DATE_Y 2021
#define BUILD_DATE_M 6
#define BUILD_DATE_D 7
#define BUILD_DATE_HO 21
#define BUILD_DATE_MI 29
#define BUILD_DATE_SE 54
#define BUILD_DATE_M 8
#define BUILD_DATE_D 16
#define BUILD_DATE_HO 0
#define BUILD_DATE_MI 27
#define BUILD_DATE_SE 11

// Tolerable time difference
#define ALLOW_TIMESTAMP_DIFF (UINT64)(3 * 24 * 60 * 60 * 1000)
Expand Down
1 change: 1 addition & 0 deletions src/Cedar/CedarType.h
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,7 @@ typedef struct IKE_SA_TRANSFORM_SETTING IKE_SA_TRANSFORM_SETTING;
typedef struct IKE_CLIENT IKE_CLIENT;
typedef struct IPSECSA IPSECSA;
typedef struct IKE_CAPS IKE_CAPS;
typedef struct IKE_INFOMSG_QUOTA_ENTRY IKE_INFOMSG_QUOTA_ENTRY;

// ==============================================================
// IPSec Packet
Expand Down
1 change: 1 addition & 0 deletions src/Cedar/Connection.c
Original file line number Diff line number Diff line change
Expand Up @@ -3571,6 +3571,7 @@ CONNECTION *NewServerConnection(CEDAR *cedar, SOCK *s, THREAD *t)
{
AddRef(c->FirstSock->ref);
Copy(&c->ClientIp, &s->RemoteIP, sizeof(IP));
c->ClientPort = s->RemotePort;
StrCpy(c->ClientHostname, sizeof(c->ClientHostname), s->RemoteHostname);
}
c->Tcp = ZeroMalloc(sizeof(TCP));
Expand Down
1 change: 1 addition & 0 deletions src/Cedar/Connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,7 @@ struct CONNECTION
char *CipherName; // Encryption algorithm name
UINT64 ConnectedTick; // Time it is connected
IP ClientIp; // Client IP address
UINT ClientPort; // Client Port number
char ClientHostname[MAX_HOST_NAME_LEN + 1]; // Client host name
UINT Type; // Type
bool DontUseTls1; // Do not use TLS 1.0
Expand Down
7 changes: 7 additions & 0 deletions src/Cedar/IPsec.c
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,13 @@ void IPsecServerUdpPacketRecvProc(UDPLISTENER *u, LIST *packet_list)

ike->Now = now;

if (now >= ike->NextInfoMsgQuotaClearTick)
{
ike->NextInfoMsgQuotaClearTick = now + 1000ULL;

IkeInfoMsgQuotaDeleteAll(ike);
}

if (ipsec_disable == false)
{
{
Expand Down
75 changes: 75 additions & 0 deletions src/Cedar/IPsec_IKE.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,55 @@ void ProcIKEPacketRecv(IKE_SERVER *ike, UDPPACKET *p)
}
}

IKE_INFOMSG_QUOTA_ENTRY *IkeInfoMsgQuotaGetEntry(IKE_SERVER *ike, IP *client_ip)
{
UINT i;
IKE_INFOMSG_QUOTA_ENTRY *new_entry = NULL;
if (ike == NULL || client_ip == NULL)
{
return NULL;
}

for (i = 0;i < LIST_NUM(ike->InfoMsgQuotaList);i++)
{
IKE_INFOMSG_QUOTA_ENTRY *q = LIST_DATA(ike->InfoMsgQuotaList, i);

if (CmpIpAddr(&q->ClientIp, client_ip) == 0)
{
return q;
}
}

if (LIST_NUM(ike->InfoMsgQuotaList) >= IKE_QUOTA_MAX_INFOMSG_ENTRY_COUNT)
{
return NULL;
}

new_entry = ZeroMalloc(sizeof(IKE_INFOMSG_QUOTA_ENTRY));
CopyIP(&new_entry->ClientIp, client_ip);
Add(ike->InfoMsgQuotaList, new_entry);

return new_entry;
}

void IkeInfoMsgQuotaDeleteAll(IKE_SERVER *ike)
{
UINT i;
if (ike == NULL)
{
return;
}

for (i = 0;i < LIST_NUM(ike->InfoMsgQuotaList);i++)
{
IKE_INFOMSG_QUOTA_ENTRY *q = LIST_DATA(ike->InfoMsgQuotaList, i);

Free(q);
}

DeleteAll(ike->InfoMsgQuotaList);
}

// Send a packet via IPsec
void IPsecSendPacketByIPsecSa(IKE_SERVER *ike, IPSECSA *sa, UCHAR *data, UINT data_size, UCHAR protocol_id)
{
Expand Down Expand Up @@ -1337,6 +1386,7 @@ void SendInformationalExchangePacketEx(IKE_SERVER *ike, IKE_CLIENT *c, IKE_PACKE
BUF *tmp_buf;
UCHAR hash[IKE_MAX_HASH_SIZE];
IKE_CRYPTO_PARAM cp;
IKE_INFOMSG_QUOTA_ENTRY *quota_entry;
bool plain = false;
// Validate arguments
if (ike == NULL || c == NULL || payload == NULL)
Expand All @@ -1345,6 +1395,20 @@ void SendInformationalExchangePacketEx(IKE_SERVER *ike, IKE_CLIENT *c, IKE_PACKE
return;
}

quota_entry = IkeInfoMsgQuotaGetEntry(ike, &c->ClientIP);
if (quota_entry == NULL)
{
IkeFreePayload(payload);
return;
}

quota_entry->Count++;
if (quota_entry->Count >= IKE_QUOTA_MAX_INFOMSG_SEND_PER_IP_PER_SEC)
{
IkeFreePayload(payload);
return;
}

sa = c->CurrentIkeSa;
if (sa == NULL)
{
Expand Down Expand Up @@ -5940,6 +6004,15 @@ void FreeIKEServer(IKE_SERVER *ike)

FreeIkeEngine(ike->Engine);

for (i = 0;i < LIST_NUM(ike->InfoMsgQuotaList);i++)
{
IKE_INFOMSG_QUOTA_ENTRY *q = LIST_DATA(ike->InfoMsgQuotaList, i);

Free(q);
}

ReleaseList(ike->InfoMsgQuotaList);

Debug("FreeThreadList()...\n");
FreeThreadList(ike->ThreadList);
Debug("FreeThreadList() Done.\n");
Expand Down Expand Up @@ -5974,6 +6047,8 @@ IKE_SERVER *NewIKEServer(CEDAR *cedar, IPSEC_SERVER *ipsec)

ike->ClientList = NewList(CmpIkeClient);

ike->InfoMsgQuotaList = NewList(NULL);

ike->Engine = NewIkeEngine();

ike->ThreadList = NewThreadList();
Expand Down
14 changes: 14 additions & 0 deletions src/Cedar/IPsec_IKE.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@
#define IKE_QUOTA_MAX_NUM_CLIENTS 30000 // Limit number of IKE_CLIENT
#define IKE_QUOTA_MAX_SA_PER_CLIENT 100 // The limit number of SA for each IKE_CLIENT

#define IKE_QUOTA_MAX_INFOMSG_SEND_PER_IP_PER_SEC 20
#define IKE_QUOTA_MAX_INFOMSG_ENTRY_COUNT 100

// Time-out
#define IKE_TIMEOUT_FOR_IKE_CLIENT 150000 // IKE_CLIENT non-communication disconnect time
#define IKE_TIMEOUT_FOR_IKE_CLIENT_FOR_NOT_ESTABLISHED 10000 // IKE_CLIENT non-communication disconnect time (connection incomplete)
Expand Down Expand Up @@ -346,6 +349,12 @@ struct IPSECSA
IKE_HASH *SKEYID_Hash;
};

struct IKE_INFOMSG_QUOTA_ENTRY
{
IP ClientIp;
UINT Count;
};

// IKE server
struct IKE_SERVER
{
Expand All @@ -360,6 +369,8 @@ struct IKE_SERVER
LIST *IkeSaList; // SA list
LIST *IPsecSaList; // IPsec SA list
LIST *ThreadList; // L2TP thread list
LIST *InfoMsgQuotaList; // Information Message Quota List
UINT64 NextInfoMsgQuotaClearTick;
bool StateHasChanged; // Flag whether the state has changed
UINT CurrentIkeSaId, CurrentIPsecSaId, CurrentIkeClientId, CurrentEtherId; // Serial number ID

Expand Down Expand Up @@ -463,5 +474,8 @@ void ProcL2TPv3PacketRecv(IKE_SERVER *ike, IKE_CLIENT *c, UCHAR *data, UINT data

IKE_SA *SearchIkeSaByCookie(IKE_SERVER *ike, UINT64 init_cookie, UINT64 resp_cookie);

IKE_INFOMSG_QUOTA_ENTRY *IkeInfoMsgQuotaGetEntry(IKE_SERVER *ike, IP *client_ip);
void IkeInfoMsgQuotaDeleteAll(IKE_SERVER *ike);

#endif // IPSEC_IKE_H

12 changes: 12 additions & 0 deletions src/Cedar/Logging.c
Original file line number Diff line number Diff line change
Expand Up @@ -1147,11 +1147,23 @@ bool PacketLog(HUB *hub, SESSION *src_session, SESSION *dest_session, PKT *packe
if (src_session != NULL && src_session->NormalClient)
{
StrCpy(pl->SrcPhysicalIP, sizeof(pl->SrcPhysicalIP), src_session->ClientIP);
if (src_session->ClientPort != 0)
{
char tmp[32] = {0};
Format(tmp, sizeof(tmp), "(port=%u)", src_session->ClientPort);
StrCat(pl->SrcPhysicalIP, sizeof(pl->SrcPhysicalIP), tmp);
}
}

if (dest_session != NULL && dest_session->NormalClient)
{
StrCpy(pl->DestPhysicalIP, sizeof(pl->DestPhysicalIP), dest_session->ClientIP);
if (dest_session->ClientPort != 0)
{
char tmp[32] = {0};
Format(tmp, sizeof(tmp), "(port=%u)", dest_session->ClientPort);
StrCat(pl->DestPhysicalIP, sizeof(pl->DestPhysicalIP), tmp);
}
}

pl->WritePhysicalIP = true;
Expand Down
17 changes: 12 additions & 5 deletions src/Cedar/Protocol.c
Original file line number Diff line number Diff line change
Expand Up @@ -3736,6 +3736,7 @@ bool ServerAccept(CONNECTION *c)
s->NormalClient = true;

IPToStr(s->ClientIP, sizeof(s->ClientIP), &c->ClientIp);
s->ClientPort = c->ClientPort;

if (c->FirstSock->IsRUDPSocket)
{
Expand Down Expand Up @@ -7783,7 +7784,10 @@ SOCK *SocksConnectEx2(CONNECTION *c, char *proxy_host_name, UINT proxy_port,
if (c == NULL || proxy_host_name == NULL || proxy_port == 0 || server_host_name == NULL
|| server_port == 0)
{
c->Err = ERR_PROXY_CONNECT_FAILED;
if (c != NULL)
{
c->Err = ERR_PROXY_CONNECT_FAILED;
}
return NULL;
}

Expand Down Expand Up @@ -7977,7 +7981,10 @@ SOCK *ProxyConnectEx2(CONNECTION *c, char *proxy_host_name, UINT proxy_port,
if (c == NULL || proxy_host_name == NULL || proxy_port == 0 || server_host_name == NULL ||
server_port == 0)
{
c->Err = ERR_PROXY_CONNECT_FAILED;
if (c != NULL)
{
c->Err = ERR_PROXY_CONNECT_FAILED;
}
return NULL;
}
if (username != NULL && password != NULL &&
Expand Down Expand Up @@ -8977,7 +8984,7 @@ UINT WsRecvSync(WS *w, void *data, UINT size)
return sz;
}
r = Recv(w->Sock, w->TmpBuf, sizeof(w->TmpBuf), w->Sock->SecureMode);
if (r == 0)
if (r == 0 || r == SOCK_LATER)
{
break;
}
Expand Down Expand Up @@ -9589,9 +9596,9 @@ UINT MvpnDoAccept(CONNECTION *c, WS *w)
StrCpy(ipc_param.HubName, sizeof(ipc_param.HubName), client_hub_name);
StrCpy(ipc_param.UserName, sizeof(ipc_param.UserName), auth_username);
CopyIP(&ipc_param.ClientIp, &w->Sock->RemoteIP);
ipc_param.ClientPort, w->Sock->RemotePort;
ipc_param.ClientPort = w->Sock->RemotePort;
CopyIP(&ipc_param.ServerIp, &w->Sock->LocalIP);
ipc_param.ServerPort, w->Sock->LocalPort;
ipc_param.ServerPort = w->Sock->LocalPort;
StrCpy(ipc_param.ClientHostname, sizeof(ipc_param.ClientHostname), w->Sock->RemoteHostname);
StrCpy(ipc_param.CryptName, sizeof(ipc_param.CryptName), w->Sock->CipherName);
ipc_param.Layer = IPC_LAYER_3; // TODO
Expand Down
1 change: 1 addition & 0 deletions src/Cedar/Session.h
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ struct SESSION
THREAD *Thread; // Management thread
CONNECTION *Connection; // Connection
char ClientIP[64]; // Client IP
UINT ClientPort; // Client Port
CLIENT_OPTION *ClientOption; // Client connection options
CLIENT_AUTH *ClientAuth; // Client authentication data
volatile bool Halt; // Halting flag
Expand Down
6 changes: 3 additions & 3 deletions src/CurrentBuild.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
BUILD_NUMBER 9754
VERSION 436
BUILD_NUMBER 9758
VERSION 437
BUILD_NAME beta
BUILD_DATE 20210607_212954
BUILD_DATE 20210816_002711
1 change: 1 addition & 0 deletions src/Mayaqua/Encrypt.c
Original file line number Diff line number Diff line change
Expand Up @@ -2642,6 +2642,7 @@ bool RsaPrivateDecrypt(void *dst, void *src, UINT size, K *k)
Unlock(openssl_lock);
if (ret <= 0)
{
Free(tmp);
return false;
}

Expand Down
2 changes: 1 addition & 1 deletion src/Mayaqua/Kernel.c
Original file line number Diff line number Diff line change
Expand Up @@ -566,7 +566,7 @@ void GetHomeDir(char *path, UINT size)
if (GetEnv("HOMEDRIVE", drive, sizeof(drive)) &&
GetEnv("HOMEPATH", hpath, sizeof(hpath)))
{
Format(path, sizeof(path), "%s%s", drive, hpath);
Format(path, size, "%s%s", drive, hpath);
}
else
{
Expand Down
Binary file modified src/bin/vpnweb.cab
Binary file not shown.
Binary file modified src/bin/vpnweb.ocx
Binary file not shown.
2 changes: 1 addition & 1 deletion src/vpnweb/vpnweb.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@


/* File created by MIDL compiler version 7.00.0500 */
/* at Mon Jun 07 21:30:12 2021
/* at Mon Aug 16 00:27:28 2021
*/
/* Compiler settings for .\vpnweb.idl:
Oicf, W1, Zp8, env=Win32 (32b run)
Expand Down
2 changes: 1 addition & 1 deletion src/vpnweb/vpnweb_i.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@


/* File created by MIDL compiler version 7.00.0500 */
/* at Mon Jun 07 21:30:12 2021
/* at Mon Aug 16 00:27:28 2021
*/
/* Compiler settings for .\vpnweb.idl:
Oicf, W1, Zp8, env=Win32 (32b run)
Expand Down
2 changes: 1 addition & 1 deletion src/vpnweb/vpnweb_p.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@


/* File created by MIDL compiler version 7.00.0500 */
/* at Mon Jun 07 21:30:12 2021
/* at Mon Aug 16 00:27:28 2021
*/
/* Compiler settings for .\vpnweb.idl:
Oicf, W1, Zp8, env=Win32 (32b run)
Expand Down

0 comments on commit 005285b

Please sign in to comment.