From e9461911ec3167a558d4e538614dd88ac22650f2 Mon Sep 17 00:00:00 2001 From: Olov Karlsson Date: Tue, 6 Jan 2015 15:43:30 +0100 Subject: [PATCH] Importing a zone now also imports secondary zone(s), wsp-10290 --- .../DnsServers/DnsServerController.cs | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs index 8ee4d12a..039c3473 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs @@ -392,13 +392,62 @@ namespace WebsitePanel.EnterpriseServer if (itemType == typeof(DnsZone)) { + // Get ascii form in punycode + var zoneName = GetAsciiZoneName(itemName); + // add DNS zone DnsZone zone = new DnsZone(); - zone.Name = GetAsciiZoneName(itemName); + zone.Name = zoneName; zone.ServiceId = serviceId; zone.PackageId = packageId; int zoneId = PackageController.AddPackageItem(zone); + // Add secondary zone(s) + try + { + // get secondary DNS services + var primSettings = ServerController.GetServiceSettings(serviceId); + var secondaryServiceIds = new List(); + var strSecondaryServices = primSettings["SecondaryDNSServices"]; + if (!String.IsNullOrEmpty(strSecondaryServices)) + { + var secondaryServices = strSecondaryServices.Split(','); + secondaryServiceIds.AddRange(secondaryServices.Select(strSecondaryId => Utils.ParseInt(strSecondaryId, 0)).Where(secondaryId => secondaryId != 0)); + } + + // add secondary zones + var secondaryZoneFound = false; + + foreach (var secondaryId in secondaryServiceIds) + { + var secDns = GetDNSServer(secondaryId); + if (secDns.ZoneExists(zoneName)) + { + secondaryZoneFound = true; + + var secondaryZone = new SecondaryDnsZone + { + Name = zoneName, + ServiceId = secondaryId, + PackageId = packageId + }; + + PackageController.AddPackageItem(secondaryZone); + } + } + + if (!secondaryZoneFound) + { + TaskManager.WriteWarning("No secondary zone(s) found when importing zone " + itemName); + } + + } + catch (Exception ex) + { + TaskManager.WriteError(ex, "Error importing secondary zone(s)"); + } + + // add/update domains/pointers RestoreDomainByZone(itemName, packageId, zoneId); }