Fixed IP bans preventing non-banned players from connecting to SQLite-backed servers (#31154)
Fixed IP bans causing server errors with SQLite DB
This commit is contained in:
@@ -61,6 +61,12 @@ namespace Content.Server.IP
|
|||||||
|
|
||||||
public static bool IsInSubnet(this System.Net.IPAddress address, System.Net.IPAddress maskAddress, int maskLength)
|
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)
|
if (maskAddress.AddressFamily == AddressFamily.InterNetwork)
|
||||||
{
|
{
|
||||||
// Convert the mask address to an unsigned integer.
|
// Convert the mask address to an unsigned integer.
|
||||||
@@ -89,7 +95,7 @@ namespace Content.Server.IP
|
|||||||
|
|
||||||
if (maskAddressBits.Length != ipAddressBits.Length)
|
if (maskAddressBits.Length != ipAddressBits.Length)
|
||||||
{
|
{
|
||||||
throw new ArgumentException("Length of IP Address and Subnet Mask do not match.");
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compare the prefix bits.
|
// Compare the prefix bits.
|
||||||
|
|||||||
@@ -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.240.52")]
|
||||||
[TestCase("10.128.240.50/30", "10.128.239.50")]
|
[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", "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)
|
public void IpV4SubnetMaskDoesNotMatchInvalidIpAddress(string netMask, string ipAddress)
|
||||||
{
|
{
|
||||||
var ipAddressObj = IPAddress.Parse(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: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/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", "2001:0DB8:ABCD:0012:0000:0000:0000:0001")]
|
||||||
|
[TestCase("2001:db8:abcd:0012::0/128", "10.128.239.50")]
|
||||||
// ReSharper restore StringLiteralTypo
|
// ReSharper restore StringLiteralTypo
|
||||||
public void IpV6SubnetMaskDoesNotMatchInvalidIpAddress(string netMask, string ipAddress)
|
public void IpV6SubnetMaskDoesNotMatchInvalidIpAddress(string netMask, string ipAddress)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user