public static bool IsOrganizationAnchoredOnLocalServer(OrganizationId orgId, bool allowRehoming = true)
        {
            Util.ThrowOnNullArgument(orgId, "orgId");
            ExTraceGlobals.StorageTracer.TraceDebug <OrganizationId>(0L, "IsOrganizationAnchoredOnLocalServer orgId='{0}'", orgId);
            OrganizationCapability organizationCapability            = OrganizationCapability.Management;
            List <ADUser>          organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(OrganizationMailbox.GetSession(orgId, allowRehoming), organizationCapability);

            if (organizationMailboxesByCapability == null || organizationMailboxesByCapability.Count == 0)
            {
                ExTraceGlobals.StorageTracer.TraceDebug <OrganizationId, OrganizationCapability>(0L, "IsOrganizationAnchoredOnLocalServer orgId='{0}', capability='{1}' -- No org mailboxes found", orgId, organizationCapability);
                return(false);
            }
            ADUser aduser      = organizationMailboxesByCapability[0];
            Server localServer = LocalServerCache.LocalServer;

            if (localServer == null)
            {
                ExTraceGlobals.StorageTracer.TraceDebug(0L, "IsOrganizationAnchoredOnLocalServer - No local server found");
                return(false);
            }
            List <Guid> list = new List <Guid>(new Guid[]
            {
                aduser.Database.ObjectGuid
            });

            ExTraceGlobals.StorageTracer.TraceDebug <OrganizationId, string, int>(0L, "IsOrganizationAnchoredOnLocalServer orgId='{0}' -- invoking MailboxAdminHelper.GetOnlineDatabase() for server {1} and list of {2} guids", orgId, localServer.Fqdn, list.Count);
            List <Guid> onlineDatabase = MailboxAdminHelper.GetOnlineDatabase(localServer.Fqdn, list);

            ExTraceGlobals.StorageTracer.TraceDebug <OrganizationId, int>(0L, "IsOrganizationAnchoredOnLocalServer orgId='{0}' -- MailboxAdminHelper.GetOnlineDatabase() returned list of {1} guids", orgId, onlineDatabase.Count);
            return(onlineDatabase.Count > 0);
        }
Exemple #2
0
 // Token: 0x060001EB RID: 491 RVA: 0x00007508 File Offset: 0x00005708
 private static QueryFilter GetMailboxFilter(OrganizationCapability anchorCapability)
 {
     return(QueryFilter.AndTogether(new QueryFilter[]
     {
         OrganizationMailbox.OrganizationMailboxFilterBase,
         new ComparisonFilter(ComparisonOperator.Equal, ADRecipientSchema.RawCapabilities, anchorCapability)
     }));
 }
 public static ADUser[] FindByDatabaseId(OrganizationCapability capability, ADObjectId databaseId)
 {
     EnumValidator.ThrowIfInvalid <OrganizationCapability>(capability, "capability");
     if (!OrganizationMailbox.IsMultiTenantEnvironment())
     {
         return(OrganizationMailbox.InternalFindEnterprise(capability, databaseId));
     }
     return(OrganizationMailbox.InternalFindMultiTenant(capability, databaseId));
 }
Exemple #4
0
        internal static ADUser GetOrganizationMailbox(OrganizationId organizationId, OrganizationCapability capability, string anchorMailboxKey = null)
        {
            if (organizationId == null)
            {
                organizationId = OrganizationId.ForestWideOrgId;
            }
            IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(organizationId), 269, "GetOrganizationMailbox", "f:\\15.00.1497\\sources\\dev\\data\\src\\ApplicationLogic\\Cafe\\HttpProxyBackEndHelper.cs");

            return(HttpProxyBackEndHelper.GetOrganizationMailbox(tenantOrRootOrgRecipientSession, capability, anchorMailboxKey));
        }
        // Token: 0x06000039 RID: 57 RVA: 0x00002498 File Offset: 0x00000698
        public void AddCapability(ADObjectId objectId, OrganizationCapability capability)
        {
            AnchorUtil.ThrowOnNullArgument(objectId, "objectId");
            ADUser user = this.GetAnchorADUser(objectId);

            this.DoAdCallAndTranslateExceptions(delegate
            {
                user.PersistedCapabilities.Add((Capability)capability);
                this.RecipientSession.Save(user);
            }, true);
        }
        private static ADUser[] InternalFindMultiTenant(OrganizationCapability capability, ADObjectId databaseId)
        {
            QueryFilter additionalfilter = null;

            if (databaseId != null)
            {
                additionalfilter = new ComparisonFilter(ComparisonOperator.Equal, ADMailboxRecipientSchema.Database, databaseId);
            }
            else
            {
                additionalfilter = OrganizationMailbox.GetOrganizationMailboxQueryFilterForLocalServer();
            }
            Dictionary <OrganizationId, ADUser> orgMailboxesDictionary = new Dictionary <OrganizationId, ADUser>();

            PartitionDataAggregator.RunOperationOnAllAccountPartitions(true, delegate(IRecipientSession recipientSession)
            {
                List <ADUser> organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(recipientSession, capability, additionalfilter);
                foreach (ADUser aduser in organizationMailboxesByCapability)
                {
                    ADUser user = null;
                    if (orgMailboxesDictionary.TryGetValue(aduser.OrganizationId, out user))
                    {
                        if (OrganizationMailbox.UserComparer(user, aduser) > 0)
                        {
                            orgMailboxesDictionary[aduser.OrganizationId] = aduser;
                        }
                    }
                    else
                    {
                        orgMailboxesDictionary[aduser.OrganizationId] = aduser;
                    }
                }
            });
            ADUser[] array = new ADUser[orgMailboxesDictionary.Count];
            if (orgMailboxesDictionary.Count > 0)
            {
                orgMailboxesDictionary.Values.CopyTo(array, 0);
            }
            return(array);
        }
        private static ADUser[] InternalFindEnterprise(OrganizationCapability capability, ADObjectId databaseId)
        {
            ADSessionSettings sessionSettings         = ADSessionSettings.FromRootOrgScopeSet();
            IRootOrganizationRecipientSession session = DirectorySessionFactory.Default.CreateRootOrgRecipientSession(null, null, LcidMapper.DefaultLcid, true, ConsistencyMode.IgnoreInvalid, null, sessionSettings, 558, "InternalFindEnterprise", "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\OrganizationMailbox\\OrganizationMailbox.cs");
            QueryFilter optionalFilter;

            if (databaseId != null)
            {
                optionalFilter = new ComparisonFilter(ComparisonOperator.Equal, ADMailboxRecipientSchema.Database, databaseId);
            }
            else
            {
                optionalFilter = OrganizationMailbox.GetOrganizationMailboxQueryFilterForLocalServer();
            }
            List <ADUser> organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(session, capability, optionalFilter);
            List <ADUser> list = new List <ADUser>(1);

            if (organizationMailboxesByCapability.Count >= 1)
            {
                list.Add(organizationMailboxesByCapability[0]);
            }
            return(list.ToArray());
        }
 public static void GetOrganizationMailboxesByCapability(IRecipientSession session, OrganizationCapability capability, ADObjectId siteId, out List <ADUser> filteredList, out List <ADUser> completeList)
 {
     ExAssert.RetailAssert(!OrganizationMailbox.IsMultiTenantEnvironment(), "GetOrganizationMailboxesByCapability (site-based) should not be used in Datacenter Multitenant environment");
     ExTraceGlobals.StorageTracer.TraceDebug <OrganizationCapability>(0L, "Entering GetOrganizationMailboxByCapability capability='{0}'", capability);
     if (siteId == null)
     {
         throw new ArgumentNullException("siteId");
     }
     completeList = OrganizationMailbox.GetOrganizationMailboxesByCapability(session, capability);
     ExTraceGlobals.StorageTracer.TraceDebug <int, OrganizationCapability>(0L, "GetOrganizationMailboxByCapability -completeList of mailbox, count='{0}', capability='{1}'", completeList.Count, capability);
     filteredList = new List <ADUser>();
     if (completeList.Count > 0)
     {
         ExTraceGlobals.StorageTracer.TraceDebug <OrganizationCapability>(0L, "GetOrganizationMailboxByCapability -GetCurrentServiceTopology capability='{0}'", capability);
         ServiceTopology currentServiceTopology = ServiceTopology.GetCurrentServiceTopology("f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\OrganizationMailbox\\OrganizationMailbox.cs", "GetOrganizationMailboxesByCapability", 137);
         foreach (ADUser aduser in completeList)
         {
             ExchangePrincipal exchangePrincipal = ExchangePrincipal.FromADUser(session.SessionSettings, aduser, RemotingOptions.AllowCrossSite);
             string            serverFqdn        = exchangePrincipal.MailboxInfo.Location.ServerFqdn;
             ExTraceGlobals.StorageTracer.TraceDebug <string, OrganizationCapability>(0L, "GetOrganizationMailboxByCapability calling GetSite with Prinicipal.ServerFQDN='{0}', capability='{1}'", serverFqdn, capability);
             Site site       = currentServiceTopology.GetSite(serverFqdn, "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\OrganizationMailbox\\OrganizationMailbox.cs", "GetOrganizationMailboxesByCapability", 151);
             Guid objectGuid = site.Id.ObjectGuid;
             ExTraceGlobals.StorageTracer.TraceDebug <string, Guid, OrganizationCapability>(0L, "GetOrganizationMailboxByCapability  GetSite called with Prinicipal.ServerFQDN='{0}', Site='{1}'capability='{2}'", serverFqdn, objectGuid, capability);
             if (siteId.ObjectGuid.Equals(objectGuid))
             {
                 filteredList.Add(aduser);
             }
         }
     }
 }
 // Token: 0x06000036 RID: 54 RVA: 0x00002425 File Offset: 0x00000625
 public IEnumerable <ADUser> GetOrganizationMailboxesByCapability(OrganizationCapability capability)
 {
     return(OrganizationMailbox.GetOrganizationMailboxesByCapability(this.RecipientSession, capability));
 }
 protected AnchorContext(OrganizationCapability anchorCapability)
 {
     this.AnchorCapability = anchorCapability;
 }
 internal AnchorContext(string applicationName, OrganizationCapability anchorCapability, AnchorConfig config) : base(applicationName, config)
 {
     this.AnchorCapability = anchorCapability;
 }
 public AnchorContext(string applicationName, OrganizationCapability anchorCapability) : base(applicationName)
 {
     this.AnchorCapability = anchorCapability;
 }
 public static List <ADUser> GetOrganizationMailboxesByCapability(IRecipientSession session, OrganizationCapability capability, QueryFilter optionalFilter)
 {
     return(OrganizationMailbox.InternalGetOrganizationMailboxesByCapability(session, capability, optionalFilter));
 }
Exemple #14
0
 // Token: 0x06000019 RID: 25 RVA: 0x0000225A File Offset: 0x0000045A
 public ActiveAnchorContext(string applicationName, OrganizationCapability anchorCapability, OrganizationCapability activeCapability) : base(applicationName, anchorCapability)
 {
     this.activeCapability = activeCapability;
 }
Exemple #15
0
        private static ADUser GetOrganizationMailbox(IRecipientSession recipientSession, OrganizationCapability capability, string anchorMailboxKey)
        {
            if (recipientSession == null)
            {
                throw new ArgumentNullException("recipientSession");
            }
            List <ADUser> organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(recipientSession, capability);

            if (organizationMailboxesByCapability == null || organizationMailboxesByCapability.Count == 0)
            {
                ExTraceGlobals.CafeTracer.TraceError <OrganizationCapability, OrganizationId>(0L, "[HttpProxyBackEndHelper.GetOrganizationMailbox] Unable to find organization mailbox with capability {0} for organization {1}.", capability, recipientSession.SessionSettings.CurrentOrganizationId);
                return(null);
            }
            ADUser aduser;

            if (!string.IsNullOrEmpty(anchorMailboxKey) && organizationMailboxesByCapability.Count > 1)
            {
                aduser = organizationMailboxesByCapability[HttpProxyBackEndHelper.ComputeIndex(anchorMailboxKey, organizationMailboxesByCapability.Count)];
            }
            else
            {
                aduser = organizationMailboxesByCapability[0];
            }
            ExTraceGlobals.CafeTracer.TraceDebug <ObjectId, OrganizationCapability, OrganizationId>(0L, "[HttpProxyBackEndHelper.GetOrganizationMailbox] Find organization mailbox {0} with capability {1} for organization {2}.", aduser.Identity, capability, recipientSession.SessionSettings.CurrentOrganizationId);
            return(aduser);
        }
        private static List <ADUser> InternalGetOrganizationMailboxesByCapability(IRecipientSession session, OrganizationCapability capability, QueryFilter optionalFilter)
        {
            EnumValidator.ThrowIfInvalid <OrganizationCapability>(capability, "capability");
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }
            List <ADUser> list        = new List <ADUser>();
            QueryFilter   queryFilter = new AndFilter(new QueryFilter[]
            {
                OrganizationMailbox.OrganizationMailboxFilterBase,
                new ComparisonFilter(ComparisonOperator.Equal, ADRecipientSchema.RawCapabilities, capability)
            });

            if (optionalFilter != null)
            {
                queryFilter = QueryFilter.AndTogether(new QueryFilter[]
                {
                    queryFilter,
                    optionalFilter
                });
            }
            ADObjectId rootId;
            QueryScope scope;

            OrganizationMailbox.GetQueryParameters(session, out rootId, out scope);
            ADPagedReader <ADRecipient> adpagedReader = session.FindPaged(rootId, scope, queryFilter, new SortBy(ADObjectSchema.WhenCreated, SortOrder.Ascending), 0);

            if (adpagedReader != null)
            {
                foreach (ADRecipient adrecipient in adpagedReader)
                {
                    ADUser aduser = adrecipient as ADUser;
                    if (aduser != null)
                    {
                        list.Add(aduser);
                    }
                }
            }
            return(list);
        }
 public static void GetOrganizationMailboxesByCapability(IRecipientSession session, OrganizationCapability capability, int minVersion, int maxVersion, out List <ADUser> filteredList, out List <ADUser> completeList)
 {
     completeList = OrganizationMailbox.GetOrganizationMailboxesByCapability(session, capability);
     filteredList = new List <ADUser>();
     foreach (ADUser aduser in completeList)
     {
         ExchangePrincipal exchangePrincipal = ExchangePrincipal.FromADUser(session.SessionSettings, aduser, RemotingOptions.AllowCrossSite);
         if (exchangePrincipal.MailboxInfo.Location.ServerVersion >= minVersion && exchangePrincipal.MailboxInfo.Location.ServerVersion < maxVersion)
         {
             filteredList.Add(aduser);
         }
     }
 }
 public static List <ADUser> GetOrganizationMailboxesByCapability(IRecipientSession session, OrganizationCapability capability)
 {
     return(OrganizationMailbox.InternalGetOrganizationMailboxesByCapability(session, capability, null));
 }
 public static bool TryFindByOrganizationId(OrganizationId organizationId, ADObjectId siteId, OrganizationCapability capability, out List <ADUser> siteUsers, out List <ADUser> allUsers)
 {
     ExAssert.RetailAssert(!OrganizationMailbox.IsMultiTenantEnvironment(), "TryFindByOrganizationId (site-based) should not be used in Datacenter Multitenant environment");
     OrganizationMailbox.GetOrganizationMailboxesByCapability(OrganizationMailbox.GetSession(organizationId, true), capability, siteId, out siteUsers, out allUsers);
     return(allUsers.Count > 0);
 }
 public static ADUser[] FindByOrganizationId(OrganizationId organizationId, OrganizationCapability capability)
 {
     return(OrganizationMailbox.GetOrganizationMailboxesByCapability(OrganizationMailbox.GetSession(organizationId, true), capability).ToArray());
 }
Exemple #21
0
        private static ADUser GetOrganizationMailboxInClosestSite(IRecipientSession recipientSession, OrganizationCapability capability)
        {
            if (recipientSession == null)
            {
                throw new ArgumentNullException("recipientSession");
            }
            List <ADUser> organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(recipientSession, capability);

            if (organizationMailboxesByCapability == null || organizationMailboxesByCapability.Count == 0)
            {
                ExTraceGlobals.CafeTracer.TraceError <OrganizationCapability, OrganizationId>(0L, "[HttpProxyBackEndHelper.GetOrganizationMailbox] Unable to find organization mailbox with capability {0} for organization {1}.", capability, recipientSession.SessionSettings.CurrentOrganizationId);
                return(null);
            }
            ADUser aduser;

            if (organizationMailboxesByCapability.Count == 1)
            {
                aduser = organizationMailboxesByCapability[0];
            }
            else
            {
                ServiceTopology currentServiceTopology = ServiceTopology.GetCurrentServiceTopology("f:\\15.00.1497\\sources\\dev\\data\\src\\ApplicationLogic\\Cafe\\HttpProxyBackEndHelper.cs", "GetOrganizationMailboxInClosestSite", 753);
                Site            site = currentServiceTopology.GetSite(LocalServerCache.LocalServerFqdn, "f:\\15.00.1497\\sources\\dev\\data\\src\\ApplicationLogic\\Cafe\\HttpProxyBackEndHelper.cs", "GetOrganizationMailboxInClosestSite", 754);
                List <ADUser>   list = new List <ADUser>(5);
                int             num  = int.MaxValue;
                foreach (ADUser aduser2 in organizationMailboxesByCapability)
                {
                    ExchangePrincipal exchangePrincipal = ExchangePrincipal.FromADUser(recipientSession.SessionSettings, aduser2, RemotingOptions.AllowCrossSite);
                    Site site2 = currentServiceTopology.GetSite(exchangePrincipal.MailboxInfo.Location.ServerFqdn, "f:\\15.00.1497\\sources\\dev\\data\\src\\ApplicationLogic\\Cafe\\HttpProxyBackEndHelper.cs", "GetOrganizationMailboxInClosestSite", 761);
                    if (list.Count == 0)
                    {
                        list.Add(aduser2);
                        currentServiceTopology.TryGetConnectionCost(site, site2, out num, "f:\\15.00.1497\\sources\\dev\\data\\src\\ApplicationLogic\\Cafe\\HttpProxyBackEndHelper.cs", "GetOrganizationMailboxInClosestSite", 768);
                    }
                    else
                    {
                        int maxValue = int.MaxValue;
                        currentServiceTopology.TryGetConnectionCost(site, site2, out maxValue, "f:\\15.00.1497\\sources\\dev\\data\\src\\ApplicationLogic\\Cafe\\HttpProxyBackEndHelper.cs", "GetOrganizationMailboxInClosestSite", 773);
                        if (maxValue == num)
                        {
                            list.Add(aduser2);
                        }
                        else if (maxValue < num)
                        {
                            list.Clear();
                            list.Add(aduser2);
                            num = maxValue;
                        }
                    }
                }
                if (list.Count == 1)
                {
                    aduser = list[0];
                }
                else
                {
                    aduser = list[HttpProxyBackEndHelper.random.Next(list.Count)];
                }
            }
            ExTraceGlobals.CafeTracer.TraceDebug <ObjectId, OrganizationCapability, OrganizationId>(0L, "[HttpProxyBackEndHelper.GetOrganizationMailbox] Find organization mailbox {0} with capability {1} for organization {2}.", aduser.Identity, capability, recipientSession.SessionSettings.CurrentOrganizationId);
            return(aduser);
        }
        public static ADUser GetLocalOrganizationMailboxByCapability(OrganizationId orgId, OrganizationCapability capability, bool allowRehoming = true)
        {
            Util.ThrowOnNullArgument(orgId, "orgId");
            EnumValidator.ThrowIfInvalid <OrganizationCapability>(capability, "capability");
            ExTraceGlobals.StorageTracer.TraceDebug <OrganizationId, OrganizationCapability>(0L, "GetLocalOrganizationMailboxByCapability orgId='{0}', capability='{1}'", orgId, capability);
            IRecipientSession session = OrganizationMailbox.GetSession(orgId, allowRehoming);
            List <ADUser>     organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(session, capability);

            if (organizationMailboxesByCapability == null || organizationMailboxesByCapability.Count == 0)
            {
                ExTraceGlobals.StorageTracer.TraceDebug <OrganizationId, OrganizationCapability>(0L, "GetLocalOrganizationMailboxByCapability orgId='{0}', capability='{1}' -- No org mailboxes found", orgId, capability);
                return(null);
            }
            Server localServer = LocalServerCache.LocalServer;

            if (localServer == null)
            {
                ExTraceGlobals.StorageTracer.TraceDebug <OrganizationId, OrganizationCapability>(0L, "GetLocalOrganizationMailboxByCapability orgId='{0}', capability='{1}' -- No local server found", orgId, capability);
                return(null);
            }
            Database[] databases = localServer.GetDatabases();
            if (databases == null || databases.Length == 0)
            {
                ExTraceGlobals.StorageTracer.TraceDebug <OrganizationId, OrganizationCapability>(0L, "GetLocalOrganizationMailboxByCapability orgId='{0}', capability='{1}' -- No local databases found", orgId, capability);
                return(null);
            }
            foreach (ADUser aduser in organizationMailboxesByCapability)
            {
                ExTraceGlobals.StorageTracer.TraceDebug <OrganizationId, OrganizationCapability, string>(0L, "GetLocalOrganizationMailboxByCapability orgId='{0}', capability='{1}' -- Processing mbox='{2}'", orgId, capability, aduser.DistinguishedName);
                foreach (Database database in databases)
                {
                    if (aduser.Database.Equals(database.Id))
                    {
                        ExTraceGlobals.StorageTracer.TraceDebug <OrganizationId, OrganizationCapability, string>(0L, "GetLocalOrganizationMailboxByCapability orgId='{0}', capability='{1}' -- returning mbox='{2}'", orgId, capability, aduser.DistinguishedName);
                        return(aduser);
                    }
                }
            }
            return(null);
        }
        public static ADUser GetOrganizationMailboxByUPNAndCapability(IRecipientSession session, string targetOrgMailbox, OrganizationCapability capability)
        {
            Util.ThrowOnNullOrEmptyArgument(targetOrgMailbox, "targetOrgMailbox");
            QueryFilter   optionalFilter = new TextFilter(ADUserSchema.UserPrincipalName, targetOrgMailbox, MatchOptions.FullString, MatchFlags.IgnoreCase);
            List <ADUser> list           = OrganizationMailbox.InternalGetOrganizationMailboxesByCapability(session, capability, optionalFilter);

            if (list.Count != 1)
            {
                ExTraceGlobals.StorageTracer.TraceError <string, OrganizationCapability, OrganizationId>(0L, "[GetOrganizationMailboxByUPNAndCapacity] Unable to find organization mailbox with UPN {0} capability {1} for organization {2}.", targetOrgMailbox, capability, session.SessionSettings.CurrentOrganizationId);
                return(null);
            }
            return(list[0]);
        }
 public static ADUser[] FindByLocalDatabaseAvailablityGroup(OrganizationCapability capability)
 {
     return(OrganizationMailbox.FindByDatabaseId(capability, null));
 }