public static void LoadFromMetabase(ExchangeVirtualDirectory exchangeVirtualDirectory, Task task) { if (exchangeVirtualDirectory.ExchangeVersion.IsOlderThan(ExchangeObjectVersion.Exchange2010)) { return; } string metabasePath = exchangeVirtualDirectory.MetabasePath; ExtendedProtectionTokenCheckingMode extendedProtectionTokenCheckingMode; MultiValuedProperty <ExtendedProtectionFlag> extendedProtectionFlags; MultiValuedProperty <string> extendedProtectionSPNList; ExtendedProtection.LoadFromMetabase(metabasePath, exchangeVirtualDirectory.Identity, task, out extendedProtectionTokenCheckingMode, out extendedProtectionFlags, out extendedProtectionSPNList); exchangeVirtualDirectory[ExchangeVirtualDirectorySchema.ExtendedProtectionTokenChecking] = extendedProtectionTokenCheckingMode; exchangeVirtualDirectory.ExtendedProtectionFlags = extendedProtectionFlags; exchangeVirtualDirectory.ExtendedProtectionSPNList = extendedProtectionSPNList; }
protected virtual void ProcessMetabaseProperties(ExchangeVirtualDirectory dataObject) { dataObject.Path = (string)IisUtility.GetIisPropertyValue("Path", this.MetabaseProperties); ExtendedProtection.LoadFromMetabase(dataObject, this); }
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); }