diff --git a/WebsitePanel/Database/install_db.sql b/WebsitePanel/Database/install_db.sql
index 47bb884f..c28f6f0b 100644
--- a/WebsitePanel/Database/install_db.sql
+++ b/WebsitePanel/Database/install_db.sql
@@ -21064,6 +21064,7 @@ SET @sql = @sql + ' SELECT COUNT(DomainID) FROM @Domains;SELECT
WS.ItemName AS WebSiteName,
ISNULL(MD.ItemID, 0) AS MailDomainID,
MD.ItemName AS MailDomainName,
+ Z.ItemName AS ZoneName,
D.IsSubDomain,
D.IsInstantAlias,
D.IsDomainPointer,
diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql
index 0b4b54b5..a6bbcc6c 100644
--- a/WebsitePanel/Database/update_db.sql
+++ b/WebsitePanel/Database/update_db.sql
@@ -6057,6 +6057,112 @@ END
RETURN
GO
+-- wsp-10053: IDN, return ZoneName also from GetDomainsPaged (already exists in other GetDomain-sps)
+ALTER PROCEDURE [dbo].[GetDomainsPaged]
+(
+ @ActorID int,
+ @PackageID int,
+ @ServerID int,
+ @Recursive bit,
+ @FilterColumn nvarchar(50) = '',
+ @FilterValue nvarchar(50) = '',
+ @SortColumn nvarchar(50),
+ @StartRow int,
+ @MaximumRows int
+)
+AS
+SET NOCOUNT ON
+
+-- check rights
+IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
+RAISERROR('You are not allowed to access this package', 16, 1)
+
+-- build query and run it to the temporary table
+DECLARE @sql nvarchar(4000)
+
+IF @SortColumn = '' OR @SortColumn IS NULL
+SET @SortColumn = 'DomainName'
+
+SET @sql = '
+DECLARE @Domains TABLE
+(
+ ItemPosition int IDENTITY(1,1),
+ DomainID int
+)
+INSERT INTO @Domains (DomainID)
+SELECT
+ D.DomainID
+FROM Domains AS D
+INNER JOIN Packages AS P ON D.PackageID = P.PackageID
+INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID
+LEFT OUTER JOIN ServiceItems AS Z ON D.ZoneItemID = Z.ItemID
+LEFT OUTER JOIN Services AS S ON Z.ServiceID = S.ServiceID
+LEFT OUTER JOIN Servers AS SRV ON S.ServerID = SRV.ServerID
+WHERE (D.IsInstantAlias = 0 AND D.IsDomainPointer = 0) AND
+ ((@Recursive = 0 AND D.PackageID = @PackageID)
+ OR (@Recursive = 1 AND dbo.CheckPackageParent(@PackageID, D.PackageID) = 1))
+AND (@ServerID = 0 OR (@ServerID > 0 AND S.ServerID = @ServerID))
+'
+
+IF @FilterColumn <> '' AND @FilterValue <> ''
+SET @sql = @sql + ' AND ' + @FilterColumn + ' LIKE @FilterValue '
+
+IF @SortColumn <> '' AND @SortColumn IS NOT NULL
+SET @sql = @sql + ' ORDER BY ' + @SortColumn + ' '
+
+SET @sql = @sql + ' SELECT COUNT(DomainID) FROM @Domains;SELECT
+ D.DomainID,
+ D.PackageID,
+ D.ZoneItemID,
+ D.DomainItemID,
+ D.DomainName,
+ D.HostingAllowed,
+ ISNULL(WS.ItemID, 0) AS WebSiteID,
+ WS.ItemName AS WebSiteName,
+ ISNULL(MD.ItemID, 0) AS MailDomainID,
+ MD.ItemName AS MailDomainName,
+ Z.ItemName AS ZoneName,
+ D.IsSubDomain,
+ D.IsInstantAlias,
+ D.IsDomainPointer,
+
+ -- packages
+ P.PackageName,
+
+ -- server
+ ISNULL(SRV.ServerID, 0) AS ServerID,
+ ISNULL(SRV.ServerName, '''') AS ServerName,
+ ISNULL(SRV.Comments, '''') AS ServerComments,
+ ISNULL(SRV.VirtualServer, 0) AS VirtualServer,
+
+ -- user
+ P.UserID,
+ U.Username,
+ U.FirstName,
+ U.LastName,
+ U.FullName,
+ U.RoleID,
+ U.Email
+FROM @Domains AS SD
+INNER JOIN Domains AS D ON SD.DomainID = D.DomainID
+INNER JOIN Packages AS P ON D.PackageID = P.PackageID
+INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID
+LEFT OUTER JOIN ServiceItems AS WS ON D.WebSiteID = WS.ItemID
+LEFT OUTER JOIN ServiceItems AS MD ON D.MailDomainID = MD.ItemID
+LEFT OUTER JOIN ServiceItems AS Z ON D.ZoneItemID = Z.ItemID
+LEFT OUTER JOIN Services AS S ON Z.ServiceID = S.ServiceID
+LEFT OUTER JOIN Servers AS SRV ON S.ServerID = SRV.ServerID
+WHERE SD.ItemPosition BETWEEN @StartRow + 1 AND @StartRow + @MaximumRows'
+
+exec sp_executesql @sql, N'@StartRow int, @MaximumRows int, @PackageID int, @FilterValue nvarchar(50), @ServerID int, @Recursive bit',
+@StartRow, @MaximumRows, @PackageID, @FilterValue, @ServerID, @Recursive
+
+
+RETURN
+
+GO
+
+
-- Domain lookup tasks
IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTasks] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP')
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs
index 8a5d68e3..44ec6c81 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs
@@ -29,6 +29,8 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
+using System.Globalization;
+using System.Linq;
using System.Xml;
using System.Xml.Serialization;
using WebsitePanel.Providers;
@@ -38,6 +40,12 @@ namespace WebsitePanel.EnterpriseServer
{
public class DnsServerController : IImportController, IBackupController
{
+ private static string GetAsciiZoneName(string zoneName)
+ {
+ var idn = new IdnMapping();
+ return idn.GetAscii(zoneName);
+ }
+
private static DNSServer GetDNSServer(int serviceId)
{
DNSServer dns = new DNSServer();
@@ -55,6 +63,9 @@ namespace WebsitePanel.EnterpriseServer
// get DNS provider
DNSServer dns = GetDNSServer(serviceId);
+ // Ensure zoneName is in ascii before saving to database
+ zoneName = GetAsciiZoneName(zoneName);
+
// check if zone already exists
if (dns.ZoneExists(zoneName))
return BusinessErrorCodes.ERROR_DNS_ZONE_EXISTS;
@@ -199,7 +210,7 @@ namespace WebsitePanel.EnterpriseServer
{
// zone item
DnsZone zone = primaryZone ? new DnsZone() : new SecondaryDnsZone();
- zone.Name = zoneName;
+ zone.Name = GetAsciiZoneName(zoneName);
zone.PackageId = spaceId;
zone.ServiceId = serviceId;
int zoneItemId = PackageController.AddPackageItem(zone);
@@ -280,6 +291,8 @@ namespace WebsitePanel.EnterpriseServer
foreach (GlobalDnsRecord record in records)
{
+ domainName = GetAsciiZoneName(domainName);
+
DnsRecord rr = new DnsRecord();
rr.RecordType = (DnsRecordType)Enum.Parse(typeof(DnsRecordType), record.RecordType, true);
rr.RecordName = Utils.ReplaceStringVariable(record.RecordName, "host_name", hostName, true);
@@ -359,8 +372,11 @@ namespace WebsitePanel.EnterpriseServer
DNSServer dns = new DNSServer();
ServiceProviderProxy.Init(dns, serviceId);
+ // IDN: The list of importable names is populated with unicode names, to make it easier for the user
+ var idn = new IdnMapping();
+
if (itemType == typeof(DnsZone))
- items.AddRange(dns.GetZones());
+ items.AddRange(dns.GetZones().Select(z => idn.GetUnicode(z)));
return items;
}
@@ -377,7 +393,7 @@ namespace WebsitePanel.EnterpriseServer
{
// add DNS zone
DnsZone zone = new DnsZone();
- zone.Name = itemName;
+ zone.Name = GetAsciiZoneName(itemName);
zone.ServiceId = serviceId;
zone.PackageId = packageId;
int zoneId = PackageController.AddPackageItem(zone);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
index 9d07df37..220ee79d 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
@@ -2776,7 +2776,7 @@ namespace WebsitePanel.EnterpriseServer
DNSServer dns = new DNSServer();
ServiceProviderProxy.Init(dns, zoneItem.ServiceId);
- return dns.GetZoneRecords(domain.DomainName);
+ return dns.GetZoneRecords(zoneItem.Name);
}
return new DnsRecord[] { };
diff --git a/WebsitePanel/Sources/WebsitePanel.Server/DNSServer.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/DNSServer.asmx.cs
index 89c6574a..a4f26d8a 100644
--- a/WebsitePanel/Sources/WebsitePanel.Server/DNSServer.asmx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Server/DNSServer.asmx.cs
@@ -28,6 +28,7 @@
using System;
using System.ComponentModel;
+using System.Globalization;
using System.Web.Services;
using System.Web.Services.Protocols;
using WebsitePanel.Providers;
@@ -51,6 +52,12 @@ namespace WebsitePanel.Server
get { return (IDnsServer)Provider; }
}
+ private string GetAsciiZoneName(string zoneName)
+ {
+ var idn = new IdnMapping();
+ return idn.GetAscii(zoneName);
+ }
+
#region Zones
[WebMethod, SoapHeader("settings")]
public bool ZoneExists(string zoneName)
@@ -58,7 +65,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' ZoneExists", ProviderSettings.ProviderName);
- bool result = DnsProvider.ZoneExists(zoneName);
+ bool result = DnsProvider.ZoneExists(GetAsciiZoneName(zoneName));
Log.WriteEnd("'{0}' ZoneExists", ProviderSettings.ProviderName);
return result;
}
@@ -92,7 +99,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' AddPrimaryZone", ProviderSettings.ProviderName);
- DnsProvider.AddPrimaryZone(zoneName, secondaryServers);
+ DnsProvider.AddPrimaryZone(GetAsciiZoneName(zoneName), secondaryServers);
Log.WriteEnd("'{0}' AddPrimaryZone", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -108,7 +115,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' AddSecondaryZone", ProviderSettings.ProviderName);
- DnsProvider.AddSecondaryZone(zoneName, masterServers);
+ DnsProvider.AddSecondaryZone(GetAsciiZoneName(zoneName), masterServers);
Log.WriteEnd("'{0}' AddSecondaryZone", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -124,7 +131,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' DeleteZone", ProviderSettings.ProviderName);
- DnsProvider.DeleteZone(zoneName);
+ DnsProvider.DeleteZone(GetAsciiZoneName(zoneName));
Log.WriteEnd("'{0}' DeleteZone", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -140,7 +147,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' UpdateSoaRecord", ProviderSettings.ProviderName);
- DnsProvider.UpdateSoaRecord(zoneName, host, primaryNsServer, primaryPerson);
+ DnsProvider.UpdateSoaRecord(GetAsciiZoneName(zoneName), host, primaryNsServer, primaryPerson);
Log.WriteEnd("'{0}' UpdateSoaRecord", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -158,7 +165,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' GetZoneRecords", ProviderSettings.ProviderName);
- DnsRecord[] result = DnsProvider.GetZoneRecords(zoneName);
+ DnsRecord[] result = DnsProvider.GetZoneRecords(GetAsciiZoneName(zoneName));
Log.WriteEnd("'{0}' GetZoneRecords", ProviderSettings.ProviderName);
return result;
}
@@ -175,7 +182,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' AddZoneRecord", ProviderSettings.ProviderName);
- DnsProvider.AddZoneRecord(zoneName, record);
+ DnsProvider.AddZoneRecord(GetAsciiZoneName(zoneName), record);
Log.WriteEnd("'{0}' AddZoneRecord", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -191,7 +198,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' DeleteZoneRecord", ProviderSettings.ProviderName);
- DnsProvider.DeleteZoneRecord(zoneName, record);
+ DnsProvider.DeleteZoneRecord(GetAsciiZoneName(zoneName), record);
Log.WriteEnd("'{0}' DeleteZoneRecord", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -207,7 +214,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' AddZoneRecords", ProviderSettings.ProviderName);
- DnsProvider.AddZoneRecords(zoneName, records);
+ DnsProvider.AddZoneRecords(GetAsciiZoneName(zoneName), records);
Log.WriteEnd("'{0}' AddZoneRecords", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -223,7 +230,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' DeleteZoneRecords", ProviderSettings.ProviderName);
- DnsProvider.DeleteZoneRecords(zoneName, records);
+ DnsProvider.DeleteZoneRecords(GetAsciiZoneName(zoneName), records);
Log.WriteEnd("'{0}' DeleteZoneRecords", ProviderSettings.ProviderName);
}
catch (Exception ex)
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx
index 2389512c..c05e907e 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx
@@ -144,18 +144,6 @@
-
-
+
+