示例#1
0
 internal PartitionId(Guid partitionObjectId)
 {
     if (partitionObjectId == Guid.Empty)
     {
         throw new ArgumentNullException("partitionObjectId");
     }
     this.forestFQDN = ADAccountPartitionLocator.GetAccountPartitionFqdnByPartitionGuid(partitionObjectId);
     this.ValidatePartitionFqdn(this.forestFQDN);
     this.partitionObjectId = new Guid?(partitionObjectId);
 }
        // Token: 0x06000324 RID: 804 RVA: 0x00010FCC File Offset: 0x0000F1CC
        internal static string GetAccountPartitionFqdnByPartitionGuid(Guid partitionGuid)
        {
            ADAccountPartitionLocator.LoadPartitionCacheIfNecessary();
            string result;

            if (!ADAccountPartitionLocator.partitionsGuidToFQDN.TryGetValue(partitionGuid, out result))
            {
                throw new CannotResolvePartitionException(DirectoryStrings.CannotResolvePartitionGuidError(partitionGuid.ToString()));
            }
            return(result);
        }
        public static ADUser[] FindAllArbitrationMailboxes(string legDN)
        {
            List <ADUser> list = new List <ADUser>();

            foreach (PartitionId partitionId in ADAccountPartitionLocator.GetAllAccountPartitionIds())
            {
                IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromAllTenantsPartitionId(partitionId), 367, "FindAllArbitrationMailboxes", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\PartitionDataAggregator.cs");
                ADUser[]          collection = tenantOrRootOrgRecipientSession.FindPaged <ADUser>(RecipientFilterHelper.DiscoveryMailboxFilterForAuditLog(legDN), null, true, null, 0).ToArray <ADUser>();
                list.AddRange(collection);
            }
            return(list.ToArray());
        }
 // Token: 0x06000316 RID: 790 RVA: 0x00010B78 File Offset: 0x0000ED78
 public static bool IsKnownPartition(PartitionId partitionId)
 {
     if (TopologyProvider.IsAdamTopology())
     {
         return(true);
     }
     if (!Globals.IsMicrosoftHostedOnly && partitionId.PartitionObjectId == null)
     {
         return(false);
     }
     ADAccountPartitionLocator.LoadPartitionCacheIfNecessary();
     return(partitionId.IsLocalForestPartition() || ADAccountPartitionLocator.partitionsFQDNToGuid.ContainsKey(partitionId.ForestFQDN));
 }
        // Token: 0x06000325 RID: 805 RVA: 0x00011008 File Offset: 0x0000F208
        internal static bool IsSingleForestTopology(out PartitionId singleForestPartition)
        {
            ADAccountPartitionLocator.LoadPartitionCacheIfNecessary();
            singleForestPartition = null;
            PartitionId[] array  = ADAccountPartitionLocator.allExplicitlyConfiguredAccountPartitionIds;
            bool          result = false;

            if (array.Length == 1)
            {
                singleForestPartition = array[0];
                result = true;
            }
            return(result);
        }
示例#6
0
        public Guid GetExternalDirectoryOrganizationId()
        {
            Guid result;

            if (this.externalDirectoryOrganizationId != null)
            {
                result = this.externalDirectoryOrganizationId.Value;
            }
            else
            {
                result = ADAccountPartitionLocator.GetExternalDirectoryOrganizationIdByTenantName(this.tenantName, this.partitionId);
            }
            return(result);
        }
        // Token: 0x0600031A RID: 794 RVA: 0x00010C84 File Offset: 0x0000EE84
        public static string GetResourceForestFqdnByExternalDirectoryOrganizationId(Guid externalDirectoryOrganizationId)
        {
            if (!Globals.IsMicrosoftHostedOnly)
            {
                return(PartitionId.LocalForest.ForestFQDN);
            }
            TenantPartitionCacheItem tenantPartitionCacheItem = ADAccountPartitionLocator.FindTenantInfoByExternalOrgId(externalDirectoryOrganizationId);

            if (tenantPartitionCacheItem != null)
            {
                ADAccountPartitionLocator.EnsureAllowedCallerForUnregisteredAccountPartition(tenantPartitionCacheItem);
                return(tenantPartitionCacheItem.ResourceForestFqdn);
            }
            throw new CannotResolveExternalDirectoryOrganizationIdException(DirectoryStrings.CannotResolveTenantNameByExternalDirectoryId(externalDirectoryOrganizationId.ToString()));
        }
        // Token: 0x06000319 RID: 793 RVA: 0x00010C40 File Offset: 0x0000EE40
        public static string GetResourceForestFqdnByAcceptedDomainName(string acceptedDomainName)
        {
            if (!Globals.IsMicrosoftHostedOnly)
            {
                return(PartitionId.LocalForest.ForestFQDN);
            }
            TenantPartitionCacheItem tenantPartitionCacheItem = ADAccountPartitionLocator.FindTenantInfoByAcceptedDomain(acceptedDomainName);

            if (tenantPartitionCacheItem != null)
            {
                ADAccountPartitionLocator.EnsureAllowedCallerForUnregisteredAccountPartition(tenantPartitionCacheItem);
                return(tenantPartitionCacheItem.ResourceForestFqdn);
            }
            throw new CannotResolveTenantNameException(DirectoryStrings.CannotResolveTenantNameByAcceptedDomain(acceptedDomainName));
        }
        // Token: 0x06000315 RID: 789 RVA: 0x00010B34 File Offset: 0x0000ED34
        public static PartitionId SelectAccountPartitionForNewTenant(string name)
        {
            PartitionId[] array = ADAccountPartitionLocator.GetAllAccountPartitionIdsEnabledForProvisioning();
            if (array == null || array.Length == 0)
            {
                return(null);
            }
            if (array.Length == 1)
            {
                return(array[0]);
            }
            int num  = Math.Abs(name.ToUpperInvariant().GetHashCode());
            int num2 = num % array.Length;

            return(array[num2]);
        }
        public static ADRawEntry FindUserBySid(SecurityIdentifier sId, IList <PropertyDefinition> properties, ref IRecipientSession recipientSession)
        {
            ADRawEntry adrawEntry = null;

            foreach (PartitionId partitionId in ADAccountPartitionLocator.GetAllAccountPartitionIds())
            {
                ITenantRecipientSession tenantRecipientSession = DirectorySessionFactory.Default.CreateTenantRecipientSession(true, ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromAllTenantsPartitionId(partitionId), 286, "FindUserBySid", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\PartitionDataAggregator.cs");
                adrawEntry = tenantRecipientSession.FindUserBySid(sId, properties);
                if (adrawEntry != null)
                {
                    recipientSession = tenantRecipientSession;
                    break;
                }
            }
            return(adrawEntry);
        }
        // Token: 0x06000329 RID: 809 RVA: 0x00011358 File Offset: 0x0000F558
        private static TenantPartitionCacheItem FindTenantInfoByExternalOrgId(Guid externalOrgId)
        {
            TenantPartitionCacheItem tenantPartitionCacheItem = null;

            if (externalOrgId == TemplateTenantConfiguration.TemplateTenantExternalDirectoryOrganizationIdGuid)
            {
                ExchangeConfigurationUnit localTemplateTenant = TemplateTenantConfiguration.GetLocalTemplateTenant();
                if (localTemplateTenant != null)
                {
                    ExTraceGlobals.GLSTracer.TraceDebug <string>(0L, "FindTenantInfoByExternalOrgId() asked for Consumer Template tenant, returning {0}", localTemplateTenant.Id.Parent.DistinguishedName);
                    string name = localTemplateTenant.Id.Parent.Name;
                    tenantPartitionCacheItem = new TenantPartitionCacheItem(Guid.Empty, localTemplateTenant.OrganizationId.PartitionId.ForestFQDN, PartitionId.LocalForest.ForestFQDN, externalOrgId, name, false);
                }
                return(tenantPartitionCacheItem);
            }
            PartitionId partitionId;

            if (!ADSessionSettings.IsGlsDisabled)
            {
                if (ADAccountPartitionLocator.TryLookUpAccountForest(externalOrgId, null, null, out tenantPartitionCacheItem))
                {
                    return(tenantPartitionCacheItem);
                }
            }
            else if (ADAccountPartitionLocator.IsSingleForestTopology(out partitionId))
            {
                ExTraceGlobals.GLSTracer.TraceDebug <Guid>(0L, "GLS is disabled, performing the only partition lookup for {0}", externalOrgId);
                return(ADAccountPartitionLocator.SearchForTenantInfoByExternalOrgId(externalOrgId, partitionId));
            }
            if (GlsMServDirectorySession.ShouldScanAllForests)
            {
                ADAccountPartitionLocator.LoadPartitionCacheIfNecessary();
                PartitionId[] array = ADAccountPartitionLocator.allAccountPartitionIds;
                foreach (PartitionId partitionId2 in array)
                {
                    tenantPartitionCacheItem = ADAccountPartitionLocator.SearchForTenantInfoByExternalOrgId(externalOrgId, partitionId2);
                    if (tenantPartitionCacheItem != null)
                    {
                        ADAccountPartitionLocator.InsertCacheMaps(tenantPartitionCacheItem, null, null);
                        return(tenantPartitionCacheItem);
                    }
                }
            }
            return(null);
        }
        // Token: 0x0600031C RID: 796 RVA: 0x00010CEC File Offset: 0x0000EEEC
        public static PartitionId GetPartitionIdByExternalDirectoryOrganizationId(Guid externalDirectoryOrganizationId, out string tenantContainerCN)
        {
            tenantContainerCN = null;
            TenantPartitionCacheItem tenantPartitionCacheItem = ADAccountPartitionLocator.FindTenantInfoByExternalOrgId(externalDirectoryOrganizationId);

            if (tenantPartitionCacheItem != null)
            {
                ADAccountPartitionLocator.EnsureAllowedCallerForUnregisteredAccountPartition(tenantPartitionCacheItem);
                tenantContainerCN = tenantPartitionCacheItem.TenantName;
                return(tenantPartitionCacheItem.AccountPartitionId);
            }
            Globals.LogEvent(DirectoryEventLogConstants.Tuple_CannotResolveExternalDirectoryOrganizationId, externalDirectoryOrganizationId.ToString(), new object[]
            {
                DirectoryStrings.CannotResolveTenantNameByExternalDirectoryId(externalDirectoryOrganizationId.ToString()),
                Environment.StackTrace
            });
            throw new CannotResolveExternalDirectoryOrganizationIdException(DirectoryStrings.CannotResolveTenantNameByExternalDirectoryId(externalDirectoryOrganizationId.ToString()));
        }
        // Token: 0x0600032E RID: 814 RVA: 0x00011838 File Offset: 0x0000FA38
        private static Guid?GetPartitionGuid(PartitionId partitionId)
        {
            if (partitionId == null)
            {
                throw new ArgumentNullException("partitionId");
            }
            Guid guid = (partitionId.PartitionObjectId == null) ? Guid.Empty : partitionId.PartitionObjectId.Value;

            if (guid == Guid.Empty)
            {
                ADAccountPartitionLocator.LoadPartitionCacheIfNecessary();
                if (!ADAccountPartitionLocator.partitionsFQDNToGuid.TryGetValue(partitionId.ForestFQDN, out guid))
                {
                    return(null);
                }
            }
            return(new Guid?(guid));
        }
        // Token: 0x06000318 RID: 792 RVA: 0x00010BE0 File Offset: 0x0000EDE0
        public static PartitionId GetPartitionIdByAcceptedDomainName(string acceptedDomainName, out string tenantContainerCN, out Guid externalDirectoryOrganizationId)
        {
            tenantContainerCN = null;
            externalDirectoryOrganizationId = Guid.Empty;
            if (!Globals.IsMicrosoftHostedOnly)
            {
                return(PartitionId.LocalForest);
            }
            TenantPartitionCacheItem tenantPartitionCacheItem = ADAccountPartitionLocator.FindTenantInfoByAcceptedDomain(acceptedDomainName);

            if (tenantPartitionCacheItem != null)
            {
                ADAccountPartitionLocator.EnsureAllowedCallerForUnregisteredAccountPartition(tenantPartitionCacheItem);
                tenantContainerCN = tenantPartitionCacheItem.TenantName;
                externalDirectoryOrganizationId = tenantPartitionCacheItem.ExternalOrgId;
                return(tenantPartitionCacheItem.AccountPartitionId);
            }
            throw new CannotResolveTenantNameException(DirectoryStrings.CannotResolveTenantNameByAcceptedDomain(acceptedDomainName));
        }
        // Token: 0x06000332 RID: 818 RVA: 0x00011BF4 File Offset: 0x0000FDF4
        private static void LoadPartitionCacheIfNecessary()
        {
            if (ADAccountPartitionLocator.partitionsFQDNToGuid == null)
            {
                ADAccountPartitionLocator.RefreshAllAccountPartitions();
                Interlocked.Exchange(ref ADAccountPartitionLocator.lastRefreshTick, Environment.TickCount);
                return;
            }
            int num = ADAccountPartitionLocator.lastRefreshTick;

            if (Globals.GetTickDifference(num, Environment.TickCount) > (ulong)ADAccountPartitionLocator.PartitionCacheRefreshEveryNMilliseconds)
            {
                int num2 = Interlocked.CompareExchange(ref ADAccountPartitionLocator.lastRefreshTick, Environment.TickCount, num);
                if (num == num2)
                {
                    ADAccountPartitionLocator.RefreshAllAccountPartitions();
                }
            }
        }
        // Token: 0x0600032D RID: 813 RVA: 0x000117EC File Offset: 0x0000F9EC
        private static TenantPartitionCacheItem FindTenantInfoByMSAUserNetID(string msaUserNetID)
        {
            PartitionId partitionId;

            if (!ADSessionSettings.IsGlsDisabled)
            {
                TenantPartitionCacheItem result;
                if (ADAccountPartitionLocator.TryLookUpAccountForest(Guid.Empty, null, msaUserNetID, out result))
                {
                    return(result);
                }
            }
            else if (ADAccountPartitionLocator.IsSingleForestTopology(out partitionId))
            {
                ExTraceGlobals.GLSTracer.TraceDebug <string>(0L, "GLS is disabled, performing the only partition lookup for a Microsoft Account (MSA, formerly known as Windows Live ID) user with NetID {0}", msaUserNetID);
                return(ADAccountPartitionLocator.SearchForTenantInfoByUserNetID(msaUserNetID, partitionId));
            }
            return(null);
        }
        // Token: 0x0600031D RID: 797 RVA: 0x00010D74 File Offset: 0x0000EF74
        public static PartitionId GetPartitionIdByMSAUserNetID(string msaUserNetID, out string tenantContainerCN, out Guid externalDirectoryOrganizationId)
        {
            tenantContainerCN = null;
            externalDirectoryOrganizationId = Guid.Empty;
            TenantPartitionCacheItem tenantPartitionCacheItem = ADAccountPartitionLocator.FindTenantInfoByMSAUserNetID(msaUserNetID);

            if (tenantPartitionCacheItem != null)
            {
                ADAccountPartitionLocator.EnsureAllowedCallerForUnregisteredAccountPartition(tenantPartitionCacheItem);
                tenantContainerCN = tenantPartitionCacheItem.TenantName;
                externalDirectoryOrganizationId = tenantPartitionCacheItem.ExternalOrgId;
                return(tenantPartitionCacheItem.AccountPartitionId);
            }
            Globals.LogEvent(DirectoryEventLogConstants.Tuple_CannotResolveMSAUserNetID, msaUserNetID, new object[]
            {
                DirectoryStrings.CannotFindTenantByMSAUserNetID(msaUserNetID),
                Environment.StackTrace
            });
            throw new CannotResolveMSAUserNetIDException(DirectoryStrings.CannotFindTenantByMSAUserNetID(msaUserNetID));
        }
        public static IEnumerable <ADUser> GetUMEnabledUsersInDatabase(MailboxDatabase database)
        {
            QueryFilter filter = UMMailbox.GetUMEnabledUserQueryFilter(database);

            foreach (PartitionId partitionId in ADAccountPartitionLocator.GetAllAccountPartitionIds(true))
            {
                ADSessionSettings           settings        = ADSessionSettings.FromAllTenantsPartitionId(partitionId);
                ITenantRecipientSession     session         = DirectorySessionFactory.Default.CreateTenantRecipientSession(null, null, LcidMapper.DefaultLcid, true, ConsistencyMode.IgnoreInvalid, null, settings, 199, "GetUMEnabledUsersInDatabase", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\PartitionDataAggregator.cs");
                ADPagedReader <ADRecipient> recipientReader = session.FindPaged(null, QueryScope.SubTree, filter, null, 0);
                foreach (ADRecipient recipient in recipientReader)
                {
                    ADUser user = recipient as ADUser;
                    if (user != null)
                    {
                        yield return(user);
                    }
                }
            }
            yield break;
        }
        public static MiniRecipient GetMiniRecipientFromUserId(SecurityIdentifier sid, IEnumerable <PropertyDefinition> properties, ConsistencyMode consistencyMode)
        {
            MiniRecipient miniRecipient = null;

            foreach (PartitionId partitionId in ADAccountPartitionLocator.GetAllAccountPartitionIds())
            {
                IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, consistencyMode, ADSessionSettings.FromAllTenantsPartitionId(partitionId), 249, "GetMiniRecipientFromUserId", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\PartitionDataAggregator.cs");
                try
                {
                    miniRecipient = tenantOrRootOrgRecipientSession.FindMiniRecipientBySid <MiniRecipient>(sid, properties);
                }
                catch (NonUniqueRecipientException)
                {
                }
                if (miniRecipient != null)
                {
                    break;
                }
            }
            return(miniRecipient);
        }
        // Token: 0x0600031F RID: 799 RVA: 0x00010E68 File Offset: 0x0000F068
        public static bool ValidateDomainName(AcceptedDomain domain, Exception duplicateAcceptedDomainException, Exception conflictingAcceptedDomainException, out Exception error)
        {
            IConfigurationSession session;

            if (Globals.IsDatacenter)
            {
                try
                {
                    session = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.FullyConsistent, ADSessionSettings.FromTenantAcceptedDomain(domain.DomainName.Domain), 432, "ValidateDomainName", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\ADAccountPartitionLocator.cs");
                    goto IL_5C;
                }
                catch (CannotResolveTenantNameException)
                {
                    error = null;
                    return(true);
                }
            }
            session = DirectorySessionFactory.Default.CreateTopologyConfigurationSession(ConsistencyMode.FullyConsistent, ADSessionSettings.FromRootOrgScopeSet(), 442, "ValidateDomainName", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\ADAccountPartitionLocator.cs");
IL_5C:
            return(ADAccountPartitionLocator.ValidateDomainName(domain, session, duplicateAcceptedDomainException, conflictingAcceptedDomainException, out error));
        }
        private static IEnumerable <T> FindPaged <T>(QueryFilter filter, bool includeRetiredTenants = false, SortBy sortBy = null) where T : ADConfigurationObject, new()
        {
            PartitionId[] allAccountPartitionIds = ADAccountPartitionLocator.GetAllAccountPartitionIds();
            int           i = 0;

            while (i < allAccountPartitionIds.Length)
            {
                PartitionId       partitionId = allAccountPartitionIds[i];
                ADPagedReader <T> tenantReader;
                try
                {
                    ADSessionSettings adsessionSettings = ADSessionSettings.FromAllTenantsPartitionId(partitionId);
                    if (includeRetiredTenants)
                    {
                        adsessionSettings.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants;
                    }
                    ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, adsessionSettings, 641, "FindPaged", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\PartitionDataAggregator.cs");
                    tenantReader = tenantConfigurationSession.FindPaged <T>(null, QueryScope.SubTree, filter, sortBy, 0);
                }
                catch (OrgContainerNotFoundException)
                {
                    if (Globals.IsDatacenter)
                    {
                        goto IL_10B;
                    }
                    throw;
                }
                goto IL_AF;
IL_10B:
                i++;
                continue;
IL_AF:
                foreach (T request in tenantReader)
                {
                    yield return(request);
                }
                goto IL_10B;
            }
            yield break;
        }
        // Token: 0x06000323 RID: 803 RVA: 0x00010F48 File Offset: 0x0000F148
        internal static Guid GetAccountPartitionGuidByPartitionId(PartitionId partitionId)
        {
            if (partitionId == null)
            {
                throw new ArgumentNullException("partitionId");
            }
            if (partitionId.PartitionObjectId != null)
            {
                return(partitionId.PartitionObjectId.Value);
            }
            if (string.IsNullOrEmpty(partitionId.ForestFQDN))
            {
                throw new ArgumentNullException("ForestFQDN");
            }
            ADAccountPartitionLocator.LoadPartitionCacheIfNecessary();
            Guid result;

            if (!ADAccountPartitionLocator.partitionsFQDNToGuid.TryGetValue(partitionId.ForestFQDN, out result))
            {
                throw new CannotResolvePartitionException(DirectoryStrings.CannotResolvePartitionFqdnError(partitionId.ForestFQDN));
            }
            return(result);
        }
 // Token: 0x06000321 RID: 801 RVA: 0x00010F2A File Offset: 0x0000F12A
 internal static PartitionId[] GetAllAccountPartitionIds()
 {
     return(ADAccountPartitionLocator.GetAllAccountPartitionIds(false));
 }
        // Token: 0x06000331 RID: 817 RVA: 0x0001196C File Offset: 0x0000FB6C
        private static void RefreshAllAccountPartitions()
        {
            if (!Globals.IsMicrosoftHostedOnly)
            {
                ADAccountPartitionLocator.allAccountPartitionIds = new PartitionId[0];
                ADAccountPartitionLocator.allExplicitlyConfiguredAccountPartitionIds        = new PartitionId[0];
                ADAccountPartitionLocator.allExplicitlyConfiguredPrimaryAccountPartitionIds = new PartitionId[0];
                return;
            }
            AccountPartition[] array = ADAccountPartitionLocator.ReadAccountPartitionsFromAD();
            IOrderedEnumerable <AccountPartition> orderedEnumerable = from x in array
                                                                      orderby x.WhenCreatedUTC descending
                                                                      select x;
            Dictionary <Guid, string> dictionary  = new Dictionary <Guid, string>();
            Dictionary <string, Guid> dictionary2 = new Dictionary <string, Guid>(StringComparer.OrdinalIgnoreCase);
            List <PartitionId>        list        = new List <PartitionId>(array.Length);
            List <PartitionId>        list2       = new List <PartitionId>(array.Length);
            List <PartitionId>        list3       = new List <PartitionId>(array.Length);
            bool        flag        = false;
            PartitionId partitionId = null;

            foreach (AccountPartition accountPartition in orderedEnumerable)
            {
                if (accountPartition.TryGetPartitionId(out partitionId))
                {
                    list.Add(partitionId);
                    dictionary.Add(partitionId.PartitionObjectId.Value, partitionId.ForestFQDN);
                    dictionary2.Add(partitionId.ForestFQDN, partitionId.PartitionObjectId.Value);
                    if (accountPartition.EnabledForProvisioning)
                    {
                        list3.Add(partitionId);
                    }
                    if (!accountPartition.IsSecondary)
                    {
                        list2.Add(partitionId);
                    }
                }
                if (accountPartition.IsLocalForest)
                {
                    flag = true;
                }
            }
            if (list.Count == 0)
            {
                partitionId = new PartitionId(PartitionId.LocalForest.ForestFQDN, ADObjectId.ResourcePartitionGuid);
                list.Add(partitionId);
                list3.Add(partitionId);
            }
            lock (ADAccountPartitionLocator.modifySyncObject)
            {
                ADAccountPartitionLocator.allAccountPartitionIds = list.ToArray();
                ADAccountPartitionLocator.allExplicitlyConfiguredAccountPartitionIds        = list.ToArray();
                ADAccountPartitionLocator.allExplicitlyConfiguredPrimaryAccountPartitionIds = list2.ToArray();
                ADAccountPartitionLocator.allAccountPartitionIdsEnabledForProvisioning      = list3.ToArray();
                ADAccountPartitionLocator.partitionsGuidToFQDN = dictionary;
                ADAccountPartitionLocator.partitionsFQDNToGuid = dictionary2;
                if (!flag)
                {
                    partitionId = new PartitionId(PartitionId.LocalForest.ForestFQDN, ADObjectId.ResourcePartitionGuid);
                    PartitionId[] array2 = new PartitionId[ADAccountPartitionLocator.allAccountPartitionIds.Length + 1];
                    array2[0] = partitionId;
                    Array.Copy(ADAccountPartitionLocator.allAccountPartitionIds, 0, array2, 1, ADAccountPartitionLocator.allAccountPartitionIds.Length);
                    ADAccountPartitionLocator.allAccountPartitionIds = array2;
                    ADAccountPartitionLocator.partitionsFQDNToGuid.Add(partitionId.ForestFQDN, partitionId.PartitionObjectId.Value);
                    ADAccountPartitionLocator.partitionsGuidToFQDN.Add(partitionId.PartitionObjectId.Value, partitionId.ForestFQDN);
                }
            }
            ADAccountPartitionLocator.crossRFLookupCheckEnabled = ADAccountPartitionLocator.UpdateCrossRFLookupCheckEnabled();
        }
        // Token: 0x0600032A RID: 810 RVA: 0x00011460 File Offset: 0x0000F660
        private static bool TryLookUpAccountForest(Guid externalDirectoryOrganizationId, string acceptedDomain, string msaUserNetID, out TenantPartitionCacheItem cacheItem)
        {
            cacheItem = null;
            Exception ex = null;

            if (acceptedDomain == string.Empty)
            {
                throw new ArgumentException(acceptedDomain);
            }
            if (msaUserNetID == string.Empty)
            {
                throw new ArgumentException(msaUserNetID);
            }
            try
            {
                IGlobalDirectorySession globalSession = DirectorySessionFactory.GetGlobalSession(null);
                bool   dataFromOfflineService         = false;
                string resourceForestFqdn;
                string text;
                string tenantName;
                bool   flag;
                if (acceptedDomain != null)
                {
                    if (ADAccountPartitionLocator.acceptedDomainPartitionCache.TryGetValue(acceptedDomain, out cacheItem))
                    {
                        ADProviderPerf.UpdateGlsCacheHitRatio(GlsLookupKey.AcceptedDomain, true);
                        return(true);
                    }
                    ADProviderPerf.UpdateGlsCacheHitRatio(GlsLookupKey.AcceptedDomain, false);
                    string text2;
                    flag = globalSession.TryGetTenantForestsByDomain(acceptedDomain, out externalDirectoryOrganizationId, out resourceForestFqdn, out text, out text2, out tenantName, out dataFromOfflineService);
                }
                else if (externalDirectoryOrganizationId != Guid.Empty)
                {
                    if (ADAccountPartitionLocator.externalOrgIdPartitionCache.TryGetValue(externalDirectoryOrganizationId, out cacheItem))
                    {
                        ADProviderPerf.UpdateGlsCacheHitRatio(GlsLookupKey.ExternalDirectoryObjectId, true);
                        return(true);
                    }
                    ADProviderPerf.UpdateGlsCacheHitRatio(GlsLookupKey.ExternalDirectoryObjectId, false);
                    flag = globalSession.TryGetTenantForestsByOrgGuid(externalDirectoryOrganizationId, out resourceForestFqdn, out text, out tenantName, out dataFromOfflineService);
                }
                else
                {
                    if (ADAccountPartitionLocator.msaUserNetIdPartitionCache.TryGetValue(msaUserNetID, out cacheItem))
                    {
                        ADProviderPerf.UpdateGlsCacheHitRatio(GlsLookupKey.MSAUserNetID, true);
                        return(true);
                    }
                    ADProviderPerf.UpdateGlsCacheHitRatio(GlsLookupKey.MSAUserNetID, false);
                    flag = globalSession.TryGetTenantForestsByMSAUserNetID(msaUserNetID, out externalDirectoryOrganizationId, out resourceForestFqdn, out text, out tenantName);
                }
                if (flag)
                {
                    ADAccountPartitionLocator.LoadPartitionCacheIfNecessary();
                    Guid accountPartitionGuid;
                    ADAccountPartitionLocator.partitionsFQDNToGuid.TryGetValue(text, out accountPartitionGuid);
                    cacheItem = new TenantPartitionCacheItem(accountPartitionGuid, text, resourceForestFqdn, externalDirectoryOrganizationId, tenantName, dataFromOfflineService);
                    ADAccountPartitionLocator.InsertCacheMaps(cacheItem, acceptedDomain, msaUserNetID);
                    return(true);
                }
            }
            catch (MServTransientException ex2)
            {
                ex = ex2;
                if (!GlsMServDirectorySession.ShouldScanAllForests)
                {
                    throw;
                }
            }
            catch (MServPermanentException ex3)
            {
                ex = ex3;
                if (!GlsMServDirectorySession.ShouldScanAllForests)
                {
                    throw;
                }
            }
            catch (TransientException ex4)
            {
                ex = ex4;
                if (!GlsMServDirectorySession.ShouldScanAllForests)
                {
                    throw;
                }
            }
            catch (GlsPermanentException ex5)
            {
                ex = ex5;
                if (!GlsMServDirectorySession.ShouldScanAllForests)
                {
                    throw;
                }
            }
            catch (GlsTenantNotFoundException ex6)
            {
                ex = ex6;
                if (!GlsMServDirectorySession.ShouldScanAllForests)
                {
                    throw;
                }
            }
            if (ex != null)
            {
                ExTraceGlobals.GLSTracer.TraceWarning <Exception>(0L, "Got exception while doing GLS lookup in ADAccountPartitionLocator, ignoring it until 2605034 is fixed {0}", ex);
            }
            return(false);
        }
        // Token: 0x0600031B RID: 795 RVA: 0x00010CD4 File Offset: 0x0000EED4
        public static PartitionId GetPartitionIdByExternalDirectoryOrganizationId(Guid externalDirectoryOrganizationId)
        {
            string text;

            return(ADAccountPartitionLocator.GetPartitionIdByExternalDirectoryOrganizationId(externalDirectoryOrganizationId, out text));
        }
 // Token: 0x06000314 RID: 788 RVA: 0x00010B26 File Offset: 0x0000ED26
 public static PartitionId[] GetAllAccountPartitionIdsEnabledForProvisioning()
 {
     ADAccountPartitionLocator.LoadPartitionCacheIfNecessary();
     return(ADAccountPartitionLocator.allAccountPartitionIdsEnabledForProvisioning);
 }