mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-07-11 00:01:05 +02:00
fixes #1851 - EmbyServer crashes if staticly assigned IP address changes
This commit is contained in:
parent
cc62faa1c2
commit
389487638e
|
@ -331,6 +331,46 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string NormalizeConfiguredLocalAddress(string address)
|
||||||
|
{
|
||||||
|
var index = address.Trim('/').IndexOf('/');
|
||||||
|
|
||||||
|
if (index != -1)
|
||||||
|
{
|
||||||
|
address = address.Substring(index + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return address.Trim('/');
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool ValidateHost(Uri url)
|
||||||
|
{
|
||||||
|
var hosts = _config
|
||||||
|
.Configuration
|
||||||
|
.LocalNetworkAddresses
|
||||||
|
.Select(NormalizeConfiguredLocalAddress)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
if (hosts.Count == 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var host = url.Host ?? string.Empty;
|
||||||
|
|
||||||
|
_logger.Debug("Validating host {0}", host);
|
||||||
|
|
||||||
|
if (_networkManager.IsInPrivateAddressSpace(host))
|
||||||
|
{
|
||||||
|
hosts.Add("localhost");
|
||||||
|
hosts.Add("127.0.0.1");
|
||||||
|
|
||||||
|
return hosts.Any(i => host.IndexOf(i, StringComparison.OrdinalIgnoreCase) != -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Overridable method that can be used to implement a custom hnandler
|
/// Overridable method that can be used to implement a custom hnandler
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -350,6 +390,16 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ValidateHost(url))
|
||||||
|
{
|
||||||
|
httpRes.StatusCode = 400;
|
||||||
|
httpRes.ContentType = "text/plain";
|
||||||
|
httpRes.Write("Invalid host");
|
||||||
|
|
||||||
|
httpRes.Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var operationName = httpReq.OperationName;
|
var operationName = httpReq.OperationName;
|
||||||
var localPath = url.LocalPath;
|
var localPath = url.LocalPath;
|
||||||
|
|
||||||
|
|
|
@ -821,42 +821,11 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
|
|
||||||
private string CertificatePath { get; set; }
|
private string CertificatePath { get; set; }
|
||||||
|
|
||||||
private string NormalizeConfiguredLocalAddress(string address)
|
|
||||||
{
|
|
||||||
var index = address.Trim('/').IndexOf('/');
|
|
||||||
|
|
||||||
if (index != -1)
|
|
||||||
{
|
|
||||||
address = address.Substring(index + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return address.Trim('/');
|
|
||||||
}
|
|
||||||
private IEnumerable<string> GetUrlPrefixes()
|
private IEnumerable<string> GetUrlPrefixes()
|
||||||
{
|
{
|
||||||
var hosts = ServerConfigurationManager
|
var hosts = new List<string>();
|
||||||
.Configuration
|
|
||||||
.LocalNetworkAddresses
|
|
||||||
.Select(NormalizeConfiguredLocalAddress)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (hosts.Count == 0)
|
hosts.Add("+");
|
||||||
{
|
|
||||||
hosts.Add("+");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hosts.Contains("+", StringComparer.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
if (!hosts.Contains("localhost", StringComparer.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
hosts.Add("localhost");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hosts.Contains("127.0.0.1", StringComparer.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
hosts.Add("127.0.0.1");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return hosts.SelectMany(i =>
|
return hosts.SelectMany(i =>
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue