From 75ca39ea5f9789ef2f9f6c892835b35b5b5d24b5 Mon Sep 17 00:00:00 2001 From: robvde Date: Wed, 24 Oct 2012 13:05:14 +0400 Subject: [PATCH] Fixed: When onboarding a tenant with resources all globaldnsrecords are interpreted and created, even when service offering is not subscribed or not used yet. Service globaldnsrecords are ignored when onboarding a tenant. Virtual Server and Server globaldnsrecords are applied when onboarding a user Service globaldns records are now applied when service is applied/activated DNS record definitions removed for those services where no globaldnsrecords are user TaskManager unhandled exception handled --- WebsitePanel/Database/update_db.sql | 132 +++++++++++- .../Code/DnsServers/DnsServerController.cs | 6 +- .../ExchangeServerController.cs | 38 +++- .../Code/HostedSolution/LyncController.cs | 12 ++ .../HostedSolution/OrganizationController.cs | 66 ++---- .../Code/MailServers/MailServerController.cs | 12 +- .../Code/Packages/PackageController.cs | 10 + .../Code/Servers/ServerController.cs | 195 ++++++++++++++++++ .../HostedSharePointServerController.cs | 54 ++--- .../Code/Tasks/TaskManager.cs | 16 +- .../Code/WebServers/WebServerController.cs | 4 +- .../WebsitePanel.EnterpriseServer/Web.config | 4 +- .../WebsitePanel/ServersEditService.ascx.cs | 18 ++ 13 files changed, 458 insertions(+), 109 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index cbfae558..d290281b 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -6038,4 +6038,134 @@ SET WHERE DomainID = @DomainID RETURN -GO \ No newline at end of file +GO + + + + + +ALTER PROCEDURE [dbo].[GetDnsRecordsTotal] +( + @ActorID int, + @PackageID int +) +AS + +-- check rights +IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 +RAISERROR('You are not allowed to access this package', 16, 1) + +-- create temp table for DNS records +DECLARE @Records TABLE +( + RecordID int, + RecordType nvarchar(10) COLLATE Latin1_General_CI_AS, + RecordName nvarchar(50) COLLATE Latin1_General_CI_AS +) + +-- select PACKAGES DNS records +DECLARE @ParentPackageID int, @TmpPackageID int +SET @TmpPackageID = @PackageID + +WHILE 10 = 10 +BEGIN + + -- get DNS records for the current package + INSERT INTO @Records (RecordID, RecordType, RecordName) + SELECT + GR.RecordID, + GR.RecordType, + GR.RecordName + FROM GlobalDNSRecords AS GR + WHERE GR.PackageID = @TmpPackageID + AND GR.RecordType + GR.RecordName NOT IN (SELECT RecordType + RecordName FROM @Records) + + SET @ParentPackageID = NULL + + -- get parent package + SELECT + @ParentPackageID = ParentPackageID + FROM Packages + WHERE PackageID = @TmpPackageID + + IF @ParentPackageID IS NULL -- the last parent + BREAK + + SET @TmpPackageID = @ParentPackageID +END + +-- select VIRTUAL SERVER DNS records +DECLARE @ServerID int +SELECT @ServerID = ServerID FROM Packages +WHERE PackageID = @PackageID + +INSERT INTO @Records (RecordID, RecordType, RecordName) +SELECT + GR.RecordID, + GR.RecordType, + GR.RecordName +FROM GlobalDNSRecords AS GR +WHERE GR.ServerID = @ServerID +AND GR.RecordType + GR.RecordName NOT IN (SELECT RecordType + RecordName FROM @Records) + +-- select SERVER DNS records +INSERT INTO @Records (RecordID, RecordType, RecordName) +SELECT + GR.RecordID, + GR.RecordType, + GR.RecordName +FROM GlobalDNSRecords AS GR +WHERE GR.ServerID IN (SELECT + SRV.ServerID +FROM VirtualServices AS VS +INNER JOIN Services AS S ON VS.ServiceID = S.ServiceID +INNER JOIN Servers AS SRV ON S.ServerID = SRV.ServerID +WHERE VS.ServerID = @ServerID) +AND GR.RecordType + GR.RecordName NOT IN (SELECT RecordType + RecordName FROM @Records) + + + + + +-- select SERVICES DNS records +-- re-distribute package services +EXEC DistributePackageServices @ActorID, @PackageID + +--INSERT INTO @Records (RecordID, RecordType, RecordName) +--SELECT +-- GR.RecordID, +-- GR.RecordType, + -- GR.RecordName +-- FROM GlobalDNSRecords AS GR +-- WHERE GR.ServiceID IN (SELECT ServiceID FROM PackageServices WHERE PackageID = @PackageID) +-- AND GR.RecordType + GR.RecordName NOT IN (SELECT RecordType + RecordName FROM @Records) + + +SELECT + NR.RecordID, + NR.ServiceID, + NR.ServerID, + NR.PackageID, + NR.RecordType, + NR.RecordName, + NR.RecordData, + NR.MXPriority, + NR.SrvPriority, + NR.SrvWeight, + NR.SrvPort, + NR.IPAddressID, + ISNULL(IP.ExternalIP, '') AS ExternalIP, + ISNULL(IP.InternalIP, '') AS InternalIP, + CASE + WHEN NR.RecordType = 'A' AND NR.RecordData = '' THEN dbo.GetFullIPAddress(IP.ExternalIP, IP.InternalIP) + WHEN NR.RecordType = 'MX' THEN CONVERT(varchar(3), NR.MXPriority) + ', ' + NR.RecordData + WHEN NR.RecordType = 'SRV' THEN CONVERT(varchar(3), NR.SrvPort) + ', ' + NR.RecordData + ELSE NR.RecordData + END AS FullRecordData, + dbo.GetFullIPAddress(IP.ExternalIP, IP.InternalIP) AS IPAddress +FROM @Records AS TR +INNER JOIN GlobalDnsRecords AS NR ON TR.RecordID = NR.RecordID +LEFT OUTER JOIN IPAddresses AS IP ON NR.IPAddressID = IP.AddressID + +RETURN +GO diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs index 85c5eb6b..de9aa5fd 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs @@ -194,7 +194,7 @@ namespace WebsitePanel.EnterpriseServer return zoneItemId; } - + private static int RegisterZoneItems(int spaceId, int serviceId, string zoneName, bool primaryZone) { // zone item @@ -206,6 +206,7 @@ namespace WebsitePanel.EnterpriseServer return zoneItemId; } + public static int DeleteZone(int zoneItemId) { // delete DNS zone if applicable @@ -288,11 +289,12 @@ namespace WebsitePanel.EnterpriseServer if (record.RecordType == "A" || record.RecordType == "AAAA") { // If the service IP address and the DNS records external address are empty / null SimpleDNS will fail to properly create the zone record - if (String.IsNullOrEmpty(serviceIP) && String.IsNullOrEmpty(record.ExternalIP)) + if (String.IsNullOrEmpty(serviceIP) && String.IsNullOrEmpty(record.ExternalIP) && String.IsNullOrEmpty(record.RecordData)) continue; rr.RecordData = String.IsNullOrEmpty(record.RecordData) ? record.ExternalIP : record.RecordData; rr.RecordData = Utils.ReplaceStringVariable(rr.RecordData, "ip", string.IsNullOrEmpty(serviceIP) ? record.ExternalIP : serviceIP); + rr.RecordData = Utils.ReplaceStringVariable(rr.RecordData, "domain_name", string.IsNullOrEmpty(domainName) ? string.Empty : domainName); if (String.IsNullOrEmpty(rr.RecordData) && !String.IsNullOrEmpty(serviceIP)) rr.RecordData = serviceIP; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs index c66a4b34..ad963108 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs @@ -455,6 +455,22 @@ namespace WebsitePanel.EnterpriseServer break; } + foreach (OrganizationDomainName d in domains) + { + DomainInfo domain = ServerController.GetDomain(d.DomainId); + + //Add the service records + if (domain != null) + { + if (domain.ZoneItemId != 0) + { + ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.Exchange, domain, ""); + ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.BlackBerry, domain, ""); + ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.OCS, domain, ""); + } + } + } + // 4) Add the address book policy (Exchange 2010 SP2 // @@ -1414,7 +1430,16 @@ namespace WebsitePanel.EnterpriseServer if (domains == null || Array.BinarySearch(domains, domain.DomainName) < 0) hubTransportRole.AddAuthoritativeDomain(domain.DomainName); break; - } + } + + //Add the service records + if (domain != null) + { + if (domain.ZoneItemId != 0) + { + ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.Exchange, domain, ""); + } + } return 0; } @@ -1534,6 +1559,17 @@ namespace WebsitePanel.EnterpriseServer } + //Add the service records + if (domain != null) + { + if (domain.ZoneItemId != 0) + { + ServerController.RemoveServiceDNSRecords(org.PackageId, ResourceGroups.Exchange, domain, ""); + } + } + + + return 0; } catch (Exception ex) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs index 012946e5..dbbdb260 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs @@ -208,6 +208,18 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution } else { + + DomainInfo domain = ServerController.GetDomain(org.DefaultDomain); + + //Add the service records + if (domain != null) + { + if (domain.ZoneItemId != 0) + { + ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.Lync, domain, ""); + } + } + PackageController.UpdatePackageItem(org); bReloadConfiguration = true; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs index e86c6d8d..3cf73181 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs @@ -40,6 +40,7 @@ using WebsitePanel.Providers.HostedSolution; using WebsitePanel.Providers.ResultObjects; using WebsitePanel.Providers.SharePoint; using WebsitePanel.Providers.Common; +using WebsitePanel.Providers.DNS; using System.IO; using System.Xml; @@ -335,6 +336,17 @@ namespace WebsitePanel.EnterpriseServer RollbackOrganization(packageId, organizationId); return domainId; } + + DomainInfo domain = ServerController.GetDomain(domainId); + if (domain != null) + { + if (domain.ZoneItemId != 0) + { + ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.HostedOrganizations, domain, ""); + ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.HostedCRM, domain, ""); + } + } + PackageContext cntx = PackageController.GetPackageContext(packageId); @@ -367,60 +379,6 @@ namespace WebsitePanel.EnterpriseServer PackageController.AddPackageItem(orgDomain); - if (cntx.Quotas[Quotas.EXCHANGE2007_MAILBOXES] != null) - { - // 5) Create default mailbox plans - // load user info - UserInfo user = PackageController.GetPackageOwner(org.PackageId); - - // get settings - UserSettings userSettings = UserController.GetUserSettings(user.UserId, "ExchangeMailboxPlansPolicy"); - - if (!string.IsNullOrEmpty(userSettings[UserSettings.DEFAULT_MAILBOXPLANS])) - { - - List list = new List(); - - XmlSerializer serializer = new XmlSerializer(list.GetType()); - - StringReader reader = new StringReader(userSettings[UserSettings.DEFAULT_MAILBOXPLANS]); - - list = (List)serializer.Deserialize(reader); - - foreach (ExchangeMailboxPlan p in list) - { - ExchangeServerController.AddExchangeMailboxPlan(itemId, p); - } - } - } - - if (cntx.Quotas[Quotas.LYNC_USERS] != null) - { - // 5) Create default mailbox plans - // load user info - UserInfo user = PackageController.GetPackageOwner(org.PackageId); - - // get settings - UserSettings userSettings = UserController.GetUserSettings(user.UserId, "LyncUserPlansPolicy"); - - if (!string.IsNullOrEmpty(userSettings[UserSettings.DEFAULT_LYNCUSERPLANS])) - { - - List list = new List(); - - XmlSerializer serializer = new XmlSerializer(list.GetType()); - - StringReader reader = new StringReader(userSettings[UserSettings.DEFAULT_LYNCUSERPLANS]); - - list = (List)serializer.Deserialize(reader); - - foreach (LyncUserPlan p in list) - { - LyncController.AddLyncUserPlan(itemId, p); - } - } - } - } catch (Exception ex) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs index c4914931..89301534 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs @@ -1202,7 +1202,7 @@ namespace WebsitePanel.EnterpriseServer return pointers; } - public static int AddMailDomainPointer(int itemId, int domainId) + public static int AddMailDomainPointer( int itemId, int domainId) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); @@ -1231,6 +1231,16 @@ namespace WebsitePanel.EnterpriseServer ServiceProviderProxy.Init(mail, mailDomain.ServiceId); mail.AddDomainAlias(mailDomain.Name, domain.DomainName); + + if (domain != null) + { + if (domain.ZoneItemId != 0) + { + ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Mail, domain, ""); + } + } + + // update domain domain.MailDomainId = itemId; ServerController.UpdateDomain(domain); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs index 11336783..a77f65cd 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs @@ -468,6 +468,16 @@ namespace WebsitePanel.EnterpriseServer return result; } + domain = ServerController.GetDomain(domainId); + if (domain != null) + { + if (domain.ZoneItemId != 0) + { + ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Os, domain, ""); + ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Dns, domain, ""); + } + } + if (createInstantAlias) ServerController.CreateDomainInstantAlias("", domainId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs index 99c9d599..baf98a47 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs @@ -38,6 +38,7 @@ using WebsitePanel.Providers.DNS; using WebsitePanel.Server; using WebsitePanel.Providers.ResultObjects; using WebsitePanel.Providers.Web; +using WebsitePanel.Providers.HostedSolution; namespace WebsitePanel.EnterpriseServer { @@ -1732,6 +1733,16 @@ namespace WebsitePanel.EnterpriseServer if (domainId < 0) return domainId; + DomainInfo domain = ServerController.GetDomain(domainId); + if (domain != null) + { + if (domain.ZoneItemId != 0) + { + ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Os, domain, ""); + ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Dns, domain, ""); + } + } + // add instant alias createInstantAlias &= (domainType != DomainType.DomainPointer); if (createInstantAlias) @@ -1900,6 +1911,86 @@ namespace WebsitePanel.EnterpriseServer domain.WebSiteId, domain.MailDomainId, domain.IsSubDomain, domain.IsInstantAlias, domain.IsDomainPointer); } + public static void AddServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP) + { + int serviceId = PackageController.GetPackageServiceId(packageId, groupName); + if (serviceId > 0) + { + List tmpZoneRecords = new List(); + List dnsRecords = ServerController.GetDnsRecordsByService(serviceId); + + DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); + tmpZoneRecords.AddRange(DnsServerController.BuildDnsResourceRecords(dnsRecords, "", domain.ZoneName, serviceIP)); + + try + { + DNSServer dns = new DNSServer(); + ServiceProviderProxy.Init(dns, zone.ServiceId); + + DnsRecord[] domainRecords = dns.GetZoneRecords(domain.DomainName); + + List zoneRecords = new List(); + foreach (DnsRecord t in tmpZoneRecords) + { + if (!RecordDoesExist(t, domainRecords)) + zoneRecords.Add(t); + } + + + // add new resource records + dns.AddZoneRecords(zone.Name, zoneRecords.ToArray()); + } + catch (Exception ex1) + { + TaskManager.WriteError(ex1, "Error updating DNS records"); + } + } + } + + + + public static void RemoveServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP) + { + int serviceId = PackageController.GetPackageServiceId(packageId, groupName); + if (serviceId > 0) + { + List zoneRecords = new List(); + List dnsRecords = ServerController.GetDnsRecordsByService(serviceId); + + DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); + zoneRecords.AddRange(DnsServerController.BuildDnsResourceRecords(dnsRecords, "", domain.ZoneName, serviceIP)); + + try + { + DNSServer dns = new DNSServer(); + ServiceProviderProxy.Init(dns, zone.ServiceId); + + // add new resource records + dns.DeleteZoneRecords(zone.Name, zoneRecords.ToArray()); + } + catch (Exception ex1) + { + TaskManager.WriteError(ex1, "Error updating DNS records"); + } + } + } + + + private static bool RecordDoesExist(DnsRecord record, DnsRecord[] domainRecords) + { + foreach (DnsRecord d in domainRecords) + { + if ((record.RecordName.ToLower() == d.RecordName.ToLower()) & + (record.RecordType == d.RecordType)) + { + return true; + } + } + + return false; + } + + public static int UpdateDomain(DomainInfo domain) { // check account @@ -2159,6 +2250,110 @@ namespace WebsitePanel.EnterpriseServer // update domain domain.ZoneItemId = zoneItemId; UpdateDomain(domain); + + domain = GetDomain(domainId); + + + PackageContext cntx = PackageController.GetPackageContext(domain.PackageId); + if (cntx != null) + { + // fill dictionaries + foreach (HostingPlanGroupInfo group in cntx.GroupsArray) + { + try + { + bool bFound = false; + switch (group.GroupName) + { + case ResourceGroups.Dns: + ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Dns, domain, ""); + break; + case ResourceGroups.Os: + ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Os, domain, ""); + break; + case ResourceGroups.HostedOrganizations: + ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.HostedOrganizations, domain, ""); + ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.HostedCRM, domain, ""); + break; + case ResourceGroups.Mail: + List myDomains = ServerController.GetMyDomains(domain.PackageId); + foreach (DomainInfo mailDomain in myDomains) + { + if ((mailDomain.MailDomainId != 0) && (domain.DomainName.ToLower() == mailDomain.DomainName.ToLower())) + { + bFound = true; + break; + } + } + if (bFound) ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Mail, domain, ""); + break; + case ResourceGroups.Exchange: + List orgs = OrganizationController.GetOrganizations(domain.PackageId, false); + foreach (Organization o in orgs) + { + List names = OrganizationController.GetOrganizationDomains(o.Id); + foreach (OrganizationDomainName name in names) + { + if (domain.DomainName.ToLower() == name.DomainName.ToLower()) + { + bFound = true; + break; + } + } + if (bFound) break; + } + if (bFound) + { + ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Exchange, domain, ""); + ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.BlackBerry, domain, ""); + ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.OCS, domain, ""); + } + break; + case ResourceGroups.Lync: + List orgsLync = OrganizationController.GetOrganizations(domain.PackageId, false); + foreach (Organization o in orgsLync) + { + if ((o.DefaultDomain.ToLower() == domain.DomainName.ToLower()) & + (o.LyncTenantId != null)) + { + bFound = true; + break; + } + } + if (bFound) + { + ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Lync, domain, ""); + } + break; + case ResourceGroups.Web: + List sites = WebServerController.GetWebSites(domain.PackageId, false); + foreach (WebSite w in sites) + { + if (w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1) + { + WebServerController.AddWebSitePointer(w.Id, w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), ""), domain.DomainId, false, true, true); + } + + List pointers = WebServerController.GetWebSitePointers(w.Id); + foreach (DomainInfo pointer in pointers) + { + if (pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1) + { + WebServerController.AddWebSitePointer(w.Id, pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), ""), domain.DomainId, false, true, true); + } + } + } + + break; + } + } + catch (Exception ex) + { + TaskManager.WriteError(ex); + } + } + } + } // add web site DNS records diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs index 38534a99..eebff84b 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs @@ -331,27 +331,13 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint string hostName = tmpStr[0]; string domainName = siteName.Substring(hostName.Length + 1, siteName.Length - (hostName.Length + 1)); - DomainInfo domain = ServerController.GetDomain(domainName); - if (domain != null) - { - string website = siteName; + List dnsRecords = ServerController.GetDnsRecordsByService(serviceId); + List resourceRecords = DnsServerController.BuildDnsResourceRecords(dnsRecords, hostName, domainName, ""); + DNSServer dns = new DNSServer(); - DnsRecord[] records = ServerController.GetDnsZoneRecords(domain.DomainId); - foreach (DnsRecord record in records) - { - var type = record.RecordType; - if ((type == DnsRecordType.A || type == DnsRecordType.AAAA) && String.IsNullOrEmpty(record.RecordName)) - { - ServerController.DeleteDnsZoneRecord(domain.DomainId, String.Empty, type, record.RecordData); - break; - } - } - - ServerController.AddDnsZoneRecord(domain.DomainId, hostName, DnsRecordType.A, hostedSharePointSettings["RootWebApplicationIpAddress"], 0, 0, 0, 0); - var ip = hostedSharePointSettings["RootWebApplicationIpAddress"]; - var type2 = ip.Contains(":") ? DnsRecordType.AAAA : DnsRecordType.A; - ServerController.AddDnsZoneRecord(domain.DomainId, String.Empty, type2, ip, 0, 0, 0, 0); - } + ServiceProviderProxy.Init(dns, dnsServiceId); + // add new resource records + dns.AddZoneRecords(domainName, resourceRecords.ToArray()); } TaskManager.ItemId = itemId; @@ -412,27 +398,13 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint string hostName = tmpStr[0]; string domainName = siteName.Substring(hostName.Length + 1, siteName.Length - (hostName.Length + 1)); - DomainInfo domain = ServerController.GetDomain(domainName); - if (domain != null) - { - var ip = hostedSharePointSettings["RootWebApplicationIpAddress"]; - var type = ip.Contains(":") ? DnsRecordType.AAAA : DnsRecordType.A; - ServerController.DeleteDnsZoneRecord(domain.DomainId, String.Empty, type, ip); - ServerController.DeleteDnsZoneRecord(domain.DomainId, "www", type, ip); - if (!String.IsNullOrEmpty(domain.WebSiteName)) - { - DnsRecord[] records = ServerController.GetDnsZoneRecords(domain.DomainId); - foreach (DnsRecord record in records) - { - type = record.RecordType; - if ((type == DnsRecordType.A || type == DnsRecordType.AAAA) && record.RecordName.Equals("www", StringComparison.CurrentCultureIgnoreCase)) - { - ServerController.AddDnsZoneRecord(domain.DomainId, String.Empty, DnsRecordType.A, record.RecordData, 0, 0, 0, 0); - break; - } - } - } - } + List dnsRecords = ServerController.GetDnsRecordsByService(origItem.ServiceId); + List resourceRecords = DnsServerController.BuildDnsResourceRecords(dnsRecords, hostName, domainName, ""); + DNSServer dns = new DNSServer(); + + ServiceProviderProxy.Init(dns, dnsServiceId); + // add new resource records + dns.DeleteZoneRecords(domainName, resourceRecords.ToArray()); } return 0; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskManager.cs index e482544d..e7b3c904 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskManager.cs @@ -398,12 +398,18 @@ namespace WebsitePanel.EnterpriseServer public static Dictionary GetScheduledTasks() { Dictionary scheduledTasks = new Dictionary(); - foreach (BackgroundTask task in tasks.Values) + try + { + foreach (BackgroundTask task in tasks.Values) + { + if (task.ScheduleId > 0 + && !task.Completed + && !scheduledTasks.ContainsKey(task.ScheduleId)) + scheduledTasks.Add(task.ScheduleId, task); + } + } + catch (Exception) { - if (task.ScheduleId > 0 - && !task.Completed - && !scheduledTasks.ContainsKey(task.ScheduleId)) - scheduledTasks.Add(task.ScheduleId, task); } return scheduledTasks; } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index 26066feb..2e3eb2b2 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -723,7 +723,7 @@ namespace WebsitePanel.EnterpriseServer foreach (DomainInfo pointer in pointers) { - ZoneInfo = ServerController.GetDomain(domain.ZoneName); + ZoneInfo = ServerController.GetDomain(pointer.ZoneName); AddWebSitePointer(siteItemId, (pointer.DomainName.Replace("." + pointer.ZoneName, "") == pointer.ZoneName) ? "" : pointer.DomainName.Replace("." + pointer.ZoneName, "") @@ -851,7 +851,7 @@ namespace WebsitePanel.EnterpriseServer foreach (DomainInfo pointer in pointers) { - ZoneInfo = ServerController.GetDomain(domain.ZoneName); + ZoneInfo = ServerController.GetDomain(pointer.ZoneName); AddWebSitePointer(siteItemId, (pointer.DomainName.Replace("." + pointer.ZoneName, "") == pointer.ZoneName) ? "" : pointer.DomainName.Replace("." + pointer.ZoneName, "") diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config index 6c3c87e5..6c7d9d64 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config @@ -9,7 +9,7 @@ --> - + @@ -17,7 +17,7 @@ --> - + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditService.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditService.ascx.cs index d9c63285..60fad092 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditService.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditService.ascx.cs @@ -66,6 +66,7 @@ namespace WebsitePanel.Portal BindService(); BindServiceProperties(); BindServiceQuota(); + ToggleGlobalDNS(); } } catch (Exception ex) @@ -151,6 +152,23 @@ namespace WebsitePanel.Portal ctrl.BindSettings(ConvertArrayToDictionary(settings)); } + + private void ToggleGlobalDNS() + { + DnsRecrodsPanel.Visible = DnsRecrodsHeader.Visible = ((resourceGroup.GroupName == ResourceGroups.BlackBerry) | + (resourceGroup.GroupName == ResourceGroups.OCS)| + (resourceGroup.GroupName == ResourceGroups.HostedCRM)| + (resourceGroup.GroupName == ResourceGroups.Os)| + (resourceGroup.GroupName == ResourceGroups.HostedOrganizations) | + (resourceGroup.GroupName == ResourceGroups.HostedSharePoint) | + (resourceGroup.GroupName == ResourceGroups.Mail)| + (resourceGroup.GroupName == ResourceGroups.Lync)| + (resourceGroup.GroupName == ResourceGroups.Exchange)| + (resourceGroup.GroupName == ResourceGroups.Web)| + (resourceGroup.GroupName == ResourceGroups.Dns)); + } + + private void SaveServiceProperties() { // find control