diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Common/BusinessErrorCodes.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Common/BusinessErrorCodes.cs index f6f8dfd8..ebe1183c 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Common/BusinessErrorCodes.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Common/BusinessErrorCodes.cs @@ -115,6 +115,7 @@ namespace WebsitePanel.EnterpriseServer public const int ERROR_WEB_SITE_SHARED_IP_ADDRESS_NOT_SPECIFIED = -608; public const int ERROR_WEB_SHARED_SSL_QUOTA_LIMIT = -609; public const int ERROR_GLOBALDNS_FOR_DEDICATEDIP = -610; + public const int ERROR_PUBLICSHAREDIP_FOR_SHAREDIP = -611; #endregion #region Mail diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index d16da4d3..7c71cc05 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -172,15 +172,20 @@ namespace WebsitePanel.EnterpriseServer return AddWebSite(packageId, hostName, domainId, ipAddressId, false, true); } - private static Regex regIP = new Regex( - @"(?2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?2[0-4]\d|25" - + @"[0-5]|[01]?\d\d?)\.(?2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?" - + @"2[0-4]\d|25[0-5]|[01]?\d\d?)", - RegexOptions.IgnoreCase - | RegexOptions.CultureInvariant - | RegexOptions.IgnorePatternWhitespace - | RegexOptions.Compiled - ); + + private static bool IsValidIPAdddress(string addr) + { + System.Net.IPAddress ip; + if (System.Net.IPAddress.TryParse(addr, out ip)) + { + return ((ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) | + (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)); + } + else + { + return false; + } + } public static int AddWebSite(int packageId, string hostName, int domainId, int packageAddressId, bool addInstantAlias, bool ignoreGlobalDNSRecords) @@ -270,14 +275,23 @@ namespace WebsitePanel.EnterpriseServer if (dedicatedIp) { - foreach (GlobalDnsRecord d in dnsRecords) + foreach (GlobalDnsRecord d in dnsRecords) { - if (!string.IsNullOrEmpty(d.ExternalIP)) - { - if (regIP.IsMatch(d.ExternalIP)) return BusinessErrorCodes.ERROR_GLOBALDNS_FOR_DEDICATEDIP; - } + if (!string.IsNullOrEmpty(d.ExternalIP)) + { + if (!IsValidIPAdddress(d.ExternalIP)) return BusinessErrorCodes.ERROR_GLOBALDNS_FOR_DEDICATEDIP; + } } - } + } + else + { + if (domain.ZoneItemId > 0) + { + StringDictionary settings = ServerController.GetServiceSettings(serviceId); + if (string.IsNullOrEmpty(settings["PublicSharedIP"])) + return BusinessErrorCodes.ERROR_PUBLICSHAREDIP_FOR_SHAREDIP; + } + } // prepare site bindings List bindings = new List(); @@ -681,7 +695,7 @@ namespace WebsitePanel.EnterpriseServer { if (!string.IsNullOrEmpty(d.ExternalIP)) { - if (regIP.IsMatch(d.ExternalIP)) return BusinessErrorCodes.ERROR_GLOBALDNS_FOR_DEDICATEDIP; + if (!IsValidIPAdddress(d.ExternalIP)) return BusinessErrorCodes.ERROR_GLOBALDNS_FOR_DEDICATEDIP; } } @@ -839,6 +853,8 @@ namespace WebsitePanel.EnterpriseServer if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; + + // place log record TaskManager.StartTask("WEB_SITE", "SWITCH_TO_SHARED_IP", siteItem.Name); TaskManager.ItemId = siteItemId; @@ -853,6 +869,15 @@ namespace WebsitePanel.EnterpriseServer if (ZoneInfo == null) throw new Exception("Parent zone not found"); + + if (ZoneInfo.ZoneItemId > 0) + { + StringDictionary settings = ServerController.GetServiceSettings(siteItem.ServiceId); + if (string.IsNullOrEmpty(settings["PublicSharedIP"])) + return BusinessErrorCodes.ERROR_PUBLICSHAREDIP_FOR_SHAREDIP; + + } + //cleanup certificates List certificates = GetCertificatesForSite(siteItemId); foreach (SSLCertificate c in certificates) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config index 3766094f..9f46e263 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config @@ -5,12 +5,19 @@ - + + - - + + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index c7c849f9..9df134f2 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -1059,6 +1059,9 @@ Invalid Global DNS entries in platform server configuration for dedicated IP address usage. Contact you platform administrator + + Invalid public shared ip address in platform server configuration for shared IP address usage. Contact you platform administrator + Specified mail domain already exists on the service