fixes #1851 - EmbyServer crashes if staticly assigned IP address changes

This commit is contained in:
Luke Pulverenti 2016-08-18 02:26:47 -04:00
parent cc62faa1c2
commit 389487638e
2 changed files with 52 additions and 33 deletions

View file

@ -331,6 +331,46 @@ namespace MediaBrowser.Server.Implementations.HttpServer
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>
/// Overridable method that can be used to implement a custom hnandler
/// </summary>
@ -350,6 +390,16 @@ namespace MediaBrowser.Server.Implementations.HttpServer
return ;
}
if (!ValidateHost(url))
{
httpRes.StatusCode = 400;
httpRes.ContentType = "text/plain";
httpRes.Write("Invalid host");
httpRes.Close();
return;
}
var operationName = httpReq.OperationName;
var localPath = url.LocalPath;

View file

@ -821,42 +821,11 @@ namespace MediaBrowser.Server.Startup.Common
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()
{
var hosts = ServerConfigurationManager
.Configuration
.LocalNetworkAddresses
.Select(NormalizeConfiguredLocalAddress)
.ToList();
var hosts = new List<string>();
if (hosts.Count == 0)
{
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");
}
}
hosts.Add("+");
return hosts.SelectMany(i =>
{