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);
     }
 }
Beispiel #3
0
        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);
        }
Beispiel #5
0
 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);
     }
 }