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); }
// 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); }
// 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]); }
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); }
// 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); }
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); }
// 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); }
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); }
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); } }