示例#1
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 ADUser GetOrgMailbox(string domain)
        {
            ADSessionSettings sessionSettings = null;

            try
            {
                sessionSettings = ADSessionSettings.FromTenantAcceptedDomain(domain);
            }
            catch (CannotResolveTenantNameException arg)
            {
                EncryptionConfigurationTable.Tracer.TraceInformation <CannotResolveTenantNameException>(0, 0L, "Can't resolve tenant name. Exception: {0}", arg);
                EncryptionConfigurationTable.logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_E4EOrganizationMailboxRetrievalFailed, domain, new object[]
                {
                    "ProcessEncryptionConfiguration",
                    domain
                });
                return(null);
            }
            IRecipientSession tenantOrRootOrgRecipientSession   = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, sessionSettings, 334, "GetOrgMailbox", "f:\\15.00.1497\\sources\\dev\\data\\src\\ApplicationLogic\\E4E\\EncryptionConfigurationTable.cs");
            List <ADUser>     organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(tenantOrRootOrgRecipientSession, OrganizationCapability.OfficeMessageEncryption);

            if (organizationMailboxesByCapability == null || 1 != organizationMailboxesByCapability.Count)
            {
                EncryptionConfigurationTable.Tracer.TraceInformation(0, 0L, "Org mailbox is not configured.");
                EncryptionConfigurationTable.logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_E4EOrganizationMailboxRetrievalFailed, domain, new object[]
                {
                    "ProcessEncryptionConfiguration",
                    domain
                });
                return(null);
            }
            return(organizationMailboxesByCapability[0]);
        }
        // Token: 0x06001111 RID: 4369 RVA: 0x000634E0 File Offset: 0x000616E0
        private List <ADUser> GetAllSystemMailboxes(Guid databaseGuid)
        {
            UMTracer.DebugTrace("UMGrammarTenantCache.GetAllSystemMailboxes for database '{0}'", new object[]
            {
                databaseGuid
            });
            List <ADUser> systemMailboxes = new List <ADUser>();
            Exception     ex = Utilities.RunSafeADOperation(ExTraceGlobals.UMGrammarGeneratorTracer, delegate
            {
                systemMailboxes.AddRange(OrganizationMailbox.FindByDatabaseId(OrganizationCapability.UMGrammar, new ADObjectId(databaseGuid)));
            }, "GetAllSystemMailboxes: Getting all system mailboxes in a given database");

            if (ex != null)
            {
                UMTracer.ErrorTrace("GetAllSystemMailboxes: Failed in AD operation for database '{0}'. Error='{1}'", new object[]
                {
                    databaseGuid.ToString(),
                    ex
                });
                UmGlobals.ExEvent.LogEvent(UMEventLogConstants.Tuple_GrammarGenerationCouldntFindSystemMailbox, null, new object[]
                {
                    databaseGuid.ToString(),
                    CommonUtil.ToEventLogString(ex)
                });
            }
            return(systemMailboxes);
        }
示例#4
0
 // Token: 0x0600015F RID: 351 RVA: 0x00005A8C File Offset: 0x00003C8C
 protected virtual IEnumerable <ADUser> GetLocalMailboxUsers()
 {
     foreach (Guid databaseGuid in this.GetLocalActiveDatabases())
     {
         foreach (ADUser user in OrganizationMailbox.FindByDatabaseId(base.Context.ActiveCapability, new ADObjectId(databaseGuid)))
         {
             yield return(user);
         }
     }
     yield break;
 }
        // Token: 0x060010DE RID: 4318 RVA: 0x00062C18 File Offset: 0x00060E18
        internal int GetOrganizationMailboxCount()
        {
            this.Logger.TraceDebug(this, "GetOrganizationMailboxCount", new object[0]);
            ADUser[] array = OrganizationMailbox.FindByOrganizationId(this.OrgId, this.CapabilityRequiringScaling);
            int      num   = array.Length;

            this.Logger.TraceDebug(this, "GetOrganizationMailboxCount - Count='{0}'", new object[]
            {
                num
            });
            return(num);
        }
        protected override IConfigurable ResolveDataObject()
        {
            ADUser result = null;

            try
            {
                result = CommonUtil.ValidateAndReturnUMDataStorageOrgMbx(OrganizationMailbox.GetOrganizationMailboxesByCapability((IRecipientSession)base.DataSession, OrganizationCapability.UMDataStorage));
            }
            catch (ObjectNotFoundException exception)
            {
                base.WriteError(exception, ErrorCategory.ReadError, null);
            }
            catch (NonUniqueRecipientException exception2)
            {
                base.WriteError(exception2, ErrorCategory.ReadError, null);
            }
            return(result);
        }
示例#7
0
        // Token: 0x06000B56 RID: 2902 RVA: 0x0002E044 File Offset: 0x0002C244
        internal static ADUser GetOrgMailbox(string domain)
        {
            ADSessionSettings adsessionSettings = null;

            if (OrgExtensionTable.IsDatacenter)
            {
                if (domain == null)
                {
                    return(null);
                }
                try
                {
                    adsessionSettings = ADSessionSettings.FromTenantAcceptedDomain(domain);
                }
                catch (CannotResolveTenantNameException arg)
                {
                    OrgExtensionTable.Tracer.TraceInformation <CannotResolveTenantNameException>(0, 0L, "Can't resolve tenant name. Exception: {0}", arg);
                    ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_OrganizationMailboxRetrievalFailed, domain, new object[]
                    {
                        "ProcessOrgExtensions",
                        domain
                    });
                    return(null);
                }
            }
            if (adsessionSettings == null)
            {
                adsessionSettings = ADSessionSettings.FromRootOrgScopeSet();
            }
            IRecipientSession tenantOrRootOrgRecipientSession   = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, adsessionSettings, 559, "GetOrgMailbox", "f:\\15.00.1497\\sources\\dev\\data\\src\\ApplicationLogic\\extension\\OrgExtensionTable.cs");
            List <ADUser>     organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(tenantOrRootOrgRecipientSession, OrganizationCapability.ClientExtensions);

            if (organizationMailboxesByCapability == null || 1 != organizationMailboxesByCapability.Count)
            {
                OrgExtensionTable.Tracer.TraceInformation(0, 0L, "Org mailbox is not configured.");
                ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_OrganizationMailboxRetrievalFailed, domain, new object[]
                {
                    "ProcessOrgExtensions",
                    domain
                });
                return(null);
            }
            return(organizationMailboxesByCapability[0]);
        }
示例#8
0
        private ADUser GetLocalOrganizationMailbox()
        {
            Server localServer = LocalServerCache.LocalServer;

            ADUser[] array = OrganizationMailbox.FindByOrganizationId(this.DataObject.OrganizationId, this.OrganizationCapability);
            foreach (ADUser aduser in array)
            {
                if (this.DataObject.Identity.Equals(aduser.Id))
                {
                    string activeServerFqdn = OrganizationMailbox.GetActiveServerFqdn(aduser.Id);
                    if (StringComparer.OrdinalIgnoreCase.Equals(localServer.Fqdn, activeServerFqdn))
                    {
                        return(aduser);
                    }
                }
            }
            base.WriteError(new LocalizedException(Strings.ErrorNoLocalOrganizationMailbox(this.DataObject.Identity.ToString())), ErrorCategory.ObjectNotFound, this.Identity);
            return(null);
        }
示例#9
0
        // Token: 0x060010AB RID: 4267 RVA: 0x00061DA0 File Offset: 0x0005FFA0
        private List <ADUser> GetAllSystemMailboxes(Guid databaseGuid)
        {
            GroupMetricsTenantCache.Tracer.TraceDebug <Guid>((long)this.GetHashCode(), "GroupMetricsTenantCache.GetAllSystemMailboxes for database {0}", databaseGuid);
            List <ADUser> systemMailboxes = new List <ADUser>();
            Exception     ex = Utilities.RunSafeADOperation(GroupMetricsTenantCache.Tracer, delegate
            {
                systemMailboxes.AddRange(OrganizationMailbox.FindByDatabaseId(OrganizationCapability.GMGen, new ADObjectId(databaseGuid)));
            }, "GetAllSystemMailboxes: Getting all system mailboxes in a given database");

            if (ex != null)
            {
                GroupMetricsTenantCache.Tracer.TraceDebug <Guid, Exception>((long)this.GetHashCode(), "GetAllSystemMailboxes: Failed in AD operation for database '{0}'. Error='{1}'", databaseGuid, ex);
                GroupMetricsTenantCache.EventLogger.LogEvent(InfoWorkerEventLogConstants.Tuple_GroupMetricsGenerationCouldntFindSystemMailbox, null, new object[]
                {
                    databaseGuid.ToString(),
                    CommonUtil.ToEventLogString(ex)
                });
            }
            return(systemMailboxes);
        }
示例#10
0
        internal static ADUser ResolvePartitionMailbox(MailboxIdParameter partitionMailboxIdentity, IRecipientSession tenantGlobalCatalogSession, ADServerSettings serverSettings, DataAccessHelper.CategorizedGetDataObjectDelegate getDataObject, Task.ErrorLoggerDelegate writeError, bool datacenterFirstOrg)
        {
            ADUser aduser;

            if (partitionMailboxIdentity != null)
            {
                ADObjectId rootID = null;
                if (datacenterFirstOrg)
                {
                    rootID = ADSystemConfigurationSession.GetFirstOrgUsersContainerId();
                }
                aduser = (ADUser)getDataObject(partitionMailboxIdentity, tenantGlobalCatalogSession, rootID, null, new LocalizedString?(Strings.MigrationPartitionMailboxNotFound), new LocalizedString?(Strings.MigrationPartitionMailboxAmbiguous), ExchangeErrorCategory.Client);
                if (!aduser.PersistedCapabilities.Contains(Capability.OrganizationCapabilityMigration))
                {
                    writeError(new MigrationPartitionMailboxInvalidException(aduser.Alias), ExchangeErrorCategory.Client, partitionMailboxIdentity);
                }
            }
            else
            {
                List <ADUser> organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(tenantGlobalCatalogSession, OrganizationCapability.Migration);
                if (organizationMailboxesByCapability == null || organizationMailboxesByCapability.Count == 0)
                {
                    organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(tenantGlobalCatalogSession, OrganizationCapability.Management);
                }
                if (organizationMailboxesByCapability == null || organizationMailboxesByCapability.Count == 0)
                {
                    writeError(new MigrationPartitionMailboxNotFoundException(), ExchangeErrorCategory.Client, null);
                }
                else if (organizationMailboxesByCapability.Count > 1)
                {
                    writeError(new MigrationPartitionMailboxAmbiguousException(), ExchangeErrorCategory.Client, null);
                }
                aduser = organizationMailboxesByCapability[0];
            }
            if (aduser.RecipientTypeDetails != RecipientTypeDetails.ArbitrationMailbox || aduser.Database == null)
            {
                writeError(new MigrationPartitionMailboxInvalidException(aduser.Alias), ExchangeErrorCategory.Client, partitionMailboxIdentity);
            }
            return(aduser);
        }
        protected override SmtpAddress Create(string domain, ref bool shouldAdd)
        {
            IRecipientSession recipientSessionForDomain = this.GetRecipientSessionForDomain(domain);

            if (recipientSessionForDomain != null)
            {
                List <ADUser> organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(recipientSessionForDomain, OrganizationCapability.MessageTracking);
                if (organizationMailboxesByCapability != null && organizationMailboxesByCapability.Count != 0)
                {
                    int    index  = DomainOrgMailboxCache.rand.Next(organizationMailboxesByCapability.Count);
                    ADUser aduser = organizationMailboxesByCapability.ElementAt(index);
                    TraceWrapper.SearchLibraryTracer.TraceDebug <ObjectId, OrganizationId>(this.GetHashCode(), "Found E15 Org mailbox {0} for organization {1}.", aduser.Identity, recipientSessionForDomain.SessionSettings.CurrentOrganizationId);
                    shouldAdd = true;
                    return(aduser.PrimarySmtpAddress);
                }
            }
            SmtpAddress result = new SmtpAddress(DomainOrgMailboxCache.E14EDiscoveryMailbox, domain);

            TraceWrapper.SearchLibraryTracer.TraceError <string, string>(this.GetHashCode(), "Unable to get org mailbox for domain {0}. Will try to use E14 Discovery mailbox {1} for request", domain, result.ToString());
            shouldAdd = false;
            return(result);
        }
示例#12
0
        // Token: 0x0600057D RID: 1405 RVA: 0x0001E8E8 File Offset: 0x0001CAE8
        protected override AnchorMailbox ResolveAnchorMailbox()
        {
            AnchorMailbox          anchorMailbox          = null;
            AnchorMailbox          anchorMailbox2         = base.ResolveAnchorMailbox();
            UserBasedAnchorMailbox userBasedAnchorMailbox = anchorMailbox2 as UserBasedAnchorMailbox;

            if (userBasedAnchorMailbox == null)
            {
                return(anchorMailbox2);
            }
            ADRawEntry adrawEntry = userBasedAnchorMailbox.GetADRawEntry();

            if (OABConfiguration.GetSnapshot(MachineSettingsContext.Local, null, null).SingleUserOab.Enabled&& (Globals.IsOabDownloadRequestFromConsumer(base.HttpContext.Request.Url.OriginalString) || (adrawEntry != null && adrawEntry[ADObjectSchema.OrganizationId] != null && Globals.IsConsumerOrganization((OrganizationId)adrawEntry[ADObjectSchema.OrganizationId]))))
            {
                return(userBasedAnchorMailbox);
            }
            userBasedAnchorMailbox.UseServerCookie = true;
            string targetOrgMailbox = base.HttpContext.Request.Headers["TargetOrgMailbox"];
            Guid   guid             = Guid.Empty;

            if (!string.IsNullOrEmpty(targetOrgMailbox))
            {
                IRecipientSession session     = DirectoryHelper.GetRecipientSessionFromSmtpOrLiveId(targetOrgMailbox, base.Logger, base.LatencyTracker, false);
                ADRawEntry        adrawEntry2 = DirectoryHelper.InvokeAccountForest <ADUser>(base.LatencyTracker, () => OrganizationMailbox.GetOrganizationMailboxByUPNAndCapability(session, targetOrgMailbox, 42), base.Logger, session);
                if (adrawEntry2 != null)
                {
                    anchorMailbox = new UserADRawEntryAnchorMailbox(adrawEntry2, this);
                }
            }
            else
            {
                AnchoredRoutingTarget anchoredRoutingTarget = this.TryFastTargetCalculationByAnchorMailbox(anchorMailbox2);
                if (anchoredRoutingTarget != null)
                {
                    return(anchoredRoutingTarget.AnchorMailbox);
                }
                if (adrawEntry == null)
                {
                    return(anchorMailbox2);
                }
                guid = OABRequestUrl.GetOabGuidFromRequest(base.HttpContext.Request);
                if (guid == Guid.Empty)
                {
                    return(anchorMailbox2);
                }
                OrganizationId organizationId     = (OrganizationId)adrawEntry[ADObjectSchema.OrganizationId];
                string         userAcceptedDomain = null;
                if (organizationId != OrganizationId.ForestWideOrgId)
                {
                    userAcceptedDomain = ((SmtpAddress)adrawEntry[ADRecipientSchema.PrimarySmtpAddress]).Domain;
                }
                OABCache.OABCacheEntry oabcacheEntry = null;
                try
                {
                    oabcacheEntry = OABCache.Instance.GetOABFromCacheOrAD(guid, userAcceptedDomain);
                }
                catch (ADNoSuchObjectException ex)
                {
                    throw new HttpProxyException(HttpStatusCode.NotFound, 3001, "ADNoSuchObjectException: OAB is not in the cache and cannot be found from the AD! " + ex.Message);
                }
                if (oabcacheEntry.ExchangeVersion.IsOlderThan(ExchangeObjectVersion.Exchange2012))
                {
                    anchorMailbox = this.GetE14CASServer(oabcacheEntry);
                }
                else
                {
                    ADRawEntry adrawEntry3 = null;
                    if (OABVariantConfigurationSettings.IsLinkedOABGenMailboxesEnabled && !oabcacheEntry.ShadowMailboxDistributionEnabled && oabcacheEntry.GeneratingMailbox != null)
                    {
                        adrawEntry3 = DirectoryHelper.GetRecipientSessionFromOrganizationId(base.LatencyTracker, organizationId, base.Logger).Read(oabcacheEntry.GeneratingMailbox, "d:\\dbs\\sh\\e16df\\0212_214120_0\\cmd\\1g\\sources\\Dev\\Cafe\\src\\HttpProxy\\RequestHandlers\\OabProxyRequestHandler.cs", 200, "ResolveAnchorMailbox");
                    }
                    if (adrawEntry3 == null)
                    {
                        if (OABVariantConfigurationSettings.IsSkipServiceTopologyDiscoveryEnabled)
                        {
                            adrawEntry3 = HttpProxyBackEndHelper.GetOrganizationMailboxWithOABGenCapability(organizationId);
                        }
                        else
                        {
                            adrawEntry3 = HttpProxyBackEndHelper.GetOrganizationMailboxInClosestSite(organizationId, 42);
                        }
                    }
                    if (adrawEntry3 != null)
                    {
                        anchorMailbox = new UserADRawEntryAnchorMailbox(adrawEntry3, this)
                        {
                            UseServerCookie = true
                        };
                    }
                }
            }
            if (anchorMailbox == null)
            {
                if (ExTraceGlobals.VerboseTracer.IsTraceEnabled(3))
                {
                    ExTraceGlobals.VerboseTracer.TraceError(0L, "[OabProxyRequestHandler::ResolveAnchorMailbox] Unable to locate appropriate server for OAB");
                }
                string message;
                if (string.IsNullOrEmpty(targetOrgMailbox))
                {
                    message = string.Format("Unable to locate appropriate server for OAB {0}.", guid);
                }
                else
                {
                    message = string.Format("Unable to locate organization mailbox {0}", targetOrgMailbox);
                }
                throw new HttpProxyException(HttpStatusCode.InternalServerError, 3006, message);
            }
            if (ExTraceGlobals.VerboseTracer.IsTraceEnabled(1))
            {
                ExTraceGlobals.VerboseTracer.TraceDebug <AnchorMailbox>(0L, "[OabProxyRequestHandler::ResolveAnchorMailbox] Proxying OAB request using anchor {0}.", anchorMailbox);
            }
            string text = string.Format("{0}-{1}", base.Logger.Get(3), "OABOrgMailbox");

            base.Logger.Set(3, text);
            anchorMailbox.OriginalAnchorMailbox = anchorMailbox2;
            return(anchorMailbox);
        }
示例#13
0
        protected override AnchorMailbox ResolveAnchorMailbox()
        {
            AnchorMailbox          anchorMailbox          = null;
            AnchorMailbox          anchorMailbox2         = base.ResolveAnchorMailbox();
            UserBasedAnchorMailbox userBasedAnchorMailbox = anchorMailbox2 as UserBasedAnchorMailbox;

            if (userBasedAnchorMailbox == null)
            {
                return(anchorMailbox2);
            }
            userBasedAnchorMailbox.UseServerCookie = true;
            string targetOrgMailbox = base.HttpContext.Request.Headers["TargetOrgMailbox"];
            Guid   guid             = Guid.Empty;

            if (!string.IsNullOrEmpty(targetOrgMailbox))
            {
                IRecipientSession session    = DirectoryHelper.GetRecipientSessionFromSmtpOrLiveId(base.LatencyTracker, targetOrgMailbox, false);
                ADRawEntry        adrawEntry = DirectoryHelper.InvokeAccountForest(base.LatencyTracker, () => OrganizationMailbox.GetOrganizationMailboxByUPNAndCapability(session, targetOrgMailbox, OrganizationCapability.OABGen));
                if (adrawEntry != null)
                {
                    anchorMailbox = new UserADRawEntryAnchorMailbox(adrawEntry, this);
                }
            }
            else
            {
                AnchoredRoutingTarget anchoredRoutingTarget = this.TryFastTargetCalculationByAnchorMailbox(anchorMailbox2);
                if (anchoredRoutingTarget != null)
                {
                    return(anchoredRoutingTarget.AnchorMailbox);
                }
                ADRawEntry adrawEntry2 = userBasedAnchorMailbox.GetADRawEntry();
                if (adrawEntry2 == null)
                {
                    return(anchorMailbox2);
                }
                guid = OABRequestUrl.GetOabGuidFromRequest(base.HttpContext.Request);
                if (guid == Guid.Empty)
                {
                    return(anchorMailbox2);
                }
                OrganizationId organizationId     = (OrganizationId)adrawEntry2[ADObjectSchema.OrganizationId];
                string         userAcceptedDomain = null;
                if (organizationId != OrganizationId.ForestWideOrgId)
                {
                    userAcceptedDomain = ((SmtpAddress)adrawEntry2[ADRecipientSchema.PrimarySmtpAddress]).Domain;
                }
                OABCache.OABCacheEntry oabfromCacheOrAD = OABCache.Instance.GetOABFromCacheOrAD(guid, userAcceptedDomain);
                if (oabfromCacheOrAD.ExchangeVersion.IsOlderThan(ExchangeObjectVersion.Exchange2012))
                {
                    anchorMailbox = this.GetE14CASServer(oabfromCacheOrAD);
                }
                else
                {
                    ADRawEntry adrawEntry3 = null;
                    if (OABVariantConfigurationSettings.IsLinkedOABGenMailboxesEnabled && !oabfromCacheOrAD.ShadowMailboxDistributionEnabled && oabfromCacheOrAD.GeneratingMailbox != null)
                    {
                        IRecipientSession recipientSessionFromOrganizationId = DirectoryHelper.GetRecipientSessionFromOrganizationId(base.LatencyTracker, organizationId);
                        adrawEntry3 = recipientSessionFromOrganizationId.Read(oabfromCacheOrAD.GeneratingMailbox);
                    }
                    if (adrawEntry3 == null)
                    {
                        if (OABVariantConfigurationSettings.IsSkipServiceTopologyDiscoveryEnabled)
                        {
                            adrawEntry3 = HttpProxyBackEndHelper.GetOrganizationMailbox(organizationId, OrganizationCapability.OABGen, null);
                        }
                        else
                        {
                            adrawEntry3 = HttpProxyBackEndHelper.GetOrganizationMailboxInClosestSite(organizationId, OrganizationCapability.OABGen);
                        }
                    }
                    if (adrawEntry3 != null)
                    {
                        anchorMailbox = new UserADRawEntryAnchorMailbox(adrawEntry3, this)
                        {
                            UseServerCookie = true
                        };
                    }
                }
            }
            if (anchorMailbox == null)
            {
                ExTraceGlobals.VerboseTracer.TraceError(0L, "[OabProxyRequestHandler::ResolveAnchorMailbox] Unable to locate appropriate server for OAB");
                string message;
                if (string.IsNullOrEmpty(targetOrgMailbox))
                {
                    message = string.Format("Unable to locate appropriate server for OAB {0}.", guid);
                }
                else
                {
                    message = string.Format("Unable to locate organization mailbox {0}", targetOrgMailbox);
                }
                throw new HttpProxyException(HttpStatusCode.InternalServerError, HttpProxySubErrorCode.OrganizationMailboxNotFound, message);
            }
            ExTraceGlobals.VerboseTracer.TraceDebug <AnchorMailbox>(0L, "[OabProxyRequestHandler::ResolveAnchorMailbox] Proxying OAB request using anchor {0}.", anchorMailbox);
            string value = string.Format("{0}-{1}", base.Logger.Get(HttpProxyMetadata.RoutingHint), "OABOrgMailbox");

            base.Logger.Set(HttpProxyMetadata.RoutingHint, value);
            anchorMailbox.OriginalAnchorMailbox = anchorMailbox2;
            return(anchorMailbox);
        }
示例#14
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);
        }
 // Token: 0x06000036 RID: 54 RVA: 0x00002425 File Offset: 0x00000625
 public IEnumerable <ADUser> GetOrganizationMailboxesByCapability(OrganizationCapability capability)
 {
     return(OrganizationMailbox.GetOrganizationMailboxesByCapability(this.RecipientSession, capability));
 }
        protected override void InternalValidate()
        {
            TaskLogger.LogEnter();
            base.InternalValidate();
            if (!string.IsNullOrEmpty(this.DataObject.TargetForest) || !string.IsNullOrEmpty(this.DataObject.RelocationSourceForestRaw))
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorTenantAlreadyBeingRelocated(this.Identity.ToString())), ErrorCategory.InvalidOperation, this.DataObject.Identity);
            }
            if ((this.DataObject.OrganizationStatus != OrganizationStatus.Active && this.DataObject.OrganizationStatus != OrganizationStatus.Suspended && this.DataObject.OrganizationStatus != OrganizationStatus.LockedOut) || this.DataObject.IsUpdatingServicePlan)
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorTenantNotInActiveOrgState(this.Identity.ToString())), ErrorCategory.InvalidOperation, this.DataObject.Identity);
            }
            if (this.DataObject.EnableAsSharedConfiguration || this.DataObject.ImmutableConfiguration)
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorSCTsCannotBeMigrated(this.Identity.ToString())), ErrorCategory.InvalidOperation, this.DataObject.Identity);
            }
            if (this.DataObject.AdminDisplayVersion.ExchangeBuild < ExchangeObjectVersion.Exchange2012.ExchangeBuild)
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorOldTenantsCannotBeMigrated(this.Identity.ToString())), ErrorCategory.InvalidOperation, this.DataObject.Identity);
            }
            this.sourceAccountPartitionId = this.DataObject.OrganizationId.PartitionId;
            this.sourceForestFqdn         = this.sourceAccountPartitionId.ForestFQDN;
            Organization rootOrgContainer = ADSystemConfigurationSession.GetRootOrgContainer(this.sourceForestFqdn, null, null);

            if (!rootOrgContainer.TenantRelocationsAllowed)
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorTenantRelocationNotAllowed(this.Identity.ToString(), this.sourceForestFqdn)), ErrorCategory.InvalidOperation, this.DataObject.Identity);
            }
            if (TopologyProvider.LocalForestFqdn.Equals(this.TargetAccountPartition.RawIdentity, StringComparison.OrdinalIgnoreCase))
            {
                this.targetAccountPartitionFqdn = PartitionId.LocalForest.ForestFQDN;
            }
            else
            {
                AccountPartition accountPartition = (AccountPartition)base.GetDataObject <AccountPartition>(this.TargetAccountPartition, DirectorySessionFactory.Default.CreateTopologyConfigurationSession(ConsistencyMode.PartiallyConsistent, ADSessionSettings.SessionSettingsFactory.Default.FromRootOrgScopeSet(), 207, "InternalValidate", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Relocation\\NewTenantRelocationRequest.cs"), null, null, null);
                this.targetAccountPartitionFqdn = accountPartition.PartitionId.ForestFQDN;
            }
            if (this.targetAccountPartitionFqdn.IndexOf(PartitionId.LocalForest.ForestFQDN, StringComparison.InvariantCultureIgnoreCase) > 0)
            {
                this.targetAccountPartitionFqdn = PartitionId.LocalForest.ForestFQDN;
            }
            rootOrgContainer = ADSystemConfigurationSession.GetRootOrgContainer(this.targetAccountPartitionFqdn, null, null);
            if (!rootOrgContainer.TenantRelocationsAllowed)
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorTenantRelocationNotAllowed(this.Identity.ToString(), this.targetAccountPartitionFqdn)), ErrorCategory.InvalidOperation, this.DataObject.Identity);
            }
            if (!base.Fields.IsModified(TenantRelocationRequestSchema.AutoCompletionEnabled))
            {
                this.AutoCompletionEnabled = false;
            }
            if (this.AutoCompletionEnabled && base.Fields.IsModified(TenantRelocationRequestSchema.RelocationStateRequested))
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorRelocationStateRequestedIsNotAllowed(this.Identity.ToString())), ErrorCategory.InvalidOperation, this.DataObject.Identity);
            }
            if (!this.AutoCompletionEnabled && !base.Fields.IsModified(TenantRelocationRequestSchema.RelocationStateRequested))
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorRelocationStateRequestedIsMandatory(this.Identity.ToString())), ErrorCategory.InvalidOperation, this.DataObject.Identity);
            }
            ADUser[] array = OrganizationMailbox.FindByOrganizationId(this.DataObject.OrganizationId, OrganizationCapability.Management);
            if (array.Length != 1)
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorOneManagementOrgMailboxIsRequired(this.Identity.ToString(), array.Length.ToString())), ErrorCategory.InvalidOperation, this.DataObject.Identity);
            }
            TenantOrganizationPresentationObject tenantOrganizationPresentationObject = new TenantOrganizationPresentationObject(this.DataObject);
            DateTime utcNow = DateTime.UtcNow;
            bool     config = TenantRelocationConfigImpl.GetConfig <bool>("IgnoreRelocationConstraintExpiration");

            foreach (RelocationConstraint relocationConstraint in tenantOrganizationPresentationObject.RelocationConstraints)
            {
                if (config || relocationConstraint.ExpirationDate > utcNow)
                {
                    base.WriteError(new InvalidOperationException(Strings.ErrorRelocationConstraintsPresent(this.Identity.ToString(), relocationConstraint.Name)), ErrorCategory.InvalidOperation, this.DataObject.Identity);
                }
            }
            this.externalDirectoryOrganizationId = Guid.Parse(this.DataObject.ExternalDirectoryOrganizationId);
            if (!NewTenantRelocationRequest.GLSRecordCheckDisabled() && GlsMServDirectorySession.GlsLookupMode != GlsLookupMode.MServOnly)
            {
                string    text;
                string    text2;
                string    text3;
                Exception ex;
                bool      flag = GetTenantRelocationRequest.TryGlsLookupByExternalDirectoryOrganizationId(this.externalDirectoryOrganizationId, out text, out text2, out text3, out ex);
                if (ex != null)
                {
                    base.WriteError(ex, ErrorCategory.InvalidOperation, this.DataObject.Identity);
                }
                if (!flag || string.IsNullOrEmpty(text2) || !text2.Equals(this.sourceForestFqdn, StringComparison.InvariantCultureIgnoreCase))
                {
                    base.WriteError(new InvalidOperationException(Strings.ErrorUnexpectedAccountForestValueInGls(this.Identity.ToString(), text2, this.sourceForestFqdn)), ErrorCategory.InvalidOperation, this.DataObject.Identity);
                }
            }
            TaskLogger.LogExit();
        }
        private void TryCallE15()
        {
            ADUser[] array = null;
            if (OABVariantConfigurationSettings.IsLinkedOABGenMailboxesEnabled)
            {
                ADObjectId generatingMailbox = this.DataObject.GeneratingMailbox;
                if (generatingMailbox != null)
                {
                    ADUser aduser = (ADUser)base.GetDataObject <ADUser>(new MailboxIdParameter(generatingMailbox), base.TenantGlobalCatalogSession, null, new LocalizedString?(Strings.ErrorMailboxAddressNotFound(generatingMailbox.ToString())), new LocalizedString?(Strings.ErrorMailboxAddressNotUnique(generatingMailbox.ToString())));
                    array = new ADUser[]
                    {
                        aduser
                    };
                }
            }
            if (array == null)
            {
                array = OrganizationMailbox.FindByOrganizationId(this.DataObject.OrganizationId, OrganizationCapability.OABGen);
                if (array.Length == 0)
                {
                    if (this.ownerServer != null && this.ownerServer.VersionNumber >= Server.E15MinVersion)
                    {
                        base.WriteError(new LocalizedException(Strings.ErrorOabGenFailedSinceNoOrgMbxFound(this.DataObject.Identity.ToString())), ErrorCategory.ObjectNotFound, this.Identity);
                    }
                    return;
                }
            }
            bool flag = false;

            foreach (ADUser aduser2 in array)
            {
                string activeServerFqdn = OrganizationMailbox.GetActiveServerFqdn(aduser2.Id);
                string text             = null;
                try
                {
                    OABGeneratorAssistantRunNowParameters oabgeneratorAssistantRunNowParameters = new OABGeneratorAssistantRunNowParameters
                    {
                        PartitionId = this.DataObject.Id.GetPartitionId(),
                        ObjectGuid  = this.DataObject.Id.ObjectGuid,
                        Description = "from Update-OAB on Server:" + Environment.MachineName
                    };
                    AssistantsRpcClient assistantsRpcClient = new AssistantsRpcClient(activeServerFqdn);
                    assistantsRpcClient.StartWithParams("OABGeneratorAssistant", aduser2.ExchangeGuid, aduser2.Database.ObjectGuid, oabgeneratorAssistantRunNowParameters.ToString());
                    flag = true;
                }
                catch (RpcException ex)
                {
                    text = RpcUtility.MapRpcErrorCodeToMessage(ex.ErrorCode, activeServerFqdn);
                }
                catch (COMException ex2)
                {
                    text = ex2.Message;
                }
                if (text != null)
                {
                    if (array.Length == 1)
                    {
                        base.WriteError(new LocalizedException(Strings.ErrorOabGenFailed(this.DataObject.Identity.ToString(), activeServerFqdn, text)), ErrorCategory.InvalidResult, this.Identity);
                    }
                    else
                    {
                        this.WriteWarning(Strings.WarningOabGenFailed(this.DataObject.Identity.ToString(), aduser2.Identity.ToString(), activeServerFqdn, text));
                    }
                }
            }
            if (array.Length > 1 && !flag)
            {
                base.WriteError(new LocalizedException(Strings.ErrorOabGenFailedForAllOrgMailboxes(this.DataObject.Identity.ToString())), ErrorCategory.InvalidResult, this.Identity);
            }
        }