+#include "ipban.qh"
+#include "_all.qh"
+
+#include "autocvars.qh"
+#include "command/banning.qh"
+#include "defs.qh"
+#include "../common/constants.qh"
+#include "../common/util.qh"
+#include "../dpdefs/dpextensions.qh"
+#include "../dpdefs/progsdefs.qh"
+
/*
* Protocol of online ban list:
*
else
n = tokenizebyseparator(data, "\n");
- if(mod(n, 4) != 0)
+ if((n % 4) != 0)
{
print("error: received invalid item count: ", ftos(n), "\n");
return;
remove(self);
}
-#define BAN_MAX 256
+const float BAN_MAX = 256;
float ban_loaded;
string ban_ip[BAN_MAX];
float ban_expire[BAN_MAX];
float Ban_Delete(float i)
{
if(i < 0)
- return FALSE;
+ return false;
if(i >= ban_count)
- return FALSE;
+ return false;
if(ban_expire[i] == 0)
- return FALSE;
+ return false;
if(ban_expire[i] > 0)
{
OnlineBanList_SendUnban(ban_ip[i]);
ban_expire[i] = 0;
ban_ip[i] = "";
Ban_SaveBans();
- return TRUE;
+ return true;
}
void Ban_LoadBans()
for(i = 0; i < ban_count; ++i)
Ban_Delete(i);
ban_count = 0;
- ban_loaded = TRUE;
+ ban_loaded = true;
n = tokenize_console(autocvar_g_banned_list);
if(stof(argv(0)) == 1)
{
float i1, i2, i3, i4;
string s;
- if(client.crypto_keyfp)
+ if(client.crypto_idfp_signed)
ban_idfp = client.crypto_idfp;
else
ban_idfp = string_null;
goto ipv6;
i2 = strstrofs(s, ".", i1 + 1);
if(i2 < 0)
- return FALSE;
+ return false;
i3 = strstrofs(s, ".", i2 + 1);
if(i3 < 0)
- return FALSE;
+ return false;
i4 = strstrofs(s, ".", i3 + 1);
if(i4 >= 0)
s = substring(s, 0, i4);
ban_ip2 = substring(s, 0, i2); // 16
ban_ip3 = substring(s, 0, i3); // 24
ban_ip4 = strcat1(s); // 32
- return TRUE;
+ return true;
:ipv6
i1 = strstrofs(s, ":", 0);
if(i1 < 0)
- return FALSE;
+ return false;
i1 = strstrofs(s, ":", i1 + 1);
if(i1 < 0)
- return FALSE;
+ return false;
i2 = strstrofs(s, ":", i1 + 1);
if(i2 < 0)
- return FALSE;
+ return false;
i3 = strstrofs(s, ":", i2 + 1);
if(i3 < 0)
- return FALSE;
+ return false;
ban_ip1 = strcat(substring(s, 0, i1), "::/32"); // 32
ban_ip2 = strcat(substring(s, 0, i2), "::/48"); // 48
else
ban_ip3 = strcat(substring(s, 0, i2), ":0::/56");
- return TRUE;
+ return true;
}
float Ban_IsClientBanned(entity client, float idx)
if(!ban_loaded)
Ban_LoadBans();
if(!Ban_GetClientIP(client))
- return FALSE;
+ return false;
if(idx < 0)
{
b = 0;
b = idx;
e = idx + 1;
}
- ipbanned = FALSE;
+ ipbanned = false;
for(i = b; i < e; ++i)
{
string s;
if(time > ban_expire[i])
continue;
s = ban_ip[i];
- if(ban_ip1 == s) ipbanned = TRUE;
- if(ban_ip2 == s) ipbanned = TRUE;
- if(ban_ip3 == s) ipbanned = TRUE;
- if(ban_ip4 == s) ipbanned = TRUE;
- if(ban_idfp == s) return TRUE;
+ if(ban_ip1 == s) ipbanned = true;
+ if(ban_ip2 == s) ipbanned = true;
+ if(ban_ip3 == s) ipbanned = true;
+ if(ban_ip4 == s) ipbanned = true;
+ if(ban_idfp == s) return true;
}
if(ipbanned)
{
if(!autocvar_g_banned_list_idmode)
- return TRUE;
+ return true;
if (!ban_idfp)
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
float Ban_MaybeEnforceBan(entity client)
s = strcat("^1NOTE:^7 banned client ", client.netaddress, " just tried to enter\n");
dropclient(client);
bprint(s);
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
.float ban_checked;
float Ban_MaybeEnforceBanOnce(entity client)
{
if(client.ban_checked)
- return FALSE;
- client.ban_checked = TRUE;
- return Ban_MaybeEnforceBan(self);
+ return false;
+ client.ban_checked = true;
+ return Ban_MaybeEnforceBan(client);
}
string Ban_Enforce(float i, string reason)
// Enforce our new ban
s = "";
- FOR_EACH_REALCLIENT(e)
+ FOR_EACH_CLIENTSLOT(e)
+ if (IS_REAL_CLIENT(e))
if(Ban_IsClientBanned(e, i))
{
if(reason != "")
if(substring(reason, 0, 1) != "~") // like IRC: unauthenticated banner
OnlineBanList_SendBan(ip, bantime, reason);
- return FALSE;
+ return false;
}
// do we have a free slot?
if(ban_expire[i] > time + bantime)
{
print(ip, " could not get banned due to no free ban slot\n");
- return FALSE;
+ return false;
}
// okay, insert our new victim as i
Ban_Delete(i);
if(substring(reason, 0, 1) != "~") // like IRC: unauthenticated banner
OnlineBanList_SendBan(ip, bantime, reason);
- return TRUE;
+ return true;
}
void Ban_KickBanClient(entity client, float bantime, float masksize, string reason)