Added: Support for "@" and "*" records for enabled/disable dns and ip mode

switch. Only when only one site exists.

Fixed: Smartermail domain retrieval to handle records with same domain name

Fixed: Added not-domain dependendent services globaldnssupport upon space
or domain creation
This commit is contained in:
robvde 2012-10-25 13:35:07 +04:00
parent f067884ec4
commit aafb82015b
14 changed files with 839 additions and 313 deletions

View file

@ -785,21 +785,14 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@domainId", domainId));
}
public static IDataReader GetDomainByName(int actorId, string domainName)
public static IDataReader GetDomainByName(int actorId, string domainName, bool searchOnDomainPointer, bool isDomainPointer)
{
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "GetDomainByName",
new SqlParameter("@ActorId", actorId),
new SqlParameter("@domainName", domainName));
}
public static IDataReader GetDomainByNameByPointer(int actorId, string domainName, bool isDomainPointer)
{
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "GetDomainByNameByPointer",
new SqlParameter("@ActorId", actorId),
new SqlParameter("@domainName", domainName),
new SqlParameter("@isDomainPointer", isDomainPointer));
new SqlParameter("@SearchOnDomainPointer", searchOnDomainPointer),
new SqlParameter("@IsDomainPointer", isDomainPointer));
}

View file

@ -1564,7 +1564,7 @@ namespace WebsitePanel.EnterpriseServer
{
if (domain.ZoneItemId != 0)
{
ServerController.RemoveServiceDNSRecords(org.PackageId, ResourceGroups.Exchange, domain, "");
ServerController.RemoveServiceDNSRecords(org.PackageId, ResourceGroups.Exchange, domain, "", false);
}
}

View file

@ -1051,7 +1051,7 @@ namespace WebsitePanel.EnterpriseServer
int itemId = PackageController.AddPackageItem(item);
// update related domain with a new pointer
DomainInfo domain = ServerController.GetDomain(item.Name);
DomainInfo domain = ServerController.GetDomain(item.Name, true, false);
if (domain != null)
{
domain.MailDomainId = itemId;
@ -1065,7 +1065,7 @@ namespace WebsitePanel.EnterpriseServer
if (!String.IsNullOrEmpty(domain.InstantAliasName))
{
// load instant alias
DomainInfo instantAlias = ServerController.GetDomainItem(domain.InstantAliasName);
DomainInfo instantAlias = ServerController.GetDomain(domain.InstantAliasId);
if (instantAlias != null)
{
AddMailDomainPointer(itemId, instantAlias.DomainId);
@ -1164,7 +1164,7 @@ namespace WebsitePanel.EnterpriseServer
PackageController.DeletePackageItem(origItem.Id);
// update related domain with a new pointer
DomainInfo domain = ServerController.GetDomain(origItem.Name);
DomainInfo domain = ServerController.GetDomain(origItem.Name, true, false);
if (domain != null)
{
domain.MailDomainId = 0;
@ -1487,7 +1487,7 @@ namespace WebsitePanel.EnterpriseServer
// add/update domains/pointers
foreach (string domainName in domains)
{
DomainInfo domain = ServerController.GetDomain(domainName);
DomainInfo domain = ServerController.GetDomain(domainName, true, false);
if (domain == null)
{
domain = new DomainInfo();

View file

@ -475,6 +475,16 @@ namespace WebsitePanel.EnterpriseServer
{
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Os, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Dns, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Ftp, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2000, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2005, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2008, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2012, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql4, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql5, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Statistics, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.VPS, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.VPSForPC, domain, "");
}
}

View file

@ -1651,13 +1651,16 @@ namespace WebsitePanel.EnterpriseServer
public static DomainInfo GetDomain(string domainName)
{
// get domain by name
DomainInfo domain = GetDomainItem(domainName);
// return
return GetDomain(domain);
return ObjectUtils.FillObjectFromDataReader<DomainInfo>(
DataProvider.GetDomainByName(SecurityContext.User.UserId, domainName,false, false));
}
public static DomainInfo GetDomain(string domainName, bool searchOnDomainPointer, bool isDomainPointer)
{
return GetDomainItem(domainName, searchOnDomainPointer, isDomainPointer);
}
private static DomainInfo GetDomain(DomainInfo domain)
{
// check domain
@ -1666,7 +1669,7 @@ namespace WebsitePanel.EnterpriseServer
// get instant alias
domain.InstantAliasName = GetDomainAlias(domain.PackageId, domain.DomainName);
DomainInfo instantAlias = GetDomainItem(domain.InstantAliasName);
DomainInfo instantAlias = GetDomainItem(domain.InstantAliasName, true, false);
if (instantAlias != null)
domain.InstantAliasId = instantAlias.DomainId;
@ -1681,17 +1684,16 @@ namespace WebsitePanel.EnterpriseServer
public static DomainInfo GetDomainItem(string domainName)
{
return ObjectUtils.FillObjectFromDataReader<DomainInfo>(
DataProvider.GetDomainByName(SecurityContext.User.UserId, domainName));
return GetDomainItem(domainName, false, false);
}
public static DomainInfo GetDomainItem(string domainName, bool IsDomainPointer)
public static DomainInfo GetDomainItem(string domainName, bool searchOnDomainPointer, bool isDomainPointer)
{
return ObjectUtils.FillObjectFromDataReader<DomainInfo>(
DataProvider.GetDomainByNameByPointer(SecurityContext.User.UserId, domainName, IsDomainPointer));
DataProvider.GetDomainByName(SecurityContext.User.UserId, domainName, searchOnDomainPointer, isDomainPointer));
}
public static string GetDomainAlias(int packageId, string domainName)
{
// load package settings
@ -1740,6 +1742,16 @@ namespace WebsitePanel.EnterpriseServer
{
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Os, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Dns, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Ftp, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2000, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2005, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2008, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2012, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql4, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql5, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Statistics, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.VPS, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.VPSForPC, domain, "");
}
}
@ -1912,6 +1924,11 @@ namespace WebsitePanel.EnterpriseServer
}
public static void AddServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP)
{
AddServiceDNSRecords(packageId, groupName, domain, serviceIP, false);
}
public static void AddServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP, bool wildcardOnly)
{
int serviceId = PackageController.GetPackageServiceId(packageId, groupName);
if (serviceId > 0)
@ -1919,6 +1936,19 @@ namespace WebsitePanel.EnterpriseServer
List<DnsRecord> tmpZoneRecords = new List<DnsRecord>();
List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(serviceId);
if (wildcardOnly)
{
List<GlobalDnsRecord> temp = new List<GlobalDnsRecord>();
foreach (GlobalDnsRecord d in dnsRecords)
{
if ((d.RecordName == "*") ||
(d.RecordName == "@"))
temp.Add(d);
}
dnsRecords = temp;
}
DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId);
tmpZoneRecords.AddRange(DnsServerController.BuildDnsResourceRecords(dnsRecords, "", domain.ZoneName, serviceIP));
@ -1949,13 +1979,25 @@ namespace WebsitePanel.EnterpriseServer
public static void RemoveServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP)
public static void RemoveServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP, bool wildcardOnly)
{
int serviceId = PackageController.GetPackageServiceId(packageId, groupName);
if (serviceId > 0)
{
List<DnsRecord> zoneRecords = new List<DnsRecord>();
List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(serviceId);
if (wildcardOnly)
{
List<GlobalDnsRecord> temp = new List<GlobalDnsRecord>();
foreach (GlobalDnsRecord d in dnsRecords)
{
if ((d.RecordName == "*") ||
(d.RecordName == "@"))
temp.Add(d);
}
dnsRecords = temp;
}
DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId);
zoneRecords.AddRange(DnsServerController.BuildDnsResourceRecords(dnsRecords, "", domain.ZoneName, serviceIP));
@ -2266,6 +2308,16 @@ namespace WebsitePanel.EnterpriseServer
switch (group.GroupName)
{
case ResourceGroups.Dns:
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Ftp, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2000, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2005, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2008, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2012, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MySql4, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MySql5, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Statistics, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.VPS, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.VPSForPC, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Dns, domain, "");
break;
case ResourceGroups.Os:
@ -2329,21 +2381,44 @@ namespace WebsitePanel.EnterpriseServer
List<WebSite> sites = WebServerController.GetWebSites(domain.PackageId, false);
foreach (WebSite w in sites)
{
if (w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1)
if ((w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1) ||
(w.SiteId.ToLower() == domain.DomainName.ToLower()))
{
WebServerController.AddWebSitePointer(w.Id, w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), ""), domain.DomainId, false, true, true);
WebServerController.AddWebSitePointer( w.Id,
(w.SiteId.ToLower() == domain.DomainName.ToLower()) ? "" : w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), ""),
domain.DomainId, false, true, true);
}
List<DomainInfo> pointers = WebServerController.GetWebSitePointers(w.Id);
foreach (DomainInfo pointer in pointers)
{
if (pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1)
if ((pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1)||
(pointer.DomainName.ToLower() == domain.DomainName.ToLower()))
{
WebServerController.AddWebSitePointer(w.Id, pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), ""), domain.DomainId, false, true, true);
WebServerController.AddWebSitePointer( w.Id,
(pointer.DomainName.ToLower() == domain.DomainName.ToLower()) ? "" : pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), ""),
domain.DomainId, false, true, true);
}
}
}
if (sites.Count == 1)
{
// load site item
IPAddressInfo ip = ServerController.GetIPAddress(sites[0].SiteIPAddressId);
string serviceIp = (ip != null) ? ip.ExternalIP : null;
if (string.IsNullOrEmpty(serviceIp))
{
StringDictionary settings = ServerController.GetServiceSettings(sites[0].ServiceId);
if (settings["PublicSharedIP"] != null)
serviceIp = settings["PublicSharedIP"].ToString();
}
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Web, domain, serviceIp, true);
}
break;
}
}
@ -2479,7 +2554,7 @@ namespace WebsitePanel.EnterpriseServer
try
{
// load instant alias domain
DomainInfo instantAlias = GetDomainItem(domain.InstantAliasName, false);
DomainInfo instantAlias = GetDomainItem(domain.InstantAliasName, true, false);
if (instantAlias == null)
return 0;

View file

@ -3778,7 +3778,7 @@ namespace WebsitePanel.EnterpriseServer
ret = vs.GetDeviceEvents(serviceInfo.ServerName, serviceProviderItem.Name);
}
catch(Exception ex)
catch(Exception )
{
ret = null;
}
@ -3804,7 +3804,7 @@ namespace WebsitePanel.EnterpriseServer
ret = vs.GetMonitoringAlerts(serviceInfo.ServerName, serviceProviderItem.Name);
}
catch (Exception ex)
catch (Exception )
{
ret = null;
}
@ -3832,7 +3832,7 @@ namespace WebsitePanel.EnterpriseServer
ret = vs.GetPerfomanceValue(serviceProviderItem.Name, perf, startPeriod, endPeriod);
}
catch (Exception ex)
catch (Exception )
{
ret = null;
}

View file

@ -651,7 +651,6 @@ namespace WebsitePanel.EnterpriseServer
addressId = packageIp.AddressID;
}
List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(siteItem.ServiceId);
foreach (GlobalDnsRecord d in dnsRecords)
@ -668,6 +667,8 @@ namespace WebsitePanel.EnterpriseServer
try
{
IPAddressInfo ip;
// remove all web site pointers
DomainInfo domain = ServerController.GetDomain(siteItem.Name);
DomainInfo ZoneInfo = ServerController.GetDomain(domain.ZoneName);
@ -709,6 +710,27 @@ namespace WebsitePanel.EnterpriseServer
}
List<WebSite> sites = WebServerController.GetWebSites(domain.PackageId, false);
bool oneSiteOnly = (sites.Count == 1);
if (oneSiteOnly)
{
// load site item
ip = ServerController.GetIPAddress(sites[0].SiteIPAddressId);
string serviceIp = (ip != null) ? ip.ExternalIP : null;
if (string.IsNullOrEmpty(serviceIp))
{
StringDictionary settings = ServerController.GetServiceSettings(sites[0].ServiceId);
if (settings["PublicSharedIP"] != null)
serviceIp = settings["PublicSharedIP"].ToString();
}
ServerController.RemoveServiceDNSRecords(domain.PackageId, ResourceGroups.Web, domain, serviceIp, true);
}
// update site item
siteItem.SiteIPAddressId = addressId;
PackageController.UpdatePackageItem(siteItem);
@ -731,7 +753,7 @@ namespace WebsitePanel.EnterpriseServer
}
// load web site IP address
IPAddressInfo ip = ServerController.GetIPAddress(siteItem.SiteIPAddressId);
ip = ServerController.GetIPAddress(siteItem.SiteIPAddressId);
string ipAddr = "*";
if (ip != null)
ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP;
@ -748,10 +770,27 @@ namespace WebsitePanel.EnterpriseServer
(b.Port == srvBinding.Port)))
newBindings.Add(b);
}
web.UpdateSiteBindings(siteItem.SiteId, newBindings.ToArray(), false);
if (oneSiteOnly)
{
sites = WebServerController.GetWebSites(domain.PackageId, false);
// load site item
ip = ServerController.GetIPAddress(sites[0].SiteIPAddressId);
string serviceIp = (ip != null) ? ip.ExternalIP : null;
if (string.IsNullOrEmpty(serviceIp))
{
StringDictionary settings = ServerController.GetServiceSettings(sites[0].ServiceId);
if (settings["PublicSharedIP"] != null)
serviceIp = settings["PublicSharedIP"].ToString();
}
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Web, domain, serviceIp, true);
}
return 0;
}
@ -782,6 +821,8 @@ namespace WebsitePanel.EnterpriseServer
try
{
IPAddressInfo ip;
DomainInfo domain = ServerController.GetDomain(siteItem.Name);
DomainInfo ZoneInfo = ServerController.GetDomain(domain.ZoneName);
@ -825,6 +866,27 @@ namespace WebsitePanel.EnterpriseServer
}
List<WebSite> sites = WebServerController.GetWebSites(domain.PackageId, false);
bool oneSiteOnly = (sites.Count == 1);
if (oneSiteOnly)
{
// load site item
ip = ServerController.GetIPAddress(sites[0].SiteIPAddressId);
string serviceIp = (ip != null) ? ip.ExternalIP : null;
if (string.IsNullOrEmpty(serviceIp))
{
StringDictionary settings = ServerController.GetServiceSettings(sites[0].ServiceId);
if (settings["PublicSharedIP"] != null)
serviceIp = settings["PublicSharedIP"].ToString();
}
ServerController.RemoveServiceDNSRecords(domain.PackageId, ResourceGroups.Web, domain, serviceIp, true);
}
//figure out the PackageAddressId
PackageIPAddress packageIpAddress = null;
var siteIpAddresses = ServerController.GetItemIPAddresses(siteItemId, IPAddressPool.None);
@ -858,6 +920,26 @@ namespace WebsitePanel.EnterpriseServer
, ZoneInfo.DomainId, true, true, true);
}
if (oneSiteOnly)
{
sites = WebServerController.GetWebSites(domain.PackageId, false);
// load site item
ip = ServerController.GetIPAddress(sites[0].SiteIPAddressId);
string serviceIp = (ip != null) ? ip.ExternalIP : null;
if (string.IsNullOrEmpty(serviceIp))
{
StringDictionary settings = ServerController.GetServiceSettings(sites[0].ServiceId);
if (settings["PublicSharedIP"] != null)
serviceIp = settings["PublicSharedIP"].ToString();
}
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Web, domain, serviceIp, true);
}
return 0;
}
catch (Exception ex)
@ -1171,13 +1253,25 @@ namespace WebsitePanel.EnterpriseServer
domainTmp.WebSiteId = siteItemId;
domainTmp.ZoneItemId = domain.ZoneItemId;
domainTmp.DomainItemId = domainId;
ServerController.UpdateDomain(domainTmp);
}
}
}
}
}
else
{
if (domain.ZoneItemId > 0)
{
DomainInfo domainTmp = ServerController.GetDomain(string.IsNullOrEmpty(hostName) ? domain.DomainName : hostName + "." + domain.DomainName, true, true);
if (domainTmp != null)
{
domainTmp.ZoneItemId = domain.ZoneItemId;
ServerController.UpdateDomain(domainTmp);
}
}
}
return 0;
}