aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBaronGreenback <jimcartlidge@yahoo.co.uk>2020-11-24 05:11:02 +0000
committerGitHub <noreply@github.com>2020-11-24 06:11:02 +0100
commit50e375020a580078ed309e2d59cf124d10b4a2ed (patch)
tree05e92eaa8da62f6ec8f94970967570bba8dd9a23
parent6676ca4d1b6f8ba2c3582ab916ea9e2f88afae65 (diff)
[Fix] NetworkManager binding to [::] (#4549)
* Autodiscovery enable/disable patch * Fixed [::] issue on bind. Altered test. * Update UdpServerEntryPoint.cs * Update Jellyfin.Networking.Tests.csproj * Update Jellyfin.Networking.Tests.csproj * Update INetworkManager.cs
-rw-r--r--Jellyfin.Networking/Manager/NetworkManager.cs37
-rw-r--r--MediaBrowser.Common/Net/INetworkManager.cs12
-rw-r--r--tests/Jellyfin.Networking.Tests/NetworkTesting/NetworkParseTests.cs16
3 files changed, 36 insertions, 29 deletions
diff --git a/Jellyfin.Networking/Manager/NetworkManager.cs b/Jellyfin.Networking/Manager/NetworkManager.cs
index 515ae669a..1a5614b7b 100644
--- a/Jellyfin.Networking/Manager/NetworkManager.cs
+++ b/Jellyfin.Networking/Manager/NetworkManager.cs
@@ -84,7 +84,7 @@ namespace Jellyfin.Networking.Manager
private Collection<IPObject> _internalInterfaces;
/// <summary>
- /// Flag set when no custom LAN has been defined in the config.
+ /// Flag set when no custom LAN has been defined in the configuration.
/// </summary>
private bool _usingPrivateAddresses;
@@ -228,7 +228,7 @@ namespace Jellyfin.Networking.Manager
}
/// <inheritdoc/>
- public Collection<IPObject> CreateIPCollection(string[] values, bool bracketed = false)
+ public Collection<IPObject> CreateIPCollection(string[] values, bool negated = false)
{
Collection<IPObject> col = new Collection<IPObject>();
if (values == null)
@@ -242,21 +242,14 @@ namespace Jellyfin.Networking.Manager
try
{
- if (v.StartsWith('[') && v.EndsWith(']'))
+ if (v.StartsWith('!'))
{
- if (bracketed)
- {
- AddToCollection(col, v[1..^1]);
- }
- }
- else if (v.StartsWith('!'))
- {
- if (bracketed)
+ if (negated)
{
AddToCollection(col, v[1..]);
}
}
- else if (!bracketed)
+ else if (!negated)
{
AddToCollection(col, v);
}
@@ -730,7 +723,7 @@ namespace Jellyfin.Networking.Manager
}
/// <summary>
- /// Parses a string and adds it into the the collection, replacing any interface references.
+ /// Parses a string and adds it into the collection, replacing any interface references.
/// </summary>
/// <param name="col"><see cref="Collection{IPObject}"/>Collection.</param>
/// <param name="token">String value to parse.</param>
@@ -755,7 +748,19 @@ namespace Jellyfin.Networking.Manager
}
else if (TryParse(token, out IPObject obj))
{
- if (!IsIP6Enabled)
+ // Expand if the ip address is "any".
+ if ((obj.Address.Equals(IPAddress.Any) && IsIP4Enabled)
+ || (obj.Address.Equals(IPAddress.IPv6Any) && IsIP6Enabled))
+ {
+ foreach (IPNetAddress iface in _interfaceAddresses)
+ {
+ if (obj.AddressFamily == iface.AddressFamily)
+ {
+ col.AddItem(iface);
+ }
+ }
+ }
+ else if (!IsIP6Enabled)
{
// Remove IP6 addresses from multi-homed IPHosts.
obj.Remove(AddressFamily.InterNetworkV6);
@@ -872,7 +877,7 @@ namespace Jellyfin.Networking.Manager
else
{
var replacement = parts[1].Trim();
- if (string.Equals(parts[0], "remaining", StringComparison.OrdinalIgnoreCase))
+ if (string.Equals(parts[0], "all", StringComparison.OrdinalIgnoreCase))
{
_publishedServerUrls[new IPNetAddress(IPAddress.Broadcast)] = replacement;
}
@@ -956,7 +961,7 @@ namespace Jellyfin.Networking.Manager
{
_logger.LogDebug("Refreshing LAN information.");
- // Get config options.
+ // Get configuration options.
string[] subnets = config.LocalNetworkSubnets;
// Create lists from user settings.
diff --git a/MediaBrowser.Common/Net/INetworkManager.cs b/MediaBrowser.Common/Net/INetworkManager.cs
index 43562afe3..b6c390d23 100644
--- a/MediaBrowser.Common/Net/INetworkManager.cs
+++ b/MediaBrowser.Common/Net/INetworkManager.cs
@@ -149,7 +149,7 @@ namespace MediaBrowser.Common.Net
/// <summary>
/// Returns true if the address is a private address.
- /// The config option TrustIP6Interfaces overrides this functions behaviour.
+ /// The configuration option TrustIP6Interfaces overrides this functions behaviour.
/// </summary>
/// <param name="address">Address to check.</param>
/// <returns>True or False.</returns>
@@ -157,7 +157,7 @@ namespace MediaBrowser.Common.Net
/// <summary>
/// Returns true if the address is part of the user defined LAN.
- /// The config option TrustIP6Interfaces overrides this functions behaviour.
+ /// The configuration option TrustIP6Interfaces overrides this functions behaviour.
/// </summary>
/// <param name="address">IP to check.</param>
/// <returns>True if endpoint is within the LAN range.</returns>
@@ -165,7 +165,7 @@ namespace MediaBrowser.Common.Net
/// <summary>
/// Returns true if the address is part of the user defined LAN.
- /// The config option TrustIP6Interfaces overrides this functions behaviour.
+ /// The configuration option TrustIP6Interfaces overrides this functions behaviour.
/// </summary>
/// <param name="address">IP to check.</param>
/// <returns>True if endpoint is within the LAN range.</returns>
@@ -173,7 +173,7 @@ namespace MediaBrowser.Common.Net
/// <summary>
/// Returns true if the address is part of the user defined LAN.
- /// The config option TrustIP6Interfaces overrides this functions behaviour.
+ /// The configuration option TrustIP6Interfaces overrides this functions behaviour.
/// </summary>
/// <param name="address">IP to check.</param>
/// <returns>True if endpoint is within the LAN range.</returns>
@@ -192,9 +192,9 @@ namespace MediaBrowser.Common.Net
/// Parses an array of strings into a Collection{IPObject}.
/// </summary>
/// <param name="values">Values to parse.</param>
- /// <param name="bracketed">When true, only include values in []. When false, ignore bracketed values.</param>
+ /// <param name="negated">When true, only include values beginning with !. When false, ignore ! values.</param>
/// <returns>IPCollection object containing the value strings.</returns>
- Collection<IPObject> CreateIPCollection(string[] values, bool bracketed = false);
+ Collection<IPObject> CreateIPCollection(string[] values, bool negated = false);
/// <summary>
/// Returns all the internal Bind interface addresses.
diff --git a/tests/Jellyfin.Networking.Tests/NetworkTesting/NetworkParseTests.cs b/tests/Jellyfin.Networking.Tests/NetworkTesting/NetworkParseTests.cs
index 56d11ef52..c350685af 100644
--- a/tests/Jellyfin.Networking.Tests/NetworkTesting/NetworkParseTests.cs
+++ b/tests/Jellyfin.Networking.Tests/NetworkTesting/NetworkParseTests.cs
@@ -135,6 +135,7 @@ namespace Jellyfin.Networking.Tests
[InlineData("127.0.0.1#")]
[InlineData("localhost!")]
[InlineData("fd23:184f:2029:0:3139:7386:67d7:d517:1231")]
+ [InlineData("[fd23:184f:2029:0:3139:7386:67d7:d517:1231]")]
public void InvalidAddressString(string address)
{
Assert.False(TryParse(address, out _));
@@ -157,7 +158,7 @@ namespace Jellyfin.Networking.Tests
"[]",
"[]",
"[]")]
- [InlineData("[127.0.0.1]",
+ [InlineData("!127.0.0.1",
"[]",
"[]",
"[127.0.0.1/32]",
@@ -169,18 +170,19 @@ namespace Jellyfin.Networking.Tests
"[]",
"[]",
"[]")]
+ [InlineData(
+ "192.158.1.2/16, localhost, fd23:184f:2029:0:3139:7386:67d7:d517, !10.10.10.10",
+ "[192.158.1.2/16,127.0.0.1/32,fd23:184f:2029:0:3139:7386:67d7:d517/128]",
+ "[192.158.1.2/16,127.0.0.1/32]",
+ "[10.10.10.10/32]",
+ "[10.10.10.10/32]",
+ "[192.158.0.0/16,127.0.0.1/32,fd23:184f:2029:0:3139:7386:67d7:d517/128]")]
[InlineData("192.158.1.2/255.255.0.0,192.169.1.2/8",
"[192.158.1.2/16,192.169.1.2/8]",
"[192.158.1.2/16,192.169.1.2/8]",
"[]",
"[]",
"[192.158.0.0/16,192.0.0.0/8]")]
- [InlineData("192.158.1.2/16, localhost, fd23:184f:2029:0:3139:7386:67d7:d517, [10.10.10.10]",
- "[192.158.1.2/16,127.0.0.1/32,fd23:184f:2029:0:3139:7386:67d7:d517/128]",
- "[192.158.1.2/16,127.0.0.1/32]",
- "[10.10.10.10/32]",
- "[10.10.10.10/32]",
- "[192.158.0.0/16,127.0.0.1/32,fd23:184f:2029:0:3139:7386:67d7:d517/128]")]
public void TestCollections(string settings, string result1, string result2, string result3, string result4, string result5)
{
if (settings == null)