internal static void UpdateMetabase(ADOabVirtualDirectory virtualDirectory, bool updateAuthenticationMethod, Task.TaskErrorLoggingDelegate handler) { try { DirectoryEntry directoryEntry2; DirectoryEntry directoryEntry = directoryEntry2 = IisUtility.CreateIISDirectoryEntry(virtualDirectory.MetabasePath); try { ArrayList arrayList = new ArrayList(); int num = (int)(IisUtility.GetIisPropertyValue("AccessSSLFlags", IisUtility.GetProperties(directoryEntry)) ?? 0); if (virtualDirectory.RequireSSL) { num |= 8; } else { num &= -9; num &= -257; num &= -65; } arrayList.Add(new MetabaseProperty("AccessSSLFlags", num, true)); if (updateAuthenticationMethod) { uint num2 = (uint)((int)(IisUtility.GetIisPropertyValue("AuthFlags", IisUtility.GetProperties(directoryEntry)) ?? 0)); num2 |= 4U; num2 &= 4294967294U; arrayList.Add(new MetabaseProperty("AuthFlags", num2, true)); MultiValuedProperty <AuthenticationMethod> multiValuedProperty = new MultiValuedProperty <AuthenticationMethod>(); multiValuedProperty.Add(AuthenticationMethod.WindowsIntegrated); if (IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Basic)) { multiValuedProperty.Add(AuthenticationMethod.Basic); } if (IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Digest)) { multiValuedProperty.Add(AuthenticationMethod.Digest); } if (IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Fba)) { multiValuedProperty.Add(AuthenticationMethod.Fba); } virtualDirectory.ExternalAuthenticationMethods = (virtualDirectory.InternalAuthenticationMethods = multiValuedProperty); } IisUtility.SetProperties(directoryEntry, arrayList); directoryEntry.CommitChanges(); IisUtility.CommitMetabaseChanges((virtualDirectory.Server == null) ? null : virtualDirectory.Server.ToString()); } finally { if (directoryEntry2 != null) { ((IDisposable)directoryEntry2).Dispose(); } } } catch (COMException exception) { handler(exception, ErrorCategory.InvalidOperation, virtualDirectory.Identity); } }
private bool?GetAuthentication(ExchangeVirtualDirectory dataObject, string subVDirName, AuthenticationMethodFlags authFlags) { TaskLogger.LogEnter(); try { string text = dataObject.MetabasePath; if (!string.IsNullOrEmpty(subVDirName)) { text = string.Format("{0}/{1}", text, subVDirName); } if (IisUtility.Exists(text)) { using (DirectoryEntry directoryEntry = IisUtility.CreateIISDirectoryEntry(text, new Task.TaskErrorLoggingReThrowDelegate(this.WriteError), dataObject.Identity)) { bool ignoreAnonymousOnCert = dataObject is ADPowerShellCommonVirtualDirectory; return(new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, authFlags, ignoreAnonymousOnCert))); } } } catch (Exception ex) { TaskLogger.Trace("Exception occurred: {0}", new object[] { ex.Message }); base.WriteError(new LocalizedException(this.MetabaseGetPropertiesFailureMessage, ex), (ErrorCategory)1001, dataObject.Identity); } finally { TaskLogger.LogExit(); } return(null); }
protected override void ProcessMetabaseProperties(ExchangeVirtualDirectory dataObject) { TaskLogger.LogEnter(); base.ProcessMetabaseProperties(dataObject); ((ADOabVirtualDirectory)dataObject).OAuthAuthentication = ((ADOabVirtualDirectory)dataObject).InternalAuthenticationMethods.Contains(AuthenticationMethod.OAuth); ((ADOabVirtualDirectory)dataObject).RequireSSL = IisUtility.SSLEnabled(dataObject.MetabasePath); using (DirectoryEntry directoryEntry = IisUtility.CreateIISDirectoryEntry(dataObject.MetabasePath)) { ((ADOabVirtualDirectory)dataObject).BasicAuthentication = IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Basic); ((ADOabVirtualDirectory)dataObject).WindowsAuthentication = IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Ntlm); } dataObject.ResetChangeTracking(); TaskLogger.LogExit(); }
protected override void StampChangesOn(IConfigurable dataObject) { TaskLogger.LogEnter(); ADOabVirtualDirectory adoabVirtualDirectory = (ADOabVirtualDirectory)dataObject; adoabVirtualDirectory.OAuthAuthentication = adoabVirtualDirectory.InternalAuthenticationMethods.Contains(AuthenticationMethod.OAuth); adoabVirtualDirectory.RequireSSL = IisUtility.SSLEnabled(adoabVirtualDirectory.MetabasePath); using (DirectoryEntry directoryEntry = IisUtility.CreateIISDirectoryEntry(adoabVirtualDirectory.MetabasePath)) { adoabVirtualDirectory.BasicAuthentication = IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Basic); adoabVirtualDirectory.WindowsAuthentication = IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Ntlm); } dataObject.ResetChangeTracking(); base.StampChangesOn(dataObject); TaskLogger.LogExit(); }
private void ProcessMetabaseProperties(ADPowerShellVirtualDirectory virtualDirectory) { try { using (DirectoryEntry directoryEntry = IisUtility.CreateIISDirectoryEntry(virtualDirectory.MetabasePath, new Task.TaskErrorLoggingReThrowDelegate(this.WriteError), virtualDirectory.Identity)) { virtualDirectory.BasicAuthentication = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Basic)); virtualDirectory.DigestAuthentication = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Digest)); virtualDirectory.WindowsAuthentication = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Ntlm)); virtualDirectory.CertificateAuthentication = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Certificate)); virtualDirectory.LiveIdBasicAuthentication = new bool?(virtualDirectory.InternalAuthenticationMethods.Contains(AuthenticationMethod.LiveIdBasic)); virtualDirectory.WSSecurityAuthentication = new bool?(virtualDirectory.InternalAuthenticationMethods.Contains(AuthenticationMethod.WSSecurity) && IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.WSSecurity)); virtualDirectory.ResetChangeTracking(); } } catch (Exception ex) { base.WriteErrorAndMonitoringEvent(new CannotPopulateMetabaseInformationException(virtualDirectory.Name, ex.Message, ex), (ErrorCategory)1001, null, 1001, "MSExchange Monitoring PowerShellConnectivity Internal", true); } }
internal static void UpdateFromMetabase(ExchangeWebAppVirtualDirectory webAppVirtualDirectory) { try { DirectoryEntry directoryEntry2; DirectoryEntry directoryEntry = directoryEntry2 = IisUtility.CreateIISDirectoryEntry(webAppVirtualDirectory.MetabasePath); try { MetabaseProperty[] properties = IisUtility.GetProperties(directoryEntry); webAppVirtualDirectory.DefaultDomain = (string)IisUtility.GetIisPropertyValue("DefaultLogonDomain", properties); webAppVirtualDirectory[ExchangeWebAppVirtualDirectorySchema.FormsAuthentication] = IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Fba); webAppVirtualDirectory[ExchangeWebAppVirtualDirectorySchema.BasicAuthentication] = IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Basic); webAppVirtualDirectory[ExchangeWebAppVirtualDirectorySchema.DigestAuthentication] = IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Digest); webAppVirtualDirectory[ExchangeWebAppVirtualDirectorySchema.WindowsAuthentication] = IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Ntlm); if (!IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.None)) { webAppVirtualDirectory[ExchangeWebAppVirtualDirectorySchema.LiveIdAuthentication] = false; } webAppVirtualDirectory.DisplayName = directoryEntry.Name; webAppVirtualDirectory.WebSite = IisUtility.GetWebSiteName(directoryEntry.Parent.Path); } finally { if (directoryEntry2 != null) { ((IDisposable)directoryEntry2).Dispose(); } } webAppVirtualDirectory.GzipLevel = Gzip.GetGzipLevel(webAppVirtualDirectory.MetabasePath); } catch (IISGeneralCOMException ex) { if (ex.Code == -2147023174) { throw new IISNotReachableException(IisUtility.GetHostName(webAppVirtualDirectory.MetabasePath), ex.Message); } throw; } }
protected void InternalValidateBasicLiveIdBasic() { T dataObject = this.DataObject; string metabasePath = dataObject.MetabasePath; Task.TaskErrorLoggingReThrowDelegate writeError = new Task.TaskErrorLoggingReThrowDelegate(this.WriteError); T dataObject2 = this.DataObject; using (DirectoryEntry directoryEntry = IisUtility.CreateIISDirectoryEntry(metabasePath, writeError, dataObject2.Identity)) { T dataObject3 = this.DataObject; bool?basicAuthentication = dataObject3.BasicAuthentication; T dataObject4 = this.DataObject; bool?liveIdBasicAuthentication = dataObject4.LiveIdBasicAuthentication; bool flag = IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Basic); bool flag2 = this.CheckLiveIdBasicAuthModule(false); bool flag3 = basicAuthentication ?? flag; bool flag4 = liveIdBasicAuthentication ?? flag2; if (flag3 && flag4) { string format = "Enabling both Basic and LiveIdBasic Authentication is not allowed. Virtual directory '{0}' has Basic={1}, LiveIdBasic={2}"; object[] array = new object[3]; object[] array2 = array; int num = 0; T dataObject5 = this.DataObject; array2[num] = dataObject5.MetabasePath; array[1] = flag.ToString(); array[2] = flag2.ToString(); TaskLogger.Trace(format, array); T dataObject6 = this.DataObject; Exception exception = new LocalizedException(Strings.ErrorBasicAndLiveIdBasicNotAllowedVDir(dataObject6.MetabasePath, flag.ToString(), flag2.ToString())); ErrorCategory category = ErrorCategory.InvalidOperation; T dataObject7 = this.DataObject; base.WriteError(exception, category, dataObject7.Identity); } } }
protected override void ProcessMetabaseProperties(ExchangeVirtualDirectory dataObject) { TaskLogger.LogEnter(); base.ProcessMetabaseProperties(dataObject); ADExchangeServiceVirtualDirectory adexchangeServiceVirtualDirectory = (ADExchangeServiceVirtualDirectory)dataObject; try { DirectoryEntry directoryEntry2; DirectoryEntry directoryEntry = directoryEntry2 = IisUtility.CreateIISDirectoryEntry(adexchangeServiceVirtualDirectory.MetabasePath, new Task.TaskErrorLoggingReThrowDelegate(this.WriteError), dataObject.Identity, false); try { if (directoryEntry != null) { adexchangeServiceVirtualDirectory.BasicAuthentication = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Basic)); adexchangeServiceVirtualDirectory.DigestAuthentication = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Digest)); adexchangeServiceVirtualDirectory.WindowsAuthentication = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Ntlm)); adexchangeServiceVirtualDirectory.LiveIdNegotiateAuthentication = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.LiveIdNegotiate)); adexchangeServiceVirtualDirectory.LiveIdBasicAuthentication = new bool?(adexchangeServiceVirtualDirectory.InternalAuthenticationMethods.Contains(AuthenticationMethod.LiveIdBasic)); adexchangeServiceVirtualDirectory.OAuthAuthentication = new bool?(adexchangeServiceVirtualDirectory.InternalAuthenticationMethods.Contains(AuthenticationMethod.OAuth)); adexchangeServiceVirtualDirectory.AdfsAuthentication = new bool?(adexchangeServiceVirtualDirectory.InternalAuthenticationMethods.Contains(AuthenticationMethod.Adfs)); adexchangeServiceVirtualDirectory.WSSecurityAuthentication = new bool?(adexchangeServiceVirtualDirectory.InternalAuthenticationMethods.Contains(AuthenticationMethod.WSSecurity) && IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.WSSecurity)); } } finally { if (directoryEntry2 != null) { ((IDisposable)directoryEntry2).Dispose(); } } } catch (Exception ex) { TaskLogger.Trace("Exception occurred: {0}", new object[] { ex.Message }); base.WriteError(new LocalizedException(this.MetabaseGetPropertiesFailureMessage, ex), ErrorCategory.InvalidOperation, dataObject.Identity); } finally { TaskLogger.LogExit(); } }