X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fipban.qc;h=f74262a1030b07342f8620315596cd66bf2bc3e4;hb=62b04471b783985495eb0455883329cd41817344;hp=ebc58cea7e2847982efb41ace84d6089f001ca1c;hpb=b29aa003c3b0920b42f095416c356166866c0585;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/ipban.qc b/qcsrc/server/ipban.qc index ebc58cea7..f74262a10 100644 --- a/qcsrc/server/ipban.qc +++ b/qcsrc/server/ipban.qc @@ -160,12 +160,15 @@ void OnlineBanList_URI_Get_Callback(float id, float status, string data) continue; l = strlen(ip); - for(j = 0; j < l; ++j) - if(strstrofs("0123456789.", substring(ip, j, 1), 0) == -1) - { - print("Invalid character ", substring(ip, j, 1), " in IP address ", ip, ". Skipping this ban.\n"); - goto skip; - } + if(l != 44) // length 44 is a cryptographic ID + { + for(j = 0; j < l; ++j) + if(strstrofs("0123456789.", substring(ip, j, 1), 0) == -1) + { + print("Invalid character ", substring(ip, j, 1), " in IP address ", ip, ". Skipping this ban.\n"); + goto skip; + } + } if(cvar("g_ban_sync_trusted_servers_verify")) if((strstrofs(strcat(";", OnlineBanList_Servers, ";"), strcat(";", serverip, ";"), 0) == -1)) @@ -243,9 +246,7 @@ string ban_ip1; string ban_ip2; string ban_ip3; string ban_ip4; -#ifdef UID -string ban_uid; -#endif +string ban_idfp; void Ban_SaveBans() { @@ -335,28 +336,37 @@ float Ban_GetClientIP(entity client) float i1, i2, i3, i4; string s; - s = client.netaddress; - - i1 = strstrofs(s, ".", 0); - if(i1 < 0) - return FALSE; - i2 = strstrofs(s, ".", i1 + 1); - if(i2 < 0) - return FALSE; - i3 = strstrofs(s, ".", i2 + 1); - if(i3 < 0) - return FALSE; - i4 = strstrofs(s, ".", i3 + 1); - if(i4 >= 0) - return FALSE; - - ban_ip1 = substring(s, 0, i1); - ban_ip2 = substring(s, 0, i2); - ban_ip3 = substring(s, 0, i3); - ban_ip4 = strcat1(s); -#ifdef UID - ban_uid = client.uid; -#endif + if(client.crypto_keyfp) + ban_idfp = client.crypto_idfp; + else + ban_idfp = string_null; + + if(cvar("g_banned_list_idmode") && ban_idfp) + { + ban_ip1 = ban_ip2 = ban_ip3 = ban_ip4 = ban_idfp; + } + else + { + s = client.netaddress; + + i1 = strstrofs(s, ".", 0); + if(i1 < 0) + return FALSE; + i2 = strstrofs(s, ".", i1 + 1); + if(i2 < 0) + return FALSE; + i3 = strstrofs(s, ".", i2 + 1); + if(i3 < 0) + return FALSE; + i4 = strstrofs(s, ".", i3 + 1); + if(i4 >= 0) + return FALSE; + + ban_ip1 = substring(s, 0, i1); + ban_ip2 = substring(s, 0, i2); + ban_ip3 = substring(s, 0, i3); + ban_ip4 = strcat1(s); + } return TRUE; } @@ -388,9 +398,7 @@ float Ban_IsClientBanned(entity client, float idx) if(ban_ip2 == s) return TRUE; if(ban_ip3 == s) return TRUE; if(ban_ip4 == s) return TRUE; -#ifdef UID - if(ban_uid == s) return TRUE; -#endif + if(ban_idfp == s) return TRUE; } return FALSE; } @@ -535,11 +543,9 @@ void Ban_KickBanClient(entity client, float bantime, float masksize, string reas default: Ban_Insert(ban_ip4, bantime, reason, 1); break; -#ifdef UID case 0: - Ban_Insert(ban_uid, bantime, reason, 1); + Ban_Insert(ban_idfp, bantime, reason, 1); break; -#endif } /* * not needed, as we enforce the ban in Ban_Insert anyway