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; } }
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); } }
protected override void WriteResult(IConfigurable dataObject) { ExchangeVirtualDirectory exchangeVirtualDirectory = (ExchangeVirtualDirectory)dataObject; if (!this.FilterBackendVdir(exchangeVirtualDirectory)) { exchangeVirtualDirectory.ADPropertiesOnly = this.ADPropertiesOnly; if (!exchangeVirtualDirectory.IsReadOnly && !this.ADPropertiesOnly) { bool flag = true; try { using (DirectoryEntry directoryEntry = IisUtility.CreateIISDirectoryEntry(exchangeVirtualDirectory.MetabasePath, new Task.TaskErrorLoggingReThrowDelegate(this.WriteError), dataObject.Identity, false)) { if (directoryEntry != null) { this.MetabaseProperties = IisUtility.GetProperties(directoryEntry); this.ProcessMetabaseProperties(exchangeVirtualDirectory); flag = false; } } } catch (IISNotInstalledException exception) { this.WriteError(exception, ErrorCategory.ReadError, null, false); } catch (IISNotReachableException exception2) { this.WriteError(exception2, ErrorCategory.ReadError, null, false); } catch (IISGeneralCOMException ex) { if (ex.Code == -2147023174) { this.WriteError(new IISNotReachableException(IisUtility.GetHostName(exchangeVirtualDirectory.MetabasePath), ex.Message), ErrorCategory.ResourceUnavailable, null, false); } else { if (ex.Code != -2147024893) { throw; } if (!this.CanIgnoreMissingMetabaseEntry()) { this.WriteError(ex, ErrorCategory.ReadError, null, false); } else { this.WriteWarning(this.GetMissingMetabaseEntryWarning(exchangeVirtualDirectory)); flag = false; } } } catch (UnauthorizedAccessException exception3) { this.WriteError(exception3, ErrorCategory.PermissionDenied, null, false); } if (flag) { return; } } base.WriteResult(dataObject); } }
public static void ReadFromMetabase(ADMobileVirtualDirectory vdirObject, Task task) { MetabasePropertyTypes.AccessSSLFlags accessSSLFlags = MetabasePropertyTypes.AccessSSLFlags.AccessSSL | MetabasePropertyTypes.AccessSSLFlags.AccessSSLNegotiateCert | MetabasePropertyTypes.AccessSSLFlags.AccessSSLRequireCert; string metabasePath = vdirObject.MetabasePath; if (string.IsNullOrEmpty(metabasePath)) { return; } MetabaseProperty[] array = null; using (DirectoryEntry directoryEntry = IisUtility.CreateIISDirectoryEntry(metabasePath)) { array = IisUtility.GetProperties(directoryEntry); } uint num = 0U; bool flag = false; foreach (MetabaseProperty metabaseProperty in array) { if (string.Equals(metabaseProperty.Name, "AuthFlags", StringComparison.OrdinalIgnoreCase)) { object value = metabaseProperty.Value; if (value != null) { MetabasePropertyTypes.AuthFlags authFlags = (MetabasePropertyTypes.AuthFlags)((int)value); vdirObject.BasicAuthEnabled = ((authFlags & MetabasePropertyTypes.AuthFlags.Basic) == MetabasePropertyTypes.AuthFlags.Basic); vdirObject.WindowsAuthEnabled = ((authFlags & MetabasePropertyTypes.AuthFlags.Ntlm) == MetabasePropertyTypes.AuthFlags.Ntlm); } num += 1U; } else if (string.Equals(metabaseProperty.Name, "DoDynamicCompression", StringComparison.OrdinalIgnoreCase)) { object value2 = metabaseProperty.Value; if (value2 != null) { vdirObject.CompressionEnabled = (bool)value2; } num += 1U; } else if (string.Equals(metabaseProperty.Name, "AccessSSLFlags", StringComparison.OrdinalIgnoreCase)) { int?num2 = (int?)metabaseProperty.Value; if (num2 != null) { if ((num2.Value & (int)accessSSLFlags) == (int)accessSSLFlags) { vdirObject.ClientCertAuth = new ClientCertAuthTypes?(ClientCertAuthTypes.Required); } else if ((num2.Value & 32) == 32) { vdirObject.ClientCertAuth = new ClientCertAuthTypes?(ClientCertAuthTypes.Accepted); } else { vdirObject.ClientCertAuth = new ClientCertAuthTypes?(ClientCertAuthTypes.Ignore); } if ((num2.Value & 8) == 8) { vdirObject.WebSiteSSLEnabled = true; } else { vdirObject.WebSiteSSLEnabled = false; } } else { vdirObject.ClientCertAuth = new ClientCertAuthTypes?(ClientCertAuthTypes.Ignore); vdirObject.WebSiteSSLEnabled = false; } flag = true; num += 1U; } else if (string.Equals(metabaseProperty.Name, "AppFriendlyName", StringComparison.OrdinalIgnoreCase)) { object value3 = metabaseProperty.Value; if (value3 != null) { vdirObject.VirtualDirectoryName = (string)value3; } num += 1U; } else if (num == 4U) { break; } } if (!flag) { int startIndex = metabasePath.LastIndexOf('/'); string iisDirectoryEntryPath = metabasePath.Remove(startIndex); using (DirectoryEntry directoryEntry2 = IisUtility.CreateIISDirectoryEntry(iisDirectoryEntryPath)) { int?num3 = (int?)directoryEntry2.Properties["AccessSSLFlags"].Value; if (num3 != null) { if ((num3.Value & (int)accessSSLFlags) == (int)accessSSLFlags) { vdirObject.ClientCertAuth = new ClientCertAuthTypes?(ClientCertAuthTypes.Required); } else if ((num3.Value & 32) == 32) { vdirObject.ClientCertAuth = new ClientCertAuthTypes?(ClientCertAuthTypes.Accepted); } else { vdirObject.ClientCertAuth = new ClientCertAuthTypes?(ClientCertAuthTypes.Ignore); } if ((num3.Value & 8) == 8) { vdirObject.WebSiteSSLEnabled = true; } else { vdirObject.WebSiteSSLEnabled = false; } } else { vdirObject.ClientCertAuth = new ClientCertAuthTypes?(ClientCertAuthTypes.Ignore); vdirObject.WebSiteSSLEnabled = false; } } } char[] separator = new char[] { '/' }; string[] array3 = metabasePath.Split(separator); int num4 = array3.Length - 2; if (num4 <= 0) { return; } StringBuilder stringBuilder = new StringBuilder(47); for (int j = 0; j < num4; j++) { stringBuilder.Append(array3[j]); if (j < num4 - 1) { stringBuilder.Append('/'); } } using (DirectoryEntry directoryEntry3 = IisUtility.CreateIISDirectoryEntry(stringBuilder.ToString())) { array = IisUtility.GetProperties(directoryEntry3); } MetabaseProperty[] array4 = array; int k = 0; while (k < array4.Length) { MetabaseProperty metabaseProperty2 = array4[k]; if (string.Compare(metabaseProperty2.Name, "ServerComment", true) == 0) { object value4 = metabaseProperty2.Value; if (value4 != null) { vdirObject.WebsiteName = (string)value4; break; } break; } else { k++; } } vdirObject.InitProxyVDirDataObject(); ExtendedProtection.LoadFromMetabase(vdirObject, task); }
internal static void UpdateMetabase(ADOabVirtualDirectory virtualDirectory, 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)); IisUtility.SetAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Basic, virtualDirectory.BasicAuthentication); IisUtility.SetAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.WindowsIntegrated, virtualDirectory.WindowsAuthentication); 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); } }