]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/ipban.qc
make the cryptographic ID known to race and ipban
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / ipban.qc
index ebc58cea7e2847982efb41ace84d6089f001ca1c..f74262a1030b07342f8620315596cd66bf2bc3e4 100644 (file)
@@ -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