From: TGRCDev Date: Sun, 18 Aug 2024 11:53:09 +0000 (-0700) Subject: Fixed IP bans preventing non-banned players from connecting to SQLite-backed servers... X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=517f7ad344f27a50943a4cc5735476ee1f8f3118;p=space-station-14.git Fixed IP bans preventing non-banned players from connecting to SQLite-backed servers (#31154) Fixed IP bans causing server errors with SQLite DB --- diff --git a/Content.Server/IP/IPAddressExt.cs b/Content.Server/IP/IPAddressExt.cs index 6bfa4ef548..a61477e01b 100644 --- a/Content.Server/IP/IPAddressExt.cs +++ b/Content.Server/IP/IPAddressExt.cs @@ -61,6 +61,12 @@ namespace Content.Server.IP public static bool IsInSubnet(this System.Net.IPAddress address, System.Net.IPAddress maskAddress, int maskLength) { + if (maskAddress.AddressFamily != address.AddressFamily) + { + // We got something like an IPV4-Address for an IPv6-Mask. This is not valid. + return false; + } + if (maskAddress.AddressFamily == AddressFamily.InterNetwork) { // Convert the mask address to an unsigned integer. @@ -89,7 +95,7 @@ namespace Content.Server.IP if (maskAddressBits.Length != ipAddressBits.Length) { - throw new ArgumentException("Length of IP Address and Subnet Mask do not match."); + return false; } // Compare the prefix bits. diff --git a/Content.Tests/Server/Utility/IPAddressExtTest.cs b/Content.Tests/Server/Utility/IPAddressExtTest.cs index a57430267b..dba8a0e6aa 100644 --- a/Content.Tests/Server/Utility/IPAddressExtTest.cs +++ b/Content.Tests/Server/Utility/IPAddressExtTest.cs @@ -26,6 +26,7 @@ namespace Content.Tests.Server.Utility [TestCase("10.128.240.50/30", "10.128.240.52")] [TestCase("10.128.240.50/30", "10.128.239.50")] [TestCase("10.128.240.50/30", "10.127.240.51")] + [TestCase("10.128.240.50/30", "2001:0DB8:ABCD:0012:0000:0000:0000:0000")] public void IpV4SubnetMaskDoesNotMatchInvalidIpAddress(string netMask, string ipAddress) { var ipAddressObj = IPAddress.Parse(ipAddress); @@ -51,6 +52,7 @@ namespace Content.Tests.Server.Utility [TestCase("2001:db8:abcd:0012::0/64", "2001:0DB8:ABCD:0013:0001:0000:0000:0000")] [TestCase("2001:db8:abcd:0012::0/64", "2001:0DB8:ABCD:0011:FFFF:FFFF:FFFF:FFF0")] [TestCase("2001:db8:abcd:0012::0/128", "2001:0DB8:ABCD:0012:0000:0000:0000:0001")] + [TestCase("2001:db8:abcd:0012::0/128", "10.128.239.50")] // ReSharper restore StringLiteralTypo public void IpV6SubnetMaskDoesNotMatchInvalidIpAddress(string netMask, string ipAddress) {