diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index cd99bc7a..16f3ae7a 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -5485,6 +5485,244 @@ GO +ALTER PROCEDURE [dbo].[GetOCSUsers] +( + @ItemID int, + @SortColumn nvarchar(40), + @SortDirection nvarchar(20), + @Name nvarchar(400), + @Email nvarchar(400), + @StartRow int, + @Count int +) +AS + +IF (@Name IS NULL) +BEGIN + SET @Name = '%' +END + +IF (@Email IS NULL) +BEGIN + SET @Email = '%' +END + +CREATE TABLE #TempOCSUsers +( + [ID] [int] IDENTITY(1,1) NOT NULL, + [AccountID] [int], + [ItemID] [int] NOT NULL, + [AccountName] [nvarchar](300) NOT NULL, + [DisplayName] [nvarchar](300) NOT NULL, + [InstanceID] [nvarchar](50) NOT NULL, + [PrimaryEmailAddress] [nvarchar](300) NULL, + [SamAccountName] [nvarchar](100) NULL +) + + +IF (@SortColumn = 'DisplayName') +BEGIN + INSERT INTO + #TempOCSUsers + SELECT + ea.AccountID, + ea.ItemID, + ea.AccountName, + ea.DisplayName, + ou.InstanceID, + ea.PrimaryEmailAddress, + ea.SamAccountName + FROM + ExchangeAccounts ea + INNER JOIN + OCSUsers ou + ON + ea.AccountID = ou.AccountID + WHERE + ea.ItemID = @ItemID AND ea.DisplayName LIKE @Name AND ea.PrimaryEmailAddress LIKE @Email + ORDER BY + ea.DisplayName +END +ELSE +BEGIN + INSERT INTO + #TempOCSUsers + SELECT + ea.AccountID, + ea.ItemID, + ea.AccountName, + ea.DisplayName, + ou.InstanceID, + ea.PrimaryEmailAddress, + ea.SamAccountName + FROM + ExchangeAccounts ea + INNER JOIN + OCSUsers ou + ON + ea.AccountID = ou.AccountID + WHERE + ea.ItemID = @ItemID AND ea.DisplayName LIKE @Name AND ea.PrimaryEmailAddress LIKE @Email + ORDER BY + ea.PrimaryEmailAddress +END + +DECLARE @RetCount int +SELECT @RetCount = COUNT(ID) FROM #TempOCSUsers + +IF (@SortDirection = 'ASC') +BEGIN + SELECT * FROM #TempOCSUsers + WHERE ID > @StartRow AND ID <= (@StartRow + @Count) +END +ELSE +BEGIN + IF (@SortColumn = 'DisplayName') + BEGIN + SELECT * FROM #TempOCSUsers + WHERE ID >@RetCount - @Count - @StartRow AND ID <= @RetCount- @StartRow ORDER BY DisplayName DESC + END + ELSE + BEGIN + SELECT * FROM #TempOCSUsers + WHERE ID >@RetCount - @Count - @StartRow AND ID <= @RetCount- @StartRow ORDER BY PrimaryEmailAddress DESC + END + +END + + +DROP TABLE #TempOCSUsers + +GO + + + + + + +ALTER PROCEDURE [dbo].[GetCRMUsers] +( + @ItemID int, + @SortColumn nvarchar(40), + @SortDirection nvarchar(20), + @Name nvarchar(400), + @Email nvarchar(400), + @StartRow int, + @Count int +) +AS + +IF (@Name IS NULL) +BEGIN + SET @Name = '%' +END + +IF (@Email IS NULL) +BEGIN + SET @Email = '%' +END + +CREATE TABLE #TempCRMUsers +( + [ID] [int] IDENTITY(1,1) NOT NULL, + [AccountID] [int], + [ItemID] [int] NOT NULL, + [AccountName] [nvarchar](300) NOT NULL, + [DisplayName] [nvarchar](300) NOT NULL, + [PrimaryEmailAddress] [nvarchar](300) NULL, + [SamAccountName] [nvarchar](100) NULL +) + + +IF (@SortColumn = 'DisplayName') +BEGIN + INSERT INTO + #TempCRMUsers + SELECT + ea.AccountID, + ea.ItemID, + ea.AccountName, + ea.DisplayName, + ea.PrimaryEmailAddress, + ea.SamAccountName + FROM + ExchangeAccounts ea + INNER JOIN + CRMUsers cu + ON + ea.AccountID = cu.AccountID + WHERE + ea.ItemID = @ItemID AND ea.DisplayName LIKE @Name AND ea.PrimaryEmailAddress LIKE @Email + ORDER BY + ea.DisplayName +END +ELSE +BEGIN + INSERT INTO + #TempCRMUsers + SELECT + ea.AccountID, + ea.ItemID, + ea.AccountName, + ea.DisplayName, + ea.PrimaryEmailAddress, + ea.SamAccountName + FROM + ExchangeAccounts ea + INNER JOIN + CRMUsers cu + ON + ea.AccountID = cu.AccountID + WHERE + ea.ItemID = @ItemID AND ea.DisplayName LIKE @Name AND ea.PrimaryEmailAddress LIKE @Email + ORDER BY + ea.PrimaryEmailAddress +END + +DECLARE @RetCount int +SELECT @RetCount = COUNT(ID) FROM #TempCRMUsers + +IF (@SortDirection = 'ASC') +BEGIN + SELECT * FROM #TempCRMUsers + WHERE ID > @StartRow AND ID <= (@StartRow + @Count) +END +ELSE +BEGIN + IF (@SortColumn = 'DisplayName') + BEGIN + SELECT * FROM #TempCRMUsers + WHERE ID >@RetCount - @Count - @StartRow AND ID <= @RetCount- @StartRow ORDER BY DisplayName DESC + END + ELSE + BEGIN + SELECT * FROM #TempCRMUsers + WHERE ID >@RetCount - @Count - @StartRow AND ID <= @RetCount- @StartRow ORDER BY PrimaryEmailAddress DESC + END + +END + + + +DROP TABLE #TempCRMUsers +GO + + + + + + + + + + + + + + + + + diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/IPAddress.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/IPAddress.cs index 5135bfc6..556d173a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/IPAddress.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/IPAddress.cs @@ -69,7 +69,7 @@ namespace WebsitePanel.EnterpriseServer { return ""; var s = new System.Text.StringBuilder(); if (!V6) { - var ipl = (long)Address; + var ipl = Address; s.Append(String.Format("{0}.{1}.{2}.{3}", (ipl >> 24) & 0xFFL, (ipl >> 16) & 0xFFL, (ipl >> 8) & 0xFFL, (ipl & 0xFFL))); } else if (!IsMask) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs index fa1b5caf..bc4864be 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs @@ -988,7 +988,7 @@ namespace WebsitePanel.EnterpriseServer if (startExternalIP.V6 != startInternalIP.V6 && (startExternalIP.V6 != endExternalIP.V6 && endExternalIP != null)) throw new NotSupportedException("All IP addresses must be either V4 or V6."); int i = 0; - long step = (endExternalIP < startExternalIP) ? -1 : 1; + long step = ((endExternalIP - startExternalIP) > 0) ? 1 : -1; while (true) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index 5ea4e114..8cb32b80 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -143,14 +143,13 @@ namespace WebsitePanel.EnterpriseServer site.FrontPageAccount = siteItem.FrontPageAccount; if (String.IsNullOrEmpty(site.FrontPageAccount)) site.FrontPageAccount = GetFrontPageUsername(site.Name); - #region Restore Web Deploy publishing persistent properties + // Set Web Deploy publishing account site.WebDeployPublishingAccount = siteItem.WebDeployPublishingAccount; // Set Web Deploy site publishing enabled site.WebDeploySitePublishingEnabled = siteItem.WebDeploySitePublishingEnabled; // Set Web Deploy site publishing profile site.WebDeploySitePublishingProfile = siteItem.WebDeploySitePublishingProfile; - #endregion return site; } @@ -224,7 +223,7 @@ namespace WebsitePanel.EnterpriseServer StringDictionary webSettings = ServerController.GetServiceSettings(serviceId); int addressId = Utils.ParseInt(webSettings["SharedIP"], 0); - bool dedicatedIp = false; + if (packageAddressId != 0) { // dedicated IP @@ -232,7 +231,6 @@ namespace WebsitePanel.EnterpriseServer if (packageIp != null) { addressId = packageIp.AddressID; - dedicatedIp = true; } } @@ -597,12 +595,7 @@ namespace WebsitePanel.EnterpriseServer if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; - // load assigned IP address - //IPAddressInfo ip = ServerController.GetIPAddress(ipAddressId); - //if (ip == null) - //return BusinessErrorCodes.ERROR_WEB_SITE_IP_ADDRESS_NOT_SPECIFIED; - - //string ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; + int addressId = 0; PackageIPAddress packageIp = ServerController.GetPackageIPAddress(ipAddressId); if (packageIp != null) @@ -614,7 +607,7 @@ namespace WebsitePanel.EnterpriseServer // place log record TaskManager.StartTask("WEB_SITE", "SWITCH_TO_DEDICATED_IP", siteItem.Name); TaskManager.ItemId = siteItemId; -/* + try { // remove all web site pointers @@ -635,10 +628,21 @@ namespace WebsitePanel.EnterpriseServer if (addressId != 0) ServerController.AddItemIPAddress(siteItemId, addressId); - AddWebSitePointer(siteItemId, "", domain.DomainId, true, true, true); + + DomainInfo ZoneInfo = ServerController.GetDomain(domain.ZoneName); + + AddWebSitePointer(siteItemId, + (domain.DomainName.Replace("." + domain.ZoneName, "") == domain.ZoneName) ? "": domain.DomainName.Replace("." + domain.ZoneName,"") + , ZoneInfo.DomainId, true, true, true); foreach (DomainInfo pointer in pointers) - AddWebSitePointer(siteItemId, "", pointer.DomainId, true, true, true); + { + ZoneInfo = ServerController.GetDomain(domain.ZoneName); + + AddWebSitePointer(siteItemId, + (pointer.DomainName.Replace("." + pointer.ZoneName, "") == pointer.ZoneName) ? "" : pointer.DomainName.Replace("." + pointer.ZoneName, "") + , ZoneInfo.DomainId, true, true, true); + } return 0; } @@ -650,7 +654,6 @@ namespace WebsitePanel.EnterpriseServer { TaskManager.CompleteTask(); } - */ return 0; } @@ -669,18 +672,40 @@ namespace WebsitePanel.EnterpriseServer // place log record TaskManager.StartTask("WEB_SITE", "SWITCH_TO_SHARED_IP", siteItem.Name); TaskManager.ItemId = siteItemId; -/* + try { - // get web site pointers - var sitePointers = GetWebSitePointers(siteItemId); + // remove all web site pointers + List pointers = GetWebSitePointers(siteItemId); + foreach (DomainInfo pointer in pointers) + DeleteWebSitePointer(siteItemId, pointer.DomainId, true, true, false); - // get existing web site bindings - WebServer web = new WebServer(); - ServiceProviderProxy.Init(web, siteItem.ServiceId); - var bindings = web.GetSiteBindings(siteItem.SiteId); + // remove web site main pointer + DomainInfo domain = ServerController.GetDomain(siteItem.Name); + if (domain != null) + DeleteWebSitePointer(siteItemId, domain.DomainId, true, true, false); - // TODO - what would be correct logic here? + //Deallocate IP Address + ServerController.DeleteItemIPAddress(siteItemId, siteItem.SiteIPAddressId); + + // update site item + siteItem.SiteIPAddressId = 0; + PackageController.UpdatePackageItem(siteItem); + + DomainInfo ZoneInfo = ServerController.GetDomain(domain.ZoneName); + + AddWebSitePointer(siteItemId, + (domain.DomainName.Replace("." + domain.ZoneName, "") == domain.ZoneName) ? "" : domain.DomainName.Replace("." + domain.ZoneName, "") + , ZoneInfo.DomainId, true, true, true); + + foreach (DomainInfo pointer in pointers) + { + ZoneInfo = ServerController.GetDomain(domain.ZoneName); + + AddWebSitePointer(siteItemId, + (pointer.DomainName.Replace("." + pointer.ZoneName, "") == pointer.ZoneName) ? "" : pointer.DomainName.Replace("." + pointer.ZoneName, "") + , ZoneInfo.DomainId, true, true, true); + } return 0; } @@ -692,7 +717,7 @@ namespace WebsitePanel.EnterpriseServer { TaskManager.CompleteTask(); } - */ + return 0; } @@ -904,23 +929,18 @@ namespace WebsitePanel.EnterpriseServer //ignore all other except the host_name record foreach (GlobalDnsRecord r in dnsRecords) { - if (rebuild) + if (r.RecordName == "[host_name]") { - if ((r.RecordName + (string.IsNullOrEmpty(r.RecordName) ? domain.ZoneName : "." + domain.ZoneName)) == domain.DomainName) tmpDnsRecords.Add(r); + tmpDnsRecords.Add(r); + break; } - else - { - if (r.RecordName == "[host_name]") tmpDnsRecords.Add(r); - } - } } else tmpDnsRecords = dnsRecords; - List resourceRecords = rebuild ? DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, "", domain.DomainName, serviceIp): - DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, hostName, domain.DomainName, serviceIp); + List resourceRecords = DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, hostName, domain.DomainName, serviceIp); if (!rebuild) { @@ -968,10 +988,7 @@ namespace WebsitePanel.EnterpriseServer ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; // fill bindings - if (rebuild) - FillWebServerBindings(bindings, dnsRecords, "", domain.DomainName, "", ignoreGlobalDNSRecords); - else - FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords); + FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords); //for logging purposes foreach (ServerBinding b in bindings) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config index a99cd490..3766094f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config @@ -5,11 +5,11 @@ - + - + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/OCS/OCSUsers.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/OCS/OCSUsers.ascx.designer.cs index e708f509..2fc04a3c 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/OCS/OCSUsers.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/OCS/OCSUsers.ascx.designer.cs @@ -1,4 +1,32 @@ -//------------------------------------------------------------------------------ +// Copyright (c) 2012, Outercurve Foundation. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// - Neither the name of the Outercurve Foundation nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//------------------------------------------------------------------------------ // // This code was generated by a tool. // diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS60_Settings.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS60_Settings.ascx.designer.cs index aac665aa..84883d46 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS60_Settings.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS60_Settings.ascx.designer.cs @@ -1,3 +1,31 @@ +// Copyright (c) 2012, Outercurve Foundation. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// - Neither the name of the Outercurve Foundation nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + //------------------------------------------------------------------------------ // // This code was generated by a tool.