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); }