From 343539c25e577059687dd4b94a410916534c4273 Mon Sep 17 00:00:00 2001 From: robvde Date: Thu, 1 Nov 2012 09:41:10 +0400 Subject: [PATCH 1/7] Fixed: IP switch configuration made IPV6 aware Fixed: Message raised when public shared ip address is not configured when creating or switching to a site with a shared ip adddres and dns enabled. --- .../Common/BusinessErrorCodes.cs | 1 + .../Code/WebServers/WebServerController.cs | 57 +++++++++++++------ .../WebsitePanel.EnterpriseServer/Web.config | 13 ++++- .../WebsitePanel_SharedResources.ascx.resx | 3 + 4 files changed, 55 insertions(+), 19 deletions(-) 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 From 8f694e075682266b12087f8cf4a59556b303d814 Mon Sep 17 00:00:00 2001 From: robvde Date: Thu, 1 Nov 2012 10:29:42 +0400 Subject: [PATCH 2/7] Fixed; HostedHeader mode disabled creates wrong bindings, dns records when creating instant alias --- .../Code/Servers/ServerController.cs | 18 +++++- .../Code/WebServers/WebServerController.cs | 57 ++++++++++++++++--- 2 files changed, 63 insertions(+), 12 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs index 3b856795..d4836378 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs @@ -2495,10 +2495,20 @@ namespace WebsitePanel.EnterpriseServer instantAlias = GetDomainItem(instantAliasId); } + string parentZone = domain.ZoneName; + if (string.IsNullOrEmpty(parentZone)) + { + DomainInfo parentDomain = GetDomain(domain.DomainId); + parentZone = parentDomain.DomainName; + } + + if (domain.WebSiteId > 0) { WebServerController.AddWebSitePointer(domain.WebSiteId, - (domain.DomainName.Replace("." + domain.ZoneName, "") == domain.ZoneName) ? "" : domain.DomainName.Replace("." + domain.ZoneName, ""), + ((domain.DomainName.Replace("." + parentZone, "") == parentZone) | + (domain.DomainName == parentZone)) + ? "" : domain.DomainName.Replace("." + parentZone, ""), instantAlias.DomainId); } @@ -2507,12 +2517,14 @@ namespace WebsitePanel.EnterpriseServer List domains = GetDomainsByDomainItemId(domain.DomainId); foreach (DomainInfo d in domains) { + if (d.WebSiteId > 0) { WebServerController.AddWebSitePointer(d.WebSiteId, - (d.DomainName.Replace("." + domain.ZoneName, "") == domain.ZoneName) ? "" : d.DomainName.Replace("." + domain.ZoneName, ""), + ((d.DomainName.Replace("." + parentZone, "") == parentZone) | + (d.DomainName == parentZone)) + ? "" : d.DomainName.Replace("." + parentZone, ""), instantAlias.DomainId); - } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index 7c71cc05..1590849d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -709,7 +709,7 @@ namespace WebsitePanel.EnterpriseServer // remove all web site pointers DomainInfo domain = ServerController.GetDomain(siteItem.Name); - DomainInfo ZoneInfo = ServerController.GetDomain(domain.ZoneName); + DomainInfo ZoneInfo = ServerController.GetDomain(domain.DomainItemId); if (ZoneInfo == null) throw new Exception("Parent zone not found"); @@ -775,18 +775,38 @@ namespace WebsitePanel.EnterpriseServer // associate IP with web site ServerController.AddItemIPAddress(siteItemId, ipAddressId); - + + + string parentZone = domain.ZoneName; + if (string.IsNullOrEmpty(parentZone)) + { + DomainInfo parentDomain = ServerController.GetDomain(domain.DomainItemId); + parentZone = parentDomain.DomainName; + } + AddWebSitePointer(siteItemId, - (domain.DomainName.Replace("." + domain.ZoneName, "") == domain.ZoneName) ? "": domain.DomainName.Replace("." + domain.ZoneName,"") + ((domain.DomainName.Replace("." + parentZone, "") == parentZone) | + (domain.DomainName == parentZone)) + ? "" : domain.DomainName.Replace("." + parentZone, "") , ZoneInfo.DomainId, true, true, true); foreach (DomainInfo pointer in pointers) { - ZoneInfo = ServerController.GetDomain(pointer.ZoneName); + string pointerParentZone = pointer.ZoneName; + if (string.IsNullOrEmpty(pointerParentZone)) + { + DomainInfo parentDomain = ServerController.GetDomain(pointer.DomainItemId); + pointerParentZone = parentDomain.DomainName; + } + + + ZoneInfo = ServerController.GetDomain(pointerParentZone); AddWebSitePointer(siteItemId, - (pointer.DomainName.Replace("." + pointer.ZoneName, "") == pointer.ZoneName) ? "" : pointer.DomainName.Replace("." + pointer.ZoneName, "") + ((pointer.DomainName.Replace("." + pointerParentZone, "") == pointerParentZone) | + (pointer.DomainName == pointerParentZone)) + ? "" : pointer.DomainName.Replace("." + pointerParentZone, "") , ZoneInfo.DomainId, true, true, true); } @@ -864,7 +884,7 @@ namespace WebsitePanel.EnterpriseServer IPAddressInfo ip; DomainInfo domain = ServerController.GetDomain(siteItem.Name); - DomainInfo ZoneInfo = ServerController.GetDomain(domain.ZoneName); + DomainInfo ZoneInfo = ServerController.GetDomain(domain.DomainItemId); if (ZoneInfo == null) throw new Exception("Parent zone not found"); @@ -956,16 +976,35 @@ namespace WebsitePanel.EnterpriseServer siteItem.SiteIPAddressId = 0; PackageController.UpdatePackageItem(siteItem); + string parentZone = domain.ZoneName; + if (string.IsNullOrEmpty(parentZone)) + { + DomainInfo parentDomain = ServerController.GetDomain(domain.DomainItemId); + parentZone = parentDomain.DomainName; + } + AddWebSitePointer(siteItemId, - (domain.DomainName.Replace("." + domain.ZoneName, "") == domain.ZoneName) ? "" : domain.DomainName.Replace("." + domain.ZoneName, "") + ((domain.DomainName.Replace("." + parentZone, "") == parentZone) | + (domain.DomainName == parentZone)) + ? "" : domain.DomainName.Replace("." + parentZone, "") , ZoneInfo.DomainId, true, true, true); foreach (DomainInfo pointer in pointers) { - ZoneInfo = ServerController.GetDomain(pointer.ZoneName); + string pointerParentZone = pointer.ZoneName; + if (string.IsNullOrEmpty(pointerParentZone)) + { + DomainInfo parentDomain = ServerController.GetDomain(pointer.DomainItemId); + pointerParentZone = parentDomain.DomainName; + } + + + ZoneInfo = ServerController.GetDomain(pointerParentZone); AddWebSitePointer(siteItemId, - (pointer.DomainName.Replace("." + pointer.ZoneName, "") == pointer.ZoneName) ? "" : pointer.DomainName.Replace("." + pointer.ZoneName, "") + ((pointer.DomainName.Replace("." + pointerParentZone, "") == pointerParentZone) | + (pointer.DomainName == pointerParentZone)) + ? "" : pointer.DomainName.Replace("." + pointerParentZone, "") , ZoneInfo.DomainId, true, true, true); } From 11f21b1a1599b1e0413a2e4dfab6c32f04944b39 Mon Sep 17 00:00:00 2001 From: robvde Date: Thu, 1 Nov 2012 10:55:46 +0400 Subject: [PATCH 3/7] Fixed: Domain Select COntrol: HideInstantAliases will not show instant aliases --- .../WebsitePanel/DomainsSelectDomainControl.ascx.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsSelectDomainControl.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsSelectDomainControl.ascx.cs index 5678f285..cc723f6a 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsSelectDomainControl.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsSelectDomainControl.ascx.cs @@ -148,7 +148,8 @@ namespace WebsitePanel.Portal } } } - else if (HideInstantAlias && domain.IsInstantAlias) + + if (HideInstantAlias && domain.IsInstantAlias) continue; else if (HideMailDomains && domain.MailDomainId > 0) continue; From 74dc494734dded6a0b5337d412da807f6cca3a3d Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 1 Nov 2012 08:27:44 -0400 Subject: [PATCH 4/7] Merge --- .../WebsitePanel.EnterpriseServer/Web.config | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config index 9f46e263..3766094f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config @@ -5,19 +5,12 @@ - - + + + - - From 2004476550f61ce3af854313ebc03ebdb0c57d59 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 1 Nov 2012 08:37:35 -0400 Subject: [PATCH 5/7] Added tag build-2.0.0.149 for changeset e324125e3451 From 892c5307d55b7fc048ecb8c3e1c4029488250092 Mon Sep 17 00:00:00 2001 From: robvde Date: Fri, 2 Nov 2012 12:32:31 +0400 Subject: [PATCH 6/7] Added the ability to hide quotas Domain Aliases hidden from hosting plans Domain Aliases quota verification disabled --- WebsitePanel/Database/update_db.sql | 15 +++++++++++++++ .../Code/Servers/ServerController.cs | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 4059e0db..2b2e2222 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -559,6 +559,17 @@ GO UPDATE [dbo].[ResourceGroups] SET ShowGroup=1 GO +IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='Quotas' AND COLS.name='ShowGroup') +BEGIN +ALTER TABLE [dbo].[Quotas] ADD [HideQuota] [bit] NULL +END +GO + +UPDATE [dbo].[Quotas] SET [HideQuota] = 1 WHERE [QuotaName] = N'OS.DomainPointers' +GO + + + /****** Object: Table [dbo].[ExchangeAccounts] Extend Exchange Accounts with SubscriberNumber ******/ IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='Users' AND COLS.name='SubscriberNumber') @@ -3925,6 +3936,7 @@ SELECT dbo.GetPackageAllocatedQuota(@PackageID, Q.QuotaID) AS ParentQuotaValue FROM Quotas AS Q LEFT OUTER JOIN HostingPlanQuotas AS HPQ ON Q.QuotaID = HPQ.QuotaID AND HPQ.PlanID = @PlanID +WHERE Q.HideQuota IS NULL OR Q.HideQuota = 0 ORDER BY Q.QuotaOrder RETURN GO @@ -6424,3 +6436,6 @@ BEGIN INSERT [dbo].[ScheduleTaskParameters] ([TaskID], [ParameterID], [DataTypeID], [DefaultValue], [ParameterOrder]) VALUES (N'SCHEDULE_TASK_HOSTED_SOLUTION_REPORT', N'LYNC_REPORT', N'Boolean', N'true', 5) END GO + + + diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs index d4836378..b1cd15f0 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs @@ -1847,8 +1847,8 @@ namespace WebsitePanel.EnterpriseServer else if (isDomainPointer) { // domain pointer - if (PackageController.GetPackageQuota(packageId, Quotas.OS_DOMAINPOINTERS).QuotaExhausted) - return BusinessErrorCodes.ERROR_DOMAIN_QUOTA_LIMIT; + //if (PackageController.GetPackageQuota(packageId, Quotas.OS_DOMAINPOINTERS).QuotaExhausted) + //return BusinessErrorCodes.ERROR_DOMAIN_QUOTA_LIMIT; } else { From 9188c649794440e0671630d5c705227bf8f2ed2b Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Fri, 2 Nov 2012 08:19:33 -0400 Subject: [PATCH 7/7] Added tag build-2.0.0.150 for changeset f57a16601d33