From 7bc0cc88fa651c7e556ef175f432eebf690e87f7 Mon Sep 17 00:00:00 2001 From: rdolezel Date: Tue, 11 Sep 2012 22:09:03 +0200 Subject: [PATCH 01/55] Work item 175 Exchange Accepted Domain can be switched between Authoritative and InternalRelay --- WebsitePanel/Database/install_db.sql | 29 ++++++++- WebsitePanel/Database/update_db.sql | 60 ++++++++++++++++++ .../OrganizationProxy.cs | 11 ++++ .../Code/Data/DataProvider.cs | 12 ++++ .../ExchangeServerController.cs | 62 ++++++++++++++++++- .../HostedSolution/OrganizationController.cs | 31 ++++++++++ .../Code/Servers/ServerController.cs | 4 +- .../esOrganizations.asmx.cs | 6 ++ .../ExchangeAcceptedDomainType.cs | 37 +++++++++++ .../HostedSolution/IExchangeServer.cs | 1 + .../HostedSolution/OrganizationDomainName.cs | 17 +++++ .../WebsitePanel.Providers.Base.csproj | 1 + .../Exchange2007.cs | 41 ++++++++++++ .../ExchangeServerProxy.cs | 12 +++- .../ExchangeServer.asmx.cs | 15 +++++ .../ExchangeServer/ExchangeDomainNames.ascx | 18 +++++- .../ExchangeDomainNames.ascx.cs | 32 ++++++++++ .../ExchangeDomainNames.ascx.designer.cs | 9 --- 18 files changed, 382 insertions(+), 16 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAcceptedDomainType.cs diff --git a/WebsitePanel/Database/install_db.sql b/WebsitePanel/Database/install_db.sql index a8b29b45..735ecd50 100644 --- a/WebsitePanel/Database/install_db.sql +++ b/WebsitePanel/Database/install_db.sql @@ -6508,6 +6508,7 @@ CREATE TABLE [dbo].[ExchangeOrganizationDomains]( [ItemID] [int] NOT NULL, [DomainID] [int] NULL, [IsHost] [bit] NULL, + [DomainTypeID] [int] NOT NULL, CONSTRAINT [PK_ExchangeOrganizationDomains] PRIMARY KEY CLUSTERED ( [OrganizationDomainID] ASC @@ -6634,7 +6635,8 @@ AS SELECT ED.DomainID, D.DomainName, - ED.IsHost + ED.IsHost, + ED.DomainTypeID FROM ExchangeOrganizationDomains AS ED INNER JOIN Domains AS D ON ED.DomainID = D.DomainID @@ -45799,6 +45801,29 @@ GO +CREATE PROCEDURE [dbo].ChangeExchangeAcceptedDomainType +( + @ItemID int, + @DomainID int, + @DomainTypeID int +) +AS +UPDATE ExchangeOrganizationDomains +SET DomainTypeID=@DomainTypeID +WHERE ItemID=ItemID AND DomainID=@DomainID +RETURN +GO + + + + + + + + + + + @@ -46064,6 +46089,8 @@ ALTER TABLE [dbo].[ExchangeOrganizationDomains] CHECK CONSTRAINT [FK_ExchangeOrg GO ALTER TABLE [dbo].[ExchangeOrganizationDomains] ADD CONSTRAINT [DF_ExchangeOrganizationDomains_IsHost] DEFAULT ((0)) FOR [IsHost] GO +ALTER TABLE [dbo].[ExchangeOrganizationDomains] ADD CONSTRAINT [DF_ExchangeOrganizationDomains_DomainTypeID] DEFAULT ((0)) FOR [DomainTypeID] +GO ALTER TABLE [dbo].[PrivateIPAddresses] WITH CHECK ADD CONSTRAINT [FK_PrivateIPAddresses_ServiceItems] FOREIGN KEY([ItemID]) REFERENCES [dbo].[ServiceItems] ([ItemID]) ON DELETE CASCADE diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index a19a94b4..de26ee66 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -5211,6 +5211,66 @@ GO +IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='ExchangeOrganizationDomains' AND COLS.name='DomainTypeID') +BEGIN +ALTER TABLE [dbo].[ExchangeOrganizationDomains] ADD + [DomainTypeID] [int] NOT NULL CONSTRAINT DF_ExchangeOrganizationDomains_DomainTypeID DEFAULT 0 +END +GO + + + + +ALTER PROCEDURE [dbo].[GetExchangeOrganizationDomains] +( + @ItemID int +) +AS +SELECT + ED.DomainID, + D.DomainName, + ED.IsHost, + ED.DomainTypeID +FROM + ExchangeOrganizationDomains AS ED +INNER JOIN Domains AS D ON ED.DomainID = D.DomainID +WHERE ED.ItemID = @ItemID +RETURN + +GO + + + + + + + +IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'ChangeExchangeAcceptedDomainType') +BEGIN +EXEC sp_executesql N' +CREATE PROCEDURE [dbo].ChangeExchangeAcceptedDomainType +( + @ItemID int, + @DomainID int, + @DomainTypeID int +) +AS +UPDATE ExchangeOrganizationDomains +SET DomainTypeID=@DomainTypeID +WHERE ItemID=ItemID AND DomainID=@DomainID +RETURN' +END +GO + + + + + + + + + + ALTER PROCEDURE [dbo].[GetPackages] ( @ActorID int, diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OrganizationProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OrganizationProxy.cs index 78934577..8cf5ab0d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OrganizationProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OrganizationProxy.cs @@ -735,6 +735,17 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution { domainId}); return ((int)(results[0])); } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/ChangeOrganizationDomainType", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public int ChangeOrganizationDomainType(int itemId, int domainId, ExchangeAcceptedDomainType newDomainType) + { + object[] results = this.Invoke("ChangeOrganizationDomainType", new object[] { + itemId, + domainId, + newDomainType}); + return ((int)(results[0])); + } /// public System.IAsyncResult BeginDeleteOrganizationDomain(int itemId, int domainId, System.AsyncCallback callback, object asyncState) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs index 336f9a1c..1539cb04 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs @@ -2152,6 +2152,18 @@ namespace WebsitePanel.EnterpriseServer ); } + public static void ChangeExchangeAcceptedDomainType(int itemId, int domainId, int domainTypeId) + { + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "ChangeExchangeAcceptedDomainType", + new SqlParameter("@ItemID", itemId), + new SqlParameter("@DomainID", domainId), + new SqlParameter("@DomainTypeID", domainTypeId) + ); + } + public static IDataReader GetExchangeOrganizationStatistics(int itemId) { return SqlHelper.ExecuteReader( diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs index 9fe58540..797af2f3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs @@ -446,6 +446,10 @@ namespace WebsitePanel.EnterpriseServer { hubTransportRole.AddAuthoritativeDomain(domain.DomainName); } + if (domain.DomainType != ExchangeAcceptedDomainType.Authoritative) + { + hubTransportRole.ChangeAcceptedDomainType(domain.DomainName, domain.DomainType); + } } authDomainCreated = true; break; @@ -1423,8 +1427,64 @@ namespace WebsitePanel.EnterpriseServer TaskManager.CompleteTask(); } } - + public static int ChangeAcceptedDomainType(int itemId, int domainId, ExchangeAcceptedDomainType domainType) + { + // check account + int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); + if (accountCheck < 0) return accountCheck; + + // place log record + TaskManager.StartTask("EXCHANGE", "CHANGE_DOMAIN_TYPE"); + TaskManager.TaskParameters["Domain ID"] = domainId; + TaskManager.TaskParameters["Domain Type"] = domainType.ToString(); + TaskManager.ItemId = itemId; + + try + { + // load organization + Organization org = (Organization)PackageController.GetPackageItem(itemId); + if (org == null) + return -1; + + // load domain + DomainInfo domain = ServerController.GetDomain(domainId); + if (domain == null) + return -1; + + int[] hubTransportServiceIds; + int[] clientAccessServiceIds; + int exchangeServiceId = GetExchangeServiceID(org.PackageId); + GetExchangeServices(exchangeServiceId, out hubTransportServiceIds, out clientAccessServiceIds); + + foreach (int id in hubTransportServiceIds) + { + ExchangeServer hubTransportRole = null; + try + { + hubTransportRole = GetExchangeServer(id, org.ServiceId); + } + catch (Exception ex) + { + TaskManager.WriteError(ex); + continue; + } + + hubTransportRole.ChangeAcceptedDomainType(domain.DomainName, domainType); + break; + + } + return 0; + } + catch (Exception ex) + { + throw TaskManager.WriteError(ex); + } + finally + { + TaskManager.CompleteTask(); + } + } public static int DeleteAuthoritativeDomain(int itemId, int domainId) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs index 824e058a..13057b80 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs @@ -1042,6 +1042,37 @@ namespace WebsitePanel.EnterpriseServer } } + public static int ChangeOrganizationDomainType(int itemId, int domainId, ExchangeAcceptedDomainType newDomainType) + { + // check account + int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); + if (accountCheck < 0) return accountCheck; + + // place log record + TaskManager.StartTask("ORGANIZATION", "CHANGE_DOMAIN_TYPE", domainId); + TaskManager.ItemId = itemId; + + try + { + // change accepted domain type on Exchange + int checkResult = ExchangeServerController.ChangeAcceptedDomainType(itemId, domainId, newDomainType); + + + // change accepted domain type in DB + int domainTypeId= (int) newDomainType; + DataProvider.ChangeExchangeAcceptedDomainType(itemId, domainId, domainTypeId); + + return checkResult; + } + catch (Exception ex) + { + throw TaskManager.WriteError(ex); + } + finally + { + TaskManager.CompleteTask(); + } + } public static int AddOrganizationDomain(int itemId, string domainName) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs index bf469d50..1e053087 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs @@ -1588,8 +1588,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_RESTRICTED_DOMAIN; else return checkDomainResult; - } - + } + public static List GetDomains(int packageId, bool recursive) { return ObjectUtils.CreateListFromDataSet( diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOrganizations.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOrganizations.asmx.cs index 9cd223ce..f81ad8cf 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOrganizations.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOrganizations.asmx.cs @@ -122,6 +122,12 @@ namespace WebsitePanel.EnterpriseServer return OrganizationController.AddOrganizationDomain(itemId, domainName); } + [WebMethod] + public int ChangeOrganizationDomainType(int itemId, int domainId, ExchangeAcceptedDomainType newDomainType) + { + return OrganizationController.ChangeOrganizationDomainType(itemId, domainId, newDomainType); + } + [WebMethod] public List GetOrganizationDomains(int itemId) { diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAcceptedDomainType.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAcceptedDomainType.cs new file mode 100644 index 00000000..2d6e897e --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAcceptedDomainType.cs @@ -0,0 +1,37 @@ +// 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. + +namespace WebsitePanel.Providers.HostedSolution + { + public enum ExchangeAcceptedDomainType + { + Authoritative = 0, + InternalRelay = 1, + ExternalRelay = 2 + } + } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs index 72fdcafd..dbbefc58 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs @@ -53,6 +53,7 @@ namespace WebsitePanel.Providers.HostedSolution // Domains void AddAuthoritativeDomain(string domain); void DeleteAuthoritativeDomain(string domain); + void ChangeAcceptedDomainType(string domain, ExchangeAcceptedDomainType domainType); string[] GetAuthoritativeDomains(); // Mailboxes diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationDomainName.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationDomainName.cs index 68587c08..323e7d48 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationDomainName.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationDomainName.cs @@ -26,6 +26,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; namespace WebsitePanel.Providers.HostedSolution { public class OrganizationDomainName @@ -33,6 +34,7 @@ namespace WebsitePanel.Providers.HostedSolution int organizationDomainId; int itemId; int domainId; + int domainTypeId; string domainName; bool isHost; bool isDefault; @@ -55,6 +57,21 @@ namespace WebsitePanel.Providers.HostedSolution set { domainId = value; } } + public int DomainTypeId + { + get { return domainTypeId; } + set { domainTypeId = value; } + } + + public ExchangeAcceptedDomainType DomainType + { + get + { + ExchangeAcceptedDomainType type = (ExchangeAcceptedDomainType)domainTypeId; + return type; + } + } + public int OrganizationDomainId { get { return organizationDomainId; } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj index 3fed47eb..b8623bcf 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj @@ -80,6 +80,7 @@ + diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs index e48e2dca..046c5a44 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs @@ -230,6 +230,11 @@ namespace WebsitePanel.Providers.HostedSolution { DeleteAuthoritativeDomainInternal(domain); } + + public void ChangeAcceptedDomainType(string domainName, ExchangeAcceptedDomainType domainType) + { + ChangeAcceptedDomainTypeInternal(domainName, domainType); + } #endregion #region Mailboxes @@ -5916,6 +5921,31 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("CreateAuthoritativeDomainInternal"); } + private void ChangeAcceptedDomainTypeInternal(string domainName, ExchangeAcceptedDomainType domainType) + { + ExchangeLog.LogStart("ChangeAcceptedDomainType"); + + Runspace runSpace = null; + try + { + runSpace = OpenRunspace(); + + SetAcceptedDomainType(runSpace, domainName,domainType); + } + catch (Exception ex) + { + ExchangeLog.LogError("ChangeAcceptedDomainType", ex); + throw; + } + finally + { + + CloseRunspace(runSpace); + } + + ExchangeLog.LogEnd("ChangeAcceptedDomainType"); + } + private void DeleteAcceptedDomain(string domainName) { ExchangeLog.LogStart("DeleteAcceptedDomain"); @@ -5980,6 +6010,17 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("RemoveAcceptedDomain"); } + private void SetAcceptedDomainType(Runspace runSpace, string id, ExchangeAcceptedDomainType domainType) + { + ExchangeLog.LogStart("SetAcceptedDomainType"); + Command cmd = new Command("Set-AcceptedDomain"); + cmd.Parameters.Add("Identity", id); + cmd.Parameters.Add("DomainType", domainType.ToString()); + cmd.Parameters.Add("Confirm", false); + ExecuteShellCommand(runSpace, cmd); + ExchangeLog.LogEnd("SetAcceptedDomainType"); + } + #endregion #region ActiveSync diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs index 31142263..64a9509c 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs @@ -1032,7 +1032,17 @@ namespace WebsitePanel.Providers.Exchange this.Invoke("AddAuthoritativeDomain", new object[] { domain}); } - + + /// + [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/ChangeAcceptedDomainType", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void ChangeAcceptedDomainType(string domain, ExchangeAcceptedDomainType domainType) + { + this.Invoke("ChangeAcceptedDomainType", new object[] { + domain, + domainType}); + } + /// public System.IAsyncResult BeginAddAuthoritativeDomain(string domain, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("AddAuthoritativeDomain", new object[] { diff --git a/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs index 3c5c5a1f..8553b61f 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs @@ -265,6 +265,21 @@ namespace WebsitePanel.Server } } + [WebMethod, SoapHeader("settings")] + public void ChangeAcceptedDomainType(string domain, ExchangeAcceptedDomainType domainType) + { + try + { + LogStart("ChangeAcceptedDomainType"); + ES.ChangeAcceptedDomainType(domain, domainType); + LogEnd("ChangeAcceptedDomainType"); + } + catch (Exception ex) + { + LogError("ChangeAcceptedDomainType", ex); + throw; + } + } [WebMethod, SoapHeader("settings")] public string[] GetAuthoritativeDomains() diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx index 54abfc9d..1ab3e776 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx @@ -33,7 +33,7 @@ Width="100%" EmptyDataText="gvDomains" CssSelectorClass="NormalGridView" OnRowCommand="gvDomains_RowCommand"> - + @@ -41,13 +41,27 @@ + + +
+ +
+
+
+ + +
+ +
+
+
/>
-
+   protected global::WebsitePanel.Portal.QuotaViewer domainsQuota; - - /// - /// FormComments control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Localize FormComments; } } From 2a239006a45868b67b7c72700a9e3305ed431584 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Tue, 11 Sep 2012 18:13:45 -0700 Subject: [PATCH 02/55] Prototype added: Switching website shared IP to dedicated and vice versa. --- .../WebServersProxy.cs | 204 +++++++++++++----- .../Code/WebServers/WebServerController.cs | 101 +++++++++ .../WebsitePanel.EnterpriseServer/Web.config | 4 +- .../esWebServers.asmx.cs | 12 ++ .../WebsitePanel_SharedResources.ascx.resx | 20 +- .../WebSitesEditSite.ascx.resx | 67 ++++-- .../WebsitePanel/WebSitesEditSite.ascx | 26 ++- .../WebsitePanel/WebSitesEditSite.ascx.cs | 94 +++++++- .../WebSitesEditSite.ascx.designer.cs | 99 +++++++++ 9 files changed, 535 insertions(+), 92 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs index f70325be..ca9b7876 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs @@ -1,59 +1,3 @@ -// 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. - -// 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. @@ -80,7 +24,6 @@ namespace WebsitePanel.EnterpriseServer { using WebsitePanel.Providers.Common; using WebsitePanel.Providers.Web; using WebsitePanel.Providers.ResultObjects; - /// [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] @@ -124,6 +67,10 @@ namespace WebsitePanel.EnterpriseServer { private System.Threading.SendOrPostCallback DeleteWebSiteOperationCompleted; + private System.Threading.SendOrPostCallback SwitchWebSiteToDedicatedIPOperationCompleted; + + private System.Threading.SendOrPostCallback SwitchWebSiteToSharedIPOperationCompleted; + private System.Threading.SendOrPostCallback DeleteVirtualDirectoryOperationCompleted; private System.Threading.SendOrPostCallback ChangeSiteStateOperationCompleted; @@ -306,6 +253,12 @@ namespace WebsitePanel.EnterpriseServer { /// public event DeleteWebSiteCompletedEventHandler DeleteWebSiteCompleted; + /// + public event SwitchWebSiteToDedicatedIPCompletedEventHandler SwitchWebSiteToDedicatedIPCompleted; + + /// + public event SwitchWebSiteToSharedIPCompletedEventHandler SwitchWebSiteToSharedIPCompleted; + /// public event DeleteVirtualDirectoryCompletedEventHandler DeleteVirtualDirectoryCompleted; @@ -1252,6 +1205,91 @@ namespace WebsitePanel.EnterpriseServer { } } + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/SwitchWebSiteToDedicatedIP", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public int SwitchWebSiteToDedicatedIP(int siteItemId, int ipAddressId) { + object[] results = this.Invoke("SwitchWebSiteToDedicatedIP", new object[] { + siteItemId, + ipAddressId}); + return ((int)(results[0])); + } + + /// + public System.IAsyncResult BeginSwitchWebSiteToDedicatedIP(int siteItemId, int ipAddressId, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("SwitchWebSiteToDedicatedIP", new object[] { + siteItemId, + ipAddressId}, callback, asyncState); + } + + /// + public int EndSwitchWebSiteToDedicatedIP(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((int)(results[0])); + } + + /// + public void SwitchWebSiteToDedicatedIPAsync(int siteItemId, int ipAddressId) { + this.SwitchWebSiteToDedicatedIPAsync(siteItemId, ipAddressId, null); + } + + /// + public void SwitchWebSiteToDedicatedIPAsync(int siteItemId, int ipAddressId, object userState) { + if ((this.SwitchWebSiteToDedicatedIPOperationCompleted == null)) { + this.SwitchWebSiteToDedicatedIPOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSwitchWebSiteToDedicatedIPOperationCompleted); + } + this.InvokeAsync("SwitchWebSiteToDedicatedIP", new object[] { + siteItemId, + ipAddressId}, this.SwitchWebSiteToDedicatedIPOperationCompleted, userState); + } + + private void OnSwitchWebSiteToDedicatedIPOperationCompleted(object arg) { + if ((this.SwitchWebSiteToDedicatedIPCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.SwitchWebSiteToDedicatedIPCompleted(this, new SwitchWebSiteToDedicatedIPCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/SwitchWebSiteToSharedIP", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public int SwitchWebSiteToSharedIP(int siteItemId) { + object[] results = this.Invoke("SwitchWebSiteToSharedIP", new object[] { + siteItemId}); + return ((int)(results[0])); + } + + /// + public System.IAsyncResult BeginSwitchWebSiteToSharedIP(int siteItemId, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("SwitchWebSiteToSharedIP", new object[] { + siteItemId}, callback, asyncState); + } + + /// + public int EndSwitchWebSiteToSharedIP(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((int)(results[0])); + } + + /// + public void SwitchWebSiteToSharedIPAsync(int siteItemId) { + this.SwitchWebSiteToSharedIPAsync(siteItemId, null); + } + + /// + public void SwitchWebSiteToSharedIPAsync(int siteItemId, object userState) { + if ((this.SwitchWebSiteToSharedIPOperationCompleted == null)) { + this.SwitchWebSiteToSharedIPOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSwitchWebSiteToSharedIPOperationCompleted); + } + this.InvokeAsync("SwitchWebSiteToSharedIP", new object[] { + siteItemId}, this.SwitchWebSiteToSharedIPOperationCompleted, userState); + } + + private void OnSwitchWebSiteToSharedIPOperationCompleted(object arg) { + if ((this.SwitchWebSiteToSharedIPCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.SwitchWebSiteToSharedIPCompleted(this, new SwitchWebSiteToSharedIPCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/DeleteVirtualDirectory", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] public int DeleteVirtualDirectory(int siteItemId, string vdirName) { @@ -4422,6 +4460,58 @@ namespace WebsitePanel.EnterpriseServer { } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + public delegate void SwitchWebSiteToDedicatedIPCompletedEventHandler(object sender, SwitchWebSiteToDedicatedIPCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class SwitchWebSiteToDedicatedIPCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal SwitchWebSiteToDedicatedIPCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public int Result { + get { + this.RaiseExceptionIfNecessary(); + return ((int)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + public delegate void SwitchWebSiteToSharedIPCompletedEventHandler(object sender, SwitchWebSiteToSharedIPCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class SwitchWebSiteToSharedIPCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal SwitchWebSiteToSharedIPCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public int Result { + get { + this.RaiseExceptionIfNecessary(); + return ((int)(this.results[0])); + } + } + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteVirtualDirectoryCompletedEventHandler(object sender, DeleteVirtualDirectoryCompletedEventArgs e); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index 5ea67ab0..939c0567 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -611,6 +611,107 @@ namespace WebsitePanel.EnterpriseServer } } + public static int SwitchWebSiteToDedicatedIP(int siteItemId, int ipAddressId) + { + // check account + int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); + if (accountCheck < 0) return accountCheck; + + // load web site item + WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); + 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; + + // place log record + TaskManager.StartTask("WEB_SITE", "SWITCH_TO_DEDICATED_IP", siteItem.Name); + TaskManager.ItemId = siteItemId; + + try + { + // get web site pointers + var sitePointers = GetWebSitePointers(siteItemId); + + // get existing web site bindings + WebServer web = new WebServer(); + ServiceProviderProxy.Init(web, siteItem.ServiceId); + var bindings = web.GetSiteBindings(siteItem.SiteId); + + // update site bindings + web.UpdateSiteBindings(siteItem.SiteId, new ServerBinding[] { new ServerBinding(ipAddr, "80", "") }); + + // update site item + siteItem.SiteIPAddressId = ipAddressId; + PackageController.UpdatePackageItem(siteItem); + + // associate IP with web site + if (ipAddressId != 0) + ServerController.AddItemIPAddress(siteItemId, ipAddressId); + + // re-create pointers + foreach (var pointer in sitePointers) + DeleteWebSitePointer(siteItemId, pointer.DomainId, false); + + foreach (var pointer in sitePointers) + AddWebSitePointer(siteItemId, null, pointer.DomainId, false); + + return 0; + } + catch (Exception ex) + { + throw TaskManager.WriteError(ex); + } + finally + { + TaskManager.CompleteTask(); + } + } + + public static int SwitchWebSiteToSharedIP(int siteItemId) + { + // check account + int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); + if (accountCheck < 0) return accountCheck; + + // load web site item + WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); + if (siteItem == null) + return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; + + // 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); + + // get existing web site bindings + WebServer web = new WebServer(); + ServiceProviderProxy.Init(web, siteItem.ServiceId); + var bindings = web.GetSiteBindings(siteItem.SiteId); + + // TODO + + return 0; + } + catch (Exception ex) + { + throw TaskManager.WriteError(ex); + } + finally + { + TaskManager.CompleteTask(); + } + } + private static void FillWebServerBindings(List bindings, List dnsRecords, string ipAddr, string hostName, string domainName) // TODO test if IPv6 works diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config index b78330c8..ba1ad41e 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.EnterpriseServer/esWebServers.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs index a5f3882f..997303e9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs @@ -157,6 +157,18 @@ namespace WebsitePanel.EnterpriseServer return WebServerController.DeleteWebSite(siteItemId); } + [WebMethod] + public int SwitchWebSiteToDedicatedIP(int siteItemId, int ipAddressId) + { + return WebServerController.SwitchWebSiteToDedicatedIP(siteItemId, ipAddressId); + } + + [WebMethod] + public int SwitchWebSiteToSharedIP(int siteItemId) + { + return WebServerController.SwitchWebSiteToSharedIP(siteItemId); + } + [WebMethod] public int DeleteVirtualDirectory(int siteItemId, string vdirName) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index 3dbe097a..5f8b0d3a 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -5125,9 +5125,6 @@ Lync Server - - General Lync User settings have been successfully updated. - Lync User has been successfully created but the following errors have been occured: @@ -5191,14 +5188,12 @@ Succesfully stamp mailboxes - Mailbox plan update failed Mailbox plan updated - Failed to apply plans template @@ -5208,7 +5203,16 @@ Request Completed Succesfully - - - + + Error updating web site to dedicated IP + + + Error updating web site to shared IP + + + Web site has been updated to dedicated IP + + + Web site has been updated to shared IP + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx index 9ee024bb..f82d2d99 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Add Folder @@ -243,7 +243,7 @@ .htaccess Groups - + Custom MIME types are not defined @@ -408,55 +408,82 @@ To connect to web site management service please use username and password provi SSL - + Web Publishing - + Web Deploy Publishing is Disabled. - + Web Deploy Publishing is Enabled. - + To enable Web Publishing for this web site specify account user name and password and then click "Enable" button. - + Please choose a Microsoft SQL database: - + Build Publising Profile Wizard - + Please use the link below to build a publishing profile that makes it easy to configure publishing settings for your convenience. - + Change Password - + Disable - + Enable - + Username: - + Confim password: - + Password: - + Now you can publish content to this site easily via either Web Matrix or Visual Studio .NET 2010. Please use the link below to download publishing profile that makes it easy to publish the content online for your convenience. You also have an option to re-build publishing profile if you decide to change or update your publishing settings. - + Choose database... - + Choose database user... - + Choose FTP account... + + ShowProgressDialog('Applying changes...'); + + + Apply + + + Cancel + + + Switch to dedicated IP + + + if(!confirm('Do you really want to switch this web site to shared IP?')) return false;ShowProgressDialog('Applying changes...'); + + + Switch to shared IP + + + IP address: + + + Select IP address: + + + IP address: Shared + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx index e9fe4244..50177473 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx @@ -115,18 +115,38 @@ BackgroundCssClass="modalBackground" DropShadow="false" CancelControlID="PubProfileWizardCancelButton" />
- +
+ + + + + + + + - + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.designer.cs index 4d238f24..9558a3a5 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.designer.cs @@ -1,31 +1,3 @@ -// 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/ExchangeServer/ExchangeMailboxes.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx index d2f9ac75..851a9b78 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx @@ -45,7 +45,7 @@ DisplayName Email AccountName - Subscriber Number + Account Number diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.designer.cs index e4f438f3..5fafbb3f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.designer.cs @@ -155,14 +155,5 @@ namespace WebsitePanel.Portal.ExchangeServer { /// To modify move field declaration from designer file to code-behind file. /// protected global::WebsitePanel.Portal.QuotaViewer mailboxesQuota; - - /// - /// FormComments control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Localize FormComments; } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateUser.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateUser.ascx index 7bf810d5..187d5a08 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateUser.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateUser.ascx @@ -68,11 +68,11 @@ - + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateUser.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateUser.ascx.designer.cs index 5d58f6f3..d813a3a4 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateUser.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateUser.ascx.designer.cs @@ -236,14 +236,5 @@ namespace WebsitePanel.Portal.HostedSolution { /// To modify move field declaration from designer file to code-behind file. /// protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary1; - - /// - /// FormComments control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Localize FormComments; } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUsers.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUsers.ascx index 008ac253..c6b5f5bf 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUsers.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUsers.ascx @@ -46,7 +46,7 @@ DisplayNameEmailAccountName - Subscriber Number + Account Number diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUsers.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUsers.ascx.designer.cs index 931a2be7..d544cee6 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUsers.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUsers.ascx.designer.cs @@ -155,14 +155,5 @@ namespace WebsitePanel.Portal.HostedSolution { /// To modify move field declaration from designer file to code-behind file. /// protected global::WebsitePanel.Portal.QuotaViewer usersQuota; - - /// - /// FormComments control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Localize FormComments; } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountDetails.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountDetails.ascx index e8044aff..0e96d0d0 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountDetails.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountDetails.ascx @@ -14,7 +14,7 @@ - + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountEditDetails.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountEditDetails.ascx index 39360cdf..b95fece1 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountEditDetails.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountEditDetails.ascx @@ -38,7 +38,7 @@ diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.cs index ebb94dde..9dc65cd5 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.cs @@ -176,6 +176,7 @@ namespace WebsitePanel.Portal } } protected void Validate(object source, ServerValidateEventArgs args) { +/* var ip = args.Value; System.Net.IPAddress ipaddr; if (string.IsNullOrEmpty(args.Value)) @@ -184,6 +185,8 @@ namespace WebsitePanel.Portal args.IsValid = System.Net.IPAddress.TryParse(ip, out ipaddr) && (ip.Contains(":") || ip.Contains(".")) && ((ddlRecordType.SelectedValue == "A" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) || (ddlRecordType.SelectedValue == "AAAA" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)); +*/ + args.IsValid = true; } private void SaveRecord() From ec44c6bdde9b7a151a5b086a1feadeafa5630b2c Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Sat, 15 Sep 2012 18:23:35 -0400 Subject: [PATCH 42/55] Added tag build-2.0.0.36 for changeset d7bedb3ba2df From c59d38319013f615f67c13186aa7bacad342f42a Mon Sep 17 00:00:00 2001 From: rdolezel Date: Mon, 17 Sep 2012 19:30:10 +0200 Subject: [PATCH 43/55] REG file must be ANSI, not UTF-8, otherwise the following error appears: "Cannot import *.reg. The specified file is not a registry script. You can only import binary registry files from within the registry editor." --- .../Sources/Tools/WSPTransportAgent/WSPTransportAgent.reg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.reg b/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.reg index 755c888a..2b3dd766 100644 --- a/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.reg +++ b/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.reg @@ -1,4 +1,4 @@ -Windows Registry Editor Version 5.00 +Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\MEACPTransportAgent] "MaxSize"=dword:00080000 From b9719979e682d81acec933d8b05b6ffdecb6c91d Mon Sep 17 00:00:00 2001 From: rdolezel Date: Mon, 17 Sep 2012 19:55:39 +0200 Subject: [PATCH 44/55] REG file contained wrong subkey names. Installation instructions revised and tested. --- .../Tools/WSPTransportAgent/WSPTransportAgent.reg | 4 ++-- .../Tools/WSPTransportAgent/WSPTransportAgent.txt | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.txt diff --git a/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.reg b/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.reg index 2b3dd766..f89ba389 100644 --- a/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.reg +++ b/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.reg @@ -1,11 +1,11 @@ Windows Registry Editor Version 5.00 -[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\MEACPTransportAgent] +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\WSPTransportAgent] "MaxSize"=dword:00080000 "AutoBackupLogFiles"=dword:00000000 "Retention"=dword:00000000 -[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\MEACPTransportAgent\MEACPTransportAgent] +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\WSPTransportAgent\WSPTransportAgent] "EventMessageFile"=hex(2):43,00,3a,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,\ 00,73,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,2e,00,\ 4e,00,45,00,54,00,5c,00,46,00,72,00,61,00,6d,00,65,00,77,00,6f,00,72,00,6b,\ diff --git a/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.txt b/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.txt new file mode 100644 index 00000000..b4e03291 --- /dev/null +++ b/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.txt @@ -0,0 +1,13 @@ +WSP Transport Agent Installation +================================ + +Perform the following steps: + +A) Copy the files WSPTransportAgent.dll and WSPTransportAgent.dll.config to "C:\Program Files\Microsoft\Exchange Server\V14\Public" +B) Import the WSPTransportAgent.reg to create the event source +C) Use the registry editor and provide the "NETWORK SERVICE" Full Control on the following Key +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\WSPTransportAgent +D) Run the following powershell command in the exchange management shell: +Install-TransportAgent "WSPTransportAgent" -TransportAgentFactory WSPTransportAgent.WSPRoutingAgentFactory -AssemblyPath "C:\Program Files\Microsoft\Exchange Server\V14\Public\WSPTransportAgent.dll" +E) Enable-TransportAgent "WSPTransportAgent" +F) Restart-Service MSExchangeTransport From d2721cd372fbb0459cb3ed97105d24422898adda Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Mon, 17 Sep 2012 23:36:13 -0400 Subject: [PATCH 45/55] Added tag build-2.0.0.37 for changeset f5d1555a1d30 From 6868241a6dbe298a4ea7fa55b6517b01b8bcaf8c Mon Sep 17 00:00:00 2001 From: robvde Date: Tue, 18 Sep 2012 22:50:00 +0400 Subject: [PATCH 46/55] Prework switch web dedicated to shared Dedicated sites supports now hostheaders --- .../Code/DnsServers/DnsServerController.cs | 2 +- .../SharePoint/SharePointServerController.cs | 2 +- .../Code/WebServers/WebServerController.cs | 256 +++++++------- .../WebsitePanel.EnterpriseServer/Web.config | 4 +- .../Web/IWebServer.cs | 2 +- .../WebsitePanel.Providers.Web.IIS70/IIs70.cs | 8 +- .../WebObjects/WebObjectsModuleService.cs | 13 +- .../WebsitePanel.Providers.Web.IIs60/IIs60.cs | 2 +- .../WebServerProxy.cs | 316 +++++++++--------- .../WebsitePanel.Server/WebServer.asmx.cs | 4 +- .../IIS70_Settings.ascx.resx | 3 + .../ProviderControls/IIS70_Settings.ascx | 8 + .../ProviderControls/IIS70_Settings.ascx.cs | 2 + .../IIS70_Settings.ascx.designer.cs | 46 +-- .../Sources/generate_server_proxies.bat | 8 +- 15 files changed, 358 insertions(+), 318 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs index 0592a899..d7e0a36a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs @@ -284,7 +284,7 @@ namespace WebsitePanel.EnterpriseServer if (record.RecordType == "A" || record.RecordType == "AAAA") { rr.RecordData = String.IsNullOrEmpty(record.RecordData) ? record.ExternalIP : record.RecordData; - rr.RecordData = Utils.ReplaceStringVariable(rr.RecordData, "ip", record.ExternalIP); + rr.RecordData = Utils.ReplaceStringVariable(rr.RecordData, "ip", string.IsNullOrEmpty(serviceIP) ? record.ExternalIP : serviceIP); if (String.IsNullOrEmpty(rr.RecordData) && !String.IsNullOrEmpty(serviceIP)) rr.RecordData = serviceIP; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs index 5e3692dd..63382be7 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs @@ -228,7 +228,7 @@ namespace WebsitePanel.EnterpriseServer "sp_dropsrvrolemember '{0}', 'dbcreator'\nGO", dbUser.Name)); // restore original web site bindings - web.UpdateSiteBindings(site.SiteId, bindings); + web.UpdateSiteBindings(site.SiteId, bindings, false); // save statistics item item.ServiceId = serviceId; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index 49916149..5ea4e114 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -201,7 +201,7 @@ namespace WebsitePanel.EnterpriseServer if (serviceId == 0) return BusinessErrorCodes.ERROR_WEB_SITE_SERVICE_UNAVAILABLE; - #region Fix for bug #587 + // Initialize IIS provider webservice proxy WebServer web = new WebServer(); ServiceProviderProxy.Init(web, serviceId); @@ -219,7 +219,6 @@ namespace WebsitePanel.EnterpriseServer // Return generic operation failed error return BusinessErrorCodes.FAILED_EXECUTE_SERVICE_OPERATION; } - #endregion // load web settings StringDictionary webSettings = ServerController.GetServiceSettings(serviceId); @@ -250,24 +249,15 @@ namespace WebsitePanel.EnterpriseServer // prepare site bindings List bindings = new List(); - if (!dedicatedIp) - { - // SHARED IP - // fill main domain bindings - FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords); + // SHARED IP + // fill main domain bindings + FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords); - //double check all bindings - foreach (ServerBinding b in bindings) - { - if (DataProvider.CheckDomain(domain.PackageId, b.Host, true) != 0) - return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; - } - - } - else + //double check all bindings + foreach (ServerBinding b in bindings) { - // DEDICATED IP - bindings.Add(new ServerBinding(ipAddr, "80", "")); + if (DataProvider.CheckDomain(domain.PackageId, b.Host, true) != 0) + return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; } UserInfo user = PackageController.GetPackageOwner(packageId); @@ -321,12 +311,10 @@ namespace WebsitePanel.EnterpriseServer site.EnableParentPaths = Utils.ParseBool(webPolicy["EnableParentPaths"], false); site.DedicatedApplicationPool = Utils.ParseBool(webPolicy["EnableDedicatedPool"], false); - #region Fix for bug: #1556 + // Ensure the website meets hosting plan quotas QuotaValueInfo quotaInfo = PackageController.GetPackageQuota(packageId, Quotas.WEB_APPPOOLS); site.DedicatedApplicationPool = site.DedicatedApplicationPool && (quotaInfo.QuotaAllocatedValue > 0); - - #endregion site.EnableAnonymousAccess = Utils.ParseBool(webPolicy["EnableAnonymousAccess"], false); site.EnableWindowsAuthentication = Utils.ParseBool(webPolicy["EnableWindowsAuthentication"], false); @@ -386,7 +374,7 @@ namespace WebsitePanel.EnterpriseServer // update domain // add main pointer - AddWebSitePointer(siteItemId, hostName, domain.DomainId, false, ignoreGlobalDNSRecords); + AddWebSitePointer(siteItemId, hostName, domain.DomainId, false, ignoreGlobalDNSRecords, false); // add parking page @@ -563,24 +551,22 @@ namespace WebsitePanel.EnterpriseServer // remove all web site pointers List pointers = GetWebSitePointers(siteItemId); foreach (DomainInfo pointer in pointers) - DeleteWebSitePointer(siteItemId, pointer.DomainId, false, true); + DeleteWebSitePointer(siteItemId, pointer.DomainId, false, true, true); // remove web site main pointer DomainInfo domain = ServerController.GetDomain(siteItem.Name); if(domain != null) - DeleteWebSitePointer(siteItemId, domain.DomainId, false, true); + DeleteWebSitePointer(siteItemId, domain.DomainId, false, true, true); // delete web site WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); - #region Fix for bug #710 // if (web.IsFrontPageSystemInstalled() && web.IsFrontPageInstalled(siteItem.SiteId)) { web.UninstallFrontPage(siteItem.SiteId, siteItem.FrontPageAccount); } - #endregion // web.DeleteSite(siteItem.SiteId); @@ -612,44 +598,47 @@ namespace WebsitePanel.EnterpriseServer 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; + //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) + { + addressId = packageIp.AddressID; + } - string ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; // place log record TaskManager.StartTask("WEB_SITE", "SWITCH_TO_DEDICATED_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); - - // update site bindings - web.UpdateSiteBindings(siteItem.SiteId, new ServerBinding[] { new ServerBinding(ipAddr, "80", "") }); + // remove web site main pointer + DomainInfo domain = ServerController.GetDomain(siteItem.Name); + if (domain != null) + DeleteWebSitePointer(siteItemId, domain.DomainId, true, true, false); // update site item - siteItem.SiteIPAddressId = ipAddressId; + siteItem.SiteIPAddressId = addressId; PackageController.UpdatePackageItem(siteItem); // associate IP with web site - if (ipAddressId != 0) - ServerController.AddItemIPAddress(siteItemId, ipAddressId); + if (addressId != 0) + ServerController.AddItemIPAddress(siteItemId, addressId); - // TODO - what would be correct logic here? - // re-create pointers - foreach (var pointer in sitePointers) - DeleteWebSitePointer(siteItemId, pointer.DomainId, false, true); + AddWebSitePointer(siteItemId, "", domain.DomainId, true, true, true); - foreach (var pointer in sitePointers) - AddWebSitePointer(siteItemId, null, pointer.DomainId, false); + foreach (DomainInfo pointer in pointers) + AddWebSitePointer(siteItemId, "", pointer.DomainId, true, true, true); return 0; } @@ -661,6 +650,9 @@ namespace WebsitePanel.EnterpriseServer { TaskManager.CompleteTask(); } + */ + + return 0; } public static int SwitchWebSiteToSharedIP(int siteItemId) @@ -677,7 +669,7 @@ namespace WebsitePanel.EnterpriseServer // place log record TaskManager.StartTask("WEB_SITE", "SWITCH_TO_SHARED_IP", siteItem.Name); TaskManager.ItemId = siteItemId; - +/* try { // get web site pointers @@ -700,6 +692,9 @@ namespace WebsitePanel.EnterpriseServer { TaskManager.CompleteTask(); } + */ + return 0; + } private static void FillWebServerBindings(List bindings, List dnsRecords, @@ -837,15 +832,15 @@ namespace WebsitePanel.EnterpriseServer public static int AddWebSitePointer(int siteItemId, string hostName, int domainId) { - return AddWebSitePointer(siteItemId, hostName, domainId, true, true); + return AddWebSitePointer(siteItemId, hostName, domainId, true, true, false); } internal static int AddWebSitePointer(int siteItemId, string hostName, int domainId, bool updateWebSite) { - return AddWebSitePointer(siteItemId, hostName, domainId, updateWebSite, false); + return AddWebSitePointer(siteItemId, hostName, domainId, updateWebSite, false, false); } - internal static int AddWebSitePointer(int siteItemId, string hostName, int domainId, bool updateWebSite, bool ignoreGlobalDNSRecords) + internal static int AddWebSitePointer(int siteItemId, string hostName, int domainId, bool updateWebSite, bool ignoreGlobalDNSRecords, bool rebuild) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); @@ -862,8 +857,11 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND; // check if the web site already exists - if (DataProvider.CheckDomain(domain.PackageId, string.IsNullOrEmpty(hostName) ? domain.DomainName : hostName + "." + domain.DomainName, true) != 0) - return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; + if (!rebuild) + { + if (DataProvider.CheckDomain(domain.PackageId, string.IsNullOrEmpty(hostName) ? domain.DomainName : hostName + "." + domain.DomainName, true) != 0) + return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; + } // get zone records for the service List dnsRecords = ServerController.GetDnsRecordsByService(siteItem.ServiceId); @@ -880,6 +878,8 @@ namespace WebsitePanel.EnterpriseServer try { + + // load appropriate zone DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); @@ -891,30 +891,47 @@ namespace WebsitePanel.EnterpriseServer string serviceIp = (ip != null) ? ip.ExternalIP : null; + if (string.IsNullOrEmpty(serviceIp)) + { + StringDictionary settings = ServerController.GetServiceSettings(siteItem.ServiceId); + if (settings["PublicSharedIP"] != null) + serviceIp = settings["PublicSharedIP"].ToString(); + } + //filter initiat GlobaDNSRecords list if (ignoreGlobalDNSRecords) { //ignore all other except the host_name record foreach (GlobalDnsRecord r in dnsRecords) { - if (r.RecordName == "[host_name]") - tmpDnsRecords.Add(r); + if (rebuild) + { + if ((r.RecordName + (string.IsNullOrEmpty(r.RecordName) ? domain.ZoneName : "." + domain.ZoneName)) == domain.DomainName) tmpDnsRecords.Add(r); + } + else + { + if (r.RecordName == "[host_name]") tmpDnsRecords.Add(r); + } + } } else tmpDnsRecords = dnsRecords; - List resourceRecords = DnsServerController.BuildDnsResourceRecords( - tmpDnsRecords, hostName, domain.DomainName, serviceIp); + List resourceRecords = rebuild ? DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, "", domain.DomainName, serviceIp): + DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, hostName, domain.DomainName, serviceIp); - foreach (DnsRecord r in resourceRecords) + if (!rebuild) { - if (r.RecordName != "*") + foreach (DnsRecord r in resourceRecords) { - // check if the web site already exists - if (DataProvider.CheckDomain(domain.PackageId, string.IsNullOrEmpty(r.RecordName) ? domain.DomainName : r.RecordName + "." + domain.DomainName, true) != 0) - return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; + if (r.RecordName != "*") + { + // check if the web site already exists + if (DataProvider.CheckDomain(domain.PackageId, string.IsNullOrEmpty(r.RecordName) ? domain.DomainName : r.RecordName + "." + domain.DomainName, true) != 0) + return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; + } } } @@ -945,43 +962,45 @@ namespace WebsitePanel.EnterpriseServer bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; }); // update binding only for "shared" ip addresses - if (!dedicatedIp) - { - // add new host headers - string ipAddr = "*"; - if (ip != null) - ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; + // add new host headers + string ipAddr = "*"; + if (ip != null) + ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; - // fill bindings + // fill bindings + if (rebuild) + FillWebServerBindings(bindings, dnsRecords, "", domain.DomainName, "", ignoreGlobalDNSRecords); + else FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords); - //for logging purposes - foreach (ServerBinding b in bindings) - { - string header = string.Format("{0} {1} {2}", b.Host, b.IP, b.Port); - TaskManager.WriteParameter("Add Binding", header); - } - - // update bindings - if (updateWebSite) - web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray()); - } - - - // update domain - domain.WebSiteId = siteItemId; - domain.IsDomainPointer = true; + //for logging purposes foreach (ServerBinding b in bindings) { - //add new domain record - domain.DomainName = b.Host; - int domainID = ServerController.AddDomain(domain); - DomainInfo domainTmp = ServerController.GetDomain(domainID); - if (domainTmp != null) + string header = string.Format("{0} {1} {2}", b.Host, b.IP, b.Port); + TaskManager.WriteParameter("Add Binding", header); + } + + // update bindings + if (updateWebSite) + web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray(), false); + + // update domain + if (!rebuild) + { + domain.WebSiteId = siteItemId; + domain.IsDomainPointer = true; + foreach (ServerBinding b in bindings) { - domainTmp.WebSiteId = siteItemId; - domainTmp.ZoneItemId = domain.ZoneItemId; - ServerController.UpdateDomain(domainTmp); + //add new domain record + domain.DomainName = b.Host; + int domainID = ServerController.AddDomain(domain); + DomainInfo domainTmp = ServerController.GetDomain(domainID); + if (domainTmp != null) + { + domainTmp.WebSiteId = siteItemId; + domainTmp.ZoneItemId = domain.ZoneItemId; + ServerController.UpdateDomain(domainTmp); + } } } @@ -999,10 +1018,10 @@ namespace WebsitePanel.EnterpriseServer public static int DeleteWebSitePointer(int siteItemId, int domainId) { - return DeleteWebSitePointer(siteItemId, domainId, true, true); + return DeleteWebSitePointer(siteItemId, domainId, true, true, true); } - public static int DeleteWebSitePointer(int siteItemId, int domainId, bool updateWebSite, bool ignoreGlobalDNSRecords) + public static int DeleteWebSitePointer(int siteItemId, int domainId, bool updateWebSite, bool ignoreGlobalDNSRecords, bool deleteDomainsRecord) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); @@ -1042,6 +1061,13 @@ namespace WebsitePanel.EnterpriseServer string serviceIp = (ip != null) ? ip.ExternalIP : null; + if (string.IsNullOrEmpty(serviceIp)) + { + StringDictionary settings = ServerController.GetServiceSettings(siteItem.ServiceId); + if (settings["PublicSharedIP"] != null) + serviceIp = settings["PublicSharedIP"].ToString(); + } + if (ignoreGlobalDNSRecords) { foreach (GlobalDnsRecord r in dnsRecords) @@ -1078,30 +1104,30 @@ namespace WebsitePanel.EnterpriseServer bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; }); // update binding only for "shared" ip addresses - if (!dedicatedIp) - { - // remove host headers - List domainBindings = new List(); - FillWebServerBindings(domainBindings, dnsRecords, "", domain.DomainName, "", ignoreGlobalDNSRecords); - // fill to remove list - List headersToRemove = new List(); - foreach (ServerBinding domainBinding in domainBindings) - headersToRemove.Add(domainBinding.Host); + // remove host headers + List domainBindings = new List(); + FillWebServerBindings(domainBindings, dnsRecords, "", domain.DomainName, "", ignoreGlobalDNSRecords); - // remove bndings - bindings.RemoveAll(b => { return headersToRemove.Contains(b.Host) && b.Port == "80"; } ); + // fill to remove list + List headersToRemove = new List(); + foreach (ServerBinding domainBinding in domainBindings) + headersToRemove.Add(domainBinding.Host); - // update bindings - if (updateWebSite) - web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray()); - } + // remove bndings + bindings.RemoveAll(b => { return headersToRemove.Contains(b.Host) && b.Port == "80"; } ); + + // update bindings + if (updateWebSite) + web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray(), true); // update domain domain.WebSiteId = 0; - ServerController.UpdateDomain(domain); - ServerController.DeleteDomain(domain.DomainId); - + if (deleteDomainsRecord) + { + ServerController.UpdateDomain(domain); + ServerController.DeleteDomain(domain.DomainId); + } return 0; } catch (Exception ex) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config index ba1ad41e..a99cd490 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.Providers.Base/Web/IWebServer.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/IWebServer.cs index e32a8d27..03a8ee48 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/IWebServer.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/IWebServer.cs @@ -51,7 +51,7 @@ namespace WebsitePanel.Providers.Web ServerBinding[] GetSiteBindings(string siteId); string CreateSite(WebSite site); void UpdateSite(WebSite site); - void UpdateSiteBindings(string siteId, ServerBinding[] bindings); + void UpdateSiteBindings(string siteId, ServerBinding[] bindings, bool emptyBindingsAllowed); void DeleteSite(string siteId); // virtual directories diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs index af7a78f6..78e4f002 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs @@ -1237,7 +1237,7 @@ namespace WebsitePanel.Providers.Web // Create site webObjectsSvc.CreateSite(site); // Update web site bindings - webObjectsSvc.UpdateSiteBindings(site.SiteId, site.Bindings); + webObjectsSvc.UpdateSiteBindings(site.SiteId, site.Bindings, false); // Set web site logging settings webObjectsSvc.SetWebSiteLoggingSettings(site); } @@ -1322,7 +1322,7 @@ namespace WebsitePanel.Providers.Web // Update website webObjectsSvc.UpdateSite(site); // Update website bindings - webObjectsSvc.UpdateSiteBindings(site.SiteId, site.Bindings); + webObjectsSvc.UpdateSiteBindings(site.SiteId, site.Bindings, false); // Set website logging settings webObjectsSvc.SetWebSiteLoggingSettings(site); // @@ -1440,9 +1440,9 @@ namespace WebsitePanel.Providers.Web /// /// Site's id to update bindings for. /// Bindings information. - public override void UpdateSiteBindings(string siteId, ServerBinding[] bindings) + public override void UpdateSiteBindings(string siteId, ServerBinding[] bindings, bool emptyBindingsAllowed) { - this.webObjectsSvc.UpdateSiteBindings(siteId, bindings); + this.webObjectsSvc.UpdateSiteBindings(siteId, bindings, emptyBindingsAllowed); } /// diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebObjects/WebObjectsModuleService.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebObjects/WebObjectsModuleService.cs index 3a8cae98..26b80dd6 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebObjects/WebObjectsModuleService.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebObjects/WebObjectsModuleService.cs @@ -422,11 +422,14 @@ namespace WebsitePanel.Providers.Web.Iis.WebObjects return bindings.ToArray(); } - private void SyncWebSiteBindingsChanges(string siteId, ServerBinding[] bindings) + private void SyncWebSiteBindingsChanges(string siteId, ServerBinding[] bindings, bool emptyBindingsAllowed) { // ensure site bindings - if (bindings == null || bindings.Length == 0) - throw new Exception("SiteServerBindingsEmpty"); + if (!emptyBindingsAllowed) + { + if (bindings == null || bindings.Length == 0) + throw new Exception("SiteServerBindingsEmpty"); + } using (var srvman = GetServerManager()) { @@ -461,7 +464,7 @@ namespace WebsitePanel.Providers.Web.Iis.WebObjects } } - public void UpdateSiteBindings(string siteId, ServerBinding[] bindings) + public void UpdateSiteBindings(string siteId, ServerBinding[] bindings, bool emptyBindingsAllowed) { using (ServerManager srvman = GetServerManager()) { @@ -470,7 +473,7 @@ namespace WebsitePanel.Providers.Web.Iis.WebObjects return; } // - SyncWebSiteBindingsChanges(siteId, bindings); + SyncWebSiteBindingsChanges(siteId, bindings, emptyBindingsAllowed); } public string GetPhysicalPath(ServerManager srvman, WebVirtualDirectory virtualDir) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs index 01e21fb6..7c960f4a 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs @@ -847,7 +847,7 @@ namespace WebsitePanel.Providers.Web } } - public virtual void UpdateSiteBindings(string siteId, ServerBinding[] bindings) + public virtual void UpdateSiteBindings(string siteId, ServerBinding[] bindings, bool emptyBindingsAllowed) { ManagementObject objSite = wmi.GetObject(String.Format("IIsWebServerSetting='{0}'", siteId)); diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/WebServerProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/WebServerProxy.cs index 74aa52ff..efa08598 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Client/WebServerProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/WebServerProxy.cs @@ -1,3 +1,8 @@ +// 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. @@ -24,7 +29,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:2.0.50727.3053 +// Runtime Version:2.0.50727.6387 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -34,14 +39,14 @@ // // This source code was auto-generated by wsdl, Version=2.0.50727.3038. // -namespace WebsitePanel.Providers.Web -{ - using System.Diagnostics; +namespace WebsitePanel.Providers.Web { + using System.Xml.Serialization; using System.Web.Services; using System.ComponentModel; using System.Web.Services.Protocols; using System; - using System.Xml.Serialization; + using System.Diagnostics; + using WebsitePanel.Providers.ResultObjects; using WebsitePanel.Providers.WebAppGallery; using WebsitePanel.Providers.Common; @@ -49,7 +54,7 @@ namespace WebsitePanel.Providers.Web /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Web.Services.WebServiceBindingAttribute(Name="WebServerSoap", Namespace="http://smbsaas/websitepanel/server/")] @@ -922,17 +927,19 @@ namespace WebsitePanel.Providers.Web /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/UpdateSiteBindings", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void UpdateSiteBindings(string siteId, ServerBinding[] bindings) { + public void UpdateSiteBindings(string siteId, ServerBinding[] bindings, bool emptyBindingsAllowed) { this.Invoke("UpdateSiteBindings", new object[] { siteId, - bindings}); + bindings, + emptyBindingsAllowed}); } /// - public System.IAsyncResult BeginUpdateSiteBindings(string siteId, ServerBinding[] bindings, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginUpdateSiteBindings(string siteId, ServerBinding[] bindings, bool emptyBindingsAllowed, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("UpdateSiteBindings", new object[] { siteId, - bindings}, callback, asyncState); + bindings, + emptyBindingsAllowed}, callback, asyncState); } /// @@ -941,18 +948,19 @@ namespace WebsitePanel.Providers.Web } /// - public void UpdateSiteBindingsAsync(string siteId, ServerBinding[] bindings) { - this.UpdateSiteBindingsAsync(siteId, bindings, null); + public void UpdateSiteBindingsAsync(string siteId, ServerBinding[] bindings, bool emptyBindingsAllowed) { + this.UpdateSiteBindingsAsync(siteId, bindings, emptyBindingsAllowed, null); } /// - public void UpdateSiteBindingsAsync(string siteId, ServerBinding[] bindings, object userState) { + public void UpdateSiteBindingsAsync(string siteId, ServerBinding[] bindings, bool emptyBindingsAllowed, object userState) { if ((this.UpdateSiteBindingsOperationCompleted == null)) { this.UpdateSiteBindingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUpdateSiteBindingsOperationCompleted); } this.InvokeAsync("UpdateSiteBindings", new object[] { siteId, - bindings}, this.UpdateSiteBindingsOperationCompleted, userState); + bindings, + emptyBindingsAllowed}, this.UpdateSiteBindingsOperationCompleted, userState); } private void OnUpdateSiteBindingsOperationCompleted(object arg) { @@ -4273,15 +4281,15 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void ChangeSiteStateCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetSiteStateCompletedEventHandler(object sender, GetSiteStateCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetSiteStateCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4303,11 +4311,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetSiteIdCompletedEventHandler(object sender, GetSiteIdCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetSiteIdCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4329,11 +4337,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetSitesAccountsCompletedEventHandler(object sender, GetSitesAccountsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetSitesAccountsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4355,11 +4363,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void SiteExistsCompletedEventHandler(object sender, SiteExistsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class SiteExistsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4381,11 +4389,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetSitesCompletedEventHandler(object sender, GetSitesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetSitesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4407,11 +4415,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetSiteCompletedEventHandler(object sender, GetSiteCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetSiteCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4433,11 +4441,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetSiteBindingsCompletedEventHandler(object sender, GetSiteBindingsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetSiteBindingsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4459,11 +4467,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CreateSiteCompletedEventHandler(object sender, CreateSiteCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class CreateSiteCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4485,23 +4493,23 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateSiteCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateSiteBindingsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteSiteCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void VirtualDirectoryExistsCompletedEventHandler(object sender, VirtualDirectoryExistsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class VirtualDirectoryExistsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4523,11 +4531,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetVirtualDirectoriesCompletedEventHandler(object sender, GetVirtualDirectoriesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetVirtualDirectoriesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4549,11 +4557,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetVirtualDirectoryCompletedEventHandler(object sender, GetVirtualDirectoryCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetVirtualDirectoryCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4575,23 +4583,23 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CreateVirtualDirectoryCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateVirtualDirectoryCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteVirtualDirectoryCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void IsFrontPageSystemInstalledCompletedEventHandler(object sender, IsFrontPageSystemInstalledCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class IsFrontPageSystemInstalledCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4613,11 +4621,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void IsFrontPageInstalledCompletedEventHandler(object sender, IsFrontPageInstalledCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class IsFrontPageInstalledCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4639,11 +4647,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void InstallFrontPageCompletedEventHandler(object sender, InstallFrontPageCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class InstallFrontPageCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4665,19 +4673,19 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UninstallFrontPageCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void ChangeFrontPagePasswordCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void IsColdFusionSystemInstalledCompletedEventHandler(object sender, IsColdFusionSystemInstalledCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class IsColdFusionSystemInstalledCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4699,23 +4707,23 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GrantWebSiteAccessCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void InstallSecuredFoldersCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UninstallSecuredFoldersCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFoldersCompletedEventHandler(object sender, GetFoldersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetFoldersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4737,11 +4745,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFolderCompletedEventHandler(object sender, GetFolderCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetFolderCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4763,19 +4771,19 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateFolderCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteFolderCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetUsersCompletedEventHandler(object sender, GetUsersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetUsersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4797,11 +4805,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetUserCompletedEventHandler(object sender, GetUserCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetUserCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4823,19 +4831,19 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateUserCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteUserCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetGroupsCompletedEventHandler(object sender, GetGroupsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetGroupsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4857,11 +4865,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetGroupCompletedEventHandler(object sender, GetGroupCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetGroupCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4883,19 +4891,19 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateGroupCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteGroupCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetHeliconApeStatusCompletedEventHandler(object sender, GetHeliconApeStatusCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetHeliconApeStatusCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4917,23 +4925,23 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void InstallHeliconApeCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void EnableHeliconApeCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DisableHeliconApeCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetHeliconApeFoldersCompletedEventHandler(object sender, GetHeliconApeFoldersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetHeliconApeFoldersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4955,11 +4963,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetHeliconApeHttpdFolderCompletedEventHandler(object sender, GetHeliconApeHttpdFolderCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetHeliconApeHttpdFolderCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -4981,11 +4989,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetHeliconApeFolderCompletedEventHandler(object sender, GetHeliconApeFolderCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetHeliconApeFolderCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5007,23 +5015,23 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateHeliconApeFolderCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateHeliconApeHttpdFolderCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteHeliconApeFolderCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetHeliconApeUsersCompletedEventHandler(object sender, GetHeliconApeUsersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetHeliconApeUsersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5045,11 +5053,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetHeliconApeUserCompletedEventHandler(object sender, GetHeliconApeUserCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetHeliconApeUserCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5071,19 +5079,19 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateHeliconApeUserCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteHeliconApeUserCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetHeliconApeGroupsCompletedEventHandler(object sender, GetHeliconApeGroupsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetHeliconApeGroupsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5105,11 +5113,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetHeliconApeGroupCompletedEventHandler(object sender, GetHeliconApeGroupCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetHeliconApeGroupCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5131,27 +5139,27 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateHeliconApeGroupCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GrantWebDeployPublishingAccessCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void RevokeWebDeployPublishingAccessCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteHeliconApeGroupCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CheckLoadUserProfileCompletedEventHandler(object sender, CheckLoadUserProfileCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class CheckLoadUserProfileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5173,23 +5181,23 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void EnableLoadUserProfileCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void InitFeedsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void SetResourceLanguageCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetGalleryLanguagesCompletedEventHandler(object sender, GetGalleryLanguagesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetGalleryLanguagesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5211,11 +5219,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetGalleryCategoriesCompletedEventHandler(object sender, GetGalleryCategoriesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetGalleryCategoriesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5237,11 +5245,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetGalleryApplicationsCompletedEventHandler(object sender, GetGalleryApplicationsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetGalleryApplicationsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5263,11 +5271,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetGalleryApplicationsFilteredCompletedEventHandler(object sender, GetGalleryApplicationsFilteredCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetGalleryApplicationsFilteredCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5289,11 +5297,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void IsMsDeployInstalledCompletedEventHandler(object sender, IsMsDeployInstalledCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class IsMsDeployInstalledCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5315,11 +5323,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetGalleryApplicationCompletedEventHandler(object sender, GetGalleryApplicationCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetGalleryApplicationCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5341,11 +5349,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetGalleryApplicationStatusCompletedEventHandler(object sender, GetGalleryApplicationStatusCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetGalleryApplicationStatusCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5367,11 +5375,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DownloadGalleryApplicationCompletedEventHandler(object sender, DownloadGalleryApplicationCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DownloadGalleryApplicationCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5393,11 +5401,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetGalleryApplicationParametersCompletedEventHandler(object sender, GetGalleryApplicationParametersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetGalleryApplicationParametersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5419,11 +5427,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void InstallGalleryApplicationCompletedEventHandler(object sender, InstallGalleryApplicationCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class InstallGalleryApplicationCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5445,11 +5453,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CheckWebManagementAccountExistsCompletedEventHandler(object sender, CheckWebManagementAccountExistsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class CheckWebManagementAccountExistsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5471,11 +5479,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CheckWebManagementPasswordComplexityCompletedEventHandler(object sender, CheckWebManagementPasswordComplexityCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class CheckWebManagementPasswordComplexityCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5497,23 +5505,23 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GrantWebManagementAccessCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void RevokeWebManagementAccessCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void ChangeWebManagementAccessPasswordCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void generateCSRCompletedEventHandler(object sender, generateCSRCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class generateCSRCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5535,11 +5543,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void generateRenewalCSRCompletedEventHandler(object sender, generateRenewalCSRCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class generateRenewalCSRCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5561,11 +5569,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void getCertificateCompletedEventHandler(object sender, getCertificateCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class getCertificateCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5587,11 +5595,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void installCertificateCompletedEventHandler(object sender, installCertificateCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class installCertificateCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5613,11 +5621,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void installPFXCompletedEventHandler(object sender, installPFXCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class installPFXCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5639,11 +5647,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void exportCertificateCompletedEventHandler(object sender, exportCertificateCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class exportCertificateCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5665,11 +5673,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void getServerCertificatesCompletedEventHandler(object sender, getServerCertificatesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class getServerCertificatesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5691,11 +5699,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteCertificateCompletedEventHandler(object sender, DeleteCertificateCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeleteCertificateCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5717,11 +5725,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void ImportCertificateCompletedEventHandler(object sender, ImportCertificateCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class ImportCertificateCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5743,11 +5751,11 @@ namespace WebsitePanel.Providers.Web } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CheckCertificateCompletedEventHandler(object sender, CheckCertificateCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class CheckCertificateCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { diff --git a/WebsitePanel/Sources/WebsitePanel.Server/WebServer.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/WebServer.asmx.cs index d01940f1..24f75688 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/WebServer.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/WebServer.asmx.cs @@ -229,12 +229,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public void UpdateSiteBindings(string siteId, ServerBinding[] bindings) + public void UpdateSiteBindings(string siteId, ServerBinding[] bindings, bool emptyBindingsAllowed) { try { Log.WriteStart("'{0}' UpdateSiteBindings", ProviderSettings.ProviderName); - WebProvider.UpdateSiteBindings(siteId, bindings); + WebProvider.UpdateSiteBindings(siteId, bindings, emptyBindingsAllowed); Log.WriteEnd("'{0}' UpdateSiteBindings", ProviderSettings.ProviderName); } catch (Exception ex) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/IIS70_Settings.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/IIS70_Settings.ascx.resx index 067a8d89..652755df 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/IIS70_Settings.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/IIS70_Settings.ascx.resx @@ -249,4 +249,7 @@ NETBIOS Domain name: + + Web Sites Public Shared Address: + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx index df0e133d..7358411d 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx @@ -21,6 +21,14 @@ + + + + + + + + + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx.cs index 323d0be3..3099eae0 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx.cs @@ -58,6 +58,7 @@ namespace WebsitePanel.Portal { "quotaDomains", "pnlDomains" }, { "quotaSubDomains", "pnlSubDomains" }, { "quotaDomainPointers", "pnlDomainPointers" }, + { "quotaOrganizations", "pnlOrganizations" }, { "quotaUserAccounts", "pnlUserAccounts" }, { "quotaMailAccounts", "pnlMailAccounts" }, { "quotaExchangeAccounts", "pnlExchangeAccounts" }, diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx.designer.cs index 882231cd..3d49896c 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx.designer.cs @@ -1,31 +1,3 @@ -// 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. @@ -175,6 +147,33 @@ namespace WebsitePanel.Portal { /// protected global::WebsitePanel.Portal.Quota quotaDomainPointers; + /// + /// pnlOrganizations control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlTableRow pnlOrganizations; + + /// + /// lblOrganizations control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblOrganizations; + + /// + /// quotaOrganizations control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.Quota quotaOrganizations; + /// /// pnlUserAccounts control. /// From e2b94badfddcfa16285b45f7726ba9950694362f Mon Sep 17 00:00:00 2001 From: rdolezel Date: Tue, 18 Sep 2012 21:08:40 +0200 Subject: [PATCH 49/55] Merged with the latest changeset --- WebsitePanel/Database/update_db.sql | 60 +++++++++++++++++++ .../Code/Data/DataProvider.cs | 12 ++++ .../Exchange2007.cs | 41 +++++++++++++ 3 files changed, 113 insertions(+) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 4443fe81..08746cc4 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -5211,6 +5211,66 @@ GO +IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='ExchangeOrganizationDomains' AND COLS.name='DomainTypeID') +BEGIN +ALTER TABLE [dbo].[ExchangeOrganizationDomains] ADD + [DomainTypeID] [int] NOT NULL CONSTRAINT DF_ExchangeOrganizationDomains_DomainTypeID DEFAULT 0 +END +GO + + + + +ALTER PROCEDURE [dbo].[GetExchangeOrganizationDomains] +( + @ItemID int +) +AS +SELECT + ED.DomainID, + D.DomainName, + ED.IsHost, + ED.DomainTypeID +FROM + ExchangeOrganizationDomains AS ED +INNER JOIN Domains AS D ON ED.DomainID = D.DomainID +WHERE ED.ItemID = @ItemID +RETURN + +GO + + + + + + + +IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'ChangeExchangeAcceptedDomainType') +BEGIN +EXEC sp_executesql N' +CREATE PROCEDURE [dbo].ChangeExchangeAcceptedDomainType +( + @ItemID int, + @DomainID int, + @DomainTypeID int +) +AS +UPDATE ExchangeOrganizationDomains +SET DomainTypeID=@DomainTypeID +WHERE ItemID=ItemID AND DomainID=@DomainID +RETURN' +END +GO + + + + + + + + + + ALTER PROCEDURE [dbo].[GetPackages] ( @ActorID int, diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs index b102fb37..3fdd6f11 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs @@ -2153,6 +2153,18 @@ namespace WebsitePanel.EnterpriseServer ); } + public static void ChangeExchangeAcceptedDomainType(int itemId, int domainId, int domainTypeId) + { + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "ChangeExchangeAcceptedDomainType", + new SqlParameter("@ItemID", itemId), + new SqlParameter("@DomainID", domainId), + new SqlParameter("@DomainTypeID", domainTypeId) + ); + } + public static IDataReader GetExchangeOrganizationStatistics(int itemId) { return SqlHelper.ExecuteReader( diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs index ba51c9ce..119233ae 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs @@ -230,6 +230,11 @@ namespace WebsitePanel.Providers.HostedSolution { DeleteAuthoritativeDomainInternal(domain); } + + public void ChangeAcceptedDomainType(string domainName, ExchangeAcceptedDomainType domainType) + { + ChangeAcceptedDomainTypeInternal(domainName, domainType); + } #endregion #region Mailboxes @@ -5954,6 +5959,31 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("CreateAuthoritativeDomainInternal"); } + private void ChangeAcceptedDomainTypeInternal(string domainName, ExchangeAcceptedDomainType domainType) + { + ExchangeLog.LogStart("ChangeAcceptedDomainType"); + + Runspace runSpace = null; + try + { + runSpace = OpenRunspace(); + + SetAcceptedDomainType(runSpace, domainName,domainType); + } + catch (Exception ex) + { + ExchangeLog.LogError("ChangeAcceptedDomainType", ex); + throw; + } + finally + { + + CloseRunspace(runSpace); + } + + ExchangeLog.LogEnd("ChangeAcceptedDomainType"); + } + private void DeleteAcceptedDomain(string domainName) { ExchangeLog.LogStart("DeleteAcceptedDomain"); @@ -6018,6 +6048,17 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("RemoveAcceptedDomain"); } + private void SetAcceptedDomainType(Runspace runSpace, string id, ExchangeAcceptedDomainType domainType) + { + ExchangeLog.LogStart("SetAcceptedDomainType"); + Command cmd = new Command("Set-AcceptedDomain"); + cmd.Parameters.Add("Identity", id); + cmd.Parameters.Add("DomainType", domainType.ToString()); + cmd.Parameters.Add("Confirm", false); + ExecuteShellCommand(runSpace, cmd); + ExchangeLog.LogEnd("SetAcceptedDomainType"); + } + #endregion #region ActiveSync From 867aee9835ef46dc7a255980ea03e57fc905533c Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Tue, 18 Sep 2012 17:48:14 -0400 Subject: [PATCH 50/55] Merge --- .../WebsitePanel.Installer/Updater.exe | Bin 199168 -> 198144 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index 3876760880c4d368fe9b30a0f25615bd1c256998..29802bd2b9a5e9d8d83ffd9c8dbb78e5bbe7c297 100644 GIT binary patch delta 29104 zcma*Q2Vhgx`~QE=xoMgXO4F6mv`x~LbT8Ju{qP#8;=zht2q)FAbx(H;*W zt{Gg9q}ORId%~o88bwvo1sW5$`y)!O4X1>HJD3o4(T9|bby#N8*t}3?1FL6@e-b4| za06(WjTh^wwh6GwatEv0rh;Hp4EQ17pQOgP5KAl7F@J-)0wQ@nMG#Lg6-rQz@5;;4VFr3osX#SQ^spHqn8j=DF#*c(^jB+D zvJDC$S|F|41n3>l3KIyM3Z0lo9AW0u+7Syo?6d}a0t8_ z0b+{;$%HN-ij|L|I*RF(9_0OXK8lDiH@vi7Hi)RsgmTDvs5;Sl;qXK;8}yUGl>Q#xs!zuRzu>T5lS}+6{%qHat|7j_X7CFH-|YaOn@Yw zugLuh4I&NB3*x(U; z)%|SIkP@dC%}uev_!EDPR`Wmm4hDJ}f#nP`fKNPp zTEhpL4s!)w+yVOlX$PMo`0zgAFK(X=pWg7f1Rq`~e{nlcISD@Z;PccDL40XoSonum z2x?6qF&mWWsmtcOB%2B&p~{3Q1Hlv?u1El9CM-OPkIx*KZs|dGjn+ap&|`ZRI~tT<}rQ=OglbdJu}VVRJbK)KAAjp9vEBS zry?EW$GGcyd%3IUm#3_LH3KZr)qMHt!~|B62^Q(y!oU0{ zf6nH`JbT|~v*+d@rOGhZq*QOeL2N37RO2uGlbCZ@=YLm>+k*c|sTzNe$H(IZrq@+; z!HV*D>@PL!9qI{P!BX)Yi1d+npa`pLF^^*Y9;#*L>mk<6)}0$|`CKt49G#~I963H* z%wQ|wn;=`Myy?L=OpN__fZd+06U+jtq=F&gb1qW z%fmr7zELJYHuzj`~J85eWh`} z_OfToRq^vYzT|4z_%Ib28#E6_f!anu?LE~&ODDDfiorTsSpZ)m@dW5Bo9f5A0faD^ z1_@xFFcQ*C=Vr;I)%WGgPjiw35x@keMXH!sN`J))xjC>I*yIf7F*-{`dOADyOcd?6*RtRVgQeX; zW@?gJ1qIU(sZUTM4VC7AhDqClqN!QB40en3XV44ODh<%3hlKNFp%b9P)Si4;<>7z} zGpI;}v_)4zBPEMIokmH0K%=EPP@8mEA5QJk9ncs_Yv@K}odXT+DUFjh7<XV*x{ zgXT+@6Jlu_safJxS|I(B7)A>vZPFmxR+^M_m9~@mBoCtPrJc#^Xa{LXN-x?`+L`h> z?IcZ4&8D5D?Wtk3i}ZbJd)ig9q>ZG{N%PWvrrjjk5{hlno)$rYk85;?$VIV zH)x6UOJ*u9l_IlVrahd?v-(lm)A=wP8rVzHwkn{#LCwxdt#T>tBW-K_Htj1F=dPpu zoDXwTDedo!&xaHPoO9ZQQ~JELsi1_uAko5lS|)8T97YE^Ep5{oeNpPuK9LTR=CpUx z!BVRZv2=)3-l3WfmF|EJlg4$tNQX9oxL=4q;pfrIf0In=Jc9M zM?2km7f?Dz>e%Not#G#Odyvwx&Sw2Tqja3}@PJtY9WNCRd`u@eyT14~r4yxFgI3c? z&Uu4}QTmee_aUn(eOX#E>;pR4*>-p^rBkGV<)6`4oFOBAP}8ZB+qiCYn$%<5+jP40 z%eX}Ps$>~Im5R>g<7ZJ?>5QB>mC`Ebs!0N+Go-aIy-ll~`7gtanJLYg`~!W>Ic~~G zH(KL7|7t%Koh4;fzf5O4w^T<9bdK};nqaDa9j0lJr!;>>gfn#ZCo1}e^V_*cD4pwE zHGhEzo##wmEHXOZxn=1fN*73h%l@Xd&cNk~jMh2Zu7D=IDQ#MLkxJ6MRV8$xba~aw z^ew5+yT|Dw$-a6dbx3tA_%%Gu|AcShfp25uZgS4;aho}+7|RhwqfwV*wn z;)foTz9(rn_mnPvluXw_XaQX>t=il~H#p~Q8OG@Q((g_O{Xm+x^>4b-Id5AurJJN} zpS(;zl;Z2B(vPGK^%ZopWN7F|w}4tDN5eS!vE;G6pSzRq$y0-+um+PfYkMZ$D(%@m zl5UgYKb=KCk+yxhfYwWGKbuM$q&=U#Ot(v!JKmt5O8a+Apr1*ZJNwZcpy5)(&arf- zWZ%`#eHZ2ziutYEl}SIBF7H}FcS}{DJLw*0i`}ak{Xz=an<#1a2GG3_DxmwMfuQ@P zwR_X)0qOkSTzXIn*_TQWNyYmv(!)~n{wDgR6mq~xk4PsE^rJ_e@dukIJti3re?-5M z4j&Gt$EE9s&(RakJzv7aIqB?p)Sc3=rQ&0s({Cj0S1;33(wwg<=(p0tua48x&cnx{ z7T-BXe+|>~j8l86Ii=rAmTw2qv(DGP?MLZ3=jGGc0&R4LoQ2)(yi|NHj9!q&fnJpA z&PCHp(st0x(&cl5=oP7L;~;uf+5mb@YIc4Qy)KPAKaAdxzCS;b{vfrzaFE`Vnq3@8 zZ#k!2ETHs9=gvzo*iFv;S0+$;Tgtp9(L2(yYj4w^r1I<8^k?VV>*b(9#FUo!+QtMki**zjHx|P6wC(Z-6f++igI4}G-gR=X?`QmNh2gLcxowJlZ zB+i~cKS$Xk;(YIJ3T2Op^XxC7j6ESz=>1G*>b+Zx{Yjjm_YVl{FXFuMsJn{&O{A>9 zA5rpF3;GSE^)T%^Q_AXlFj^r{p?<#`T_;eLW3&hDM%^4c`9|$%=1JRA_xc{5)G4Uo z`cmr{*o>MSHXnMFder~!LyuGH>DccJk-Z#&TG)6yhG-#8Gsh+^{f+uKR{7C4X!H7b zf9mk1zK;Fjw18^sJtAlcqki=RqG*#R^{?-kOqVol1l2`?QB*si}TL2fCNi5XY7-G^GCZPBeYbzrQ!_CQzFrus@V&cMRd17{|8$P`g;ipZ)0%G|q8-03?a8pYuGg zOhSFvGI~&;iH^X*P<~Q<-C!tyCf6SuLi-6c#bGapw5g79KuiSX_O=R3H5hO zeGJV$_L$~4UVKaqj>V5@sH5-+?djO|1X{852@Uoy9P;9%VZ(-uf39Loj|oG@7gP)$ z;z;g)!W zcZ7IT;*N#{IPJwa4&N?JEr)h?W?_!VE^LNlV;9!h5!IDVaCCl-r8!JpnWtlQSJusO ztSgIg6g|fhc_>nLeDfTOtAFn~HqYQa$I~oOAMK1e+8Og4xx<-`);W3&XYDZw}hZRk)e4LEdbVH(MOP3}?Y~o1q@sf`jxYI zy3;YIoOPgk9AB5Sx9EPy@DVIkb68Gr%&~d|%cmzD*GI6?Dy&D(k?a%Ax3c?tNAM_i zQ54*%kIJ3;Y2DnJUx<&NySER%{EB^i{08_9^b66rt2{kJ-26h!?jD|gm5qUZqoKk_ z;orZ>FT~wl72>1u@o|IvDz|9d1-}UX=7Bi==7BW+h5|!O7|Z9p+MR`%6uRTsIhwWh zRk<@Crgm5PXaoW3#~f@7`^1eWa;t9`!(LaZ!0K7wW&%4+eH-8SrR#(_>D}I$RN3Y8 zZpV%|Y?GMD{t1jQTrm>3qe0;El@!6rG~Ayeb71U$gzXIYz@JYWX%wtGBx=O^)l)cRKrkiZ;9Fib<9wnYVOcSFRIB()DO{q5Y&fU8TxRjnrMgd zIB~-kJnu(34jVj7O(sLwhrBgx-vBlFXxPXBq2!BUr^R7@hBt)G!oEQHFhL@v#)9?ilXaDd_@O}mAL%ts#4wf4b$CKO{z8v%ss&_dL z2cyQJW}$WhRg?bZBL}3Z$r#x95V5>^AhZd>YO<{SG!*YFFCL^OyHLNxIOofG-G42w zSG~esbrX*TmQ)@hTu-C^fcgN{lX80?XmMo(C?yH>1ZWF-3bYkH1KNQ$f)>+DpabYN z(BbrEpq7lMw?SW}zkp>v{R6Zf^)%`|`WP%N$zLLDdJ+~y$ta=*)iKY1sahSzjs^Ct zjAlMTJuBl-TcQ@A7J)vE)1Uc4oRO%NsCB5TP`9I=K)r(c7*y<8=_&AJR@6+?PN+js zUqfAux)1d%>I2k36;GRu+8cEu>H<(omZ^B3y|3bJ{a6(Qme0|CP!$Z}Q>xG)Dv}#~ zL!Mw%PdA>x~4`zOd@JNY7ywuc8_$kgLf?IMAVl-pL(adC4jdIbr$GT z`#iT)u!~D@^C9YX)MKdMf(qmk>MgfWSNJE$LLm3tGN6hN-CBYE3DuQjQn-h~t8P-a zamBZ(?GR2=w+DMBs6g^SwWPDU3ut!{H@(!w;O?*P3HpMX_s3{ZflOBS1$`CubySBM zyA;Bd>_z6Lqb?0&H?z}3g?vDf2q|m)@P;q5%qtJBNm|cz@hS zReSPqAZi9Ee6Q-sySE>xK*o6T0;Z$RLS2g9)fj)XCm+OJo_s*RLcM|dz!NGe66VFT z(|R2P)qC+y4g(7%NvIuA`+>?+hLSN}T_Da}P-v6ae9*OCd^j2)tw8o;_zI{%e#JbQ zH}4OBZ=Pqk_bXuMGeaQR-V&%-;OzsOZr(ic5N|#KC!)^qUJT)tnCuhOBdFhduLS!Y z)W6W8Znhp~vbGuTMN_k5P|>(%e80$V7704E*(T7MW*>uYZuW_5K%bT}SH|RwXihLDK%D6V?^I&oFli*%~_9}83!t=>R(DyOf z+vFyMKOnz=){{q|yD;V%NDGS+hONGW?tdEsEh+TX=;U66^?#)AN$9`{s8dj11AW@b zbAA1FJu4T27FVwHC6jYtq2#tN?_{mlOwfmDQEOrGaUH<) zkdIc&)qonxRjdq$&C^IR+7NK3qP9Zq4EogDQ)>lpf7F4X#g#*~{LnlRwFdP~)a9t_ zQMaM)Mm>gl7WEpccn3GXqyCMm@#C5Lq8d@7P?J!zPzz8yqn4r$L>&PNdyrqWE}6{q zivyhpmSpla>S|C}PyLc~0@;e;&qP1Iffkpf1X7%f1WA; z!)E^sh#!d>gO()JEYw2O=TQ5AQZmFp2jY)H%M^b&{}IScgoUWfQ8%DEQ9t(=Ai)X$ z!%*ZkEaoTF2dE?}c>eLIEdx4%B?rT8P@fBc^Mz=gE=3)3vR0l?qM|wG0R-wL!x-sx8=#{O3e4YO^ z@I}}cz5si1~eNg>Tb*SN} zwxD6q;sn&RAl~{cw70`>7YG+u%Dbh!6ZS^S3#fxpM~Ju?i~17kG}IZWb5Lth9jNc1 z{?qwSD=qim4ctf8291EK_yqC3*#Pn3z!Su0%$E>`i5xUWrzPJ7@iQWAAk6>b%0|re zGU`vLk5HM8d$p*cs4=K5K}#yzp>{*<4Vp>@==eMsidupC66$o+nV7GI;TS#F zWYlcbHmDs@i%@%^j)X%|&&ua9JOp(V>IAN0Wi@P`uJ9v$55uA8bv;)J^r?M?elldS z9`yfD-^lGwB~EBSD%lO{PmVzY{K+}gTc84YfXx$C2Hw`@2Hr{|su@&EVo{So)ue@? zZ;+bgW4HrqA44cuhN67}TBf4TL;KqXekQTnFdcG!-!KDo3)(+5KvT&fjQNd$H?mO# z=vnzADxZcuEBQ2pb7E9J0pXyD%BNn>$|o2z(8#O%&r0{SpJI%&pq~;^(?Q)xjxh-| z*Ekonvr!NFxr*C+8YhDeGl~Li_;K2ej4}2NawF3rYd10n!wZZ(!NO}wiNiP(!fzXc zK{ud&V$6W>9*9rLY2#y9R<9WAbpG@Y<5E!1;1!^u!D~QMFx)P91BCkqe+W7z*a4BucS87U4Bx=SkAlAdi;w9bsMT~7w55s1>15)mo;RHY9S`BBeNbaM z4Sg^dbrI?s)Ot`#zAyzrV~(5nu%0!|4-(bn8kp4Nw&@&<(|vFVgoSYRL=8lZ2(iMV z5gT&dRZMcoTqq_3H5asl8SclBD*gJ9CMc!|Ng^MH{0uZrpb=}Wr&i^d{Vks4Ez&X+7yC_YrD_a)2Zn50!`lg^Kf zg|9!M^`v8HsNRp5BV_6c6i5z5%2XB_rPmV;f1V0rjtPy|8_62j438;k_Jy_s z@>S?WXcr)T41YRI>6%b77@akm#?TUdC>f>DHKaAp~LazaZlZ~-6!ay$tA_t!aP}TBN6bh1~ibgF<0v2NRo?Y=@UsU z5VXIFltRK((x^BmnHT8Oh%Y?N!4p=QQ}iu}$wdqGEy-}CD)J_z%OG17-^W0iWVhnm zWnQX>@7CcZVE?YrXDf7oo;9!4!;>A{Cz1p7vU#IE*X6up-mWjeTk`OfCyeNBeIZGL z8}v{a&3*G|Jv^iZucw(lC7$V*`c8_E=Xp}!#YH^NBGLhKk@GAj{gFhT=>>fcB`V(! zR=9{~dR5=cmCa@IkNQ3?;+YO06Q9ZSc{1Bo(ffM-ZNfhleM&sf$NIrfa}lAY%rNXJ z(mUqnhEWR1l^N~woizs;DqM8gY%;*p2JjM~4|%#tWTmSzO}dxJdKcLYFOl6!)tDvG zFqs@uNc6X)0-jPZ!jfT_LK+onVQCF?Q=xX2Uiw$aU4@D*=|JA_g#;g%{+70esU$$5 z5tdFsW`!nOO7zo+O`+MA6rePP7K@hq`spM`!A+JT!*tR?p)bJqDk)Ov9Qa-({gLE7 zT_l5%_@Zkwh-561MDAI77^=uZg&te_8>-0;g{XC?p@y7M$ipg*GRz_x_zne@2oeC! zH%J7MT*O=wha?v}1O3mK(Q6_AtED&%3^ZP-Q* zA=PN!g34?sClq?$TB6@h&LGK0!|mjfl5Usv2*iZN1zt6p{npcl9U?I+_zfi7L6T&G zHZ|#XkPH{4fUnR+=L|bZ5zF@G2>GqJpE=tkwA!A*1&hQ19_Ds5cM4at% zHt7zKS{J4050GUpI%haY)<2W*Fxl$zHR+C!9WF}IA0daHiFuTqa`~EcUy()^rRcvR zH^pb79w+x)&L-VS^29|c`jbQh&x=8~L3_^`z9s=ka_diV2fX&WU$QRMpOyjXw&6Qs zcExPcogw_GGeQoKThQBQNM#E={_SNv;Tf_9omJ#l>u-kdNfA7L2AP8Iw&5%(Lz2%E z&XM6rayI8kqbuf8{W(&Y&eQQ+9vB+Q6C^p8^JH)a_sO|jAfqzy__x>Vi8V!kfdpi7 zr=00U(g8`X+C@@|#4}y0zeLu!e76mk$tff`(<`JAsam5AFVSBim3R!Q)yCa0}oenD}Erok>mnzk}{-fO}lVk<4rPL zp`!30poOk)aY2c6KC?`?r;2%jBJOs*_Hjz>nrRbZ;M42>wp-s0*twLj= zO}EKWq&iX)9%8&h3OoKPFQsfzI7{fSf})sRKu5yqd%TqKcWg7GdHi^onL^|s+x zQj1hW-VM(*{zmS(sJ-zXInkLHA@AFNkTXaU*&N=}_yPjXx|#Q2aj zBFX8VkZZC}B>Th17@v@wt~^tTd;|0+S%|cV+yeTGJW+fsVuJB+qJK_~$s(p1DYYpS z5HZ8ZXof=eh}lMg_Esn>qR!|>YZdAMq^2v8>WEkr;V`;W?`}NPx5x_-?-)Jk6C{a@ zj#z8-qLoE*fi*zhR8=g~iii)5&FHlfnKnmkGy2f6rJNR#JrO&M&FLDXI&v~%H;|?W z_tlXfBMum~)Py9F$6~}0qaQt^I6Wdy8+G)OOnO6Pj$Ti_d-8;QUNjo@)FhL}9C=@F zpb;{W#tjLaicyG=|VaGHD7Td+E*ej6&TaMUFQW?1#<=O2Xlh zO*%8x;OWl+%@`=qOy!fI1DYvF{8@0A&zc%2-b^!OB2wh9Mhoqr&|>g~)80sY>>n8; z=rk8KiMl9Si@1oq8%ctr=qZIhh|~nz=(66}dd;Vi7xb~TL7^{^b|Y13zKKjU#L}aR zuL-G9Ax%^Yq)Y3=bEzVMQBAryx)`ZO6BBhoFUHZW3Z?_b(GxO}{HR7_939-3C*+4% zzui|@3HOa8Kgzzqo~;6_Edu>w2MeXR7!9M zx&x_7vpXs$xD&mJR71Xs$^#lTh&Q5!oCoSc?<#Z~2Ie_x6Y)&AirkOt5ZsM!M&fh5 zYj6=gfh2cZ2~C1$>Uq!be(Fir%Y;4Chi+Af_e>w!pb+nwK6Iawj`vI-dPwo{p6NqR z3=uI?oX>se8O6!FrVqWOB;-BQm)=x}_e_6!7pYpqqI>BFQ178Umug~-Zqf~)W+aIu zMfV9FKqrslK8du7elhrYIvYt|eoh%QuOehbweN|yma`)f2$qSFC4 zD$a0QFa0pORiXB_bfA3-jkHw-52r^Jnqr#;bV{Mwws}Ce6>>l><@BCHA3`qW)HDYB zNweQpq8~vcIEhd^Kl2+w0O0X_Fno?^npTF z`;y>MlvMB{YBcfo6+jw=a_uD$(^sL+_7os95?ufFvab#vO>K&^94Sem>5$E6nxW9^ zNO=mav~L7ogF>I!@9W3V-3lE>I;7AA`BqklGw?ZRgb_b86WeUxR*$*^I zA#rKUk>K%kqJo=ZP6Aabv>P&=K<6rSKIRNOg1%6pM=|GtRw|^6y&61`u2(2F_9oC) zg>qwi=_k=c3iXLi2fD4$1Tprf;Fst<1sBHN10v()Hf;mn%T$8|mr${ffhH?-I+mKI z(3vjsFioYSCh&CC+H^Jtul(o73z zo{O?gZ_-j16_~`gXqkc)ah*&KTIr%9pt(p@- z#8f$|cl;338oF_sOp)=ahWF@Eg_7b&n%2?buX0~C$%zjzt*73&tXFB;#h2*crxPnN zo#q9kyecG88Q-LPpNfYRlo0hZWaqm06iB#FA!qzJ(+BiYwe0%>Vtz=M&Ey1Uck!>7 zKBP0>;3UC4w3(*ObRSY3`91!{;E(Ak#g`E|*W{#Q=gKjKghi%pbft(`M*?u$OL!ogQ#JV`q0#siJW?%p6wxL&8jsWdOXR3&i4CR`v|+hS1&KcepQK6e$kaRW zg8n4cuas$AVlSY8Rh-~tI`OgYB#l6-B6Z;Vn)X&`ePXKNYdY~=Io+3uyG-BE(sg+J zgC`sk6Aj5QAcoKez zoFqrb5i(6=w-s!j(l;cD-BZYvQU*l!$(6CEl<1S0Mxm6H z6rccwvQvhIq%f00MJc0!YzpynpH!Bl5I^@xWqAsH8x7ZgX{>{S{5&v?l`6!~16#2E z3i0#67Hl|DwFZ9krEke5E530^l?u&GNeACth4|4wovl=eAN|wWK84n$OcX;h*ii*{ zrMv=kMj?J$mdR@O%dO|9WtnWTLKEQ3Ad{_Bh@UlNvW*ITn^F~$#kMN+OUf*u-3sxO z(rk7}A%0RSX0uZYHcKth=debF%&93rngeq2{A8;Y%TS1)P_<@x3h@)F)~t&{{Cp~x zl`6!~r*c`DLi}_tj}2FdpU&lpY^H+z^eUgtRfwNn<+H^K@zbj|Y^6f{^r{Wph$P=F zD`2~k7HLvb=Z6%qQ%KdMT`F7+vP&{)`lK!lE?|WRd6TNiaP*1hL)b#NDsYnF1i=oj%mJp>RT4lp4GZ&O-M&(K7u|n2KulID?_RxQ&N|ObY(|n zpJrC-ML(#Z%=;)N1m`JJch>tWnQBvag_N*~3N1-J5YmG+D6}#4IM5-5 z8d4JtJ=htU$QP-tfxM5)mH7fH)01^T+DE>E*7stQkK^(023-JOD)wTtWhYR&z8CX8 z!4p<#zJqS-&9*A^Lu#Y3H@l?JeV8+S*b^W#Ty!)~I~&r6!M$1}Gf-ca2E@BNE$w

NGkq!Te#nb#ltQzB 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 delta 30110 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 d Date: Wed, 19 Sep 2012 00:34:10 +0200 Subject: [PATCH 51/55] Removed character causing error --- .../App_LocalResources/ExchangeDomainNames.ascx.resx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeDomainNames.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeDomainNames.ascx.resx index 77fff6cd..8775c057 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeDomainNames.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeDomainNames.ascx.resx @@ -160,7 +160,7 @@ Change Type - + Change From 8eb4865510899a5fe84ad02a545956d0ad489ae1 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Tue, 18 Sep 2012 18:35:48 -0400 Subject: [PATCH 52/55] Merge --- .../WebsitePanel.Installer/Updater.exe | Bin 198144 -> 198144 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index 29802bd2b9a5e9d8d83ffd9c8dbb78e5bbe7c297..24807a2081e275d4247b2a6afb24675a28bad0d6 100644 GIT binary patch delta 45 zcmZqZ;c4jMnb5(^xgw&myS1BfYd6!u0)e9sK5;xNviDwna-M%9FOTi^m_nu{QvkOQ B6Kntg delta 45 zcmZqZ;c4jMnb5&(aX+B3yS1BfYd6!u0)ac-AAO5E&Hd+fDFDTO B6ukfd From f85d468b7ce84864d4da59b84125ece8be9cdc6e Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Tue, 18 Sep 2012 18:53:28 -0400 Subject: [PATCH 53/55] Added tag build-2.0.0.38 for changeset 47deeeaba0d7 From 39d94f06e263f61697dc644df64dda3f60430835 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Tue, 18 Sep 2012 20:21:27 -0400 Subject: [PATCH 54/55] Update Copyright --- .../WebsitePanel.Installer/Updater.exe | Bin 198144 -> 198144 bytes .../MsFTP80.cs | 30 +++++++++++++++++- .../Properties/AssemblyInfo.cs | 30 +++++++++++++++++- .../Properties/AssemblyInfo.cs | 30 +++++++++++++++++- .../WebsitePanel.Providers.Web.IIs80/IIs80.cs | 30 +++++++++++++++++- .../Properties/AssemblyInfo.cs | 30 +++++++++++++++++- .../ExchangeDomainNames.ascx.designer.cs | 28 ++++++++++++++++ .../GlobalDnsRecordsControl.ascx.designer.cs | 28 ++++++++++++++++ .../WebSitesAddPointer.ascx.designer.cs | 28 ++++++++++++++++ .../WebSitesAddSite.ascx.designer.cs | 28 ++++++++++++++++ 10 files changed, 257 insertions(+), 5 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index 24807a2081e275d4247b2a6afb24675a28bad0d6..08fe7cdcf3f29b3b4dc99f7ca361c466c00e0ae7 100644 GIT binary patch delta 44 zcmZqZ;c4jMnb5&hzOk{ZwTp3U7t^5vfr&qTS-B6$c}@$JV>JK9HD!BDA=8p60Fs6g AvH$=8 delta 44 zcmZqZ;c4jMnb5(+xuUVFwTp3U7t^5vfuj#TaXc%s_g;N+o_`}RkL~uDLZ&5C0H*#E A5dZ)H diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs index 1fbffbd8..910f18c1 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs @@ -1,4 +1,32 @@ -using Microsoft.Win32; +// 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. + +using Microsoft.Win32; using System; using System.Collections.Generic; using System.Linq; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/Properties/AssemblyInfo.cs b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/Properties/AssemblyInfo.cs index 8ae894a1..5bb54eef 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/Properties/AssemblyInfo.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/Properties/AssemblyInfo.cs @@ -1,4 +1,32 @@ -using System.Reflection; +// 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. + +using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/Properties/AssemblyInfo.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/Properties/AssemblyInfo.cs index ed50c061..23c091a1 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/Properties/AssemblyInfo.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/Properties/AssemblyInfo.cs @@ -1,4 +1,32 @@ -using System.Reflection; +// 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. + +using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs index 960487b0..db31084d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs @@ -1,4 +1,32 @@ -using Microsoft.Win32; +// 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. + +using Microsoft.Win32; using System; using System.Collections.Generic; using System.Linq; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/Properties/AssemblyInfo.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/Properties/AssemblyInfo.cs index 3e0804f1..f6b854c5 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/Properties/AssemblyInfo.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/Properties/AssemblyInfo.cs @@ -1,4 +1,32 @@ -using System.Reflection; +// 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. + +using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx.designer.cs index a3ea96d8..7bad4113 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.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. diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.designer.cs index c0ce1e91..c3308c73 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.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. diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddPointer.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddPointer.ascx.designer.cs index 5ea5bdeb..555da404 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddPointer.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddPointer.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. diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx.designer.cs index fd2055fe..2b9b45f0 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.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. From 2094e5362eea1141214926276616982f50ad78ce Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Tue, 18 Sep 2012 20:36:51 -0400 Subject: [PATCH 55/55] Added tag build-2.0.0.39 for changeset 44cd0d1ba68d

+ - diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.cs index e85bef62..ebb94dde 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.cs @@ -178,14 +178,18 @@ namespace WebsitePanel.Portal protected void Validate(object source, ServerValidateEventArgs args) { var ip = args.Value; System.Net.IPAddress ipaddr; - args.IsValid = System.Net.IPAddress.TryParse(ip, out ipaddr) && (ip.Contains(":") || ip.Contains(".")) && - ((ddlRecordType.SelectedValue == "A" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) || - (ddlRecordType.SelectedValue == "AAAA" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)); + if (string.IsNullOrEmpty(args.Value)) + args.IsValid = true; + else + args.IsValid = System.Net.IPAddress.TryParse(ip, out ipaddr) && (ip.Contains(":") || ip.Contains(".")) && + ((ddlRecordType.SelectedValue == "A" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) || + (ddlRecordType.SelectedValue == "AAAA" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)); } private void SaveRecord() { - if (!Page.IsValid) return; + if (!string.IsNullOrEmpty(txtRecordData.Text)) + if (!Page.IsValid) return; GlobalDnsRecord record = new GlobalDnsRecord(); record.RecordId = (int)ViewState["RecordID"]; diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.designer.cs index 579c55f8..c0ce1e91 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx.designer.cs @@ -1,32 +1,3 @@ -// 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. @@ -149,6 +120,24 @@ namespace WebsitePanel.Portal { /// protected global::WebsitePanel.Portal.SelectIPAddress ipAddress; + /// + /// valRequireData control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireData; + + /// + /// IPValidator control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CustomValidator IPValidator; + /// /// rowMXPriority control. /// @@ -176,6 +165,24 @@ namespace WebsitePanel.Portal { /// protected global::System.Web.UI.WebControls.TextBox txtMXPriority; + /// + /// valRequireMxPriority control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireMxPriority; + + /// + /// valRequireCorrectPriority control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RegularExpressionValidator valRequireCorrectPriority; + /// /// rowSRVPriority control. /// diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx index f6821a51..8a538579 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx @@ -97,17 +97,6 @@ Text="Create Web Site" Checked="True" /> - - -
domain.com - + + +     + + + + + +     + + + + + +   + +   + + +
+
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs index 5c7d807a..af5f5e12 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs @@ -163,8 +163,29 @@ namespace WebsitePanel.Portal lnkSiteName.Text = site.Name; lnkSiteName.NavigateUrl = "http://" + site.Name; - if (!String.IsNullOrEmpty(site.SiteIPAddress)) - litIPAddress.Text = String.Format("({0})", site.SiteIPAddress); + // bind unassigned IP addresses + PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(site.PackageId, IPAddressPool.WebSites); + foreach (PackageIPAddress ip in ips) + { + string fullIP = ip.ExternalIP; + if (ip.InternalIP != null && + ip.InternalIP != "" && + ip.InternalIP != ip.ExternalIP) + fullIP += " (" + ip.InternalIP + ")"; + + ddlIpAddresses.Items.Add(new ListItem(fullIP, ip.PackageAddressID.ToString())); + } + + bool isDedicatedIP = false; + if (!String.IsNullOrEmpty(site.SiteIPAddress)) + { + litIPAddress.Text = site.SiteIPAddress; + isDedicatedIP = true; + } + + dedicatedIP.Visible = isDedicatedIP; + sharedIP.Visible = !isDedicatedIP; + cmdSwitchToDedicatedIP.Visible = (ddlIpAddresses.Items.Count > 0); litFrontPageUnavailable.Visible = false; @@ -981,5 +1002,74 @@ namespace WebsitePanel.Portal PortalUtils.SPACE_ID_PARAM + "=" + PanelSecurity.PackageId.ToString())); } #endregion + + protected void cmdSwitchToDedicatedIP_Click(object sender, EventArgs e) + { + sharedIP.Visible = false; + switchToDedicatedIP.Visible = true; + } + + protected void cmdSwitchToSharedIP_Click(object sender, EventArgs e) + { + // call web service + try + { + int result = ES.Services.WebServers.SwitchWebSiteToSharedIP(PanelRequest.ItemID); + + if (result < 0) + { + ShowResultMessage(result); + return; + } + + ShowSuccessMessage("WEB_SWITCH_TO_SHARED_IP"); + } + catch (Exception ex) + { + ShowErrorMessage("WEB_SWITCH_TO_SHARED_IP", ex); + return; + } + + // rebind + BindWebSite(); + } + + protected void cmdApplyDedicatedIP_Click(object sender, EventArgs e) + { + // call web service + try + { + int addressId = Int32.Parse(ddlIpAddresses.SelectedValue); + int result = ES.Services.WebServers.SwitchWebSiteToDedicatedIP(PanelRequest.ItemID, addressId); + + if (result < 0) + { + ShowResultMessage(result); + return; + } + + ShowSuccessMessage("WEB_SWITCH_TO_DEDICATED_IP"); + } + catch (Exception ex) + { + ShowErrorMessage("WEB_SWITCH_TO_DEDICATED_IP", ex); + return; + } + + // rebind + HideDedicatedIPPanel(); + BindWebSite(); + } + + protected void cmdCancelDedicatedIP_Click(object sender, EventArgs e) + { + HideDedicatedIPPanel(); + } + + private void HideDedicatedIPPanel() + { + switchToDedicatedIP.Visible = false; + sharedIP.Visible = true; + } } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.designer.cs index 822f1c72..299d66d1 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.designer.cs @@ -192,6 +192,51 @@ namespace WebsitePanel.Portal { /// protected global::System.Web.UI.WebControls.HyperLink lnkSiteName; + /// + /// sharedIP control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel sharedIP; + + /// + /// locSharedIPAddress control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Localize locSharedIPAddress; + + /// + /// cmdSwitchToDedicatedIP control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.LinkButton cmdSwitchToDedicatedIP; + + /// + /// dedicatedIP control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel dedicatedIP; + + /// + /// locDedicatedIPAddress control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Localize locDedicatedIPAddress; + /// /// litIPAddress control. /// @@ -201,6 +246,60 @@ namespace WebsitePanel.Portal { /// protected global::System.Web.UI.WebControls.Literal litIPAddress; + /// + /// cmdSwitchToSharedIP control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.LinkButton cmdSwitchToSharedIP; + + /// + /// switchToDedicatedIP control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel switchToDedicatedIP; + + /// + /// locSelectIPAddress control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Localize locSelectIPAddress; + + /// + /// ddlIpAddresses control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.DropDownList ddlIpAddresses; + + /// + /// cmdApplyDedicatedIP control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.LinkButton cmdApplyDedicatedIP; + + /// + /// cmdCancelDedicatedIP control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.LinkButton cmdCancelDedicatedIP; + /// /// btnAddPointer control. /// From 731b7f0c24574c2fb07c802d382a687d1c70d907 Mon Sep 17 00:00:00 2001 From: robvde Date: Wed, 12 Sep 2012 09:39:45 +0400 Subject: [PATCH 03/55] Revised and simplied approach on DomainPointer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change addresses a couple of situations: a) where sites had to be created with a freely chosen hostnames, which was not possible b) we needed a single repository with that would accommodated websites but also sharepoint and tenant specific OWA sites, which was not possible c) The concept of Domain Pointers was ok but appeared hard to understand for the end users and added some complexity/additional steps when adding a new site The domain pointer approach is updated : A) decoupled the “sites” from domain B) Created a new “Domains” Domain Pointer record for each new site created, to keep on track of the various sites created through the platform C) Upon removal of the site the Pointer gets removed as well D) For websites a freely chosen hostname can be taken, similar to sharepoint (which is or generated or chosen by the tenant) E) Removed the pointer displaying/listing from the UI, and show only the top-level and subdomains. This changeset contains fixed on the verification if a website or hostheade (domain pointer) already exists Fix on if no server component dns record (globaldnsrecord) is defined. In order to use user selectable hostnames icw dns provisioning use the variable [host_name] as hostname in the dns definitions. The variable will be replaced --- .../Code/WebServers/WebServerController.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index 5ea67ab0..ab5709ef 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -180,13 +180,12 @@ namespace WebsitePanel.EnterpriseServer DomainInfo domain = ServerController.GetDomain(domainId); string domainName = domain.DomainName; + string siteName = string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName; + // check if the web site already exists - if (PackageController.GetPackageItemByName(packageId, domainName, typeof(WebSite)) != null) + if (PackageController.GetPackageItemByName(packageId, siteName, typeof(WebSite)) != null) return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; - - string siteName = string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName; ; - // place log record TaskManager.StartTask("WEB_SITE", "ADD", siteName); @@ -642,13 +641,10 @@ namespace WebsitePanel.EnterpriseServer } } - /* if(bindings.Count == bindingsCount) { - bindings.Add(new ServerBinding(ipAddr, "80", domainName)); - bindings.Add(new ServerBinding(ipAddr, "80", "www." + domainName)); + bindings.Add(new ServerBinding(ipAddr, "80", string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName)); } - */ } private static string GetWebSiteUsername(UserSettings webPolicy, string domainName) @@ -755,6 +751,10 @@ namespace WebsitePanel.EnterpriseServer if (domain == null) return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND; + // check if the web site already exists + if (DataProvider.CheckDomain(domain.PackageId, string.IsNullOrEmpty(hostName) ? domain.DomainName : hostName + "." + domain.DomainName, true) != 0) + return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; + // get zone records for the service List dnsRecords = ServerController.GetDnsRecordsByService(siteItem.ServiceId); @@ -822,7 +822,7 @@ namespace WebsitePanel.EnterpriseServer foreach (ServerBinding b in bindings) { string header = string.Format("{0} {1} {2}", b.Host, b.IP, b.Port); - TaskManager.WriteParameter("Add Binding", b.Host); + TaskManager.WriteParameter("Add Binding", header); } // update bindings From b95cdf59b37087cc8b6607578b4629177e86d699 Mon Sep 17 00:00:00 2001 From: rdolezel Date: Wed, 12 Sep 2012 15:10:12 +0200 Subject: [PATCH 04/55] Forgotten localization --- .../App_LocalResources/ExchangeDomainNames.ascx.resx | 9 +++++++++ .../WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeDomainNames.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeDomainNames.ascx.resx index d8f453a2..77fff6cd 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeDomainNames.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeDomainNames.ascx.resx @@ -155,4 +155,13 @@ Domain Names + + Domain Type + + + Change Type + + + Change + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx index 1ab3e776..c060f31b 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeDomainNames.ascx @@ -51,7 +51,7 @@
- +
From 6bc6e151d95dda2d9e59c8a12b513751dde79bbb Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 12 Sep 2012 12:38:07 -0400 Subject: [PATCH 05/55] Added tag build-2.0.0.21 for changeset bb18bc39894d From 1ee91cabb572b79bcd108a2718f5d75dc08cae7d Mon Sep 17 00:00:00 2001 From: robvde Date: Wed, 12 Sep 2012 20:39:39 +0400 Subject: [PATCH 06/55] Fixed: Hide from Addressbook for distributionlists didnt work. When hiding distributionlist the ShowInAddressBook attribute gets cleared --- .../Exchange2007.cs | 72 ++++++++++++++----- 1 file changed, 55 insertions(+), 17 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs index e48e2dca..ba51c9ce 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs @@ -3353,7 +3353,7 @@ namespace WebsitePanel.Providers.HostedSolution //fix showInAddressBook Attribute if (addressLists.Length > 0) - FixShowInAddressBook(runSpace, email, addressLists); + FixShowInAddressBook(runSpace, email, addressLists, false); } catch (Exception ex) @@ -3370,7 +3370,7 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("CreateDistributionListInternal"); } - private void FixShowInAddressBook(Runspace runSpace, string accountName, string[] addressLists) + private void FixShowInAddressBook(Runspace runSpace, string accountName, string[] addressLists, bool HideFromAddressList) { Command cmd = new Command("Get-DistributionGroup"); cmd.Parameters.Add("Identity", accountName); @@ -3380,9 +3380,12 @@ namespace WebsitePanel.Providers.HostedSolution DirectoryEntry dlDEEntry = GetADObject(AddADPrefix(id)); dlDEEntry.Properties["showInAddressBook"].Clear(); - foreach (string addressList in addressLists) + if (!HideFromAddressList) { - dlDEEntry.Properties["showInAddressBook"].Add(addressList); + foreach (string addressList in addressLists) + { + dlDEEntry.Properties["showInAddressBook"].Add(addressList); + } } dlDEEntry.CommitChanges(); } @@ -3542,7 +3545,7 @@ namespace WebsitePanel.Providers.HostedSolution } if (addressLists.Length > 0) - FixShowInAddressBook(runSpace, accountName, addressLists); + FixShowInAddressBook(runSpace, accountName, addressLists, hideFromAddressBook); } finally @@ -3612,7 +3615,14 @@ namespace WebsitePanel.Providers.HostedSolution } if (addressLists.Length > 0) - FixShowInAddressBook(runSpace, accountName, addressLists); + { + cmd = new Command("Get-DistributionGroup"); + cmd.Parameters.Add("Identity", accountName); + Collection result = ExecuteShellCommand(runSpace, cmd); + PSObject distributionGroup = result[0]; + + FixShowInAddressBook(runSpace, accountName, addressLists, (bool)GetPSObjectProperty(distributionGroup, "HiddenFromAddressListsEnabled")); + } } finally @@ -3648,7 +3658,14 @@ namespace WebsitePanel.Providers.HostedSolution } if (addressLists.Length > 0) - FixShowInAddressBook(runSpace, accountName, addressLists); + { + cmd = new Command("Get-DistributionGroup"); + cmd.Parameters.Add("Identity", accountName); + Collection result = ExecuteShellCommand(runSpace, cmd); + PSObject distributionGroup = result[0]; + + FixShowInAddressBook(runSpace, accountName, addressLists, (bool)GetPSObjectProperty(distributionGroup, "HiddenFromAddressListsEnabled")); + } } finally @@ -3720,7 +3737,14 @@ namespace WebsitePanel.Providers.HostedSolution ExecuteShellCommand(runSpace, cmd); if (addressLists.Length > 0) - FixShowInAddressBook(runSpace, accountName, addressLists); + { + cmd = new Command("Get-DistributionGroup"); + cmd.Parameters.Add("Identity", accountName); + Collection result = ExecuteShellCommand(runSpace, cmd); + PSObject distributionGroup = result[0]; + + FixShowInAddressBook(runSpace, accountName, addressLists, (bool)GetPSObjectProperty(distributionGroup, "HiddenFromAddressListsEnabled")); + } } finally @@ -3856,7 +3880,14 @@ namespace WebsitePanel.Providers.HostedSolution ExecuteShellCommand(runSpace, cmd); if (addressLists.Length > 0) - FixShowInAddressBook(runSpace, accountName, addressLists); + { + cmd = new Command("Get-DistributionGroup"); + cmd.Parameters.Add("Identity", accountName); + Collection r = ExecuteShellCommand(runSpace, cmd); + PSObject distributionGroup = r[0]; + + FixShowInAddressBook(runSpace, accountName, addressLists, (bool)GetPSObjectProperty(distributionGroup, "HiddenFromAddressListsEnabled")); + } } finally { @@ -3955,17 +3986,24 @@ namespace WebsitePanel.Providers.HostedSolution if (sendOnBehalfAccounts == null) throw new ArgumentNullException("sendOnBehalfAccounts"); - Runspace runspace = null; + Runspace runSpace = null; try { - runspace = OpenRunspace(); - string cn = GetDistributionListCommonName(runspace, accountName); - ExchangeDistributionList distributionList = GetDistributionListPermissionsInternal(organizationId, accountName, runspace); - SetSendAsPermissions(runspace, distributionList.SendAsAccounts, cn, sendAsAccounts); - SetDistributionListSendOnBehalfAccounts(runspace, accountName, sendOnBehalfAccounts); + runSpace = OpenRunspace(); + string cn = GetDistributionListCommonName(runSpace, accountName); + ExchangeDistributionList distributionList = GetDistributionListPermissionsInternal(organizationId, accountName, runSpace); + SetSendAsPermissions(runSpace, distributionList.SendAsAccounts, cn, sendAsAccounts); + SetDistributionListSendOnBehalfAccounts(runSpace, accountName, sendOnBehalfAccounts); if (addressLists.Length > 0) - FixShowInAddressBook(runspace, accountName, addressLists); + { + Command cmd = new Command("Get-DistributionGroup"); + cmd.Parameters.Add("Identity", accountName); + Collection result = ExecuteShellCommand(runSpace, cmd); + PSObject distributionGroup = result[0]; + + FixShowInAddressBook(runSpace, accountName, addressLists, (bool)GetPSObjectProperty(distributionGroup, "HiddenFromAddressListsEnabled")); + } } catch (Exception ex) @@ -3975,7 +4013,7 @@ namespace WebsitePanel.Providers.HostedSolution } finally { - CloseRunspace(runspace); + CloseRunspace(runSpace); } ExchangeLog.LogEnd("SetDistributionListPermissionsInternal"); From b54e8105087b9ce3e19dd926f8cf86f7c7a1dd20 Mon Sep 17 00:00:00 2001 From: robvde Date: Thu, 13 Sep 2012 00:13:44 +0400 Subject: [PATCH 07/55] transport agent fixed: project set to .NET 3.5 logging enhanced and address processing modified. --- .../Tools/WSPTransportAgent/App.config | 4 ++-- .../WSPTransportAgent/WSPRoutingAgent.cs | 20 +++++++++++-------- .../WSPTransportAgent.csproj | 3 ++- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/WebsitePanel/Sources/Tools/WSPTransportAgent/App.config b/WebsitePanel/Sources/Tools/WSPTransportAgent/App.config index f3d7ccd1..02e0c01e 100644 --- a/WebsitePanel/Sources/Tools/WSPTransportAgent/App.config +++ b/WebsitePanel/Sources/Tools/WSPTransportAgent/App.config @@ -1,4 +1,4 @@ - + @@ -7,4 +7,4 @@ - \ No newline at end of file + diff --git a/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPRoutingAgent.cs b/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPRoutingAgent.cs index 16656900..91d6f962 100644 --- a/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPRoutingAgent.cs +++ b/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPRoutingAgent.cs @@ -115,8 +115,8 @@ namespace WSPTransportAgent foreach (AcceptedDomain domain in server.AcceptedDomains) { - htAcceptedDomains.Add(domain.ToString(), "1"); - WriteLine("\tAccepted Domain: " + domain.ToString()); + htAcceptedDomains.Add(domain.ToString().ToLower(), "1"); + WriteLine("\tAccepted Domain: " + domain.ToString().ToLower()); } } catch (Exception ex) @@ -154,11 +154,14 @@ namespace WSPTransportAgent { foreach (EnvelopeRecipient recp in e.MailItem.Recipients) { + WriteLine("\t\tFrom: " + e.MailItem.Message.From.SmtpAddress.ToString().ToLower()); WriteLine("\t\tTo: " + recp.Address.ToString().ToLower()); - if (IsMessageBetweenTenants(e.MailItem.FromAddress.DomainPart.ToLower(), recp.Address.DomainPart.ToLower())) + string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@'); + string[] tmpTo = recp.Address.ToString().Split('@'); + if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower())) { - WriteLine("\t\tMessage routed to domain: " + recp.Address.DomainPart.ToLower() + routingDomain); - RoutingDomain myRoutingDomain = new RoutingDomain(recp.Address.DomainPart.ToLower() + routingDomain); + WriteLine("\t\tMessage routed to domain: " + tmpTo[1].ToLower() + routingDomain); + RoutingDomain myRoutingDomain = new RoutingDomain(tmpTo[1].ToLower() + routingDomain); RoutingOverride myRoutingOverride = new RoutingOverride(myRoutingDomain, DeliveryQueueDomain.UseOverrideDomain); source.SetRoutingOverride(recp, myRoutingOverride); touched = true; @@ -173,13 +176,14 @@ namespace WSPTransportAgent WriteLine("\t\tOOF From: " + e.MailItem.Message.From.SmtpAddress); if (e.MailItem.Message.From.SmtpAddress.Contains("@")) { - string[] tmp = e.MailItem.Message.From.SmtpAddress.Split('@'); + string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@'); foreach (EnvelopeRecipient recp in e.MailItem.Recipients) { WriteLine("\t\tTo: " + recp.Address.ToString().ToLower()); - if (IsMessageBetweenTenants(tmp[1].ToLower(), recp.Address.DomainPart.ToLower())) + string[] tmpTo = recp.Address.ToString().Split('@'); + if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower())) { - WriteLine("\t\tRemove: " + recp.Address.DomainPart.ToLower()); + WriteLine("\t\tRemove: " + tmpTo[1].ToLower()); e.MailItem.Recipients.Remove(recp); } } diff --git a/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.csproj b/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.csproj index 5bc9a7ea..05307754 100644 --- a/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.csproj +++ b/WebsitePanel/Sources/Tools/WSPTransportAgent/WSPTransportAgent.csproj @@ -10,8 +10,9 @@ Properties WSPTransportAgent WSPTransportAgent - v4.0 + v3.5 512 + true From 4f1b216e72a461ba9f62c29d26823cbc2202bdf4 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 12 Sep 2012 20:30:19 -0400 Subject: [PATCH 08/55] Added tag build-2.0.0.22 for changeset 6b3d9aecfae2 From 9c9337ab9450cbdd59ab6198c1060067c6511af9 Mon Sep 17 00:00:00 2001 From: robvde Date: Thu, 13 Sep 2012 12:43:42 +0400 Subject: [PATCH 09/55] DOmain Pointers adjusted: When creating a new website the GlobalDNSRecord configuration defines the hostheaders/websitepointer to be created Various forms updated where the hostname field is set to www GlobalDNSRecord allows empty recordData field To create related dns records when creating a hostheader/website pointer with the specification of a hostname a 'A' or 'CNAME' globalDNSRecord definition of '[host_name]' is required to create the the dns record. --- .../Code/Common/Utils.cs | 1 - .../Code/DnsServers/DnsServerController.cs | 5 +- .../Code/Servers/ServerController.cs | 3 +- .../Code/WebServers/WebServerController.cs | 253 +++++++++++------- .../WebsitePanel/GlobalDnsRecordsControl.ascx | 4 +- .../GlobalDnsRecordsControl.ascx.cs | 12 +- .../GlobalDnsRecordsControl.ascx.designer.cs | 65 +++-- .../WebsitePanel/UserCreateSpace.ascx | 11 - .../WebsitePanel/UserCreateSpace.ascx.cs | 4 +- .../UserCreateSpace.ascx.designer.cs | 36 --- .../WebsitePanel/WebSitesAddPointer.ascx | 2 +- .../WebSitesAddPointer.ascx.designer.cs | 28 -- .../WebsitePanel/WebSitesAddSite.ascx | 2 +- .../WebSitesAddSite.ascx.designer.cs | 28 -- 14 files changed, 217 insertions(+), 237 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Utils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Utils.cs index c20f5be6..93f140aa 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Utils.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Utils.cs @@ -102,7 +102,6 @@ namespace WebsitePanel.EnterpriseServer if (allowEmptyValue) { if (String.IsNullOrEmpty(str)) return str; - if (String.IsNullOrEmpty(value)) return string.Empty; } else { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs index 1c90e844..0592a899 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs @@ -310,7 +310,10 @@ namespace WebsitePanel.EnterpriseServer rr.MxPriority = record.MxPriority; if (!String.IsNullOrEmpty(rr.RecordData)) - zoneRecords.Add(rr); + { + if (rr.RecordName != "[host_name]") + zoneRecords.Add(rr); + } } return zoneRecords; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs index bf469d50..9c1ff2a4 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs @@ -2005,7 +2005,8 @@ namespace WebsitePanel.EnterpriseServer } // delete zone if required - DnsServerController.DeleteZone(domain.ZoneItemId); + if (!domain.IsDomainPointer) + DnsServerController.DeleteZone(domain.ZoneItemId); // delete domain DataProvider.DeleteDomain(SecurityContext.User.UserId, domainId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index ab5709ef..7d7cd418 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -240,13 +240,12 @@ namespace WebsitePanel.EnterpriseServer ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; // load domain instant alias - /* +/* string instantAlias = ServerController.GetDomainAlias(packageId, domainName); DomainInfo instantDomain = ServerController.GetDomain(instantAlias); if (instantDomain == null || instantDomain.WebSiteId > 0) instantAlias = ""; - */ - +*/ // load web DNS records List dnsRecords = ServerController.GetDnsRecordsByService(serviceId); @@ -257,17 +256,18 @@ namespace WebsitePanel.EnterpriseServer { // SHARED IP // fill main domain bindings - /* - FillWebServerBindings(bindings, dnsRecords, ipAddr, domain.DomainName); + FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, false); // fill alias bindings if required + /* if (addInstantAlias && !String.IsNullOrEmpty(instantAlias)) { // fill bindings from DNS "A" records - FillWebServerBindings(bindings, dnsRecords, ipAddr, instantAlias); + FillWebServerBindings(bindings, dnsRecords, ipAddr, "", instantAlias); } */ - bindings.Add(new ServerBinding(ipAddr, "80", siteName)); + + //bindings.Add(new ServerBinding(ipAddr, "80", siteName)); } else { @@ -396,9 +396,9 @@ namespace WebsitePanel.EnterpriseServer // add instant pointer /* if (addInstantAlias && !String.IsNullOrEmpty(instantAlias)) - AddWebSitePointer(siteItemId, instantDomain.DomainId, false); - */ - + AddWebSitePointer(siteItemId, "", instantDomain.DomainId, false); + */ + // add parking page // load package if (webPolicy["AddParkingPage"] != null) @@ -573,12 +573,12 @@ namespace WebsitePanel.EnterpriseServer // remove all web site pointers List pointers = GetWebSitePointers(siteItemId); foreach (DomainInfo pointer in pointers) - DeleteWebSitePointer(siteItemId, pointer.DomainId, false); + DeleteWebSitePointer(siteItemId, pointer.DomainId, false, true); // remove web site main pointer DomainInfo domain = ServerController.GetDomain(siteItem.Name); if(domain != null) - DeleteWebSitePointer(siteItemId, domain.DomainId, false); + DeleteWebSitePointer(siteItemId, domain.DomainId, false, true); // delete web site WebServer web = new WebServer(); @@ -611,7 +611,7 @@ namespace WebsitePanel.EnterpriseServer } private static void FillWebServerBindings(List bindings, List dnsRecords, - string ipAddr, string hostName, string domainName) + string ipAddr, string hostName, string domainName, bool ignoreGlobalDNSRecords) // TODO test if IPv6 works { int bindingsCount = bindings.Count; @@ -628,25 +628,52 @@ namespace WebsitePanel.EnterpriseServer */ string tmpName = string.Empty; - if (!String.IsNullOrEmpty(hostName)) - tmpName = Utils.ReplaceStringVariable(dnsRecord.RecordName, "host_name", hostName); - string recordData = string.Empty; - if (tmpName.Contains(".")) - recordData = hostName; - else - recordData = tmpName + ((tmpName != "") ? "." : "") + domainName; + tmpName = Utils.ReplaceStringVariable(dnsRecord.RecordName, "host_name", hostName); - bindings.Add(new ServerBinding(ipAddr, "80", recordData)); + if (!(tmpName== "[host_name]")) + { + string recordData = string.Empty; + if (tmpName.Contains(".")) + recordData = hostName; + else + recordData = tmpName + ((tmpName != "") ? "." : "") + domainName; + + + if (ignoreGlobalDNSRecords) + { + if (dnsRecord.RecordName == "[host_name]") + { + AddBinding(bindings, new ServerBinding(ipAddr, "80", recordData)); + break; + } + } + else + { + AddBinding(bindings, new ServerBinding(ipAddr, "80", recordData)); + } + } } } - - if(bindings.Count == bindingsCount) + + if ((bindings.Count == bindingsCount) | (bindings.Count == 0)) { - bindings.Add(new ServerBinding(ipAddr, "80", string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName)); + AddBinding(bindings, new ServerBinding(ipAddr, "80", string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName)); } } + private static void AddBinding(List bindings, ServerBinding binding) + { + foreach (ServerBinding b in bindings) + { + if (string.Compare(b.Host, binding.Host, true) == 0) + return; + } + + bindings.Add(binding); + } + + private static string GetWebSiteUsername(UserSettings webPolicy, string domainName) { UsernamePolicy policy = new UsernamePolicy(webPolicy["AnonymousAccountPolicy"]); @@ -732,10 +759,15 @@ namespace WebsitePanel.EnterpriseServer public static int AddWebSitePointer(int siteItemId, string hostName, int domainId) { - return AddWebSitePointer(siteItemId, hostName, domainId, true); + return AddWebSitePointer(siteItemId, hostName, domainId, true, true); } internal static int AddWebSitePointer(int siteItemId, string hostName, int domainId, bool updateWebSite) + { + return AddWebSitePointer(siteItemId, hostName, domainId, updateWebSite, false); + } + + internal static int AddWebSitePointer(int siteItemId, string hostName, int domainId, bool updateWebSite, bool ignoreGlobalDNSRecords) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); @@ -772,14 +804,39 @@ namespace WebsitePanel.EnterpriseServer { // load appropriate zone DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); + if (zone != null) { // change DNS zone + List tmpDnsRecords = new List(); + string serviceIp = (ip != null) ? ip.ExternalIP : null; + if (ignoreGlobalDNSRecords) + { + foreach (GlobalDnsRecord r in dnsRecords) + { + if (r.RecordName == "[host_name]") + tmpDnsRecords.Add(r); + } + } + else + tmpDnsRecords = dnsRecords; + + List resourceRecords = DnsServerController.BuildDnsResourceRecords( - dnsRecords, hostName, domain.DomainName, serviceIp); + tmpDnsRecords, hostName, domain.DomainName, serviceIp); + + foreach (DnsRecord r in resourceRecords) + { + if (r.RecordName != "*") + { + // check if the web site already exists + if (DataProvider.CheckDomain(domain.PackageId, string.IsNullOrEmpty(r.RecordName) ? domain.DomainName : r.RecordName + "." + domain.DomainName, true) != 0) + return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; + } + } try { @@ -796,56 +853,57 @@ namespace WebsitePanel.EnterpriseServer } // update host headers - if (updateWebSite) + List bindings = new List(); + + // get existing web site bindings + WebServer web = new WebServer(); + ServiceProviderProxy.Init(web, siteItem.ServiceId); + + bindings.AddRange(web.GetSiteBindings(siteItem.SiteId)); + + // check if web site has dedicated IP assigned + bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; }); + + // update binding only for "shared" ip addresses + if (!dedicatedIp) { - // get existing web site bindings - WebServer web = new WebServer(); - ServiceProviderProxy.Init(web, siteItem.ServiceId); + // add new host headers + string ipAddr = "*"; + if (ip != null) + ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; - List bindings = new List(); - bindings.AddRange(web.GetSiteBindings(siteItem.SiteId)); + // fill bindings + FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords); - // check if web site has dedicated IP assigned - bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; }); - - // update binding only for "shared" ip addresses - if (!dedicatedIp) + foreach (ServerBinding b in bindings) { - // add new host headers - string ipAddr = "*"; - if (ip != null) - ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; - - // fill bindings - FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName); - - foreach (ServerBinding b in bindings) - { - string header = string.Format("{0} {1} {2}", b.Host, b.IP, b.Port); - TaskManager.WriteParameter("Add Binding", header); - } - - // update bindings - web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray()); + string header = string.Format("{0} {1} {2}", b.Host, b.IP, b.Port); + TaskManager.WriteParameter("Add Binding", header); } + + // update bindings + if (updateWebSite) + web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray()); } + // update domain domain.WebSiteId = siteItemId; //ServerController.UpdateDomain(domain); - if (!String.IsNullOrEmpty(hostName)) - domain.DomainName = hostName + "." + domain.DomainName; - else - domain.DomainName = domain.DomainName; - domain.IsDomainPointer = true; - int domainID = ServerController.AddDomain(domain); - DomainInfo domainTmp = ServerController.GetDomain(domainID); - if (domainTmp != null) + foreach (ServerBinding b in bindings) { - domainTmp.WebSiteId = siteItemId; - domainTmp.ZoneItemId = domain.ZoneItemId; - ServerController.UpdateDomain(domainTmp); + domain.DomainName = b.Host; + domain.IsDomainPointer = true; + int domainID = ServerController.AddDomain(domain); + + DomainInfo domainTmp = ServerController.GetDomain(domainID); + if (domainTmp != null) + { + domainTmp.WebSiteId = siteItemId; + domainTmp.ZoneItemId = domain.ZoneItemId; + ServerController.UpdateDomain(domainTmp); + } } @@ -863,10 +921,10 @@ namespace WebsitePanel.EnterpriseServer public static int DeleteWebSitePointer(int siteItemId, int domainId) { - return DeleteWebSitePointer(siteItemId, domainId, true); + return DeleteWebSitePointer(siteItemId, domainId, true, true); } - public static int DeleteWebSitePointer(int siteItemId, int domainId, bool updateWebSite) + public static int DeleteWebSitePointer(int siteItemId, int domainId, bool updateWebSite, bool ignoreGlobalDNSRecords) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); @@ -895,16 +953,29 @@ namespace WebsitePanel.EnterpriseServer TaskManager.StartTask("WEB_SITE", "DELETE_POINTER", siteItem.Name); TaskManager.ItemId = siteItemId; TaskManager.WriteParameter("Domain pointer", domain.DomainName); + TaskManager.WriteParameter("updateWebSite", updateWebSite.ToString()); try { if (zone != null) { // change DNS zone + List tmpDnsRecords = new List(); + string serviceIp = (ip != null) ? ip.ExternalIP : null; + if (ignoreGlobalDNSRecords) + { + foreach (GlobalDnsRecord r in dnsRecords) + { + if (r.RecordName == "[host_name]") + tmpDnsRecords.Add(r); + } + } + else tmpDnsRecords = dnsRecords; + List resourceRecords = DnsServerController.BuildDnsResourceRecords( - dnsRecords, domain.DomainName, "", serviceIp); + tmpDnsRecords, domain.DomainName, "", serviceIp); try { @@ -918,36 +989,34 @@ namespace WebsitePanel.EnterpriseServer } } - if (updateWebSite) + // get existing web site bindings + WebServer web = new WebServer(); + ServiceProviderProxy.Init(web, siteItem.ServiceId); + + List bindings = new List(); + bindings.AddRange(web.GetSiteBindings(siteItem.SiteId)); + + // check if web site has dedicated IP assigned + bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; }); + + // update binding only for "shared" ip addresses + if (!dedicatedIp) { - // get existing web site bindings - WebServer web = new WebServer(); - ServiceProviderProxy.Init(web, siteItem.ServiceId); + // remove host headers + List domainBindings = new List(); + FillWebServerBindings(domainBindings, dnsRecords, "", domain.DomainName, "", ignoreGlobalDNSRecords); - List bindings = new List(); - bindings.AddRange(web.GetSiteBindings(siteItem.SiteId)); + // fill to remove list + List headersToRemove = new List(); + foreach (ServerBinding domainBinding in domainBindings) + headersToRemove.Add(domainBinding.Host); - // check if web site has dedicated IP assigned - bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; }); + // remove bndings + bindings.RemoveAll(b => { return headersToRemove.Contains(b.Host) && b.Port == "80"; } ); - // update binding only for "shared" ip addresses - if (!dedicatedIp) - { - // remove host headers - List domainBindings = new List(); - FillWebServerBindings(domainBindings, dnsRecords, "", domain.DomainName, ""); - - // fill to remove list - List headersToRemove = new List(); - foreach (ServerBinding domainBinding in domainBindings) - headersToRemove.Add(domainBinding.Host); - - // remove bndings - bindings.RemoveAll(b => { return headersToRemove.Contains(b.Host) && b.Port == "80"; } ); - - // update bindings + // update bindings + if (updateWebSite) web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray()); - } } // update domain diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx index 7ffe4a46..c66291a3 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx @@ -54,10 +54,12 @@
+ + OnServerValidate="Validate" Text="Please enter a valid IP" meta:resourcekey="IPValidator" ValidateEmptyText="True" />
- - - - -
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs index 683cf57a..12e24ee2 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs @@ -124,8 +124,6 @@ namespace WebsitePanel.Portal string ftpAccount = (rbFtpAccountName.SelectedIndex == 0) ? null : ftpAccountName.Text; string domainName = txtDomainName.Text.Trim(); - - string hostName = txtHostName.Text.Trim(); PackageResult result = null; try @@ -136,7 +134,7 @@ namespace WebsitePanel.Portal Utils.ParseInt(ddlStatus.SelectedValue, 0), chkPackageLetter.Checked, chkCreateResources.Checked, domainName, true, chkCreateWebSite.Checked, - chkCreateFtpAccount.Checked, ftpAccount, chkCreateMailAccount.Checked, hostName); + chkCreateFtpAccount.Checked, ftpAccount, chkCreateMailAccount.Checked, ""); if (result.Result < 0) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.designer.cs index 33f60022..e41d8992 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.designer.cs @@ -210,42 +210,6 @@ namespace WebsitePanel.Portal { /// protected global::System.Web.UI.WebControls.CheckBox chkCreateWebSite; - /// - /// lblHostName control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Label lblHostName; - - /// - /// txtHostName control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TextBox txtHostName; - - /// - /// valRequireHostName control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireHostName; - - /// - /// valRequireCorrectHostName control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.RegularExpressionValidator valRequireCorrectHostName; - /// /// fsFtp control. /// diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddPointer.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddPointer.ascx index acd114ce..8c7ddf77 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddPointer.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddPointer.ascx @@ -7,7 +7,7 @@
- . + . // This code was generated by a tool. diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx index 8d67d616..c5eead2c 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx @@ -11,7 +11,7 @@ - . + . // This code was generated by a tool. From c0d7058f9ae9c3352d01b805b7eef2528e968f45 Mon Sep 17 00:00:00 2001 From: robvde Date: Thu, 13 Sep 2012 13:53:53 +0400 Subject: [PATCH 10/55] ExchangeAddDomains Hide combobox when no accepted domains are available to be added --- .../ExchangeServer/ExchangeAddDomainName.ascx.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeAddDomainName.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeAddDomainName.ascx.cs index a6d9c55c..8d12dfcf 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeAddDomainName.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeAddDomainName.ascx.cs @@ -58,7 +58,10 @@ namespace WebsitePanel.Portal.ExchangeServer } } - if (ddlDomains.Items.Count == 0) btnAdd.Enabled = false; + if (ddlDomains.Items.Count == 0) + { + ddlDomains.Visible= btnAdd.Enabled = false; + } From 465e7b9636e1820d254d068a33ee920c2b8520e5 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 13 Sep 2012 08:21:07 -0400 Subject: [PATCH 11/55] Added tag build-2.0.0.23 for changeset a35dc7956c0b From 444473a73d1f2f9dd581fb3a2f9d56e3de7f427a Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 13 Sep 2012 16:16:23 +0300 Subject: [PATCH 12/55] CheckLoadUserProfile --- .../ServersProxy.cs | 573 +++++++++++------- .../Code/Data/DataProvider.cs | 41 ++ .../OperatingSystemController.cs | 19 + .../esServers.asmx.cs | 14 + .../Web/IWebServer.cs | 6 +- .../WebsitePanel.Providers.Web.IIS70/IIs70.cs | 20 + .../WebsitePanel.Providers.Web.IIs60/IIs60.cs | 19 +- .../WebServerProxy.cs | 122 +++- .../WebsitePanel.Server/WebServer.asmx.cs | 36 ++ .../ServersEditWebPlatformInstaller.ascx.cs | 24 + 10 files changed, 641 insertions(+), 233 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/ServersProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/ServersProxy.cs index 0641dfb4..b273f2b9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/ServersProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/ServersProxy.cs @@ -1,4 +1,3 @@ -// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, @@ -39,7 +38,8 @@ // // This source code was auto-generated by wsdl, Version=2.0.50727.3038. // -namespace WebsitePanel.EnterpriseServer { +namespace WebsitePanel.EnterpriseServer +{ using System.Xml.Serialization; using System.Web.Services; using System.ComponentModel; @@ -52,10 +52,11 @@ namespace WebsitePanel.EnterpriseServer { using WebsitePanel.Providers.Common; using WebsitePanel.Server; using WebsitePanel.Providers.DNS; - using WebsitePanel.Providers.ResultObjects; - + using WebsitePanel.Providers.ResultObjects; + + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Web.Services.WebServiceBindingAttribute(Name="esServersSoap", Namespace="http://smbsaas/websitepanel/enterpriseserver")] @@ -249,6 +250,10 @@ namespace WebsitePanel.EnterpriseServer { private System.Threading.SendOrPostCallback TerminateWindowsProcessOperationCompleted; + private System.Threading.SendOrPostCallback CheckLoadUserProfileOperationCompleted; + + private System.Threading.SendOrPostCallback EnableLoadUserProfileOperationCompleted; + private System.Threading.SendOrPostCallback InitWPIFeedsOperationCompleted; private System.Threading.SendOrPostCallback GetWPITabsOperationCompleted; @@ -572,6 +577,12 @@ namespace WebsitePanel.EnterpriseServer { /// public event TerminateWindowsProcessCompletedEventHandler TerminateWindowsProcessCompleted; + /// + public event CheckLoadUserProfileCompletedEventHandler CheckLoadUserProfileCompleted; + + /// + public event EnableLoadUserProfileCompletedEventHandler EnableLoadUserProfileCompleted; + /// public event InitWPIFeedsCompletedEventHandler InitWPIFeedsCompleted; @@ -4753,6 +4764,86 @@ namespace WebsitePanel.EnterpriseServer { } } + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/CheckLoadUserProfile", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public bool CheckLoadUserProfile(int serverId) { + object[] results = this.Invoke("CheckLoadUserProfile", new object[] { + serverId}); + return ((bool)(results[0])); + } + + /// + public System.IAsyncResult BeginCheckLoadUserProfile(int serverId, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CheckLoadUserProfile", new object[] { + serverId}, callback, asyncState); + } + + /// + public bool EndCheckLoadUserProfile(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((bool)(results[0])); + } + + /// + public void CheckLoadUserProfileAsync(int serverId) { + this.CheckLoadUserProfileAsync(serverId, null); + } + + /// + public void CheckLoadUserProfileAsync(int serverId, object userState) { + if ((this.CheckLoadUserProfileOperationCompleted == null)) { + this.CheckLoadUserProfileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckLoadUserProfileOperationCompleted); + } + this.InvokeAsync("CheckLoadUserProfile", new object[] { + serverId}, this.CheckLoadUserProfileOperationCompleted, userState); + } + + private void OnCheckLoadUserProfileOperationCompleted(object arg) { + if ((this.CheckLoadUserProfileCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CheckLoadUserProfileCompleted(this, new CheckLoadUserProfileCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/EnableLoadUserProfile", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void EnableLoadUserProfile(int serverId) { + this.Invoke("EnableLoadUserProfile", new object[] { + serverId}); + } + + /// + public System.IAsyncResult BeginEnableLoadUserProfile(int serverId, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("EnableLoadUserProfile", new object[] { + serverId}, callback, asyncState); + } + + /// + public void EndEnableLoadUserProfile(System.IAsyncResult asyncResult) { + this.EndInvoke(asyncResult); + } + + /// + public void EnableLoadUserProfileAsync(int serverId) { + this.EnableLoadUserProfileAsync(serverId, null); + } + + /// + public void EnableLoadUserProfileAsync(int serverId, object userState) { + if ((this.EnableLoadUserProfileOperationCompleted == null)) { + this.EnableLoadUserProfileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnEnableLoadUserProfileOperationCompleted); + } + this.InvokeAsync("EnableLoadUserProfile", new object[] { + serverId}, this.EnableLoadUserProfileOperationCompleted, userState); + } + + private void OnEnableLoadUserProfileOperationCompleted(object arg) { + if ((this.EnableLoadUserProfileCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.EnableLoadUserProfileCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/InitWPIFeeds", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] public void InitWPIFeeds(int serverId) { @@ -5531,11 +5622,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetAllServersCompletedEventHandler(object sender, GetAllServersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetAllServersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5557,11 +5648,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetRawAllServersCompletedEventHandler(object sender, GetRawAllServersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRawAllServersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5583,11 +5674,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetServersCompletedEventHandler(object sender, GetServersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetServersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5609,11 +5700,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetRawServersCompletedEventHandler(object sender, GetRawServersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRawServersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5635,11 +5726,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetServerShortDetailsCompletedEventHandler(object sender, GetServerShortDetailsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetServerShortDetailsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5661,11 +5752,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetServerByIdCompletedEventHandler(object sender, GetServerByIdCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetServerByIdCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5687,11 +5778,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetServerByNameCompletedEventHandler(object sender, GetServerByNameCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetServerByNameCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5713,11 +5804,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void CheckServerAvailableCompletedEventHandler(object sender, CheckServerAvailableCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class CheckServerAvailableCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5739,11 +5830,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AddServerCompletedEventHandler(object sender, AddServerCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AddServerCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5765,11 +5856,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void UpdateServerCompletedEventHandler(object sender, UpdateServerCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UpdateServerCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5791,11 +5882,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void UpdateServerConnectionPasswordCompletedEventHandler(object sender, UpdateServerConnectionPasswordCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UpdateServerConnectionPasswordCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5817,11 +5908,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void UpdateServerADPasswordCompletedEventHandler(object sender, UpdateServerADPasswordCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UpdateServerADPasswordCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5843,11 +5934,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteServerCompletedEventHandler(object sender, DeleteServerCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeleteServerCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5869,11 +5960,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetVirtualServersCompletedEventHandler(object sender, GetVirtualServersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetVirtualServersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5895,11 +5986,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetAvailableVirtualServicesCompletedEventHandler(object sender, GetAvailableVirtualServicesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetAvailableVirtualServicesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5921,11 +6012,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetVirtualServicesCompletedEventHandler(object sender, GetVirtualServicesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetVirtualServicesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5947,11 +6038,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AddVirtualServicesCompletedEventHandler(object sender, AddVirtualServicesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AddVirtualServicesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5973,11 +6064,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteVirtualServicesCompletedEventHandler(object sender, DeleteVirtualServicesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeleteVirtualServicesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -5999,11 +6090,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void UpdateVirtualGroupsCompletedEventHandler(object sender, UpdateVirtualGroupsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UpdateVirtualGroupsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6025,11 +6116,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetRawServicesByServerIdCompletedEventHandler(object sender, GetRawServicesByServerIdCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRawServicesByServerIdCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6051,11 +6142,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetServicesByServerIdCompletedEventHandler(object sender, GetServicesByServerIdCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetServicesByServerIdCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6077,11 +6168,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetServicesByServerIdGroupNameCompletedEventHandler(object sender, GetServicesByServerIdGroupNameCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetServicesByServerIdGroupNameCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6103,11 +6194,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetRawServicesByGroupIdCompletedEventHandler(object sender, GetRawServicesByGroupIdCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRawServicesByGroupIdCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6129,11 +6220,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetRawServicesByGroupNameCompletedEventHandler(object sender, GetRawServicesByGroupNameCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRawServicesByGroupNameCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6155,11 +6246,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetServiceInfoCompletedEventHandler(object sender, GetServiceInfoCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetServiceInfoCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6181,11 +6272,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AddServiceCompletedEventHandler(object sender, AddServiceCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AddServiceCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6207,11 +6298,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void UpdateServiceCompletedEventHandler(object sender, UpdateServiceCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UpdateServiceCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6233,11 +6324,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteServiceCompletedEventHandler(object sender, DeleteServiceCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeleteServiceCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6259,11 +6350,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetServiceSettingsCompletedEventHandler(object sender, GetServiceSettingsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetServiceSettingsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6285,11 +6376,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void UpdateServiceSettingsCompletedEventHandler(object sender, UpdateServiceSettingsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UpdateServiceSettingsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6311,11 +6402,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void InstallServiceCompletedEventHandler(object sender, InstallServiceCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class InstallServiceCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6337,11 +6428,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetProviderServiceQuotaCompletedEventHandler(object sender, GetProviderServiceQuotaCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetProviderServiceQuotaCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6363,11 +6454,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetInstalledProvidersCompletedEventHandler(object sender, GetInstalledProvidersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetInstalledProvidersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6389,11 +6480,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetResourceGroupsCompletedEventHandler(object sender, GetResourceGroupsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetResourceGroupsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6415,11 +6506,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetResourceGroupCompletedEventHandler(object sender, GetResourceGroupCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetResourceGroupCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6441,11 +6532,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetProviderCompletedEventHandler(object sender, GetProviderCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetProviderCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6467,11 +6558,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetProvidersCompletedEventHandler(object sender, GetProvidersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetProvidersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6493,11 +6584,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetProvidersByGroupIdCompletedEventHandler(object sender, GetProvidersByGroupIdCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetProvidersByGroupIdCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6519,11 +6610,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetPackageServiceProviderCompletedEventHandler(object sender, GetPackageServiceProviderCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetPackageServiceProviderCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6545,11 +6636,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void IsInstalledCompletedEventHandler(object sender, IsInstalledCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class IsInstalledCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6571,11 +6662,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetServerVersionCompletedEventHandler(object sender, GetServerVersionCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetServerVersionCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6597,11 +6688,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetIPAddressesCompletedEventHandler(object sender, GetIPAddressesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetIPAddressesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6623,11 +6714,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetIPAddressesPagedCompletedEventHandler(object sender, GetIPAddressesPagedCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetIPAddressesPagedCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6649,11 +6740,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetIPAddressCompletedEventHandler(object sender, GetIPAddressCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetIPAddressCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6675,11 +6766,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AddIPAddressCompletedEventHandler(object sender, AddIPAddressCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AddIPAddressCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6701,11 +6792,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AddIPAddressesRangeCompletedEventHandler(object sender, AddIPAddressesRangeCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AddIPAddressesRangeCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6727,11 +6818,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void UpdateIPAddressCompletedEventHandler(object sender, UpdateIPAddressCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UpdateIPAddressCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6753,11 +6844,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void UpdateIPAddressesCompletedEventHandler(object sender, UpdateIPAddressesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UpdateIPAddressesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6779,11 +6870,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteIPAddressCompletedEventHandler(object sender, DeleteIPAddressCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeleteIPAddressCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6805,11 +6896,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteIPAddressesCompletedEventHandler(object sender, DeleteIPAddressesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeleteIPAddressesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6831,11 +6922,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetUnallottedIPAddressesCompletedEventHandler(object sender, GetUnallottedIPAddressesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetUnallottedIPAddressesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6857,11 +6948,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetPackageIPAddressesCompletedEventHandler(object sender, GetPackageIPAddressesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetPackageIPAddressesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6883,11 +6974,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetPackageUnassignedIPAddressesCompletedEventHandler(object sender, GetPackageUnassignedIPAddressesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetPackageUnassignedIPAddressesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6909,11 +7000,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AllocatePackageIPAddressesCompletedEventHandler(object sender, AllocatePackageIPAddressesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AllocatePackageIPAddressesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6935,11 +7026,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AllocateMaximumPackageIPAddressesCompletedEventHandler(object sender, AllocateMaximumPackageIPAddressesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AllocateMaximumPackageIPAddressesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6961,11 +7052,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeallocatePackageIPAddressesCompletedEventHandler(object sender, DeallocatePackageIPAddressesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeallocatePackageIPAddressesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -6987,11 +7078,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetClustersCompletedEventHandler(object sender, GetClustersCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetClustersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7013,11 +7104,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AddClusterCompletedEventHandler(object sender, AddClusterCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AddClusterCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7039,11 +7130,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteClusterCompletedEventHandler(object sender, DeleteClusterCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeleteClusterCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7065,11 +7156,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetRawDnsRecordsByServiceCompletedEventHandler(object sender, GetRawDnsRecordsByServiceCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRawDnsRecordsByServiceCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7091,11 +7182,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetRawDnsRecordsByServerCompletedEventHandler(object sender, GetRawDnsRecordsByServerCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRawDnsRecordsByServerCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7117,11 +7208,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetRawDnsRecordsByPackageCompletedEventHandler(object sender, GetRawDnsRecordsByPackageCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRawDnsRecordsByPackageCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7143,11 +7234,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetRawDnsRecordsByGroupCompletedEventHandler(object sender, GetRawDnsRecordsByGroupCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRawDnsRecordsByGroupCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7169,11 +7260,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetDnsRecordsByServiceCompletedEventHandler(object sender, GetDnsRecordsByServiceCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetDnsRecordsByServiceCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7195,11 +7286,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetDnsRecordsByServerCompletedEventHandler(object sender, GetDnsRecordsByServerCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetDnsRecordsByServerCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7221,11 +7312,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetDnsRecordsByPackageCompletedEventHandler(object sender, GetDnsRecordsByPackageCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetDnsRecordsByPackageCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7247,11 +7338,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetDnsRecordsByGroupCompletedEventHandler(object sender, GetDnsRecordsByGroupCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetDnsRecordsByGroupCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7273,11 +7364,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetDnsRecordCompletedEventHandler(object sender, GetDnsRecordCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetDnsRecordCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7299,11 +7390,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AddDnsRecordCompletedEventHandler(object sender, AddDnsRecordCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AddDnsRecordCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7325,11 +7416,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void UpdateDnsRecordCompletedEventHandler(object sender, UpdateDnsRecordCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UpdateDnsRecordCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7351,11 +7442,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteDnsRecordCompletedEventHandler(object sender, DeleteDnsRecordCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeleteDnsRecordCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7377,11 +7468,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetDomainsCompletedEventHandler(object sender, GetDomainsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetDomainsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7403,11 +7494,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetMyDomainsCompletedEventHandler(object sender, GetMyDomainsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetMyDomainsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7429,11 +7520,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetResellerDomainsCompletedEventHandler(object sender, GetResellerDomainsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetResellerDomainsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7455,11 +7546,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetDomainsPagedCompletedEventHandler(object sender, GetDomainsPagedCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetDomainsPagedCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7481,11 +7572,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetDomainCompletedEventHandler(object sender, GetDomainCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetDomainCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7507,11 +7598,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AddDomainCompletedEventHandler(object sender, AddDomainCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AddDomainCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7533,11 +7624,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AddDomainWithProvisioningCompletedEventHandler(object sender, AddDomainWithProvisioningCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AddDomainWithProvisioningCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7559,11 +7650,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void UpdateDomainCompletedEventHandler(object sender, UpdateDomainCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UpdateDomainCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7585,11 +7676,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteDomainCompletedEventHandler(object sender, DeleteDomainCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeleteDomainCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7611,11 +7702,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DetachDomainCompletedEventHandler(object sender, DetachDomainCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DetachDomainCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7637,11 +7728,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void EnableDomainDnsCompletedEventHandler(object sender, EnableDomainDnsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class EnableDomainDnsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7663,11 +7754,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DisableDomainDnsCompletedEventHandler(object sender, DisableDomainDnsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DisableDomainDnsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7689,11 +7780,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void CreateDomainInstantAliasCompletedEventHandler(object sender, CreateDomainInstantAliasCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class CreateDomainInstantAliasCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7715,11 +7806,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteDomainInstantAliasCompletedEventHandler(object sender, DeleteDomainInstantAliasCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeleteDomainInstantAliasCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7741,11 +7832,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetDnsZoneRecordsCompletedEventHandler(object sender, GetDnsZoneRecordsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetDnsZoneRecordsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7767,11 +7858,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetRawDnsZoneRecordsCompletedEventHandler(object sender, GetRawDnsZoneRecordsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRawDnsZoneRecordsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7793,11 +7884,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void AddDnsZoneRecordCompletedEventHandler(object sender, AddDnsZoneRecordCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class AddDnsZoneRecordCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7819,11 +7910,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void UpdateDnsZoneRecordCompletedEventHandler(object sender, UpdateDnsZoneRecordCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UpdateDnsZoneRecordCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7845,11 +7936,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteDnsZoneRecordCompletedEventHandler(object sender, DeleteDnsZoneRecordCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class DeleteDnsZoneRecordCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7871,11 +7962,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetTerminalServicesSessionsCompletedEventHandler(object sender, GetTerminalServicesSessionsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetTerminalServicesSessionsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7897,11 +7988,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void CloseTerminalServicesSessionCompletedEventHandler(object sender, CloseTerminalServicesSessionCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class CloseTerminalServicesSessionCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7923,11 +8014,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetWindowsProcessesCompletedEventHandler(object sender, GetWindowsProcessesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetWindowsProcessesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7949,11 +8040,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void TerminateWindowsProcessCompletedEventHandler(object sender, TerminateWindowsProcessCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class TerminateWindowsProcessCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -7975,15 +8066,45 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + public delegate void CheckLoadUserProfileCompletedEventHandler(object sender, CheckLoadUserProfileCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CheckLoadUserProfileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CheckLoadUserProfileCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public bool Result { + get { + this.RaiseExceptionIfNecessary(); + return ((bool)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + public delegate void EnableLoadUserProfileCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void InitWPIFeedsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetWPITabsCompletedEventHandler(object sender, GetWPITabsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetWPITabsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8005,11 +8126,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetWPIKeywordsCompletedEventHandler(object sender, GetWPIKeywordsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetWPIKeywordsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8031,11 +8152,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetWPIProductsCompletedEventHandler(object sender, GetWPIProductsCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetWPIProductsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8057,11 +8178,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetWPIProductsFilteredCompletedEventHandler(object sender, GetWPIProductsFilteredCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetWPIProductsFilteredCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8083,11 +8204,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetWPIProductsWithDependenciesCompletedEventHandler(object sender, GetWPIProductsWithDependenciesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetWPIProductsWithDependenciesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8109,19 +8230,19 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void InstallWPIProductsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void CancelInstallWPIProductsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetWPIStatusCompletedEventHandler(object sender, GetWPIStatusCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetWPIStatusCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8143,11 +8264,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void WpiGetLogFileDirectoryCompletedEventHandler(object sender, WpiGetLogFileDirectoryCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class WpiGetLogFileDirectoryCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8169,11 +8290,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void WpiGetLogsInDirectoryCompletedEventHandler(object sender, WpiGetLogsInDirectoryCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class WpiGetLogsInDirectoryCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8195,11 +8316,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetWindowsServicesCompletedEventHandler(object sender, GetWindowsServicesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetWindowsServicesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8221,11 +8342,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void ChangeWindowsServiceStatusCompletedEventHandler(object sender, ChangeWindowsServiceStatusCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class ChangeWindowsServiceStatusCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8247,11 +8368,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetLogNamesCompletedEventHandler(object sender, GetLogNamesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetLogNamesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8273,11 +8394,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetLogEntriesCompletedEventHandler(object sender, GetLogEntriesCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetLogEntriesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8299,11 +8420,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetLogEntriesPagedCompletedEventHandler(object sender, GetLogEntriesPagedCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetLogEntriesPagedCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8325,11 +8446,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void ClearLogCompletedEventHandler(object sender, ClearLogCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class ClearLogCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { @@ -8351,11 +8472,11 @@ namespace WebsitePanel.EnterpriseServer { } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void RebootSystemCompletedEventHandler(object sender, RebootSystemCompletedEventArgs e); /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class RebootSystemCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs index 336f9a1c..b102fb37 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs @@ -33,6 +33,7 @@ using System.Data.SqlClient; using System.Text.RegularExpressions; using WebsitePanel.Providers.HostedSolution; using Microsoft.ApplicationBlocks.Data; +using System.Collections.Generic; namespace WebsitePanel.EnterpriseServer { @@ -3399,5 +3400,45 @@ namespace WebsitePanel.EnterpriseServer #endregion + public static int GetPackageIdByName(string Name) + { + // get Helicon Zoo provider + int packageId = -1; + List providers = ServerController.GetProviders(); + foreach (ProviderInfo providerInfo in providers) + { + if (string.Equals(Name, providerInfo.ProviderName, StringComparison.OrdinalIgnoreCase)) + { + packageId = providerInfo.ProviderId; + break; + } + } + + if (-1 == packageId) + { + throw new Exception("Provider not found"); + } + + return packageId; + } + + public static int GetServiceIdByProviderForServer(int providerId, int serverId) + { + IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text, + @"SELECT TOP 1 + ServiceID + FROM Services + WHERE ProviderID = @ProviderID AND ServerID = @ServerID", + new SqlParameter("@ProviderID", providerId), + new SqlParameter("@ServerID", serverId)); + + if (reader.Read()) + { + return (int)reader["ServiceID"]; + } + + return -1; + } + } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs index db431763..deed780f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs @@ -41,6 +41,7 @@ using WebsitePanel.Providers.OS; using OS = WebsitePanel.Providers.OS; using System.Collections; + namespace WebsitePanel.EnterpriseServer { public class OperatingSystemController : IImportController, IBackupController @@ -409,6 +410,23 @@ namespace WebsitePanel.EnterpriseServer #region Web Platform Installer + public static bool CheckLoadUserProfile(int serverId) + { + int packageId = DataProvider.GetPackageIdByName("IIS70"); + int serviceId = DataProvider.GetServiceIdByProviderForServer(packageId, serverId); + return WebServerController.GetWebServer(serviceId).CheckLoadUserProfile(); + + } + + public static void EnableLoadUserProfile(int serverId) + { + int packageId = DataProvider.GetPackageIdByName("IIS70"); + int serviceId = DataProvider.GetServiceIdByProviderForServer(packageId, serverId); + WebServerController.GetWebServer(serviceId).EnableLoadUserProfile(); + } + + + public static void InitWPIFeeds(int serverId, string feedUrls) { GetServerService(serverId).InitWPIFeeds(feedUrls); @@ -746,6 +764,7 @@ namespace WebsitePanel.EnterpriseServer return 0; } + #endregion } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esServers.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esServers.asmx.cs index 34ccb051..e6b8aedf 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esServers.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esServers.asmx.cs @@ -670,6 +670,20 @@ namespace WebsitePanel.EnterpriseServer #region Web Platform Installer + [WebMethod] + public bool CheckLoadUserProfile(int serverId) + { + return OperatingSystemController.CheckLoadUserProfile(serverId); + } + + [WebMethod] + public void EnableLoadUserProfile(int serverId) + { + OperatingSystemController.EnableLoadUserProfile(serverId); + } + + + [WebMethod] public void InitWPIFeeds(int serverId) { diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/IWebServer.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/IWebServer.cs index 500d303a..e32a8d27 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/IWebServer.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/IWebServer.cs @@ -119,6 +119,8 @@ namespace WebsitePanel.Providers.Web // web app gallery + bool CheckLoadUserProfile(); + void EnableLoadUserProfile(); void InitFeeds(int UserId, string[] feeds); void SetResourceLanguage(int UserId, string resourceLanguage); bool IsMsDeployInstalled(); @@ -153,5 +155,7 @@ namespace WebsitePanel.Providers.Web ResultObject DeleteCertificate(SSLCertificate certificate, WebSite website); SSLCertificate ImportCertificate(WebSite website); bool CheckCertificate(WebSite webSite); - } + + + } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs index 13c76f18..992a7215 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs @@ -4042,6 +4042,26 @@ namespace WebsitePanel.Providers.Web // moved down to IIs60 + override public bool CheckLoadUserProfile() + { + using (var srvman = new ServerManager()) + { + return srvman.ApplicationPools["WebsitePanel Server"].ProcessModel.LoadUserProfile; + } + + } + + override public void EnableLoadUserProfile() + { + using (var srvman = new ServerManager()) + { + srvman.ApplicationPools["WebsitePanel Server"].ProcessModel.LoadUserProfile = true; + // save changes + srvman.CommitChanges(); + } + } + + #endregion } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs index 461a5344..2cb7f8cf 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs @@ -3394,6 +3394,18 @@ namespace WebsitePanel.Providers.Web private const string WPI_INSTANCE_VIEWER = "viewer"; private const string WPI_INSTANCE_INSTALLER = "installer"; + virtual public bool CheckLoadUserProfile() + { + throw new NotImplementedException("LoadUserProfile option valid only on IIS7 or higer"); + } + + virtual public void EnableLoadUserProfile() + { + throw new NotImplementedException("LoadUserProfile option valid only on IIS7 or higer"); + } + + + public void InitFeeds(int UserId, string[] feeds) { //need to call InitFeeds() before any operation with WPIApplicationGallery() @@ -3667,5 +3679,10 @@ namespace WebsitePanel.Providers.Web throw new NotSupportedException(); } #endregion - } + + + + + + } } diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/WebServerProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/WebServerProxy.cs index 2b2f80a0..74aa52ff 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Client/WebServerProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/WebServerProxy.cs @@ -1,8 +1,3 @@ -// 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. @@ -50,6 +45,7 @@ namespace WebsitePanel.Providers.Web using WebsitePanel.Providers.ResultObjects; using WebsitePanel.Providers.WebAppGallery; using WebsitePanel.Providers.Common; + /// @@ -180,6 +176,10 @@ namespace WebsitePanel.Providers.Web private System.Threading.SendOrPostCallback DeleteHeliconApeGroupOperationCompleted; + private System.Threading.SendOrPostCallback CheckLoadUserProfileOperationCompleted; + + private System.Threading.SendOrPostCallback EnableLoadUserProfileOperationCompleted; + private System.Threading.SendOrPostCallback InitFeedsOperationCompleted; private System.Threading.SendOrPostCallback SetResourceLanguageOperationCompleted; @@ -416,6 +416,12 @@ namespace WebsitePanel.Providers.Web /// public event DeleteHeliconApeGroupCompletedEventHandler DeleteHeliconApeGroupCompleted; + /// + public event CheckLoadUserProfileCompletedEventHandler CheckLoadUserProfileCompleted; + + /// + public event EnableLoadUserProfileCompletedEventHandler EnableLoadUserProfileCompleted; + /// public event InitFeedsCompletedEventHandler InitFeedsCompleted; @@ -3005,6 +3011,82 @@ namespace WebsitePanel.Providers.Web } } + /// + [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CheckLoadUserProfile", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public bool CheckLoadUserProfile() { + object[] results = this.Invoke("CheckLoadUserProfile", new object[0]); + return ((bool)(results[0])); + } + + /// + public System.IAsyncResult BeginCheckLoadUserProfile(System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CheckLoadUserProfile", new object[0], callback, asyncState); + } + + /// + public bool EndCheckLoadUserProfile(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((bool)(results[0])); + } + + /// + public void CheckLoadUserProfileAsync() { + this.CheckLoadUserProfileAsync(null); + } + + /// + public void CheckLoadUserProfileAsync(object userState) { + if ((this.CheckLoadUserProfileOperationCompleted == null)) { + this.CheckLoadUserProfileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckLoadUserProfileOperationCompleted); + } + this.InvokeAsync("CheckLoadUserProfile", new object[0], this.CheckLoadUserProfileOperationCompleted, userState); + } + + private void OnCheckLoadUserProfileOperationCompleted(object arg) { + if ((this.CheckLoadUserProfileCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CheckLoadUserProfileCompleted(this, new CheckLoadUserProfileCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/EnableLoadUserProfile", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void EnableLoadUserProfile() { + this.Invoke("EnableLoadUserProfile", new object[0]); + } + + /// + public System.IAsyncResult BeginEnableLoadUserProfile(System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("EnableLoadUserProfile", new object[0], callback, asyncState); + } + + /// + public void EndEnableLoadUserProfile(System.IAsyncResult asyncResult) { + this.EndInvoke(asyncResult); + } + + /// + public void EnableLoadUserProfileAsync() { + this.EnableLoadUserProfileAsync(null); + } + + /// + public void EnableLoadUserProfileAsync(object userState) { + if ((this.EnableLoadUserProfileOperationCompleted == null)) { + this.EnableLoadUserProfileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnEnableLoadUserProfileOperationCompleted); + } + this.InvokeAsync("EnableLoadUserProfile", new object[0], this.EnableLoadUserProfileOperationCompleted, userState); + } + + private void OnEnableLoadUserProfileOperationCompleted(object arg) { + if ((this.EnableLoadUserProfileCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.EnableLoadUserProfileCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/InitFeeds", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] @@ -5064,6 +5146,36 @@ namespace WebsitePanel.Providers.Web [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteHeliconApeGroupCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + public delegate void CheckLoadUserProfileCompletedEventHandler(object sender, CheckLoadUserProfileCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CheckLoadUserProfileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CheckLoadUserProfileCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public bool Result { + get { + this.RaiseExceptionIfNecessary(); + return ((bool)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + public delegate void EnableLoadUserProfileCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void InitFeedsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); diff --git a/WebsitePanel/Sources/WebsitePanel.Server/WebServer.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/WebServer.asmx.cs index 16706c94..d01940f1 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/WebServer.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/WebServer.asmx.cs @@ -1061,6 +1061,42 @@ namespace WebsitePanel.Server #endregion #region Web Application Gallery + + [WebMethod, SoapHeader("settings")] + public bool CheckLoadUserProfile() + { + try + { + Log.WriteStart("CheckLoadUserProfile"); + + return WebProvider.CheckLoadUserProfile(); + + Log.WriteEnd("CheckLoadUserProfile"); + } + catch (Exception ex) + { + Log.WriteError("CheckLoadUserProfile", ex); + throw; + } + } + + [WebMethod, SoapHeader("settings")] + public void EnableLoadUserProfile() + { + try + { + Log.WriteStart("EnableLoadUserProfile"); + + WebProvider.EnableLoadUserProfile(); + + Log.WriteEnd("EnableLoadUserProfile"); + } + catch (Exception ex) + { + Log.WriteError("EnableLoadUserProfile", ex); + throw; + } + } [WebMethod, SoapHeader("settings")] public void InitFeeds(int UserId, string[] feeds) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs index f51dfa41..b11db9d3 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs @@ -52,6 +52,30 @@ namespace WebsitePanel.Portal { if (!IsPostBack) { + + + try + { + if (!ES.Services.Servers.CheckLoadUserProfile(PanelRequest.ServerId)) + { + ShowWarningMessage("Server application pool \"Load User Profile\" setting is set to false. Please open IIS Manager, Application Pools, select pool running Web Site Panel Server component and set \"Load User Profile\" to TRUE. This setting is required for Web Paltform Installer to run."); + + //ES.Services.Servers.EnableLoadUserProfile(PanelRequest.ServerId); + } + } + catch + { + ProductsPanel.Visible = false; + keywordsList.Visible = false; + SearchPanel.Visible = false; + InstallButtons1.Visible = false; + InstallButtons2.Visible = false; + + ShowWarningMessage("Server application pool \"Load User Profile\" setting is set to false. Please open IIS Manager, Application Pools, select pool running Web Site Panel Server component and set \"Load User Profile\" to TRUE. This setting is required for Web Paltform Installer to run."); + + } + + try { ES.Services.Servers.InitWPIFeeds(PanelRequest.ServerId); From 3bea46c4991e987a1bbd74f37281454edc509014 Mon Sep 17 00:00:00 2001 From: ruslanht Date: Thu, 13 Sep 2012 17:58:42 +0300 Subject: [PATCH 13/55] Panel for 'Load User Profile' setting warning --- .../WebsitePanel_SharedResources.ascx.resx | 3 +++ .../ServersEditWebPlatformInstaller.ascx | 10 +++++++++ .../ServersEditWebPlatformInstaller.ascx.cs | 21 +++++++++++++------ ...sEditWebPlatformInstaller.ascx.designer.cs | 19 ++++++++++++++++- 4 files changed, 46 insertions(+), 7 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index 3dbe097a..8f46ab03 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -876,6 +876,9 @@ Error loading feeds. Please check system settings + + Error checking 'Load user profile' application pool setting. + Error building hosting space summary letter diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx index 456b474f..9d0fb002 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx @@ -126,6 +126,16 @@ h2.ProductTitle { + +
+ To continue "Load User Profile" setting for the current application pool must be enabled. +
+ Enable this setting now? (May require relogin) +
+
+ +
+
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs index b11db9d3..7581e2f4 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs @@ -58,21 +58,24 @@ namespace WebsitePanel.Portal { if (!ES.Services.Servers.CheckLoadUserProfile(PanelRequest.ServerId)) { - ShowWarningMessage("Server application pool \"Load User Profile\" setting is set to false. Please open IIS Manager, Application Pools, select pool running Web Site Panel Server component and set \"Load User Profile\" to TRUE. This setting is required for Web Paltform Installer to run."); - - //ES.Services.Servers.EnableLoadUserProfile(PanelRequest.ServerId); + CheckLoadUserProfilePanel.Visible = true; } } - catch + catch (NotImplementedException ex) { + CheckLoadUserProfilePanel.Visible = false; + ShowWarningMessage("Server application pool \"Load User Profile\" setting unavailable. Need IIS7 or higher. Fails is possible"); + } + catch (Exception ex) + { + CheckLoadUserProfilePanel.Visible = false; ProductsPanel.Visible = false; keywordsList.Visible = false; SearchPanel.Visible = false; InstallButtons1.Visible = false; InstallButtons2.Visible = false; - ShowWarningMessage("Server application pool \"Load User Profile\" setting is set to false. Please open IIS Manager, Application Pools, select pool running Web Site Panel Server component and set \"Load User Profile\" to TRUE. This setting is required for Web Paltform Installer to run."); - + ShowErrorMessage("WPI_CHECK_LOAD_USER_PROFILE", ex); } @@ -606,5 +609,11 @@ namespace WebsitePanel.Portal WpiLogsPre.InnerText = msg; } } + + protected void EnableLoadUserProfileButton_OnClick(object sender, EventArgs e) + { + ES.Services.Servers.EnableLoadUserProfile(PanelRequest.ServerId); + CheckLoadUserProfilePanel.Visible = false; + } } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.designer.cs index 15aaca0c..c26a55b9 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.designer.cs @@ -26,7 +26,6 @@ // (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. @@ -59,6 +58,24 @@ namespace WebsitePanel.Portal { ///
protected global::WebsitePanel.Portal.ServerHeaderControl ServerHeaderControl1; + /// + /// CheckLoadUserProfilePanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel CheckLoadUserProfilePanel; + + /// + /// EnableLoadUserProfileButton control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button EnableLoadUserProfileButton; + /// /// SearchPanel control. /// From c3a02d20e6b9ab46849c73146bd25c65c1578e33 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Thu, 13 Sep 2012 11:11:29 -0700 Subject: [PATCH 14/55] Switch IP between shared and dedicated --- .../Code/WebServers/WebServerController.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index 122c29f4..9e3561f0 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -653,9 +653,10 @@ namespace WebsitePanel.EnterpriseServer if (ipAddressId != 0) ServerController.AddItemIPAddress(siteItemId, ipAddressId); + // TODO - what would be correct logic here? // re-create pointers foreach (var pointer in sitePointers) - DeleteWebSitePointer(siteItemId, pointer.DomainId, false); + DeleteWebSitePointer(siteItemId, pointer.DomainId, false, true); foreach (var pointer in sitePointers) AddWebSitePointer(siteItemId, null, pointer.DomainId, false); @@ -697,7 +698,7 @@ namespace WebsitePanel.EnterpriseServer ServiceProviderProxy.Init(web, siteItem.ServiceId); var bindings = web.GetSiteBindings(siteItem.SiteId); - // TODO + // TODO - what would be correct logic here? return 0; } From c39dd512602ad236d4183a5c47df06314d63559a Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 13 Sep 2012 14:24:05 -0400 Subject: [PATCH 15/55] Added tag build-2.0.0.24 for changeset 21d17f29b81e From f90a95ea68aa65524cf6fcc90f10a89580779cf6 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Thu, 13 Sep 2012 12:26:22 -0700 Subject: [PATCH 16/55] Added 2.0.0 setup logic --- .../WebsitePanel.Installer/Updater.exe | Bin 199168 -> 199168 bytes .../WebsitePanel.Setup/EnterpriseServer10.cs | 26 ------------ .../WebsitePanel.Setup/EnterpriseServer20.cs | 38 ++++++++++++++++++ .../Sources/WebsitePanel.Setup/Portal10.cs | 27 ------------- .../Sources/WebsitePanel.Setup/Portal20.cs | 38 ++++++++++++++++++ .../Sources/WebsitePanel.Setup/Server10.cs | 27 ------------- .../Sources/WebsitePanel.Setup/Server20.cs | 37 +++++++++++++++++ .../StandaloneServerSetup10.cs | 12 ------ .../StandaloneServerSetup20.cs | 18 +++++++++ .../WebsitePanel.Setup.csproj | 4 ++ 10 files changed, 135 insertions(+), 92 deletions(-) create mode 100644 WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer20.cs create mode 100644 WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal20.cs create mode 100644 WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server20.cs create mode 100644 WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup20.cs diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index d0cbdc57dca50e743d33260c87162f953f881f08..2d19e85867693a3cb0a545cbfe61f85712a56004 100644 GIT binary patch delta 45 zcmV+|0Mh?}lnj8B43LNe*11uEi-n5;wTl9cbP!BA@I_)CyF;P6NqNe(Ng=l=bpqIw Dy~`7< delta 45 zcmZpe!qYH?XF> - /// Release 1.2.2 - /// - public class EnterpriseServer122 : EnterpriseServer - { - public static new object Install(object obj) - { - // - return EnterpriseServer.InstallBase(obj, "1.2.2"); - } - - public static new DialogResult Uninstall(object obj) - { - return EnterpriseServer.Uninstall(obj); - } - - public static new DialogResult Setup(object obj) - { - return EnterpriseServer.Setup(obj); - } - - public static new DialogResult Update(object obj) - { - return UpdateBase(obj, "1.2.2", "1.2.1", true); - } - } /// /// Release 1.2.1 /// diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer20.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer20.cs new file mode 100644 index 00000000..c8df0677 --- /dev/null +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer20.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using WebsitePanel.Setup.Actions; + +namespace WebsitePanel.Setup +{ + /// + /// Release 2.0.0 + /// + public class EnterpriseServer200 : EnterpriseServer + { + public static new object Install(object obj) + { + // + return EnterpriseServer.InstallBase(obj, minimalInstallerVersion: "2.0.0"); + } + + public static new DialogResult Uninstall(object obj) + { + return EnterpriseServer.Uninstall(obj); + } + + public static new DialogResult Setup(object obj) + { + return EnterpriseServer.Setup(obj); + } + + public static new DialogResult Update(object obj) + { + return UpdateBase(obj, + minimalInstallerVersion: "2.0.0", + versionToUpgrade: "1.2.1", + updateSql: true); + } + } +} diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs index 3818b293..01854e9b 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs @@ -6,33 +6,6 @@ using WebsitePanel.Setup.Actions; namespace WebsitePanel.Setup { - /// - /// Release 1.2.2 - /// - public class Portal122 : Portal - { - public static new object Install(object obj) - { - // - return Portal.InstallBase(obj, "1.2.2"); - } - - public static new DialogResult Uninstall(object obj) - { - return Portal.Uninstall(obj); - } - - public static new DialogResult Setup(object obj) - { - return Portal.Setup(obj); - } - - public static new DialogResult Update(object obj) - { - return UpdateBase(obj, "1.2.2", "1.2.1", false); - } - } - /// /// Release 1.2.1 /// diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal20.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal20.cs new file mode 100644 index 00000000..2419d5dc --- /dev/null +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal20.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using WebsitePanel.Setup.Actions; + +namespace WebsitePanel.Setup +{ + /// + /// Release 2.0.0 + /// + public class Portal200 : Portal + { + public static new object Install(object obj) + { + // + return Portal.InstallBase(obj, minimalInstallerVersion: "2.0.0"); + } + + public static new DialogResult Uninstall(object obj) + { + return Portal.Uninstall(obj); + } + + public static new DialogResult Setup(object obj) + { + return Portal.Setup(obj); + } + + public static new DialogResult Update(object obj) + { + return UpdateBase(obj, + minimalInstallerVersion: "2.0.0", + versionToUpgrade: "1.2.1", + updateSql: false); + } + } +} diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs index b5d08705..bd63cb57 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs @@ -6,33 +6,6 @@ using WebsitePanel.Setup.Actions; namespace WebsitePanel.Setup { - /// - /// Release 1.2.2 - /// - public class Server122 : Server - { - public static new object Install(object obj) - { - // - return Server.InstallBase(obj, "1.2.2"); - } - - public static new object Uninstall(object obj) - { - return Server.Uninstall(obj); - } - - public static new object Setup(object obj) - { - return Server.Setup(obj); - } - - public static new object Update(object obj) - { - return Server.UpdateBase(obj, "1.2.2", "1.2.1", false); - } - } - /// /// Release 1.2.1 /// diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server20.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server20.cs new file mode 100644 index 00000000..9f0a7988 --- /dev/null +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server20.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WebsitePanel.Setup +{ + /// + /// Release 2.0.0 + /// + public class Server200 : Server + { + public static new object Install(object obj) + { + // + return Server.InstallBase(obj, minimalInstallerVersion: "2.0.0"); + } + + public static new object Uninstall(object obj) + { + return Server.Uninstall(obj); + } + + public static new object Setup(object obj) + { + return Server.Setup(obj); + } + + public static new object Update(object obj) + { + return Server.UpdateBase(obj, + minimalInstallerVersion: "2.0.0", + versionToUpgrade: "1.2.1", + updateSql: false); + } + } +} diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup10.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup10.cs index 24bd0e0d..116f45c2 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup10.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup10.cs @@ -5,18 +5,6 @@ using System.Windows.Forms; namespace WebsitePanel.Setup { - /// - /// Release 1.2.2 - /// - public class StandaloneServerSetup122 : StandaloneServerSetup - { - public static new object Install(object obj) - { - return StandaloneServerSetup.InstallBase(obj, "1.2.2"); - } - } - - /// /// Release 1.2.1 /// diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup20.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup20.cs new file mode 100644 index 00000000..ff7d0cec --- /dev/null +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup20.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace WebsitePanel.Setup +{ + /// + /// Release 2.0.0 + /// + public class StandaloneServerSetup200 : StandaloneServerSetup + { + public static new object Install(object obj) + { + return StandaloneServerSetup.InstallBase(obj, minimalInstallerVersion: "2.0.0"); + } + } +} diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj index f9e793ad..3ce91c9d 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj @@ -140,8 +140,11 @@ + + + @@ -160,6 +163,7 @@ Resources.resx + From 9349b4bfa56c55a8043ccc1cbcf90134edc13146 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Thu, 13 Sep 2012 13:10:38 -0700 Subject: [PATCH 17/55] Installer update added into build.xml --- .../WebsitePanel.Installer/Updater.exe | Bin 199168 -> 199168 bytes WebsitePanel/build.xml | 49 +++++++++++++----- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index 2d19e85867693a3cb0a545cbfe61f85712a56004..710a19d1628a94acdf5bfa877dbdbc47dff54bc1 100644 GIT binary patch delta 44 zcmV+{0Mq|~lnj8B43LNd$(BuildFolder)\AWStats.Viewer $(BuildFolder)\WSPTransportAgent $(BuildFolder)\LocalizationToolkit + $(BuildFolder)\Installer @@ -85,6 +86,7 @@ + @@ -96,6 +98,7 @@ + @@ -243,9 +246,24 @@ + + + $(RootFolder)\WebsitePanel.Installer\Sources\WebsitePanel.Installer + $(InstallerProjectRoot)\bin\$(BuildConfiguration) + - - + + + + + + + + + + + + @@ -388,7 +406,7 @@ - + @@ -520,12 +538,14 @@ + + @@ -537,17 +557,18 @@ - - - - - - - - - - - + + + + + + + + + + + + From 60b14ca993dbd681b70748cfd74edf9523e3a85e Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 13 Sep 2012 16:25:47 -0400 Subject: [PATCH 18/55] Added tag build-2.0.0.25 for changeset 095f195eb2f2 From 8eea05e9e13e1d66a923128cf325ab5691d9714f Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 13 Sep 2012 16:37:17 -0400 Subject: [PATCH 19/55] Added tag build-2.0.0.26 for changeset aae80998c2c3 From 72f545fd6b0dc7989d55f8005bef064e3b8d012f Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Thu, 13 Sep 2012 18:20:44 -0700 Subject: [PATCH 20/55] Session validation key support added into installer --- .../Common/InstallAction.cs | 2 + .../WebsitePanel.Setup/Common/StringUtils.cs | 19 +++ .../Sources/WebsitePanel.Setup/Portal.cs | 4 + .../Sources/WebsitePanel.Setup/Portal20.cs | 5 +- .../WebsitePanel.Setup.csproj | 1 + .../Wizard/ExpressInstallPage.cs | 125 ++++++++++++++++++ .../Sources/WebsitePanel.WebPortal/Web.config | 8 +- .../WebsitePanel.WebPortal/Web6.config | 4 + 8 files changed, 162 insertions(+), 6 deletions(-) create mode 100644 WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/StringUtils.cs diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs index b7dc2fad..36f8d2d3 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs @@ -88,6 +88,8 @@ namespace WebsitePanel.Setup SwitchServer2AspNet40, SwitchEntServer2AspNet40, SwitchWebPortal2AspNet40, + ConfigureSecureSessionModuleInWebConfig, + UpdatePortalSessionValidationKey } public class InstallAction diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/StringUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/StringUtils.cs new file mode 100644 index 00000000..3cb13828 --- /dev/null +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/StringUtils.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +using System.Text; + +namespace WebsitePanel.Setup.Common +{ + public class StringUtils + { + public static string GenerateRandomString(int length) + { + RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider(); + byte[] data = new byte[length]; + crypto.GetNonZeroBytes(data); + return BitConverter.ToString(data).Replace("-", "").ToLowerInvariant(); + } + } +} diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs index cada0de3..b64297ff 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs @@ -217,6 +217,10 @@ namespace WebsitePanel.Setup action.Description = "Updating site settings..."; page3.Actions.Add(action); + action = new InstallAction(ActionTypes.UpdatePortalSessionValidationKey); + action.Description = "Generate session validation key..."; + page3.Actions.Add(action); + action = new InstallAction(ActionTypes.UpdateConfig); action.Description = "Updating system configuration..."; page3.Actions.Add(action); diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal20.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal20.cs index 2419d5dc..2187ba95 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal20.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal20.cs @@ -31,8 +31,9 @@ namespace WebsitePanel.Setup { return UpdateBase(obj, minimalInstallerVersion: "2.0.0", - versionToUpgrade: "1.2.1", - updateSql: false); + versionsToUpgrade: "1.2.1", + updateSql: false, + versionSpecificAction: new InstallAction(ActionTypes.ConfigureSecureSessionModuleInWebConfig)); } } } diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj index 3ce91c9d..6b9d839d 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj @@ -133,6 +133,7 @@ + diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs index be97f333..301dc11a 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs @@ -258,6 +258,12 @@ namespace WebsitePanel.Setup case ActionTypes.AddCustomErrorsPage: AddCustomErrorsPage(); break; + case ActionTypes.ConfigureSecureSessionModuleInWebConfig: + ConfigureSecureSessionModuleInWebConfig(); + break; + case ActionTypes.UpdatePortalSessionValidationKey: + UpdatePortalSessionValidationKey(); + break; } } this.progressBar.Value = 100; @@ -281,6 +287,87 @@ namespace WebsitePanel.Setup Wizard.GoNext(); } + private void ConfigureSecureSessionModuleInWebConfig() + { + try + { + string webConfigPath = Path.Combine(Wizard.SetupVariables.InstallationFolder, "web.config"); + Log.WriteStart("Web.config file is being updated"); + // Ensure the web.config exists + if (!File.Exists(webConfigPath)) + { + Log.WriteInfo(string.Format("File {0} not found", webConfigPath)); + return; + } + // Load web.config + XmlDocument doc = new XmlDocument(); + doc.Load(webConfigPath); + + // add node: + // + // + // + // + // + // + // ... or for IIS 6: + // + // + // + // + // + // + bool iis6 = false; + XmlElement webServer = doc.SelectSingleNode("configuration/system.webServer") as XmlElement; + if (webServer == null) + { + // this is IIS 6 + webServer = doc.SelectSingleNode("configuration/system.web") as XmlElement; + iis6 = true; + } + + if (webServer != null) + { + var modules = doc.CreateElement(iis6 ? "httpModules" : "modules"); + webServer.AppendChild(modules); + var sessionModule = doc.CreateElement("add"); + sessionModule.SetAttribute("name", "SecureSession"); + sessionModule.SetAttribute("type", "WebsitePanel.WebPortal.SecureSessionModule"); + modules.AppendChild(sessionModule); + } + + // update /system.web/httpRuntime element + var httpRuntime = doc.SelectSingleNode("configuration/system.web/httpRuntime") as XmlElement; + if (httpRuntime != null) + httpRuntime.SetAttribute("enableVersionHeader", "false"); + + // add: + // + // + // + var appSettings = doc.SelectSingleNode("configuration/appSettings"); + if (appSettings != null) + { + var sessionKey = doc.CreateElement("add"); + sessionKey.SetAttribute("name", "SessionValidationKey"); + sessionKey.SetAttribute("value", StringUtils.GenerateRandomString(16)); + appSettings.AppendChild(sessionKey); + } + + // save changes have been made + doc.Save(webConfigPath); + // + Log.WriteEnd("Web.config has been updated"); + } + catch (Exception ex) + { + if (Utils.IsThreadAbortException(ex)) + return; + Log.WriteError("Could not update web.config file", ex); + throw; + } + } + private void SwitchWebPortal2AspNet40(InstallAction action, Setup.SetupVariables setupVariables) { var sam = new WebPortalActionManager(setupVariables); @@ -2570,6 +2657,44 @@ namespace WebsitePanel.Setup } } + private void UpdatePortalSessionValidationKey() + { + try + { + string installFolder = Wizard.SetupVariables.InstallationFolder; + string path = Path.Combine(installFolder, "web.config"); + + if (!File.Exists(path)) + { + Log.WriteInfo(string.Format("File {0} not found", path)); + return; + } + + Log.WriteStart("Updating configuration file (session validation key)"); + XmlDocument doc = new XmlDocument(); + doc.Load(path); + + XmlElement sessionKey = doc.SelectSingleNode("configuration/appSettings/add[@key='SessionValidationKey']") as XmlElement; + if (sessionKey == null) + { + Log.WriteInfo("SessionValidationKey setting not found"); + return; + } + + sessionKey.SetAttribute("value", StringUtils.GenerateRandomString(16)); + doc.Save(path); + Log.WriteEnd("Updated configuration file"); + InstallLog.AppendLine("- Updated session validation key in the configuration file"); + } + catch (Exception ex) + { + if (Utils.IsThreadAbortException(ex)) + return; + Log.WriteError("Configuration file update error", ex); + throw; + } + } + private void SetServiceSettings() { try diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/Web.config b/WebsitePanel/Sources/WebsitePanel.WebPortal/Web.config index 06fdc34e..497e9620 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/Web.config +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/Web.config @@ -4,7 +4,7 @@ - + @@ -48,8 +48,8 @@ - - - + + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/Web6.config b/WebsitePanel/Sources/WebsitePanel.WebPortal/Web6.config index 7a3bf6bf..065ea852 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/Web6.config +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/Web6.config @@ -4,6 +4,7 @@ + @@ -56,6 +57,9 @@ + + + From 6c6b6f5c2105f7241019bb08ba013c79fcb10fe1 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 13 Sep 2012 21:38:34 -0400 Subject: [PATCH 21/55] Added tag build-2.0.0.27 for changeset c5da165d5d93 From f42298e7fee7b815d6217af9125ab4d911c44409 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Thu, 13 Sep 2012 19:23:21 -0700 Subject: [PATCH 22/55] Generate session logic moved to correct place. --- .../WebsitePanel.Installer/Updater.exe | Bin 199168 -> 199168 bytes .../Actions/WebPortalActionManager.cs | 51 ++++++++++++++++++ .../Common/InstallAction.cs | 3 +- .../Sources/WebsitePanel.Setup/Portal.cs | 4 -- .../Wizard/ExpressInstallPage.cs | 41 -------------- 5 files changed, 52 insertions(+), 47 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index 710a19d1628a94acdf5bfa877dbdbc47dff54bc1..c3ae2314559b6a29258c95d088490b790021acb4 100644 GIT binary patch delta 44 zcmV+{0Mq|~lnj8B43LNeNhDH%i-n5;wTl9cbPvzxW4B3zicGM>wz}u4#J4AP0@;+Q Ct`znF delta 44 zcmV+{0Mq|~lnj8B43LNe*gnztu)0@;+a C7!$St diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/WebPortalActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/WebPortalActionManager.cs index 7d0ccdc3..83330fff 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/WebPortalActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/WebPortalActionManager.cs @@ -31,6 +31,7 @@ using System.Collections.Generic; using System.Text; using System.IO; using System.Xml; +using WebsitePanel.Setup.Common; namespace WebsitePanel.Setup.Actions { @@ -114,6 +115,55 @@ namespace WebsitePanel.Setup.Actions } } + public class GenerateSessionValidationKeyAction : Action, IInstallAction + { + public const string LogStartInstallMessage = "Generating session validation key..."; + + void IInstallAction.Run(SetupVariables vars) + { + try + { + Begin(LogStartInstallMessage); + + Log.WriteStart(LogStartInstallMessage); + + string path = Path.Combine(vars.InstallationFolder, "web.config"); + + if (!File.Exists(path)) + { + Log.WriteInfo(string.Format("File {0} not found", path)); + return; + } + + Log.WriteStart("Updating configuration file (session validation key)"); + XmlDocument doc = new XmlDocument(); + doc.Load(path); + + XmlElement sessionKey = doc.SelectSingleNode("configuration/appSettings/add[@key='SessionValidationKey']") as XmlElement; + if (sessionKey == null) + { + Log.WriteInfo("SessionValidationKey setting not found"); + return; + } + + sessionKey.SetAttribute("value", StringUtils.GenerateRandomString(16)); + doc.Save(path); + + Log.WriteEnd("Generated session validation key"); + InstallLog.AppendLine("- Generated session validation key"); + } + catch (Exception ex) + { + if (Utils.IsThreadAbortException(ex)) + return; + // + Log.WriteError("Site settigs error", ex); + // + throw; + } + } + } + public class CreateDesktopShortcutsAction : Action, IInstallAction { public const string LogStartInstallMessage = "Creating shortcut..."; @@ -253,6 +303,7 @@ namespace WebsitePanel.Setup.Actions new CreateWebSiteAction(), new SwitchAppPoolAspNetVersion(), new UpdateEnterpriseServerUrlAction(), + new GenerateSessionValidationKeyAction(), new SaveComponentConfigSettingsAction(), new CreateDesktopShortcutsAction() }; diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs index 36f8d2d3..80fc5bb6 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs @@ -88,8 +88,7 @@ namespace WebsitePanel.Setup SwitchServer2AspNet40, SwitchEntServer2AspNet40, SwitchWebPortal2AspNet40, - ConfigureSecureSessionModuleInWebConfig, - UpdatePortalSessionValidationKey + ConfigureSecureSessionModuleInWebConfig } public class InstallAction diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs index b64297ff..cada0de3 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs @@ -217,10 +217,6 @@ namespace WebsitePanel.Setup action.Description = "Updating site settings..."; page3.Actions.Add(action); - action = new InstallAction(ActionTypes.UpdatePortalSessionValidationKey); - action.Description = "Generate session validation key..."; - page3.Actions.Add(action); - action = new InstallAction(ActionTypes.UpdateConfig); action.Description = "Updating system configuration..."; page3.Actions.Add(action); diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs index 301dc11a..9db3a3c7 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs @@ -260,9 +260,6 @@ namespace WebsitePanel.Setup break; case ActionTypes.ConfigureSecureSessionModuleInWebConfig: ConfigureSecureSessionModuleInWebConfig(); - break; - case ActionTypes.UpdatePortalSessionValidationKey: - UpdatePortalSessionValidationKey(); break; } } @@ -2657,44 +2654,6 @@ namespace WebsitePanel.Setup } } - private void UpdatePortalSessionValidationKey() - { - try - { - string installFolder = Wizard.SetupVariables.InstallationFolder; - string path = Path.Combine(installFolder, "web.config"); - - if (!File.Exists(path)) - { - Log.WriteInfo(string.Format("File {0} not found", path)); - return; - } - - Log.WriteStart("Updating configuration file (session validation key)"); - XmlDocument doc = new XmlDocument(); - doc.Load(path); - - XmlElement sessionKey = doc.SelectSingleNode("configuration/appSettings/add[@key='SessionValidationKey']") as XmlElement; - if (sessionKey == null) - { - Log.WriteInfo("SessionValidationKey setting not found"); - return; - } - - sessionKey.SetAttribute("value", StringUtils.GenerateRandomString(16)); - doc.Save(path); - Log.WriteEnd("Updated configuration file"); - InstallLog.AppendLine("- Updated session validation key in the configuration file"); - } - catch (Exception ex) - { - if (Utils.IsThreadAbortException(ex)) - return; - Log.WriteError("Configuration file update error", ex); - throw; - } - } - private void SetServiceSettings() { try From a4eaf6133ce8aa0a422fcd541aab49197917e186 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 13 Sep 2012 22:40:10 -0400 Subject: [PATCH 23/55] Added tag build-2.0.0.28 for changeset f3b58b37a19c From d826a96f6dbc36e9fcc0d5037dd8607d2a8c458b Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Thu, 13 Sep 2012 19:51:24 -0700 Subject: [PATCH 24/55] Added separate providers for IIS 8 and FTP 8 --- .../WebsitePanel.Installer/Updater.exe | Bin 199168 -> 198144 bytes WebsitePanel/Database/update_db.sql | 4 +- .../WebsitePanel.Providers.FTP.IIs70/MsFTP.cs | 2 +- .../MsFTP80.cs | 35 +++++++++ .../Properties/AssemblyInfo.cs | 21 ++++++ .../WebsitePanel.Providers.FTP.IIs80.csproj | 65 +++++++++++++++++ .../WebsitePanel.Providers.Web.IIS70/IIs70.cs | 2 +- .../Properties/AssemblyInfo.cs | 12 +-- .../WebsitePanel.Providers.Web.IIs80/IIs80.cs | 30 ++++++++ .../Properties/AssemblyInfo.cs | 21 ++++++ .../WebsitePanel.Providers.Web.IIs80.csproj | 69 ++++++++++++++++++ WebsitePanel/Sources/WebsitePanel.Server.sln | 26 ++++++- 12 files changed, 271 insertions(+), 16 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/Properties/AssemblyInfo.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/WebsitePanel.Providers.FTP.IIs80.csproj create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/Properties/AssemblyInfo.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/WebsitePanel.Providers.Web.IIs80.csproj diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index c3ae2314559b6a29258c95d088490b790021acb4..ec61a4ff7664a2132abea21bc7885734ec98498e 100644 GIT binary patch delta 29104 zcma*Q2Vhgx`~QE=xoMgXO4F6mv`x~LbT8N(5G*)Rruuu%b1xA;-_Q5^|0m>q&+B>4KIfi0a#N}nc~{Nz zuA5`k#P%#A%Igwg#EWVOdB_Oyl#RdY>)$JDp%+Lu&Sru1RM%VlB@4}<2B{y7_ILns z&ER?{y-H)*Vcr!!n1)=7lmFSUqF>lPEEQ z8$io!yjV}QO@K|7J6P2=6$GPVzz+fcBsIo`SX!x``5V-g5Xti?FBC!`u~yp60>md? zo)n7n;89@7(SMlox}U&1ANgU=OnSf-)O4Rn7D^EdrR-P<}uC8&ZbgLr~zP=abgcV3nbGth%d1*$=!hs^-NEM9AmiBN{8zgnx3 zZBPi&0%_eQLhpE1nn2hz=meEkT^Ryk3+3_M-LdoiHB6&*mrJ$z^U7ic!iGFugEOug zD76!@dRlj_Mo9^M_V1KhcN;WEJu!@z<)QU(uQWqQ>oMVPo|gr~HY;~}YCS8%A@Fhp zh%FK%6S{yXRz8aAD5g_-koVX5C?dk#@X~tOAfh@G$|2{W>O|{>!xP19&`;{~U?I@k z`OpFU1%;78(91ROiGnc9BpRILP8LB}4T*zBD%~Vhrh>)GJ!oX!bKslM66UZl5t4Ym zB=@7Bj;=8C=~9^p5xq58Fg?hG&i_PHY4|i&t2I)+S|@52$gy+5M%3;p8?dr1Jf5mO zpJ#s=V<;axcvV#qf4O=(5(?FYFt46q>%w@&DrdpQJA==CO{ER$)xx8)D<$eI=qsZ3 zsO$vcKAxINJGkP{i|2WFYBHgX5FI+ivk5KkXmOV80hH)mNUozKJoBr z3m<4Y%oTWX2kZl+1AL0$!~2B4xP1ao6?na#t^?NLl@I23Vl0`SR6;39K>`I4I25mId3WKDi>up!xO(QWWss?Era%{lt%I(jv1`C*>X9MUw^WINlwo;CT7b6Bbx@ZMOB%PK^PHL zWjhE;Exm$7*%js;<}tAVY?Xzs=o3~lXfaGeCAoPQ3`1C-i7>LBl^tDXV`V2-IHHKjC|MH*w zIh&X8?0uiko|}V|D#KipQoa2KvuO}gO}O+=V$NY*|6MU|3;rjiYQkL}ACDK9URT)- zE6U@sztpgIs3&#@OXV{l(udxGBCM{(Jc{`YRLjiQL#&ytCpX&ixnfQ@I!_EZa(uX$ z!B)aILAFwP(~EB=FoBG-;V1>!dUK1;1~VEQMsUd0gWACEqaHXBc0NyAU+%>T5meca zhl6Z*86<~W7DAO!$Z($NW)m7Yv z4kbh5%g__57&r;2!hnC0CxIORU(EJAq-7J9^EOzaFve^aUMB1@>P#q|Kx-nnJ!l5B zKo!Gu@)kVG$-rPP2Xaa-t;Ly`}O0)!std@?Y&f(l7tj-cm~T{crjEO5=U) z04xq7{!_gaSM|6V z(npM9(|FKFWg88J$(cQ=FAOl$7k0q^s4utt@AZXMPFH2v?jhxJum2`jMN+x#SZJobxRN$?T_WGvt@Nx%b-Z30BV6YQWEVd6vp7{y7j zG4u2AT&Mx$I2m|?2z3{OZ7)DLi}B{h1U>1EE==VHV=x6=Oqc;hzz*G$*`{)y#?dtc z`62G zs7QpgMOR59C5t|tMoE1^qosOKn{-GYPVLei&=^T;=s{zhgA5%hjgvMQ%V@krgTrZp z6dAmSCQ7%0C(p@!>5b4_nkIc4+Jm-|BE!;YYiVHEYMSn( z<_1bLq-~ZGnklugCekdajWvvBO9QR_X^ylFw2c%PzL2(+)`qX6xl;FtziFPcd!*z+ z^QFrPv9z7kBJnCMkbX%FqlJ<-X)tXsO-{N>J4k(#2h)zyj^uT;lQcA?jCPiGq7Zo6g(!tW)j!rs6 zYSSr}4wWi8)zD$m9nj&@_|6yU2&uTsbF@O*(&Z;Q(z&XumxhjVZYnt^(9zP|vT1aT z)2&YdrDLVeeIL`f)G2k;w$2$)VoGs7^Qt_ZibfUBS^KVi*NxC(7HJ$97 zKV&$iFF1c6x|-4{($eAY)2Yt(BZ4V?Q5sb78GXqaGV*&hohG@B??I3S=zMF!Y)Y$~k&~uTTJ2mlS)g>LwDyHJX^k^~3e1>U(%h-v(^s71UmWE| zYn|s`?ysV=rOcWsbdGaNO|(GgI?vPwQ}wGbO@ln81uG()p>sY_(bt^c&O1!$Jm;zf z3q9z3XYvw}(FM*e%LY@rPzqfBH?4C9zLm&my|euaXu|8#rj-||B+Xw{LKjJwS52XB zNPXWqMi)!=)uX6Gs$Xl7K3TntE|H4Y5{hGh&GO(u8H$kmZ^I8jCF12_!oxX)U z{M|tMwlw42H|Yw=ux>bA>8xJ&9iyw9ecy9u^c`u?#=&&8v~S}%x<*>HX*OL8+S@69 z;6drTl6G@%>EegUbRC2i()H4+&CPU!bN-g$jJ_xR?sU-irTJU`rW>8}KaQq!ll1W? zQ|Jd$e8V*Qp|qi)l5Um^js58sP^;u<98W)zJht_Bck(@XTCfz>Xp&}c%cNVS-P=ad zkEQreXVXulk3U^V8>IH1O{0y{?$4&sZBpj;*XXCxzU>p~XHw>l{&YKNxYW2~9Ni(= zclLMRiTQH48_^tf~PmoRZoI6EJ4r}S&7_~_^K8%g`s6navc`&A|VR(kN&F?z~*=or-E zJLj0MVS1i+YEQPL^o(Trb}&8beC6Bzl%8{5K9w!dCTGZ5*xk-c#plB41!+9!MXCN= zG`%Ek1HCL=J~x^CB{z15rDCDP(s3G8>`+=ALE{UwyK$3zOfm+4HsdyBC@i8J)xeu4c(oHri!RI$H_l=b&R zO5SKizoE1Nrd?M`Swk;ID+MYv>~o{*1gdh3@t{4Zn_~yxs2wdlX-Deb(94rL1r=Oh zY8``GP?N*vLyu68hTnbYF-koh`+Om?mm^RM8*j%@Eu?AT*rcVuQ6I-DKl&PN*%0qf z9lq4pu`iq!P;G-p1TA6IuVG*mZT6)84V{x|vzi7tT4m6`X<$REOq%OXgB+9d=nAT9 z2+W5ZsopWL9ZjT$hWYJi4;3{!&Uc{GXmCT{j!-N$HEifa_fQ(**wT%LG`!k{Mll-N z0Pq~6VGeB%h-+?`--EZ>(r~5-szI#{Aw6jUqv4K0rBH4}!=PR?o2nvtJ5Th6takLK zt7%ljpfWm`(&&bLeP|DX+8lucphUZ4DBr|5J{|zIi*@`tfPPQo9M=azlK6(X&+^J7 zG;}Yg2Lzhv2pj_CCpFX$fdXi9!_lF%zd%zQ_6kUw>KI=E<}}Bq3P{_^Q9P2)rmY=k zM$!W`-LYyEZJ-$qeMeKlo^KjSNO;Ml2^C|9!zl{fDgeF-S2f|iO31j)gqRW`+-`Iw zTrZG$7YTu@3=-b4SLZ_5E(h+^@YWl&&rpZQV`_GIJfhi-osX!_QTT{PIg%e!f5)^( z(Cnj+XpZCgN7Ue0@`#2y3Ln$nj*lNhE0#T`!TyCqpPxK@_|OT@RF3U6ap;7C${|A? z34hW|2mO<#Hw^z1depJ)Z)&5Y;o{%)*{)1O9JyUtH%C)fW(@VD#4RNuDFIHM-Qe<$ z5N}G{(U1VAy%@*g+l{H^(2lMw%n{j*&2((+#=1J9y0eLnuFtSEhp9XBbgb^qdN_`D zXEBbVXILT+MaqtEo?&qf?>@uk8@%Uwng!~kojF%KbG{>Y1k=%aN7)G0(POC(Sl`ml zT;*6df|+C1s?C)8RlVhAX4Ko8gSKiFZf0(fH=E?m7RN6mSTOzA(V~KNr`sI;D_A_; z;h0;&I?>&ZuPfLabf06yNS3NOBquoPSUr;E(-V&CBiR@g)}!|*_KD_O*?qZ*Oj34^y zP&HXI)TdlcK102X`WV$PjN4nI_Cg&yjHjA6?BVljvJ&+Jv>yQVAy< z@P*I%k5cVN&4BtCYO+FkxYG5e&V)!X>xF7jxcsWG!8etsaN3uqgKdUC) zNARqNju-_|Cyn66zlPzr(7tKJLWr|(L?(E@0`(zhMudaq2E_3scSgJg`ViH-f`@}q z<506uyMU_6fQnHA)6`@vYshMorPM4Ld1=_SyC^cv_0 zdNWW zpP=4Vaj30P3s8$dpTrr!{2-WtL45=&_O9|2crq($CTbVdVW_X5 zu14L9dKUFQYM_dz%|`8mItg_lC?(5PywBcK@wR@X3IfaLXg{C|hVV&MXb=_24Zb0d zF{-BJMNtwx;<`ouop zEfwtIQrvuix()Rx>bIZ*xrBPlEz}kM5wZ}-UAGLV;sdufpnpPj<(L%iVeqP()a_jH zZE8D&)6^Zoo(U?DJWws^s_q8bQ^ZY~x)|I8)V)EUQ}g~911gZI>VBXvqrQsjP-B-u zn36rHU!k5>KMR)MP_^znj@_MCCDr{=pqdoA_X{en>WTJY?t{QCmo?U190o869n&Bx zC9^>V@|OE3DEJ-saiE*rCqtaAkOd{%Q4hHDDjq|u{?o#8ucRT4G-QQ_fXZI zJRFFc0Se!%dh+h=4=Rwcp1gn=sIyU*p?5XL-|Wc;ai=FA(63N$px*a{ii(7J@$9r- zM?v*oypzMgLP-*8C)EC+@|2-utXDUPGY=HnPv*`0 z!{3|d8SecO*!j#5NVc~GDi(PAz@~>cPdwC{Prym2GrgBUcqJzL1obfL8Sj-~zk~W0 zTGTDp!%Wt;;Js*SaTF>V*MjdC`7I(rhqc%QTHE3y(9JDAaSdoRlVCtkh%NZ03H2)I zlf5&Vtp|HEWZk>!C)9hWk3pZrvAb;oubU57PgGyf*2Ln&dnnoGQ_wCxyxq_H@P>^= zoracId_D(DhNsBg3w-!k@-dS;=ij5g$mbAv-}d31`~fE3jqy)n_&VxuXc1cS+yYyE z1u=~nPDbT@Oi5P^_eLGxlII4!C_<4hqe&UpmV6#8X?X(NE6`p|PCop7X0b0~rSbSUuFg@g> z)p9kUhH@3F!eR3yQj9hP+^MK-P`iRY@%GkQ!8-tT5NL7LFfBhcPeQFleI4~J)b*$z zqwYdIih36H8mf2)H@~C)jjHkEnfjs{QKL|kP_s}AP`jd*q7FhG2?~3VU$icn%<_u^ zoe!2|@+RtPP*_j>l5_&uis8>hKfdGbK{$rm-Dc z4s|N(D*=3Qod;pK3J>5r*alF6><)MaW;oxQ)#PYE353sL{D16}G-LdS0Z(>sK0S{H z`r~5dPgH^3g2dt~Z6F`-Ak<(~Gio$yJZdUxCTcEf0ct1EWYR6LgD#cy1r*)^#$}!M-@?L1`gB-BAJ73c~Z>B@aw1!j3kfrTWDE@`Y!6mz^|ZJwg&Qb{?owc zVPE(H?8Q|FQIDX0gL)eE66$r-Tc|&xioe1}Zo!kfKLm?F{=(vgARhKX^+(mAhNIeo zhC_=JP}72V>$A|_0mI!OTwEpZmhw*62QAN`4nZ9$;$|G`3#ijkXQIwUtwVL7zK!}% z=Rc{m+6#eh_rz)|BI`dFw@JZ zKcYTFWjgNFqK2Zzptc4rsp^2*1GNumDjBHb^I#ZiCF%>PGf-!N3gk7^1*mnp4kDOd zM_7cq7__)bUS#CuMP6#;<%KUbB~?qXNWRpRRPn{C1Q)B4D!y2iRPjZuq-qVsd3xDN zB_Bb~sbnYWm#E+Ay6D7IatSu6q#5--I#haIQy)Fwk9B(9X=eRI*D@T<1XzY+^jwos zvr*fjc1A5iEkhjzhoat9&tiBe>S)x7T*ayy*gRR`NBJItL(!{xt`g`I`wIP3$YMR{ z|DV2*+nq|B(12933)G(+g$DSObEvmK1#%yoC#np*tt}0_l}1!EsFuW{CV{F+D?`5^ zHOa?tC)B=%P_PU``$V)%L!FQIHx2wuVzprgKle`IYOl4SQGdX$a@UsC)v#K@*ivz1~%iF=n8VSNETl?nytz7-vI2C8DN-x{(}X5@@b* z9%xsi9`th+xA!(q1s!e_1=#T8v>O>~>=)!lWfs+0pZ;cpORC?N3g73G1lw+=^w^rpq{}iKtqGqfTm!$L+}O&_Y3|2bZoE_bY`$q zgw5jMM$q?AcLwi(@Yfi=fr%dme*qRB(*aPc=?G|R6OYry#8W+MIsrNX!cY33)^rN` zU>@pX)HSFLpp<-J3WCNQGx1?PYg!N_s>wAlsmX2AIT)vV;1CE4;p&MRh#C=Mg+(Ja zL+LL#igVre>WlS)@>Ws7~)omdi0oo6u&R9~lQ< ze?sd?=g?5SA2CPB)Eg*}9E_ByJTywLCmQ}d6~r7H8m~8!<)VVGgr?|&$z~Td>rCV{ z(q6JKG+l2ZBw9}BfC59vN;{`|@_uNJK7=$P)nE%l$Sx#FvpF;me3}>@Q_}1W?EvJf z(DBf2K>8T|bePgLp=1a;Yc)-wCHhb@TA^!DwNSD~q1&Nl`Y^IlA$3?f&~}B)Vg2=H za$liBAPY&0#S%25!UpNBWSl~;0ELr{vG{aat>&Gu;ra-2Q*nL<6iFiDFd_LaY>YmN z6e;v$ShFsQ3~Z8de#n;L_Rc|8^@UR9nkhC*b>ElR}i)QN+NgWWh zznYXn!c@|vI47GI>eGlXJk7xqR-04wt%%7*i}bC@2&8KAI;6`WTNU3&K$&Eh;@fFn zribs=;U!@IuFz*Iw4a_euhqko9o#39{q(YVqdwQ=ykp*`FTh*!@RTQv=q`OBNrD^n zP#MiV^B6rmqy?`hnLZ(&>6iL0ijU`cLf_3rJkKK133HM2EG7exM4ssdeJ>>{-w#%} zh-Z3LU*^i@viS#nUl;LA2a-uoW%?|c1c%q)?@Gn_&wXtxz?Plhi5XVcli;m>fi^ z)w}_f*+z~l^q#duzm1$ml8=Vl$R#D+PU~Ta35yH7YBl?;rwrRgVpi}QNVuIO$pmd` z)@>&lE=mDkp^MHLc90^ZSrGGz;d3&;?gONw@;I*R(Sl|!+65eWDPp2$*`Qkc%u@m%g3n#f}$IhXTfNCx-Gxm+NlGw}Gg$Lp~*MSp<=WOApR z=|$2BNv_&OQi{YgU8cW8*0_AP4VTGDBstS7qzS1;qYW?7Um;a^464yYhNl2!`ZH2t7Ww@IBs^# z(>*5FWS>a(g^x8pCOO@CrV{xE=uff;X)(D4^cQ)o_*le5U_^t9sih&*M~(MvMv4Usu|J@xL*6Y_b{WYklWOd50KJ-vZO z$V8GOiwp)j6=^@oh`eGn()9|piTuGBLJ!KMDTpl7o9StVdPIsGZz|Xyo%fZ5BO;r1 zW~#x{pZ%J#P@tL0Cqw%+FCy`0!C^jYYN2>D&5(&mk-r)(w39+hz!y&YAn~z(XpErK zUDPb*DAVq*_f()CIj5N4F}N4j4y|%S7^{nv8LDNI#yCA7cH2 zKPEgFP`qgFtNDAWUnseq19h!0u;og@?CgH}LiDLy`E1$3T5 ze9#K$B8B*%6;N@xl8}#DAzh;oAGHp2Ba*zwcBH3~7LyO7VuL$U4W7_0CXG=k!JX)K zq-xEssGQ&~^d?d*`6?<8X!Ky-h+1+Us2lxRq1!Mp&rq9)XTsIwUR0;x9&|GjpX=R& zi|BDAx!X!;5{HrxnqZ19~ zGythqGaF)-Q5OkrMM;sP-_r90=N9t9cxq4!BWq zhTF>Y!|7IqI@;2K_9`^WRvkQo9#QB;+iakd3eB<22fD4019GXLcNO{oa;c!EvDiF(fQfC_d&>pwkNRm93Jdjh8dcfpp_&os?e!eYI>2* za*>B=8XY~6r>i07W1Drbt|HZH?m+P(U9Zr6C|;ynk@%UWSfa0@2NA1@5ZA1$qI)M{ zHkuZ3iH0g_n=Dgo+&zd{h*Yh~Lti;kEh)it<6M*uG3U5wUvM>D>7pj%OuErUDWblH zHo7ptG>aZ_kE-C_=hg3~oiYqcLp`}ygzL+1kD0nHYL#ie#;>t`* z>3W5>KtZDN!07#*-wj+&O(XgW?C-;${y@yFm3H0f=b`XpY^ zpP>4cGL26x0}5Eh2~MUHAL&le2&8IK55BKyABEN@rW(GclircjeVMq^^bIXthsQs7 z!XYuy@GU*PPIg{NY}S2C$F1j7Lw-wa3qJD(*+-I^jHl?5k7R0@w9oV%-HcQNX9i8i z(^U1b?2Ck$XK0c_2|#D*qEBRBd!Tc4QG;^**Ei{~sfq60COanpU7#yJ+ybivrG|olmOxLLQcG8j}lEqBpRrtj%iPH_Aq z>ysXsZqi+fa|_TddPJf1NkYgE^t6k7LT=ObJLF8afbS=&*(uWwDE=23;G%P;Uuh?W z4ubD4Ep^d3)9FFb??8XjT?z@w5g~*f zcTs$ZzzW%i>w1LMxL~f%Yo&VRE7& zfgMq35BL(;X@$OnJQLX^g?QE+F< zOF*X;;-_VqtZtv&dVX4#$(ATI5zY)U*-C}@Swkkrc)DnFTYf{LZngXQRFBi{Gw%V`^h4=|oTb8E~KcQ;Nx+%oZr*c`T zLi~Ixmz68TPv`R32!;6RT%O2gDacQ+^4UCv_~}(XTcQv@y=uo+D#TB(+OdsD^4+om zwhL*oCN*_INC7*ER6{zX!qp(VB$K9Z>Z0HRR(OCnsfLU|pJ+aaErd(16nz0(@1jK^ zg)HOH6JN8g16%H*yTKip=F2C(hh58?1=2s z%uf9mmKw zMx<(zm-b`Gv&{Cja{TL-*2OT0E%_P?Bz@AFbrIF`gk4i;15zH|9IheT(%Kq^u#F1sOJku!S=zVq@lSIi?Vf%(n+M2SaWl;` zbU0hD&|{zxY%dTm!oO8uXa&nV#R;x=TU`$s!x|MzZWR_fjun0<`;N!iLMO6Dq-xTk zRf>Kx3pmYv)nowB3v3*anP2~nYn2o_h0Ws#R0TAZtyiK-t(tW&GSwM5;Yy@(q#E*J zEBJbf9R%X(cC^Y4eTiLD=u4n!jGUD#bGB87(CKUvQY~qQ;$LP}NO1gXZWUk>*-Dqw zXsTvgk*dib;HzPM&hu>ed47ui6}H?(7E>*||7mqHzEx{GFoE@k}ZN^-h4LYK28 zE?N=#He2JO&7rH&2o`%*hj3+Mb@y7*>V>pg*CFI%LHD$f$hV#v%DuHMs^R|!HS+>WS_9l*+!&# z;@Nsw*cWWcRi3b(1Ox41ovz80-g->fUN%IbBJk~FdDms%P@w(n;0>9k0Ucn+zn5t- z&_PyrQ>G2A#ff2u*m1-f(%8DlaG2ecNpqm}J^c~(7-=y%+xn622-Do+2{}y*JIbcI zs5+}Qn)skzi;maF#`!=U)ato>Gj!gHFnvi%*xc)oAihkryj!nj|SshX}@k?(q ze#2J&BqvNxPc)ols-I{n&apl&vY5`Z zAuj3>DqdvcTv!)&g-v&nBkVexr_gKZj<8#7ITBp)rLPFP!;b$h7x+&2`mkTw&o0^; z_8as4L-uV;-yQZl%W%<9(;uu{p<__d`y$)xLZj&cv)z*u9!s~F91HF8u<`;2>f zH({efeKHaaZbG9>WJJa&lbf(tq462l!_>lv2XaNLGwy_Ggh@y>WI@JnVV=S~#kVHo z2cx%eA4$HFXekVNi0R;X+pKFTOcG_(dJ0@W}TpaghgohjV7aDQ)pjCncgTQDfCT7I#A9dkw=wpu?7p<(J9|z4Hd4* zgtu5N!d->?4K3KY7)v$zx1s z`%5NmCQsLhR6`<>y8VsEzZ#OBsWV3kHv#!Ie7nq0bF>gaC{PXQ4!&4n0F|jM6VCdD zn+grhw3*|DAx!p7f|yCd5`j}Sc{%e3V~VidMV*3M2{(~y$n4BiLu-MkAf^aK)B~mq z0UUwe%1kt82!#r*%WQ4V5^gKB1?rt648Wg&){xIKbIduyCAFMxUuHXVTj9RDOy?kG zo>0aAxE17i3+b*xzan+>;6Aa2JkIQ5hNy@>rrUm%=RNS{?~E)-N=ayAiJUCix; z2!&b!brSl(FHw1W+h;ZFx(ZW$LaB>pn)?Wi2Du1+ZaYxuWRz)B zR-$2`uvMWgS@q_D!kl2)Cw`XorujMHq)Em@S*y(DLZO+HJiP`9#KMW+vtMr>BzU`M zi+Ql1chL^>Fd@Q42h0^hA<}-26ImzCV}w$LE@qttnkvWCOcmiWa;z{%L4FxIR=BSa zzZ$F*G*&EL!>Bk9q3Ozt7MUtPF8z*d(eYpFM7fvd~ci-{CX@&ap z@BhXNB%BwqANSw!LWE5Cjo)}7P9eVkju&Pr#P{Fv!aOA%|H5&CuvH=ceaU2DyFz?t zo+9j3h<|xARk)3`n5eU-i^gd}P6RK0F$v7RY@RO6Qz#;Prg4UFQlVDhds#5SkIZ2x zH2j)Y6e1Mj*R-Ngs1W})p-Skc5dSuzN+3~kx(?ZihH6106Aq|YEd;o5i@8QHyJ&~G zR)}-a0rOm;8%>zV~ZokDy-7YHO8`xggop%9=DAGC#{U_+Eg zZK1G8cH*ej3ELIoqgE&EQiw0Qb;3=VaM0=mZ}{Oj3?U9$9sF@2nfRd92~`U5L8}wy z$b{b#*9+oZ1^K8g5*{nWM{Tj7vST**m77DDgj7w6pc9t~g|Xa+V`y9^EK-OM;hVxW zh4>II7vkdNn0yG|5+)(Z`_|jSa`^rgvf*p@P4nA=IUWhFO@A@35;iK-Kf9m#9U-o* z>>HfjtXnM_560EPB!xym)!r56JfX;b=68i5c|4t5;5uOul66kO zMxo9{>H0=ts~i&=2+vFj0VVMJKVCdvp|%NWC31mdQ$sA_w7@F=wjfyl@+- zhFEfDSS|=j!{q|wfG!Gk6>6(KU9`g-pdyp7c<9jsW}V86Brn#%sw9Q@VjZk1 zm1DwUEhZXFsv!#U)!L*wsYK<6*bvoCh4^Y6qI!%ZFV-Qd(#gEQ{kT|%s-`Q%7wb?} zl|p>64pps}2^Z^7)e*%9XUHNrPb$b)>rho3d;!Wc<*Rk5DorL_t;19U6yl4uRW(E* zJYQCgR)`;BBUOu#x~33cp6#l%DZGTmgfGuxjB2`qe0`2p?L~s8**q^tVWAmK1&sYWQohbc=XPF0YPQTq zA3HBLcTjx%`S@6CN1)UvkB?_qyQr4P*+8cG)~>39NQ+5o+iun()oCPL*%}hRV1iME zy_#gT9czRirnh~h)533EdRZ-GeMo<+9mm~{4>57eU~4kz+4d*+HLM)7XIlcl6zJRb zlwk|y52AX|(QTLMJ44K7T{W59cC58CS=x4@buL&|=!-#Lv=-y9P t7396PsUke% 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 delta 30110 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 diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index a19a94b4..4443fe81 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -29,7 +29,7 @@ GO -- IIS 8.0 IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Internet Information Services 8.0') BEGIN -INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES (105, 2, N'IIS80', N'Internet Information Services 8.0', N'WebsitePanel.Providers.Web.IIs70, WebsitePanel.Providers.Web.IIs70', N'IIS70', NULL) +INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES (105, 2, N'IIS80', N'Internet Information Services 8.0', N'WebsitePanel.Providers.Web.IIs80, WebsitePanel.Providers.Web.IIs80', N'IIS70', NULL) END GO @@ -168,7 +168,7 @@ GO -- MS FTP 8.0 IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Microsoft FTP Server 8.0') BEGIN -INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES (106, 3, N'MSFTP80', N'Microsoft FTP Server 8.0', N'WebsitePanel.Providers.FTP.MsFTP, WebsitePanel.Providers.FTP.IIs70', N'MSFTP70', NULL) +INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES (106, 3, N'MSFTP80', N'Microsoft FTP Server 8.0', N'WebsitePanel.Providers.FTP.MsFTP80, WebsitePanel.Providers.FTP.IIs80', N'MSFTP70', NULL) END GO diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/MsFTP.cs b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/MsFTP.cs index ad7270c9..a7992fab 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/MsFTP.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/MsFTP.cs @@ -966,7 +966,7 @@ namespace WebsitePanel.Providers.FTP } RegistryKey ftp = root.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\ftpsvc"); - bool res = (value == 7 || value == 8) && ftp != null; + bool res = (value == 7) && ftp != null; if (ftp != null) ftp.Close(); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs new file mode 100644 index 00000000..b16aa16e --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs @@ -0,0 +1,35 @@ +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WebsitePanel.Providers.FTP +{ + public class MsFTP80 : MsFTP + { + protected new bool IsMsFTPInstalled() + { + int value = 0; + RegistryKey root = Registry.LocalMachine; + RegistryKey rk = root.OpenSubKey("SOFTWARE\\Microsoft\\InetStp"); + if (rk != null) + { + value = (int)rk.GetValue("MajorVersion", null); + rk.Close(); + } + + RegistryKey ftp = root.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\ftpsvc"); + bool res = (value == 8) && ftp != null; + if (ftp != null) + ftp.Close(); + + return res; + } + + public override bool IsInstalled() + { + return IsMsFTPInstalled(); + } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/Properties/AssemblyInfo.cs b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..8ae894a1 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/Properties/AssemblyInfo.cs @@ -0,0 +1,21 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WebsitePanel.Providers.FTP.IIs80")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyProduct("WebsitePanel.Providers.FTP.IIs80")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("587b5738-51db-4525-bcf5-60de49e89be4")] \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/WebsitePanel.Providers.FTP.IIs80.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/WebsitePanel.Providers.FTP.IIs80.csproj new file mode 100644 index 00000000..376d1c29 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/WebsitePanel.Providers.FTP.IIs80.csproj @@ -0,0 +1,65 @@ + + + + + Debug + AnyCPU + {D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6} + Library + Properties + WebsitePanel.Providers.FTP.IIs80 + WebsitePanel.Providers.FTP.IIs80 + v3.5 + 512 + + + true + full + false + ..\WebsitePanel.Server\bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\WebsitePanel.Server\bin\ + TRACE + prompt + 4 + + + + + + + + + + + + VersionInfo.cs + + + + + + + {684c932a-6c75-46ac-a327-f3689d89eb42} + WebsitePanel.Providers.Base + + + {a28bd694-c308-449f-8fd2-f08f3d54aba0} + WebsitePanel.Providers.FTP.IIs70 + + + + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs index 13c76f18..a773dae2 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs @@ -3488,7 +3488,7 @@ namespace WebsitePanel.Providers.Web rk.Close(); } - return value == 7 || value == 8; + return value == 7; } public override bool IsInstalled() diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/Properties/AssemblyInfo.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/Properties/AssemblyInfo.cs index fdf6fff1..ed50c061 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/Properties/AssemblyInfo.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/Properties/AssemblyInfo.cs @@ -18,14 +18,4 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("0eb18093-bb95-406a-ab78-a2e45f4cb972")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: \ No newline at end of file +[assembly: Guid("0eb18093-bb95-406a-ab78-a2e45f4cb972")] \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs new file mode 100644 index 00000000..96cbac29 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs @@ -0,0 +1,30 @@ +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WebsitePanel.Providers.Web +{ + public class IIs80 : IIs70, IWebServer + { + public new bool IsIISInstalled() + { + int value = 0; + RegistryKey root = Registry.LocalMachine; + RegistryKey rk = root.OpenSubKey("SOFTWARE\\Microsoft\\InetStp"); + if (rk != null) + { + value = (int)rk.GetValue("MajorVersion", null); + rk.Close(); + } + + return value == 8; + } + + public override bool IsInstalled() + { + return IsIISInstalled(); + } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/Properties/AssemblyInfo.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..3e0804f1 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/Properties/AssemblyInfo.cs @@ -0,0 +1,21 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WebsitePanel.Providers.Web.IIs80")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyProduct("WebsitePanel.Providers.Web.IIs80")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b0305c67-ead3-4d69-a0d8-548f6d0f705b")] \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/WebsitePanel.Providers.Web.IIs80.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/WebsitePanel.Providers.Web.IIs80.csproj new file mode 100644 index 00000000..a4a33fb4 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/WebsitePanel.Providers.Web.IIs80.csproj @@ -0,0 +1,69 @@ + + + + + Debug + AnyCPU + {6E348968-461D-45A1-B235-4F552947B9F1} + Library + Properties + WebsitePanel.Providers.Web + WebsitePanel.Providers.Web.IIs80 + v3.5 + 512 + + + true + full + false + ..\WebsitePanel.Server\bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\WebsitePanel.Server\bin\ + TRACE + prompt + 4 + + + + + + + + + + + + VersionInfo.cs + + + + + + + {684c932a-6c75-46ac-a327-f3689d89eb42} + WebsitePanel.Providers.Base + + + {9be0317d-e42e-4ff6-9a87-8c801f046ea1} + WebsitePanel.Providers.Web.IIs60 + + + {1b9dce85-c664-49fc-b6e1-86c63cab88d1} + WebsitePanel.Providers.Web.IIs70 + + + + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Server.sln b/WebsitePanel/Sources/WebsitePanel.Server.sln index d05bb799..138b2957 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.sln +++ b/WebsitePanel/Sources/WebsitePanel.Server.sln @@ -1,5 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2010 +# Visual Studio 2012 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Caching Application Block", "Caching Application Block", "{C8E6F2E4-A5B8-486A-A56E-92D864524682}" ProjectSection(SolutionItems) = preProject Bin\Microsoft.Practices.EnterpriseLibrary.Common.dll = Bin\Microsoft.Practices.EnterpriseLibrary.Common.dll @@ -107,6 +107,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.Mail EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.OS.Windows2012", "WebsitePanel.Providers.OS.Windows2012\WebsitePanel.Providers.OS.Windows2012.csproj", "{27130BBB-76FA-411E-8B4D-51CD4DC821AF}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.Web.IIs80", "WebsitePanel.Providers.Web.IIs80\WebsitePanel.Providers.Web.IIs80.csproj", "{6E348968-461D-45A1-B235-4F552947B9F1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.FTP.IIs80", "WebsitePanel.Providers.FTP.IIs80\WebsitePanel.Providers.FTP.IIs80.csproj", "{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -587,6 +591,26 @@ Global {27130BBB-76FA-411E-8B4D-51CD4DC821AF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {27130BBB-76FA-411E-8B4D-51CD4DC821AF}.Release|Mixed Platforms.Build.0 = Release|Any CPU {27130BBB-76FA-411E-8B4D-51CD4DC821AF}.Release|x86.ActiveCfg = Release|Any CPU + {6E348968-461D-45A1-B235-4F552947B9F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E348968-461D-45A1-B235-4F552947B9F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E348968-461D-45A1-B235-4F552947B9F1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6E348968-461D-45A1-B235-4F552947B9F1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {6E348968-461D-45A1-B235-4F552947B9F1}.Debug|x86.ActiveCfg = Debug|Any CPU + {6E348968-461D-45A1-B235-4F552947B9F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E348968-461D-45A1-B235-4F552947B9F1}.Release|Any CPU.Build.0 = Release|Any CPU + {6E348968-461D-45A1-B235-4F552947B9F1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {6E348968-461D-45A1-B235-4F552947B9F1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {6E348968-461D-45A1-B235-4F552947B9F1}.Release|x86.ActiveCfg = Release|Any CPU + {D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Debug|x86.ActiveCfg = Debug|Any CPU + {D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Release|Any CPU.Build.0 = Release|Any CPU + {D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From c2b6c342bdfa3266141d5b232333bc2923fa86ac Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 13 Sep 2012 23:10:56 -0400 Subject: [PATCH 25/55] Added tag build-2.0.0.29 for changeset 6f4abd497d00 From 38b8a70a5188d2a86e8bf7454a99e4dc6e66f1e2 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Thu, 13 Sep 2012 20:32:43 -0700 Subject: [PATCH 26/55] Fixed IIS 8 and FTP 8 providers --- .../Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs | 4 ++++ .../Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs index b16aa16e..df63bf9a 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs @@ -8,6 +8,10 @@ namespace WebsitePanel.Providers.FTP { public class MsFTP80 : MsFTP { + public MsFTP80() : base() + { + } + protected new bool IsMsFTPInstalled() { int value = 0; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs index 96cbac29..5a9d503c 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs @@ -8,6 +8,10 @@ namespace WebsitePanel.Providers.Web { public class IIs80 : IIs70, IWebServer { + public IIs80() : base() + { + } + public new bool IsIISInstalled() { int value = 0; From 285ad0499f31a1eb9b4390387cf5d52bdd371797 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Thu, 13 Sep 2012 20:39:06 -0700 Subject: [PATCH 27/55] Changed "new" to "virtual/override". --- WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/MsFTP.cs | 2 +- .../Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs | 2 +- WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs | 2 +- WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs | 2 +- WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/MsFTP.cs b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/MsFTP.cs index a7992fab..41a6d054 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/MsFTP.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/MsFTP.cs @@ -954,7 +954,7 @@ namespace WebsitePanel.Providers.FTP #endregion - protected bool IsMsFTPInstalled() + protected virtual bool IsMsFTPInstalled() { int value = 0; RegistryKey root = Registry.LocalMachine; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs index df63bf9a..1fbffbd8 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs80/MsFTP80.cs @@ -12,7 +12,7 @@ namespace WebsitePanel.Providers.FTP { } - protected new bool IsMsFTPInstalled() + protected override bool IsMsFTPInstalled() { int value = 0; RegistryKey root = Registry.LocalMachine; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs index a773dae2..11ef1827 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs @@ -3477,7 +3477,7 @@ namespace WebsitePanel.Providers.Web #endregion - public new bool IsIISInstalled() + public override bool IsIISInstalled() { int value = 0; RegistryKey root = Registry.LocalMachine; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs index 461a5344..3fca2962 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/IIs60.cs @@ -3368,7 +3368,7 @@ namespace WebsitePanel.Providers.Web } #endregion - public bool IsIISInstalled() + public virtual bool IsIISInstalled() { int value = 0; RegistryKey root = Registry.LocalMachine; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs index 5a9d503c..960487b0 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/IIs80.cs @@ -12,7 +12,7 @@ namespace WebsitePanel.Providers.Web { } - public new bool IsIISInstalled() + public override bool IsIISInstalled() { int value = 0; RegistryKey root = Registry.LocalMachine; From 5235d1b480728124282ac6306c12644a3979595f Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 13 Sep 2012 23:50:14 -0400 Subject: [PATCH 28/55] Added tag build-2.0.0.30 for changeset 8116cf144857 From 4f1d23d3104585c801d0ec53327e3bc1acc460d7 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Thu, 13 Sep 2012 21:04:27 -0700 Subject: [PATCH 29/55] Fixed standalone installer to correctly detect IIS 8 --- .../Actions/StandaloneServerActionManager.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/StandaloneServerActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/StandaloneServerActionManager.cs index b8fd2303..f4485b20 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/StandaloneServerActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/StandaloneServerActionManager.cs @@ -323,10 +323,14 @@ namespace WebsitePanel.Setup.Actions serviceInfo.Comments = string.Empty; //check IIS version - if (ServerSetup.IISVersion.Major >= 7) + if (ServerSetup.IISVersion.Major == 7) { serviceInfo.ProviderId = 101; } + else if (ServerSetup.IISVersion.Major == 8) + { + serviceInfo.ProviderId = 105; + } else if (ServerSetup.IISVersion.Major == 6) { serviceInfo.ProviderId = 2; From 5ceaad244ad8e0b596097276312a1bbfcdfdba9d Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Fri, 14 Sep 2012 00:20:35 -0400 Subject: [PATCH 30/55] Added tag build-2.0.0.31 for changeset 7a703c805b86 From 4b0a56c3cda102852e8f38ef43d06f0118c18666 Mon Sep 17 00:00:00 2001 From: robvde Date: Fri, 14 Sep 2012 08:21:55 +0400 Subject: [PATCH 31/55] Update Website Pointers: Code structured, Option Added to ignore GlobalDNSZone when creating additional website --- .../WebServersProxy.cs | 48 ++++++++-- .../Code/Packages/PackageController.cs | 2 +- .../Code/Servers/ServerController.cs | 2 +- .../Code/WebServers/WebServerController.cs | 92 +++++++------------ .../Code/Wizards/UserCreationWizard.cs | 2 +- .../WebsitePanel.EnterpriseServer/Web.config | 4 +- .../esWebServers.asmx.cs | 4 +- .../WebSitesAddPointer.ascx.resx | 6 +- .../WebSitesAddSite.ascx.resx | 12 ++- .../WebsitePanel/WebSitesAddSite.ascx | 17 +++- .../WebsitePanel/WebSitesAddSite.ascx.cs | 17 +++- .../WebSitesAddSite.ascx.designer.cs | 18 ++++ 12 files changed, 143 insertions(+), 81 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs index ca9b7876..dfd90b61 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.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. @@ -25,6 +53,7 @@ namespace WebsitePanel.EnterpriseServer { using WebsitePanel.Providers.Web; using WebsitePanel.Providers.ResultObjects; + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] @@ -808,22 +837,24 @@ namespace WebsitePanel.EnterpriseServer { /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/AddWebSite", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public int AddWebSite(int packageId, string hostName, int domainId, int ipAddressId) { + public int AddWebSite(int packageId, string hostName, int domainId, int ipAddressId, bool ignoreGlobalDNSZone) { object[] results = this.Invoke("AddWebSite", new object[] { packageId, hostName, domainId, - ipAddressId}); + ipAddressId, + ignoreGlobalDNSZone}); return ((int)(results[0])); } /// - public System.IAsyncResult BeginAddWebSite(int packageId, string hostName, int domainId, int ipAddressId, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginAddWebSite(int packageId, string hostName, int domainId, int ipAddressId, bool ignoreGlobalDNSZone, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("AddWebSite", new object[] { packageId, hostName, domainId, - ipAddressId}, callback, asyncState); + ipAddressId, + ignoreGlobalDNSZone}, callback, asyncState); } /// @@ -833,12 +864,12 @@ namespace WebsitePanel.EnterpriseServer { } /// - public void AddWebSiteAsync(int packageId, string hostName, int domainId, int ipAddressId) { - this.AddWebSiteAsync(packageId, hostName, domainId, ipAddressId, null); + public void AddWebSiteAsync(int packageId, string hostName, int domainId, int ipAddressId, bool ignoreGlobalDNSZone) { + this.AddWebSiteAsync(packageId, hostName, domainId, ipAddressId, ignoreGlobalDNSZone, null); } /// - public void AddWebSiteAsync(int packageId, string hostName, int domainId, int ipAddressId, object userState) { + public void AddWebSiteAsync(int packageId, string hostName, int domainId, int ipAddressId, bool ignoreGlobalDNSZone, object userState) { if ((this.AddWebSiteOperationCompleted == null)) { this.AddWebSiteOperationCompleted = new System.Threading.SendOrPostCallback(this.OnAddWebSiteOperationCompleted); } @@ -846,7 +877,8 @@ namespace WebsitePanel.EnterpriseServer { packageId, hostName, domainId, - ipAddressId}, this.AddWebSiteOperationCompleted, userState); + ipAddressId, + ignoreGlobalDNSZone}, this.AddWebSiteOperationCompleted, userState); } private void OnAddWebSiteOperationCompleted(object arg) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs index 910a49fa..164ad64f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs @@ -481,7 +481,7 @@ namespace WebsitePanel.EnterpriseServer // create web site try { - int webSiteId = WebServerController.AddWebSite(packageId, hostName, domainId, 0, true); + int webSiteId = WebServerController.AddWebSite(packageId, hostName, domainId, 0, true, false); if (webSiteId < 0) { result.Result = webSiteId; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs index 9c1ff2a4..fa1b5caf 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs @@ -1729,7 +1729,7 @@ namespace WebsitePanel.EnterpriseServer int webSiteId = 0; if (webEnabled && createWebSite) { - webSiteId = WebServerController.AddWebSite(packageId, hostName, domainId, 0, createInstantAlias); + webSiteId = WebServerController.AddWebSite(packageId, hostName, domainId, 0, createInstantAlias, false); if (webSiteId < 0) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index 9e3561f0..49916149 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -157,11 +157,11 @@ namespace WebsitePanel.EnterpriseServer public static int AddWebSite(int packageId, string hostName, int domainId, int ipAddressId) { - return AddWebSite(packageId, hostName, domainId, ipAddressId, false); + return AddWebSite(packageId, hostName, domainId, ipAddressId, false, true); } public static int AddWebSite(int packageId, string hostName, int domainId, int packageAddressId, - bool addInstantAlias) + bool addInstantAlias, bool ignoreGlobalDNSRecords) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); @@ -182,10 +182,14 @@ namespace WebsitePanel.EnterpriseServer string siteName = string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName; - // check if the web site already exists + // check if the web site already exists (legacy) if (PackageController.GetPackageItemByName(packageId, siteName, typeof(WebSite)) != null) return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; + if (DataProvider.CheckDomain(domain.PackageId, siteName, true) != 0) + return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; + + // place log record TaskManager.StartTask("WEB_SITE", "ADD", siteName); @@ -239,13 +243,7 @@ namespace WebsitePanel.EnterpriseServer if (ip != null) ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; - // load domain instant alias -/* - string instantAlias = ServerController.GetDomainAlias(packageId, domainName); - DomainInfo instantDomain = ServerController.GetDomain(instantAlias); - if (instantDomain == null || instantDomain.WebSiteId > 0) - instantAlias = ""; -*/ + // load web DNS records List dnsRecords = ServerController.GetDnsRecordsByService(serviceId); @@ -256,18 +254,15 @@ namespace WebsitePanel.EnterpriseServer { // SHARED IP // fill main domain bindings - FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, false); + FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords); - // fill alias bindings if required - /* - if (addInstantAlias && !String.IsNullOrEmpty(instantAlias)) + //double check all bindings + foreach (ServerBinding b in bindings) { - // fill bindings from DNS "A" records - FillWebServerBindings(bindings, dnsRecords, ipAddr, "", instantAlias); + if (DataProvider.CheckDomain(domain.PackageId, b.Host, true) != 0) + return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; } - */ - //bindings.Add(new ServerBinding(ipAddr, "80", siteName)); } else { @@ -391,14 +386,9 @@ namespace WebsitePanel.EnterpriseServer // update domain // add main pointer - AddWebSitePointer(siteItemId, hostName, domain.DomainId, false); + AddWebSitePointer(siteItemId, hostName, domain.DomainId, false, ignoreGlobalDNSRecords); - // add instant pointer - /* - if (addInstantAlias && !String.IsNullOrEmpty(instantAlias)) - AddWebSitePointer(siteItemId, "", instantDomain.DomainId, false); - */ - + // add parking page // load package if (webPolicy["AddParkingPage"] != null) @@ -722,39 +712,25 @@ namespace WebsitePanel.EnterpriseServer if ((dnsRecord.RecordType == "A" || dnsRecord.RecordType == "AAAA" || dnsRecord.RecordType == "CNAME") && dnsRecord.RecordName != "*") { - /* - string recordData = dnsRecord.RecordName + - ((dnsRecord.RecordName != "") ? "." : "") + domainName; + string recordData = Utils.ReplaceStringVariable(dnsRecord.RecordName, "host_name", hostName, true); - bindings.Add(new ServerBinding(ipAddr, "80", recordData)); - */ - - string tmpName = string.Empty; - - tmpName = Utils.ReplaceStringVariable(dnsRecord.RecordName, "host_name", hostName); - - if (!(tmpName== "[host_name]")) + if (!string.IsNullOrEmpty(domainName)) + recordData = recordData + ((string.IsNullOrEmpty(recordData)) ? "" : ".") + domainName; + //otherwise full recordData is supplied by hostName + + if (ignoreGlobalDNSRecords) { - string recordData = string.Empty; - if (tmpName.Contains(".")) - recordData = hostName; - else - recordData = tmpName + ((tmpName != "") ? "." : "") + domainName; - - - if (ignoreGlobalDNSRecords) - { - if (dnsRecord.RecordName == "[host_name]") - { - AddBinding(bindings, new ServerBinding(ipAddr, "80", recordData)); - break; - } - } - else + //only look for the host_nanme record, ignore all others + if (dnsRecord.RecordName == "[host_name]") { AddBinding(bindings, new ServerBinding(ipAddr, "80", recordData)); + break; } } + else + { + AddBinding(bindings, new ServerBinding(ipAddr, "80", recordData)); + } } } @@ -915,8 +891,10 @@ namespace WebsitePanel.EnterpriseServer string serviceIp = (ip != null) ? ip.ExternalIP : null; + //filter initiat GlobaDNSRecords list if (ignoreGlobalDNSRecords) { + //ignore all other except the host_name record foreach (GlobalDnsRecord r in dnsRecords) { if (r.RecordName == "[host_name]") @@ -977,6 +955,7 @@ namespace WebsitePanel.EnterpriseServer // fill bindings FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords); + //for logging purposes foreach (ServerBinding b in bindings) { string header = string.Format("{0} {1} {2}", b.Host, b.IP, b.Port); @@ -991,14 +970,12 @@ namespace WebsitePanel.EnterpriseServer // update domain domain.WebSiteId = siteItemId; - //ServerController.UpdateDomain(domain); - + domain.IsDomainPointer = true; foreach (ServerBinding b in bindings) { + //add new domain record domain.DomainName = b.Host; - domain.IsDomainPointer = true; int domainID = ServerController.AddDomain(domain); - DomainInfo domainTmp = ServerController.GetDomain(domainID); if (domainTmp != null) { @@ -1008,7 +985,6 @@ namespace WebsitePanel.EnterpriseServer } } - return 0; } catch (Exception ex) @@ -1070,7 +1046,7 @@ namespace WebsitePanel.EnterpriseServer { foreach (GlobalDnsRecord r in dnsRecords) { - if (r.RecordName == "[host_name]") + if ((r.RecordName == "[host_name]") | ((r.RecordName + (string.IsNullOrEmpty(r.RecordName) ? domain.ZoneName : "." + domain.ZoneName)) == domain.DomainName)) tmpDnsRecords.Add(r); } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Wizards/UserCreationWizard.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Wizards/UserCreationWizard.cs index 9f5d7ed8..c1d24976 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Wizards/UserCreationWizard.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Wizards/UserCreationWizard.cs @@ -199,7 +199,7 @@ namespace WebsitePanel.EnterpriseServer try { int webSiteId = WebServerController.AddWebSite( - createdPackageId, hostName, domainId, 0, true); + createdPackageId, hostName, domainId, 0, true, false); if (webSiteId < 0) { // rollback wizard diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config index ba1ad41e..b78330c8 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.EnterpriseServer/esWebServers.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs index 997303e9..00dc32d0 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs @@ -104,9 +104,9 @@ namespace WebsitePanel.EnterpriseServer } [WebMethod] - public int AddWebSite(int packageId, string hostName, int domainId, int ipAddressId) + public int AddWebSite(int packageId, string hostName, int domainId, int ipAddressId, bool ignoreGlobalDNSZone) { - return WebServerController.AddWebSite(packageId, hostName, domainId, ipAddressId, true); + return WebServerController.AddWebSite(packageId, hostName, domainId, ipAddressId, true, ignoreGlobalDNSZone); } [WebMethod] diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesAddPointer.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesAddPointer.ascx.resx index f6e5d7d6..f4978101 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesAddPointer.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesAddPointer.ascx.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Add Pointer @@ -124,6 +124,6 @@ Cancel - Domain Alias: + Web Site Pointer: \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesAddSite.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesAddSite.ascx.resx index a425d075..000c366a 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesAddSite.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesAddSite.ascx.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ShowProgressDialog('Creating web site...'); @@ -126,11 +126,14 @@ Cancel + + Ignore Zone Template + ASP.NET Version: - Domain Name: + Site: IP address: @@ -138,6 +141,9 @@ If you need your web site to be accessible via dedicated IP address or you are planning to enable SSL for your site you should choose "Dedicated IP" option; otherwise leave this settings by default. In order to create IP-based site you need to purchase IP address from your host. + + Note: A Zone Template is often defined by your host and contains additional Web Site Pointers to create when creating a new Web Site. Static record definitions such as 'www' conflicts when creating an additional Web Site in the same Domain. </p>Check this option to ignore the Zone Template and create the new Web Site with this Web Site Pointer only. + Dedicated diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx index c5eead2c..3b6e2608 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx @@ -11,7 +11,7 @@
- . + .
+ +
+
+ +
+

diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx.cs index 689fa1a3..93d85f19 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesAddSite.ascx.cs @@ -53,6 +53,8 @@ namespace WebsitePanel.Portal // bind IP Addresses BindIPAddresses(); + BindIgnoreZoneTemplate(); + // toggle ToggleControls(); } @@ -63,6 +65,19 @@ namespace WebsitePanel.Portal rowDedicatedIP.Visible = rbDedicatedIP.Checked; } + private void BindIgnoreZoneTemplate() + { + /* + PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); + if (cntx.Quotas[Quotas.WEB_SITES].QuotaUsedValue > 0) + chkIgnoreGlobalDNSRecords.Visible = chkIgnoreGlobalDNSRecords.Checked = lblIgnoreGlobalDNSRecords.Visible = true; + else + chkIgnoreGlobalDNSRecords.Visible = chkIgnoreGlobalDNSRecords.Checked = lblIgnoreGlobalDNSRecords.Visible= false; + */ + + chkIgnoreGlobalDNSRecords.Checked = false; + } + private void BindIPAddresses() { ddlIpAddresses.Items.Add(new ListItem("
+ ErrorMessage="Enter Account Number" ValidationGroup="CreateMailbox" Display="Dynamic" Text="*" SetFocusOnError="True">
+ ErrorMessage="Enter Account Number" ValidationGroup="CreateMailbox" Display="Dynamic" Text="*" SetFocusOnError="True">
- + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateUserAccount.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateUserAccount.ascx index edbeb726..b15bca70 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateUserAccount.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateUserAccount.ascx @@ -55,7 +55,7 @@
- + From 05523449cb77f75eaf7b514945b436237be6ea08 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Fri, 14 Sep 2012 08:15:15 -0400 Subject: [PATCH 33/55] Added tag build-2.0.0.32 for changeset b45ef87e7423 From 4308f11407c8a259c8d96bece4bbfe15cea1f978 Mon Sep 17 00:00:00 2001 From: ruslanht Date: Fri, 14 Sep 2012 17:37:59 +0300 Subject: [PATCH 34/55] Microsoft.Web.PlatformInstaller.WebDeployShim.dll reference removed; DeploymentParameters interchange updated --- ...ft.Web.PlatformInstaller.WebDeployShim.dll | Bin 13024 -> 0 bytes .../WebAppGallery/DeploymentParameter.cs | 18 ++++++++- .../WPIApplicationGallery.cs | 38 ++++++++++++------ .../WebsitePanel.Providers.Web.IIs60.csproj | 5 --- .../WebsitePanel.Server/Code/WPIHelper.cs | 12 ++++-- .../WebApplicationGalleryParams.ascx.cs | 8 ++-- 6 files changed, 55 insertions(+), 26 deletions(-) delete mode 100644 WebsitePanel/Lib/References/Microsoft/Microsoft.Web.PlatformInstaller.WebDeployShim.dll diff --git a/WebsitePanel/Lib/References/Microsoft/Microsoft.Web.PlatformInstaller.WebDeployShim.dll b/WebsitePanel/Lib/References/Microsoft/Microsoft.Web.PlatformInstaller.WebDeployShim.dll deleted file mode 100644 index b7b810173229e1fb12c96d380411a648baae6be7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13024 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 F{{UskpP2vv diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebAppGallery/DeploymentParameter.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebAppGallery/DeploymentParameter.cs index 4fa34ef8..2e0ddf38 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebAppGallery/DeploymentParameter.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebAppGallery/DeploymentParameter.cs @@ -87,7 +87,7 @@ namespace WebsitePanel.Providers.WebAppGallery //SiteUserPassword = 549755813888, - ALLKNOWN = + AllKnown = AppHostConfig | AppPoolConfig | Boolean | @@ -155,5 +155,21 @@ namespace WebsitePanel.Providers.WebAppGallery return String.Format("{0}=\"{1}\", Tags={2}", Name, Value, WellKnownTags.ToString()); } #endif + + public void SetWellKnownTagsFromRawString(string rawTags) + { + string[] tags = rawTags.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); + DeploymentParameterWellKnownTag wellKnownTags = DeploymentParameterWellKnownTag.None; + foreach (string tag in tags) + { + try + { + wellKnownTags |= (DeploymentParameterWellKnownTag)Enum.Parse(typeof(DeploymentParameterWellKnownTag), tag, true); + } + catch(Exception){} + } + + WellKnownTags = wellKnownTags & DeploymentParameterWellKnownTag.AllKnown; + } } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WPIWebApplicationGallery/WPIApplicationGallery.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WPIWebApplicationGallery/WPIApplicationGallery.cs index 1006c683..2b2ba11d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WPIWebApplicationGallery/WPIApplicationGallery.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WPIWebApplicationGallery/WPIApplicationGallery.cs @@ -44,6 +44,7 @@ using System.Web; using System.Diagnostics; using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations; using DeploymentParameter = WebsitePanel.Providers.WebAppGallery.DeploymentParameter; +using DeploymentParameterWPI = Microsoft.Web.PlatformInstaller.DeploymentParameter; namespace WebsitePanel.Providers.Web.WPIWebApplicationGallery { @@ -268,10 +269,10 @@ namespace WebsitePanel.Providers.Web.WPIWebApplicationGallery Product product = wpi.GetProduct(id); List deploymentParameters = new List(); - IList appDecalredParameters = wpi.GetAppDecalredParameters(id); - foreach (DeclaredParameter declaredParameter in appDecalredParameters) + IList appDeploymentWPIParameters = wpi.GetAppDecalredParameters(id); + foreach (DeploymentParameterWPI deploymentParameter in appDeploymentWPIParameters) { - deploymentParameters.Add(MakeDeploymentParameterFromDecalredParameter(declaredParameter)); + deploymentParameters.Add(MakeDeploymentParameterFromDecalredParameter(deploymentParameter)); } return deploymentParameters; @@ -398,28 +399,41 @@ namespace WebsitePanel.Providers.Web.WPIWebApplicationGallery }; } - protected static DeploymentParameter MakeDeploymentParameterFromDecalredParameter(DeclaredParameter d) + protected static DeploymentParameter MakeDeploymentParameterFromDecalredParameter(DeploymentParameterWPI d) { - - DeploymentParameter r = new DeploymentParameter(); r.Name = d.Name; r.FriendlyName = d.FriendlyName; r.DefaultValue = d.DefaultValue; r.Description = d.Description; -#pragma warning disable 612,618 - r.WellKnownTags = DeploymentParameterWellKnownTag.ALLKNOWN & (DeploymentParameterWellKnownTag) d.Tags; - if (null != d.Validation) + r.SetWellKnownTagsFromRawString(d.RawTags); + if (!string.IsNullOrEmpty(d.ValidationString)) { - r.ValidationKind = (DeploymentParameterValidationKind) d.Validation.Kind; - r.ValidationString = d.Validation.ValidationString; + // synchronized with Microsoft.Web.Deployment.DeploymentSyncParameterValidationKind + if (d.HasValidation((int)DeploymentParameterValidationKind.AllowEmpty)) + { + r.ValidationKind |= DeploymentParameterValidationKind.AllowEmpty; + } + if (d.HasValidation((int)DeploymentParameterValidationKind.RegularExpression)) + { + r.ValidationKind |= DeploymentParameterValidationKind.RegularExpression; + } + if (d.HasValidation((int)DeploymentParameterValidationKind.Enumeration)) + { + r.ValidationKind |= DeploymentParameterValidationKind.Enumeration; + } + if (d.HasValidation((int)DeploymentParameterValidationKind.Boolean)) + { + r.ValidationKind |= DeploymentParameterValidationKind.Boolean; + } + + r.ValidationString = d.ValidationString; } else { r.ValidationKind = DeploymentParameterValidationKind.None; } -#pragma warning restore 612,618 return r; } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebsitePanel.Providers.Web.IIs60.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebsitePanel.Providers.Web.IIs60.csproj index 227f56dc..3e06a8b4 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebsitePanel.Providers.Web.IIs60.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebsitePanel.Providers.Web.IIs60.csproj @@ -77,11 +77,6 @@ ..\..\Lib\References\Microsoft\Microsoft.Web.PlatformInstaller.dll True - - False - ..\..\Lib\References\Microsoft\Microsoft.Web.PlatformInstaller.WebDeployShim.dll - True - diff --git a/WebsitePanel/Sources/WebsitePanel.Server/Code/WPIHelper.cs b/WebsitePanel/Sources/WebsitePanel.Server/Code/WPIHelper.cs index 61f66d31..9dfd94f5 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/Code/WPIHelper.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/Code/WPIHelper.cs @@ -38,6 +38,7 @@ using System.Threading; using Microsoft.Web.Deployment; using Microsoft.Web.PlatformInstaller; using Installer = Microsoft.Web.PlatformInstaller.Installer; +using DeploymentParameterWPI = Microsoft.Web.PlatformInstaller.DeploymentParameter; namespace WebsitePanel.Server.Code { @@ -453,11 +454,11 @@ namespace WebsitePanel.Server.Code return products; } - public IList GetAppDecalredParameters(string productId) + public IList GetAppDecalredParameters(string productId) { Product app = _productManager.GetProduct(productId); Installer appInstaller = app.GetInstaller(GetLanguage(null)); - return appInstaller.MSDeployPackage.DeclaredParameters; + return appInstaller.MSDeployPackage.DeploymentParameters; } public bool InstallApplication( @@ -501,7 +502,7 @@ namespace WebsitePanel.Server.Code DeploymentWellKnownTag dbTag = (DeploymentWellKnownTag)GetDbTag(updatedValues); // remove parameters with alien db tags - foreach (DeclaredParameter parameter in appInstaller.MSDeployPackage.DeclaredParameters) + foreach (DeploymentParameterWPI parameter in appInstaller.MSDeployPackage.DeploymentParameters) { if (IsAlienDbTaggedParameter(dbTag, parameter)) { @@ -726,13 +727,16 @@ namespace WebsitePanel.Server.Code return DeploymentWellKnownTag.None; } - private static bool IsAlienDbTaggedParameter(DeploymentWellKnownTag dbTag, DeclaredParameter parameter) + private static bool IsAlienDbTaggedParameter(DeploymentWellKnownTag dbTag, DeploymentParameterWPI parameter) { + return parameter.HasTags((long)databaseEngineTags) && !parameter.HasTags((long)dbTag); +/* #pragma warning disable 612,618 return (parameter.Tags & databaseEngineTags) != DeploymentWellKnownTag.None && (parameter.Tags & dbTag) == DeploymentWellKnownTag.None; #pragma warning restore 612,618 +*/ } private static void RemoveUnusedProviders(MSDeployPackage msDeployPackage, DeploymentWellKnownTag dbTag) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParams.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParams.ascx.cs index 9c8fa07b..860b9e77 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParams.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParams.ascx.cs @@ -155,7 +155,7 @@ namespace WebsitePanel.Portal } // MySQL Server - else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.MySql) != null) + if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.MySql) != null) { // load package context PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); @@ -170,15 +170,15 @@ namespace WebsitePanel.Portal } // SQLite - else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.SqLite) != null) + if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.SqLite) != null) AddDatabaseEngine(DeploymentParameterWellKnownTag.SqLite, "", GetLocalizedString("DatabaseEngine.SQLite")); // Flat File - else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.FlatFile) != null) + if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.FlatFile) != null) AddDatabaseEngine(DeploymentParameterWellKnownTag.FlatFile, "", GetLocalizedString("DatabaseEngine.FlatFile")); // VistaFB - else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.VistaDB) != null) + if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.VistaDB) != null) AddDatabaseEngine(DeploymentParameterWellKnownTag.VistaDB, "", GetLocalizedString("DatabaseEngine.VistaDB")); From 1cbd66de2cefe8263b08744f26597e31cc5fb03a Mon Sep 17 00:00:00 2001 From: ruslanht Date: Fri, 14 Sep 2012 17:41:26 +0300 Subject: [PATCH 35/55] typo fix --- .../WebsitePanel/ServersEditWebPlatformInstaller.ascx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx index 9d0fb002..301eb036 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx @@ -294,7 +294,7 @@ h2.ProductTitle { -

Selected products are installed now:

+

Selected products are being installed now:


initializing... From ea4fd514e44f04e2fc7aaa3ee823fb55b7bc1958 Mon Sep 17 00:00:00 2001 From: ruslanht Date: Fri, 14 Sep 2012 17:45:08 +0300 Subject: [PATCH 36/55] typo fix --- .../WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs index 7581e2f4..8dc2f27c 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs @@ -64,7 +64,7 @@ namespace WebsitePanel.Portal catch (NotImplementedException ex) { CheckLoadUserProfilePanel.Visible = false; - ShowWarningMessage("Server application pool \"Load User Profile\" setting unavailable. Need IIS7 or higher. Fails is possible"); + ShowWarningMessage("Server application pool \"Load User Profile\" setting unavailable. IIS7 or higher is expected."); } catch (Exception ex) { From 013b52bf6dd214433feb670835a77d2e79f0cefc Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Fri, 14 Sep 2012 10:01:07 -0700 Subject: [PATCH 37/55] Updated web.config of ES --- .../WebsitePanel.Installer/Updater.exe | Bin 198144 -> 199168 bytes .../WebsitePanel.EnterpriseServer/Web.config | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index ec61a4ff7664a2132abea21bc7885734ec98498e..3876760880c4d368fe9b30a0f25615bd1c256998 100644 GIT binary patch delta 30110 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 t7396PsUke% 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 diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config index b78330c8..ba1ad41e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config @@ -5,11 +5,11 @@ - + - + From ec58d498b972dfeb404ca8c52be69a698d143ba7 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Fri, 14 Sep 2012 13:18:52 -0400 Subject: [PATCH 38/55] Added tag build-2.0.0.33 for changeset 866adb985295 From 87e788da4f2557d172549fe846f6626d0786edf3 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Fri, 14 Sep 2012 13:22:44 -0400 Subject: [PATCH 39/55] Added tag build-2.0.0.34 for changeset e6b2661a503b From 8ebc1ac4538f22ef972e4bac0d3f53aaf12b52f0 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Fri, 14 Sep 2012 13:26:55 -0400 Subject: [PATCH 40/55] Added tag build-2.0.0.35 for changeset 5d073e5f4b00 From cff894e0916d640dc0ad37a37157184441db7b92 Mon Sep 17 00:00:00 2001 From: robvde Date: Sat, 15 Sep 2012 09:27:33 +0400 Subject: [PATCH 41/55] Fixed: GlobalDNSREcord only accepts ip addresses. Input validation removed from control. --- .../DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx | 1 + .../WebsitePanel/GlobalDnsRecordsControl.ascx.cs | 3 +++ 2 files changed, 4 insertions(+) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx index c66291a3..03f5f160 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/GlobalDnsRecordsControl.ascx @@ -60,6 +60,7 @@ --> +
+ + + +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.cs index c733252f..0348694f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.cs @@ -107,6 +107,7 @@ namespace WebsitePanel.Portal.ProviderControls // ipAddress.AddressId = (settings["SharedIP"] != null) ? Utils.ParseInt(settings["SharedIP"], 0) : 0; ipAddress.SelectValueText = GetLocalizedString("ipAddress.SelectValueText"); + txtPublicSharedIP.Text = settings["PublicSharedIP"]; txtWebGroupName.Text = settings["WebGroupName"]; chkAssignIPAutomatically.Checked = Utils.ParseBool(settings["AutoAssignDedicatedIP"], true); @@ -205,6 +206,7 @@ namespace WebsitePanel.Portal.ProviderControls { // settings["SharedIP"] = ipAddress.AddressId.ToString(); + settings["PublicSharedIP"] = txtPublicSharedIP.Text.Trim(); settings["WebGroupName"] = txtWebGroupName.Text.Trim(); settings["AutoAssignDedicatedIP"] = chkAssignIPAutomatically.Checked.ToString(); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.designer.cs index 4357d031..f9851c20 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.designer.cs @@ -1,31 +1,3 @@ -// 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. @@ -67,6 +39,24 @@ namespace WebsitePanel.Portal.ProviderControls { /// protected global::WebsitePanel.Portal.SelectIPAddress ipAddress; + /// + /// lblPublicSharedIP control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblPublicSharedIP; + + /// + /// txtPublicSharedIP control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtPublicSharedIP; + /// /// lblGroupName control. /// diff --git a/WebsitePanel/Sources/generate_server_proxies.bat b/WebsitePanel/Sources/generate_server_proxies.bat index 2ef3d080..1d02b7f0 100644 --- a/WebsitePanel/Sources/generate_server_proxies.bat +++ b/WebsitePanel/Sources/generate_server_proxies.bat @@ -17,8 +17,8 @@ REM %WSE_CLEAN% .\WebsitePanel.Server.Client\DatabaseServerProxy.cs REM %WSDL% %SERVER_URL%/DNSServer.asmx /out:.\WebsitePanel.Server.Client\DnsServerProxy.cs /namespace:WebsitePanel.Providers.DNS /type:webClient /fields REM %WSE_CLEAN% .\WebsitePanel.Server.Client\DnsServerProxy.cs -%WSDL% %SERVER_URL%/ExchangeServer.asmx /out:.\WebsitePanel.Server.Client\ExchangeServerProxy.cs /namespace:WebsitePanel.Providers.Exchange /type:webClient /fields -%WSE_CLEAN% .\WebsitePanel.Server.Client\ExchangeServerProxy.cs +REM %WSDL% %SERVER_URL%/ExchangeServer.asmx /out:.\WebsitePanel.Server.Client\ExchangeServerProxy.cs /namespace:WebsitePanel.Providers.Exchange /type:webClient /fields +REM %WSE_CLEAN% .\WebsitePanel.Server.Client\ExchangeServerProxy.cs REM %WSDL% %SERVER_URL%/ExchangeServerHostedEdition.asmx /out:.\WebsitePanel.Server.Client\ExchangeServerHostedEditionProxy.cs /namespace:WebsitePanel.Providers.ExchangeHostedEdition /type:webClient /fields REM %WSE_CLEAN% .\WebsitePanel.Server.Client\ExchangeServerHostedEditionProxy.cs @@ -50,8 +50,8 @@ REM %WSE_CLEAN% .\WebsitePanel.Server.Client\VirtualizationServerProxy.cs REM %WSDL% %SERVER_URL%/VirtualizationServerForPrivateCloud.asmx /out:.\WebsitePanel.Server.Client\VirtualizationServerForPrivateCloudProxy.cs /namespace:WebsitePanel.Providers.VirtualizationForPC /type:webClient /fields REM %WSE_CLEAN% .\WebsitePanel.Server.Client\VirtualizationServerForPrivateCloudProxy.cs -REM %WSDL% %SERVER_URL%/WebServer.asmx /out:.\WebsitePanel.Server.Client\WebServerProxy.cs /namespace:WebsitePanel.Providers.Web /type:webClient /fields -REM %WSE_CLEAN% .\WebsitePanel.Server.Client\WebServerProxy.cs +%WSDL% %SERVER_URL%/WebServer.asmx /out:.\WebsitePanel.Server.Client\WebServerProxy.cs /namespace:WebsitePanel.Providers.Web /type:webClient /fields +%WSE_CLEAN% .\WebsitePanel.Server.Client\WebServerProxy.cs REM %WSDL% %SERVER_URL%/WindowsServer.asmx /out:.\WebsitePanel.Server.Client\WindowsServerProxy.cs /namespace:WebsitePanel.Server /type:webClient /fields REM %WSE_CLEAN% .\WebsitePanel.Server.Client\WindowsServerProxy.cs From 68fa24ff35a5595a7600372d9a8b0afea1b9d5e2 Mon Sep 17 00:00:00 2001 From: robvde Date: Tue, 18 Sep 2012 22:50:44 +0400 Subject: [PATCH 47/55] Fixed: Error when calculating diskspace and no public folder database available --- .../Exchange2007.cs | 51 +++++++++++-------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs index ba51c9ce..fd32052a 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs @@ -1374,30 +1374,37 @@ namespace WebsitePanel.Providers.HostedSolution long size = 0; - Command cmd = new Command("Get-PublicFolderStatistics"); - cmd.Parameters.Add("Identity", folder); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); + Command cmd = new Command("Get-PublicFolderDatabase"); Collection result = ExecuteShellCommand(runSpace, cmd); - if (result != null && result.Count > 0) - { - PSObject obj = result[0]; - Unlimited totalItemSize = - (Unlimited)GetPSObjectProperty(obj, "TotalItemSize"); - size += ConvertUnlimitedToBytes(totalItemSize); - } + if (result != null && result.Count > 0) + { + cmd = new Command("Get-PublicFolderStatistics"); + cmd.Parameters.Add("Identity", folder); + if (!string.IsNullOrEmpty(PublicFolderServer)) + cmd.Parameters.Add("Server", PublicFolderServer); + result = ExecuteShellCommand(runSpace, cmd); + if (result != null && result.Count > 0) + { + PSObject obj = result[0]; + Unlimited totalItemSize = + (Unlimited)GetPSObjectProperty(obj, "TotalItemSize"); + size += ConvertUnlimitedToBytes(totalItemSize); + } - cmd = new Command("Get-PublicFolder"); - cmd.Parameters.Add("Identity", folder); - cmd.Parameters.Add("GetChildren", new SwitchParameter(true)); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); - result = ExecuteShellCommand(runSpace, cmd); - foreach (PSObject obj in result) - { - string id = ObjToString(GetPSObjectProperty(obj, "Identity")); - size += CalculatePublicFolderDiskSpace(runSpace, id); - } + cmd = new Command("Get-PublicFolder"); + cmd.Parameters.Add("Identity", folder); + cmd.Parameters.Add("GetChildren", new SwitchParameter(true)); + if (!string.IsNullOrEmpty(PublicFolderServer)) + cmd.Parameters.Add("Server", PublicFolderServer); + result = ExecuteShellCommand(runSpace, cmd); + foreach (PSObject obj in result) + { + string id = ObjToString(GetPSObjectProperty(obj, "Identity")); + size += CalculatePublicFolderDiskSpace(runSpace, id); + } + } + else + size = 0; ExchangeLog.LogEnd("CalculatePublicFolderDiskSpace"); return size; } From 9167da75dc9589f40c83b5e77e9e4d34bff624be Mon Sep 17 00:00:00 2001 From: robvde Date: Tue, 18 Sep 2012 23:06:21 +0400 Subject: [PATCH 48/55] Organization added to the Space Quota overview --- .../App_LocalResources/SpaceQuotas.ascx.resx | 3 + .../WebsitePanel/SpaceQuotas.ascx | 5 ++ .../WebsitePanel/SpaceQuotas.ascx.cs | 1 + .../WebsitePanel/SpaceQuotas.ascx.designer.cs | 55 +++++++++---------- 4 files changed, 36 insertions(+), 28 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SpaceQuotas.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SpaceQuotas.ascx.resx index 36060e76..54dee688 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SpaceQuotas.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SpaceQuotas.ascx.resx @@ -195,4 +195,7 @@ Exchange Storage, MB: + + Organizations: + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx index 117042ca..e24a9891 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceQuotas.ascx @@ -26,6 +26,11 @@