protected override IConfigDataProvider CreateSession() { ADSessionSettings adsessionSettings = (this.accountPartition != null) ? ADSessionSettings.FromAllTenantsPartitionId(this.accountPartition) : ADSessionSettings.RescopeToAllTenants(base.SessionSettings); adsessionSettings.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants; return(DirectorySessionFactory.Default.CreateTenantConfigurationSession(base.DomainController, true, ConsistencyMode.PartiallyConsistent, null, adsessionSettings, 184, "CreateSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Deployment\\GetOrganizationTask.cs")); }
private AcceptedDomain[] GetAcceptedDomainsInOrg(Guid orgGuid, string accountPartitionFqdn) { AcceptedDomain[] result; try { PartitionId partitionId = new PartitionId(accountPartitionFqdn); ADSessionSettings sessionSettings = ADSessionSettings.FromAllTenantsPartitionId(partitionId); ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, sessionSettings, 133, "GetAcceptedDomainsInOrg", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\SystemConfigurationTasks\\GLS\\GetGlobalLocatorServiceTenant.cs"); ExchangeConfigurationUnit[] array = tenantConfigurationSession.Find <ExchangeConfigurationUnit>(null, QueryScope.SubTree, new ComparisonFilter(ComparisonOperator.Equal, ExchangeConfigurationUnitSchema.ExternalDirectoryOrganizationId, orgGuid), null, 0); if (array != null && array.Length > 0) { result = tenantConfigurationSession.FindAllAcceptedDomainsInOrg(array[0].OrganizationId.ConfigurationUnit); } else { result = null; } } catch (Exception ex) { base.WriteVerbose(Strings.WarningCannotGetGlsTenantFromOrgId(orgGuid.ToString(), ex.Message)); result = null; } return(result); }
protected override IConfigDataProvider CreateSession() { ADSessionSettings adsessionSettings; if (this.AccountPartition != null) { PartitionId partitionId = RecipientTaskHelper.ResolvePartitionId(this.AccountPartition, new Task.TaskErrorLoggingDelegate(base.WriteError)); adsessionSettings = ADSessionSettings.FromAllTenantsPartitionId(partitionId); } else { adsessionSettings = ADSessionSettings.FromCustomScopeSet(base.ScopeSet, base.RootOrgContainerId, base.CurrentOrganizationId, base.ExecutingUserOrganizationId, true); } if (MapiTaskHelper.IsDatacenter || MapiTaskHelper.IsDatacenterDedicated) { adsessionSettings.IncludeSoftDeletedObjects = true; adsessionSettings.IncludeInactiveMailbox = true; } this.CurrentOrgConfigSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(this.DomainController, true, ConsistencyMode.PartiallyConsistent, null, adsessionSettings, 479, "CreateSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\MailboxReplication\\RequestBase\\GetRequest.cs"); if (this.AccountPartition == null) { adsessionSettings = ADSessionSettings.RescopeToSubtree(adsessionSettings); } this.GCSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(this.DomainController, true, ConsistencyMode.PartiallyConsistent, adsessionSettings, 493, "CreateSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\MailboxReplication\\RequestBase\\GetRequest.cs"); this.RecipSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(this.DomainController, true, ConsistencyMode.PartiallyConsistent, adsessionSettings, 500, "CreateSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\MailboxReplication\\RequestBase\\GetRequest.cs"); this.ConfigSession = DirectorySessionFactory.Default.CreateTopologyConfigurationSession(null, true, ConsistencyMode.PartiallyConsistent, null, ADSessionSettings.FromRootOrgScopeSet(), 506, "CreateSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\MailboxReplication\\RequestBase\\GetRequest.cs"); if (this.indexProvider != null) { this.indexProvider = null; } this.indexProvider = new RequestIndexEntryProvider(this.GCSession, this.CurrentOrgConfigSession); return(this.indexProvider); }
private ITenantConfigurationSession CreateAllTenantsScopedConfigSession(OrganizationId orgId) { ADSessionSettings adsessionSettings = ADSessionSettings.FromAllTenantsPartitionId(orgId.PartitionId); adsessionSettings.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants; adsessionSettings.RetiredTenantModificationAllowed = true; return(DirectorySessionFactory.Default.CreateTenantConfigurationSession(null, false, ConsistencyMode.PartiallyConsistent, null, adsessionSettings, 108, "CreateAllTenantsScopedConfigSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Relocation\\RemoveTenantRelocationRequest.cs")); }
internal ExchangeConfigurationUnit GetConfigurationUnit(string orgName) { if (string.IsNullOrEmpty(orgName)) { throw new ArgumentException("OrgName must contain a non-empty value", "orgName"); } ExchangeConfigurationUnit exchangeConfigurationUnit = null; try { ADSessionSettings adsessionSettings = ADSessionSettings.FromTenantCUName(orgName); ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, adsessionSettings, 866, "GetConfigurationUnit", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\BaseTasks\\ADIdParameter.cs"); adsessionSettings.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants; exchangeConfigurationUnit = tenantConfigurationSession.GetExchangeConfigurationUnitByName(orgName); } catch (CannotResolveTenantNameException) { } SmtpDomain smtpDomain = null; if (exchangeConfigurationUnit == null && SmtpDomain.TryParse(orgName, out smtpDomain)) { try { ADSessionSettings sessionSettings = ADSessionSettings.FromTenantAcceptedDomain(orgName); ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, sessionSettings, 890, "GetConfigurationUnit", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\BaseTasks\\ADIdParameter.cs"); exchangeConfigurationUnit = tenantConfigurationSession.GetExchangeConfigurationUnitByNameOrAcceptedDomain(orgName); } catch (CannotResolveTenantNameException) { } } Guid externalDirectoryOrganizationId; if (exchangeConfigurationUnit == null && GuidHelper.TryParseGuid(orgName, out externalDirectoryOrganizationId)) { try { PartitionId partitionIdByExternalDirectoryOrganizationId = ADAccountPartitionLocator.GetPartitionIdByExternalDirectoryOrganizationId(externalDirectoryOrganizationId); ADSessionSettings sessionSettings2 = ADSessionSettings.FromAllTenantsPartitionId(partitionIdByExternalDirectoryOrganizationId); ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, sessionSettings2, 911, "GetConfigurationUnit", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\BaseTasks\\ADIdParameter.cs"); QueryFilter filter = new ComparisonFilter(ComparisonOperator.Equal, ExchangeConfigurationUnitSchema.ExternalDirectoryOrganizationId, externalDirectoryOrganizationId.ToString()); ExchangeConfigurationUnit[] array = tenantConfigurationSession.Find <ExchangeConfigurationUnit>(ADSession.GetConfigurationUnitsRoot(partitionIdByExternalDirectoryOrganizationId.ForestFQDN), QueryScope.SubTree, filter, null, 0); if (array.Length == 1) { exchangeConfigurationUnit = array[0]; } } catch (CannotResolveExternalDirectoryOrganizationIdException) { } } return(exchangeConfigurationUnit); }
public static void CleanADOrphanAndInconsistency() { PartitionId[] allAccountPartitionIds = ADAccountPartitionLocator.GetAllAccountPartitionIds(); for (int i = 0; i < allAccountPartitionIds.Length; i++) { PartitionId partitionId = allAccountPartitionIds[i]; CommonUtils.CheckForServiceStopping(); ADSessionSettings adsessionSettings = ADSessionSettings.FromAllTenantsPartitionId(partitionId); adsessionSettings.IncludeSoftDeletedObjects = true; adsessionSettings.IncludeInactiveMailbox = true; IRecipientSession recipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(null, false, ConsistencyMode.PartiallyConsistent, null, adsessionSettings, 45, "CleanADOrphanAndInconsistency", "f:\\15.00.1497\\sources\\dev\\mrs\\src\\Service\\ADInconsistencyCheck.cs"); IConfigurationSession configSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(null, false, ConsistencyMode.PartiallyConsistent, null, adsessionSettings, 52, "CleanADOrphanAndInconsistency", "f:\\15.00.1497\\sources\\dev\\mrs\\src\\Service\\ADInconsistencyCheck.cs"); using (List <Guid> .Enumerator enumerator = MapiUtils.GetDatabasesOnThisServer().GetEnumerator()) { while (enumerator.MoveNext()) { Guid dbGuid = enumerator.Current; CommonUtils.CheckForServiceStopping(); DatabaseInformation databaseInformation = MapiUtils.FindServerForMdb(dbGuid, null, null, FindServerFlags.AllowMissing); if (databaseInformation.IsMissing) { MrsTracer.Service.Debug("CleanADOrphanAndInconsistency Database {0} in Forest {1} is missing, skip it", new object[] { dbGuid, databaseInformation.ForestFqdn }); } else { CommonUtils.CatchKnownExceptions(delegate { ADInconsistencyCheck.CleanADOrphanAndInconsistencyForRequests(recipientSession, configSession, dbGuid); }, delegate(Exception f) { MrsTracer.Service.Error("CleanADOrphanAndInconsistency() failed for DB {0}. Error: {1}", new object[] { dbGuid, CommonUtils.FullExceptionMessage(f, true) }); MRSService.LogEvent(MRSEventLogConstants.Tuple_ScanADInconsistencyRequestFailEvent, new object[] { dbGuid, string.Empty, string.Empty, CommonUtils.FullExceptionMessage(f, true) }); }); } } } } }
protected override void InternalStateReset() { if (this.AccountPartition != null) { PartitionId partitionId = RecipientTaskHelper.ResolvePartitionId(this.AccountPartition, new Task.TaskErrorLoggingDelegate(base.WriteError)); this.sessionSettings = ADSessionSettings.FromAllTenantsPartitionId(partitionId); } else { this.ResolveCurrentOrgIdBasedOnIdentity(this.Identity); this.sessionSettings = ADSessionSettings.FromCustomScopeSet(base.ScopeSet, base.RootOrgContainerId, base.CurrentOrganizationId, base.ExecutingUserOrganizationId, true); } base.InternalStateReset(); }
// Token: 0x06000C79 RID: 3193 RVA: 0x000272A4 File Offset: 0x000254A4 internal OrganizationId ResolveOrganizationId() { if (string.IsNullOrEmpty(base.RawIdentity) || string.IsNullOrEmpty(base.RawIdentity.Trim())) { throw new ArgumentException("Cannot resolve tenant name - RawIdentity is null or empty"); } ExchangeConfigurationUnit exchangeConfigurationUnit = null; try { PartitionId partitionId = ADAccountPartitionLocator.GetPartitionIdByAcceptedDomainName(base.RawIdentity); ADSessionSettings adsessionSettings = ADSessionSettings.FromAllTenantsPartitionId(partitionId); adsessionSettings.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants; ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, adsessionSettings, 142, "ResolveOrganizationId", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\IdentityParameter\\TenantRelocationRequestIdParameter.cs"); exchangeConfigurationUnit = tenantConfigurationSession.GetExchangeConfigurationUnitByName(base.RawIdentity); } catch (CannotResolveTenantNameException) { } if (exchangeConfigurationUnit == null) { foreach (PartitionId partitionId2 in ADAccountPartitionLocator.GetAllAccountPartitionIds()) { ADSessionSettings adsessionSettings2 = ADSessionSettings.FromAllTenantsPartitionId(partitionId2); adsessionSettings2.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants; ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, adsessionSettings2, 160, "ResolveOrganizationId", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\IdentityParameter\\TenantRelocationRequestIdParameter.cs"); exchangeConfigurationUnit = tenantConfigurationSession.GetExchangeConfigurationUnitByName(base.RawIdentity); if (exchangeConfigurationUnit != null) { break; } } } if (exchangeConfigurationUnit != null && !string.IsNullOrEmpty(exchangeConfigurationUnit.RelocationSourceForestRaw)) { PartitionId partitionId = new PartitionId(exchangeConfigurationUnit.RelocationSourceForestRaw); ADSessionSettings adsessionSettings = ADSessionSettings.FromAllTenantsPartitionId(partitionId); adsessionSettings.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants; ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, adsessionSettings, 175, "ResolveOrganizationId", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\IdentityParameter\\TenantRelocationRequestIdParameter.cs"); exchangeConfigurationUnit = tenantConfigurationSession.GetExchangeConfigurationUnitByName(base.RawIdentity); } if (exchangeConfigurationUnit != null) { return(exchangeConfigurationUnit.OrganizationId); } throw new CannotResolveTenantNameException(DirectoryStrings.CannotResolveTenantRelocationRequestIdentity(base.RawIdentity)); }
internal static ADRawEntry FindUserEntry(SecurityIdentifier userSid, WindowsIdentity windowsIdentity, SerializedIdentity serializedIdentity, PartitionId partitionId) { ADRawEntry result; using (new MonitoredScope("FindUserEntry", "FindUserEntry", AuthZLogHelper.AuthZPerfMonitors)) { ADSessionSettings sessionSettings; if (partitionId != null) { sessionSettings = ADSessionSettings.FromAllTenantsPartitionId(partitionId); } else { sessionSettings = ADSessionSettings.FromRootOrgScopeSet(); } IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(ConsistencyMode.IgnoreInvalid, sessionSettings, 817, "FindUserEntry", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\rbac\\ExchangeAuthorizationPlugin.cs"); ADRawEntry adrawEntry = tenantOrRootOrgRecipientSession.FindMiniRecipientBySid <MiniRecipient>(userSid, ExchangeRunspaceConfiguration.userPropertyArray); if (adrawEntry == null && VariantConfiguration.InvariantNoFlightingSnapshot.CmdletInfra.ServiceAccountForest.Enabled) { adrawEntry = PartitionDataAggregator.GetMiniRecipientFromUserId(userSid, ExchangeRunspaceConfiguration.userPropertyArray, ConsistencyMode.IgnoreInvalid); } if (adrawEntry == null) { ExTraceGlobals.AccessDeniedTracer.TraceWarning <SecurityIdentifier, string>(0L, "EAP.FindUserEntry user {0} could not be found in AD, partitionId: {1}", userSid, (partitionId == null) ? "null" : partitionId.ToString()); adrawEntry = ExchangeRunspaceConfiguration.TryFindComputer(userSid); } if (adrawEntry == null && (windowsIdentity != null || serializedIdentity != null)) { ExTraceGlobals.AccessDeniedTracer.TraceWarning <SecurityIdentifier>(0L, "EAP.FindUserEntry computer {0} could not be found in AD", userSid); IIdentity identity = (windowsIdentity != null) ? windowsIdentity : serializedIdentity; ICollection <SecurityIdentifier> groupAccountsSIDs = identity.GetGroupAccountsSIDs(); tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromRootOrgScopeSet(), 850, "FindUserEntry", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\rbac\\ExchangeAuthorizationPlugin.cs"); List <ADObjectId> list = null; if (ExchangeRunspaceConfiguration.TryFindLinkedRoleGroupsBySidList(tenantOrRootOrgRecipientSession, groupAccountsSIDs, identity.Name, out list)) { adrawEntry = new ADUser { RemotePowerShellEnabled = true }; } } result = adrawEntry; } return(result); }
internal static void ValidateCertificateSubject(MultiValuedProperty <X509Identifier> certificateSubjects, PartitionId partitionId, ADObjectId excludeObjectId, Task.TaskErrorLoggingDelegate errorLogger) { if (errorLogger == null) { throw new ArgumentNullException("errorLogger"); } ADSessionSettings sessionSettings; if (partitionId != null) { sessionSettings = ADSessionSettings.FromAllTenantsPartitionId(partitionId); } else { sessionSettings = ADSessionSettings.FromRootOrgScopeSet(); } IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(ConsistencyMode.PartiallyConsistent, sessionSettings, 220, "ValidateCertificateSubject", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\RecipientTasks\\LinkedUser\\NewLinkedUser.cs"); tenantOrRootOrgRecipientSession.UseGlobalCatalog = true; if (certificateSubjects != null && certificateSubjects.Count != 0) { foreach (X509Identifier x509Identifier in certificateSubjects) { QueryFilter queryFilter = ADUser.GetCertificateMatchFilter(x509Identifier); if (excludeObjectId != null) { queryFilter = new AndFilter(new QueryFilter[] { queryFilter, new ComparisonFilter(ComparisonOperator.NotEqual, ADObjectSchema.Id, excludeObjectId) }); } ADRecipient[] array = tenantOrRootOrgRecipientSession.Find(null, QueryScope.SubTree, queryFilter, null, 1); if (array != null && array.Length > 0) { errorLogger(new RecipientTaskException(Strings.ErrorDuplicateCertificateSubject(x509Identifier.ToString())), ErrorCategory.InvalidArgument, excludeObjectId); } } } }
internal void RebindDataSessionToDataObjectPartitionRidMasterIncludeRetiredTenants(PartitionId partitionId) { string ridMasterName = ForestTenantRelocationsCache.GetRidMasterName(partitionId); if (this.DomainController != null) { string value = this.DomainController.ToString().Split(new char[] { '.' })[0] + "."; if (!ridMasterName.StartsWith(value, StringComparison.OrdinalIgnoreCase)) { ForestTenantRelocationsCache.Reset(); base.WriteError(new InvalidOperationException(Strings.ErrorMustWriteToRidMaster(ridMasterName)), ErrorCategory.InvalidOperation, ridMasterName); } } ADSessionSettings adsessionSettings = ADSessionSettings.FromAllTenantsPartitionId(partitionId); adsessionSettings.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants; adsessionSettings.RetiredTenantModificationAllowed = true; this.dataSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ridMasterName, false, ConsistencyMode.PartiallyConsistent, adsessionSettings, 1125, "RebindDataSessionToDataObjectPartitionRidMasterIncludeRetiredTenants", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\BaseTasks\\DataAccessTask.cs"); }
// Token: 0x060003E3 RID: 995 RVA: 0x00016A28 File Offset: 0x00014C28 internal static IRecipientSession GetRecipientSessionFromPartition(LatencyTracker latencyTracker, string partitionId, RequestDetailsLogger logger) { if (latencyTracker == null) { throw new ArgumentNullException("latencyTracker"); } if (string.IsNullOrEmpty(partitionId)) { throw new ArgumentNullException("partitionId"); } ADSessionSettings adsessionSettings = null; PartitionId partitionIdObject = null; if ((Utilities.IsPartnerHostedOnly || GlobalConfiguration.GetSnapshot(MachineSettingsContext.Local, null, null).MultiTenancy.Enabled) && PartitionId.TryParse(partitionId, ref partitionIdObject)) { try { adsessionSettings = DirectoryHelper.CreateADSessionSettingsWithDiagnostics(() => ADSessionSettings.FromAllTenantsPartitionId(partitionIdObject), logger, latencyTracker, true); } catch (CannotResolvePartitionException ex) { if (ExTraceGlobals.VerboseTracer.IsTraceEnabled(2)) { ExTraceGlobals.VerboseTracer.TraceWarning <string, CannotResolvePartitionException>(0L, "[DirectoryHelper::GetRecipientSessionFromPartition] Caught CannotResolvePartitionException when resolving partition by partition ID {0}. Exception details: {1}.", partitionId, ex); } } } if (adsessionSettings == null) { adsessionSettings = ADSessionSettings.FromRootOrgScopeSet(); } return(DirectoryHelper.CreateSession(adsessionSettings)); }
protected override void InternalProcessRecord() { TaskLogger.LogEnter(); this.DataObject.AutoCompletionEnabled = this.AutoCompletionEnabled; this.DataObject.LargeTenantModeEnabled = this.LargeTenantModeEnabled; this.DataObject.SafeLockdownSchedule = (this.SafeLockdownSchedule ?? Schedule.Always); if (base.Fields.IsModified(TenantRelocationRequestSchema.RelocationStateRequested)) { this.DataObject.RelocationStateRequested = (RelocationStateRequested)this.RelocationStateRequested; } this.DataObject.TargetForest = this.targetAccountPartitionFqdn; this.sourceForestRIDMaster = ForestTenantRelocationsCache.GetRidMasterName(this.sourceAccountPartitionId); DirectorySessionFactory @default = DirectorySessionFactory.Default; Fqdn domainController = base.DomainController; ITenantConfigurationSession tenantConfigurationSession = @default.CreateTenantConfigurationSession((domainController != null) ? domainController : this.sourceForestRIDMaster, false, ConsistencyMode.PartiallyConsistent, null, ADSessionSettings.FromAllTenantsPartitionId(this.sourceAccountPartitionId), 334, "InternalProcessRecord", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Relocation\\NewTenantRelocationRequest.cs"); PartitionId partitionId = new PartitionId(this.targetAccountPartitionFqdn); this.targetForestRIDMaster = ForestTenantRelocationsCache.GetRidMasterName(partitionId); ITenantConfigurationSession tenantConfigurationSession2 = DirectorySessionFactory.Default.CreateTenantConfigurationSession(this.targetForestRIDMaster, false, ConsistencyMode.PartiallyConsistent, null, ADSessionSettings.FromAllTenantsPartitionId(partitionId), 343, "InternalProcessRecord", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Relocation\\NewTenantRelocationRequest.cs"); tenantConfigurationSession2.SessionSettings.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants; MsoTenantCookieContainer msoTenantCookieContainer = tenantConfigurationSession2.GetMsoTenantCookieContainer(this.externalDirectoryOrganizationId); if (msoTenantCookieContainer != null && !NewTenantRelocationRequest.IntraForestRelocationEnabled()) { InvalidOperationException exception = new InvalidOperationException(Strings.ErrorTargetPartitionHasTenantWithSameId(this.DataObject.DistinguishedName, this.targetAccountPartitionFqdn, msoTenantCookieContainer.DistinguishedName, this.DataObject.ExternalDirectoryOrganizationId)); base.WriteError(exception, ErrorCategory.InvalidOperation, this.DataObject.Identity); } string text = this.GetInitialDomainName(tenantConfigurationSession, this.DataObject.OrganizationId); ExchangeConfigurationUnit exchangeConfigurationUnitByName = tenantConfigurationSession2.GetExchangeConfigurationUnitByName(text); if (exchangeConfigurationUnitByName != null) { if (text.Length > 50) { text = text.Substring(0, 50); } text = string.Format("{0}-RELO-{1}", text, Guid.NewGuid().ToString()); if (text.Length > 64) { text = text.Substring(0, 64); } } Exception ex; OrganizationId targetSharedOrgId = SharedConfiguration.FindMostRecentSharedConfigurationInPartition(this.DataObject.OrganizationId, partitionId, out ex); if (ex != null) { base.WriteError(ex, ErrorCategory.InvalidOperation, this.DataObject.Identity); } ADOrganizationalUnit adorganizationalUnit = null; bool useConfigNC = tenantConfigurationSession.UseConfigNC; try { tenantConfigurationSession.UseConfigNC = false; adorganizationalUnit = tenantConfigurationSession.Read <ADOrganizationalUnit>(this.DataObject.OrganizationId.OrganizationalUnit); } finally { tenantConfigurationSession.UseConfigNC = useConfigNC; } this.DataObject.RelocationStatusDetailsRaw = RelocationStatusDetails.InitializationStarted; base.InternalProcessRecord(); ADObjectId enclosureContainerId = this.CreateEnclosureConfigContainer(text, tenantConfigurationSession2); ExchangeConfigurationUnit exchangeConfigurationUnit = this.CreateOrgConfigurationContainer(enclosureContainerId, targetSharedOrgId, this.DataObject.ExternalDirectoryOrganizationId, this.DataObject.ProgramId, this.DataObject.OfferId, this.DataObject.IsDehydrated, this.DataObject.IsStaticConfigurationShared, this.sourceForestFqdn, this.DataObject.Guid, this.DataObject.ExchangeObjectId, tenantConfigurationSession2); ADObjectId organizationalUnitLink = this.CreateOrganizationUnitContainer(text, adorganizationalUnit.Guid, adorganizationalUnit.ExchangeObjectId, tenantConfigurationSession2); exchangeConfigurationUnit.OrganizationalUnitLink = organizationalUnitLink; exchangeConfigurationUnit.RelocationStatusDetailsRaw = RelocationStatusDetails.InitializationFinished; tenantConfigurationSession2.Save(exchangeConfigurationUnit); this.DataObject.RelocationStatusDetailsRaw = RelocationStatusDetails.InitializationFinished; base.DataSession.Save(this.DataObject); TenantRelocationRequest tenantRelocationRequest = (TenantRelocationRequest)base.DataSession.Read <TenantRelocationRequest>(this.DataObject.Identity); TenantRelocationRequest targetForestObject = tenantConfigurationSession2.Read <TenantRelocationRequest>(exchangeConfigurationUnit.Id); TenantRelocationRequest.PopulatePresentationObject(tenantRelocationRequest, targetForestObject); GetTenantRelocationRequest.PopulateGlsProperty(tenantRelocationRequest, new Task.TaskVerboseLoggingDelegate(base.WriteVerbose)); GetTenantRelocationRequest.PopulateRidMasterProperties(tenantRelocationRequest, this.sourceForestRIDMaster, this.targetForestRIDMaster, new Task.TaskVerboseLoggingDelegate(base.WriteVerbose)); if (tenantRelocationRequest.OriginatingServer != this.sourceForestRIDMaster) { this.WriteWarning(Strings.WarningShouldWriteToRidMaster(tenantRelocationRequest.OriginatingServer, this.sourceForestRIDMaster)); } base.WriteObject(tenantRelocationRequest); TaskLogger.LogExit(); }
protected override IConfigDataProvider CreateSession() { if (this.AccountPartition == null && this.Identity == null) { base.WriteError(new NotSupportedException(Strings.ErrorUnknownPartition), ErrorCategory.InvalidData, null); } PartitionId partitionId; if (this.Identity != null) { if (this.Identity.RawIdentity.Contains("*")) { base.WriteError(new ArgumentException(Strings.ErrorWildcardNotSupportedInRelocationIdentity(this.Identity.RawIdentity)), ErrorCategory.InvalidOperation, this.Identity); } OrganizationId organizationId = this.Identity.ResolveOrganizationId(); partitionId = organizationId.PartitionId; } else { partitionId = RecipientTaskHelper.ResolvePartitionId(this.AccountPartition, new Task.TaskErrorLoggingDelegate(base.WriteError)); } this.sourceForestRIDMaster = ForestTenantRelocationsCache.GetRidMasterName(partitionId); ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(base.DomainController, true, ConsistencyMode.PartiallyConsistent, ADSessionSettings.FromAllTenantsPartitionId(partitionId), 223, "CreateSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Relocation\\GetTenantRelocationRequest.cs"); if (base.DomainController != null && !this.sourceForestRIDMaster.StartsWith(base.DomainController, StringComparison.OrdinalIgnoreCase)) { ForestTenantRelocationsCache.Reset(); } tenantConfigurationSession.SessionSettings.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants; return(tenantConfigurationSession); }
protected override void InternalValidate() { base.InternalValidate(); if (this.DataObject.IsChanged(OrganizationSchema.CustomerFeedbackEnabled) && this.DataObject.CustomerFeedbackEnabled == null) { base.WriteError(new InvalidOperationException(Strings.CustomerFeedbackEnabledError), ErrorCategory.InvalidOperation, null); } if (this.DataObject.IsChanged(OrganizationSchema.OrganizationSummary)) { MultiValuedProperty <OrganizationSummaryEntry> organizationSummary = this.DataObject.OrganizationSummary; this.MergeAdded(organizationSummary); this.MergeRemoved(organizationSummary); if (this.mergedCollection.Changed) { this.UpdateUploadDate(); } this.DataObject.OrganizationSummary = this.mergedCollection; } Organization organization = (Organization)this.GetDynamicParameters(); if (organization.EwsAllowListSpecified && organization.EwsBlockListSpecified) { base.ThrowTerminatingError(new ArgumentException(Strings.ErrorEwsAllowListAndEwsBlockListSpecified), ErrorCategory.InvalidArgument, null); } if (organization.IsModified(OrganizationSchema.EwsApplicationAccessPolicy)) { if (organization.EwsApplicationAccessPolicy == EwsApplicationAccessPolicy.EnforceAllowList && organization.EwsBlockListSpecified) { base.ThrowTerminatingError(new ArgumentException(Strings.ErrorEwsEnforceAllowListAndEwsBlockListSpecified), ErrorCategory.InvalidArgument, null); } if (organization.EwsApplicationAccessPolicy == EwsApplicationAccessPolicy.EnforceBlockList && organization.EwsAllowListSpecified) { base.ThrowTerminatingError(new ArgumentException(Strings.ErrorEwsEnforceBlockListAndEwsAllowListSpecified), ErrorCategory.InvalidArgument, null); } } if (organization.IsModified(OrganizationSchema.DefaultPublicFolderMailbox)) { Organization orgContainer = ((IConfigurationSession)base.DataSession).GetOrgContainer(); PublicFolderInformation defaultPublicFolderMailbox = orgContainer.DefaultPublicFolderMailbox; if (!defaultPublicFolderMailbox.CanUpdate) { base.WriteError(new RecipientTaskException(Strings.ErrorCannotUpdatePublicFolderHierarchyInformation), ExchangeErrorCategory.Client, null); } if (defaultPublicFolderMailbox.HierarchyMailboxGuid != Guid.Empty) { base.WriteError(new RecipientTaskException(Strings.ErrorPublicFolderHierarchyAlreadyProvisioned), ExchangeErrorCategory.Client, null); } } if (this.DataObject.IsChanged(OrganizationSchema.TenantRelocationsAllowed) && !this.DataObject.TenantRelocationsAllowed) { string ridMasterName = ForestTenantRelocationsCache.GetRidMasterName(this.DataObject.OrganizationId.PartitionId); ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ridMasterName, true, ConsistencyMode.PartiallyConsistent, null, ADSessionSettings.FromAllTenantsPartitionId(this.DataObject.OrganizationId.PartitionId ?? PartitionId.LocalForest), 564, "InternalValidate", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\SystemConfigurationTasks\\organization\\SetOrganization.cs"); TenantRelocationRequest[] array = tenantConfigurationSession.Find <TenantRelocationRequest>(null, QueryScope.SubTree, new OrFilter(new QueryFilter[] { TenantRelocationRequest.TenantRelocationRequestFilter, TenantRelocationRequest.TenantRelocationLandingFilter }), null, 1); if (array.Length > 0) { base.WriteError(new InvalidOperationException(Strings.ErrorTenantRelocationInProgress(array[0].Name)), ErrorCategory.InvalidOperation, null); } } }
protected override IConfigDataProvider CreateSession() { ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(base.DomainController, false, ConsistencyMode.PartiallyConsistent, null, ADSessionSettings.FromAllTenantsPartitionId(new PartitionId(this.AccountPartition)), 67, "CreateSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\DirectorySetup\\InstallOrganizationalUnitTask.cs"); tenantConfigurationSession.UseConfigNC = false; return(tenantConfigurationSession); }
protected override void InternalValidate() { TaskLogger.LogEnter(); base.InternalValidate(); OrganizationId organizationId = OrganizationTaskHelper.ResolveOrganization(this, this.Identity, base.RootOrgContainerId, Strings.ErrorOrganizationIdentityRequired); if (this.Identity == null) { this.Identity = new OrganizationIdParameter(organizationId.OrganizationalUnit.Name); } ADSessionSettings sessionSettings = ADSessionSettings.FromAllTenantsPartitionId(organizationId.PartitionId); this.adSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession((base.ServerSettings == null) ? null : base.ServerSettings.PreferredGlobalCatalog(organizationId.PartitionId.ForestFQDN), false, ConsistencyMode.PartiallyConsistent, sessionSettings, 262, "InternalValidate", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Deployment\\RemoveOrganization.cs"); this.tenantOU = OrganizationTaskHelper.GetOUFromOrganizationId(this.Identity, this.adSession, new Task.TaskErrorLoggingDelegate(base.WriteError), false); if (this.tenantOU == null) { base.WriteError(new OrganizationDoesNotExistException(Strings.ErrorOrganizationNotFound(this.Identity.ToString())), ErrorCategory.InvalidArgument, null); } this.adSession.UseConfigNC = true; this.exchangeConfigUnit = this.adSession.Read <ExchangeConfigurationUnit>(this.tenantOU.ConfigurationUnit); if (!OrganizationTaskHelper.CanProceedWithOrganizationTask(this.Identity, this.adSession, RemoveOrganization.ignorableFlagsOnStatusTimeout, new Task.TaskErrorLoggingDelegate(base.WriteError))) { base.WriteError(new OrganizationPendingOperationException(Strings.ErrorCannotRemoveNonActiveOrganization(this.Identity.ToString())), ErrorCategory.InvalidArgument, null); } ServicePlan servicePlanSettings = ServicePlanConfiguration.GetInstance().GetServicePlanSettings(this.exchangeConfigUnit.ProgramId, this.exchangeConfigUnit.OfferId); base.InternalLocalStaticConfigEnabled = !servicePlanSettings.Organization.AdvancedHydrateableObjectsSharedEnabled; base.InternalLocalHydrateableConfigEnabled = !servicePlanSettings.Organization.CommonHydrateableObjectsSharedEnabled; base.InternalCreateSharedConfiguration = (this.exchangeConfigUnit.SharedConfigurationInfo != null); ADSessionSettings sessionSettings2 = ADSessionSettings.FromOrganizationIdWithoutRbacScopes(base.RootOrgContainerId, this.tenantOU.OrganizationId, base.ExecutingUserOrganizationId, false); this.recipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession((base.ServerSettings == null) ? null : base.ServerSettings.PreferredGlobalCatalog(organizationId.PartitionId.ForestFQDN), true, ConsistencyMode.PartiallyConsistent, sessionSettings2, 314, "InternalValidate", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Deployment\\RemoveOrganization.cs"); IConfigurationSession tenantOrTopologyConfigurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession((base.ServerSettings == null) ? null : base.ServerSettings.PreferredGlobalCatalog(organizationId.PartitionId.ForestFQDN), true, ConsistencyMode.PartiallyConsistent, sessionSettings2, 320, "InternalValidate", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Deployment\\RemoveOrganization.cs"); TransportConfigContainer transportConfigContainer = tenantOrTopologyConfigurationSession.FindSingletonConfigurationObject <TransportConfigContainer>(); if (transportConfigContainer != null) { this.organizationFederatedMailboxAlias = transportConfigContainer.OrganizationFederatedMailbox.Local; } if (!this.Force && this.GetUserMailboxCount(2) > 0) { base.WriteError(new OrganizationValidationException(Strings.RemoveOrganizationFailWithExistingMailboxes), ErrorCategory.InvalidOperation, this.Identity); } if (ExchangeConfigurationUnit.RelocationInProgress(this.exchangeConfigUnit)) { base.WriteError(new OrganizationValidationException(Strings.RemoveOrganizationFailRelocationInProgress), (ErrorCategory)1000, this.Identity); } if (this.exchangeConfigUnit.EnableAsSharedConfiguration) { base.WriteError(new OrganizationValidationException(Strings.RemoveOrganizationFailWithoutSharedConfigurationParameter), (ErrorCategory)1000, this.Identity); } if (OrganizationTaskHelper.IsSharedConfigLinkedToOtherTenants(organizationId, this.adSession)) { base.WriteError(new OrganizationValidationException(Strings.RemoveOrganizationFailWithSharedConfigurationBacklinks), (ErrorCategory)1000, this.Identity); } if (base.IsMSITTenant(organizationId)) { this.authoritativeOnly = true; } TaskLogger.LogExit(); }
private ITenantConfigurationSession WritableAllTenantsSessionForPartition(PartitionId partitionId) { return((partitionId == this.partition) ? this.WritableAllTenantsSession : DirectorySessionFactory.Default.CreateTenantConfigurationSession(false, ConsistencyMode.PartiallyConsistent, ADSessionSettings.FromAllTenantsPartitionId(partitionId), 469, "WritableAllTenantsSessionForPartition", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Deployment\\NewOrganizationTask.cs")); }
private static ExchangeConfigurationUnit GetExchangeConfigurationUnitByNameOrAcceptedDomain(string organization) { PartitionId partitionIdByAcceptedDomainName = ADAccountPartitionLocator.GetPartitionIdByAcceptedDomainName(organization); ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromAllTenantsPartitionId(partitionIdByAcceptedDomainName), 733, "GetExchangeConfigurationUnitByNameOrAcceptedDomain", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\rbac\\ExchangeAuthorizationPlugin.cs"); return(tenantConfigurationSession.GetExchangeConfigurationUnitByNameOrAcceptedDomain(organization)); }
private IList <ExchangePrincipal> GetSyncMailboxPrincipals(Guid mailboxDatabaseGuid, IDirectorySession configSession) { List <ExchangePrincipal> list = new List <ExchangePrincipal>(); ADObjectId id = new ADObjectId(mailboxDatabaseGuid); Result <MailboxDatabase>[] dataBases = null; ADOperationResult adoperationResult = ADNotificationAdapter.TryRunADOperation(delegate() { dataBases = configSession.FindByADObjectIds <MailboxDatabase>(new ADObjectId[] { id }); }, 3); if (!adoperationResult.Succeeded) { this.logger.LogOneEntry("NotificationLoader", string.Empty, ExecutionLog.EventType.Error, string.Format("GetSyncMailboxPrincipals: failed to find database {0} in active directory because of {1}", mailboxDatabaseGuid, adoperationResult.Exception), adoperationResult.Exception); } if (dataBases != null && dataBases.Length > 0) { PartitionId[] allAccountPartitionIds = ADAccountPartitionLocator.GetAllAccountPartitionIds(); for (int i = 0; i < allAccountPartitionIds.Length; i++) { PartitionId partitionId = allAccountPartitionIds[i]; IRecipientSession recipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromAllTenantsPartitionId(partitionId), 238, "GetSyncMailboxPrincipals", "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\UnifiedPolicy\\NotificationLoader.cs"); ADUser[] arbMbxs = null; adoperationResult = ADNotificationAdapter.TryRunADOperation(delegate() { arbMbxs = recipientSession.FindPaged <ADUser>(RecipientFilterHelper.DiscoveryMailboxFilterUnifiedPolicy(dataBases[0].Data.Id), null, true, null, 0).ToArray <ADUser>(); }, 3); if (!adoperationResult.Succeeded) { this.logger.LogOneEntry("NotificationLoader", string.Empty, ExecutionLog.EventType.Error, string.Format("GetSyncMailboxPrincipals: failed to find sync mailboxes in database {0} in active directory because of {1}", mailboxDatabaseGuid, adoperationResult.Exception), adoperationResult.Exception); } if (arbMbxs != null && arbMbxs.Length > 0) { ADUser[] arbMbxs2 = arbMbxs; int j = 0; while (j < arbMbxs2.Length) { ADUser aduser = arbMbxs2[j]; this.logger.LogOneEntry("NotificationLoader", string.Empty, ExecutionLog.EventType.Verbose, string.Format("GetSyncMailboxPrincipals: found sync mailbox {0} in database {1} in partition {2}", aduser.UserPrincipalName, mailboxDatabaseGuid, partitionId), null); ExchangePrincipal item = null; try { item = ExchangePrincipal.FromADUser(ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(aduser.OrganizationId), aduser, RemotingOptions.LocalConnectionsOnly); } catch (StoragePermanentException exception) { this.logger.LogOneEntry("NotificationLoader", string.Empty, ExecutionLog.EventType.Error, string.Format("GetSyncMailboxPrincipals: sync mailbox {0} is skipped because of StoragePermanentException in ExchangePrincipal construction", aduser.UserPrincipalName), exception); goto IL_20F; } catch (StorageTransientException exception2) { this.logger.LogOneEntry("NotificationLoader", string.Empty, ExecutionLog.EventType.Error, string.Format("GetSyncMailboxPrincipals: sync mailbox {0} is skipped because of StorageTransientException in ExchangePrincipal construction", aduser.UserPrincipalName), exception2); goto IL_20F; } goto IL_207; IL_20F: j++; continue; IL_207: list.Add(item); goto IL_20F; } } else { this.logger.LogOneEntry("NotificationLoader", string.Empty, ExecutionLog.EventType.Verbose, string.Format("GetSyncMailboxPrincipals: there is no sync mailboxes in database {0} in active directory", mailboxDatabaseGuid), null); } } } return(list); }
public ADObjectId ChooseBetweenAmbiguousUsers(ADObjectId user1Id, ADObjectId user2Id) { ADObjectId result = null; ADUser aduser = base.FindADUserByObjectId(user1Id); ADUser aduser2 = base.FindADUserByObjectId(user2Id); if (aduser != null && aduser2 != null && !user1Id.Equals(user2Id) && aduser.RecipientType == aduser2.RecipientType && aduser.RecipientTypeDetails == aduser2.RecipientTypeDetails && aduser.NetID != null && aduser2.NetID != null && aduser.WindowsLiveID != SmtpAddress.Empty && aduser2.WindowsLiveID != SmtpAddress.Empty && aduser.NetID.Equals(aduser2.NetID) && aduser.WindowsLiveID == aduser2.WindowsLiveID && aduser.OrganizationId != null && aduser.OrganizationId.ConfigurationUnit != null && aduser2.OrganizationId != null && aduser2.OrganizationId.ConfigurationUnit != null) { IConfigurationSession tenantOrTopologyConfigurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromAllTenantsPartitionId(base.SessionSettings.PartitionId), 142, "ChooseBetweenAmbiguousUsers", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\Recipient\\ADTenantRecipientSession.cs"); ExchangeConfigurationUnit exchangeConfigurationUnit = tenantOrTopologyConfigurationSession.Read <ExchangeConfigurationUnit>(aduser.OrganizationId.ConfigurationUnit); ExchangeConfigurationUnit exchangeConfigurationUnit2 = tenantOrTopologyConfigurationSession.Read <ExchangeConfigurationUnit>(aduser2.OrganizationId.ConfigurationUnit); if (exchangeConfigurationUnit != null && exchangeConfigurationUnit2 != null) { if (exchangeConfigurationUnit.MSOSyncEnabled && exchangeConfigurationUnit2.MSOSyncEnabled && !string.IsNullOrEmpty(aduser.ExternalDirectoryObjectId) && !string.IsNullOrEmpty(aduser2.ExternalDirectoryObjectId) && !aduser.ExternalDirectoryObjectId.Equals(aduser2.ExternalDirectoryObjectId, StringComparison.OrdinalIgnoreCase)) { return(result); } if (!aduser.OrganizationId.Equals(aduser2.OrganizationId)) { if (exchangeConfigurationUnit.WhenCreatedUTC != null && exchangeConfigurationUnit2.WhenCreatedUTC != null && exchangeConfigurationUnit.WhenCreatedUTC != exchangeConfigurationUnit2.WhenCreatedUTC) { if (exchangeConfigurationUnit.WhenCreatedUTC > exchangeConfigurationUnit2.WhenCreatedUTC) { result = aduser.Id; } else { result = aduser2.Id; } } } else if (aduser.WhenCreatedUTC != null && aduser2.WhenCreatedUTC != null && aduser.WhenCreatedUTC != aduser2.WhenCreatedUTC) { if (aduser.WhenCreatedUTC > aduser2.WhenCreatedUTC) { result = aduser.Id; } else { result = aduser2.Id; } } else if (aduser.Guid.CompareTo(aduser2.Guid) > 0) { result = aduser.Id; } else { result = aduser2.Id; } } } return(result); }
internal static IRecipientSession GetRecipientSessionFromPartition(LatencyTracker latencyTracker, string partitionId) { if (latencyTracker == null) { throw new ArgumentNullException("latencyTracker"); } if (string.IsNullOrEmpty(partitionId)) { throw new ArgumentNullException("partitionId"); } ADSessionSettings adsessionSettings = null; PartitionId partitionIdObject = null; if ((Utilities.IsPartnerHostedOnly || VariantConfiguration.InvariantNoFlightingSnapshot.Global.MultiTenancy.Enabled) && PartitionId.TryParse(partitionId, out partitionIdObject)) { try { adsessionSettings = DirectoryHelper.ExecuteFunctionAndUpdateMovingAveragePerformanceCounter <ADSessionSettings>(PerfCounters.HttpProxyCountersInstance.MovingAverageTenantLookupLatency, () => DirectoryHelper.InvokeGls <ADSessionSettings>(latencyTracker, () => ADSessionSettings.FromAllTenantsPartitionId(partitionIdObject))); } catch (CannotResolvePartitionException arg) { ExTraceGlobals.VerboseTracer.TraceWarning <string, CannotResolvePartitionException>(0L, "[DirectoryHelper::GetRecipientSessionFromPartition] Caught CannotResolvePartitionException when resolving partition by partition ID {0}. Exception details: {1}.", partitionId, arg); } } if (adsessionSettings == null) { adsessionSettings = ADSessionSettings.FromRootOrgScopeSet(); } return(DirectoryHelper.CreateSession(adsessionSettings)); }
public static string GetDeploymentType(ADObjectId id) { string result = string.Empty; if (VariantConfiguration.GetSnapshot(MachineSettingsContext.Local, null, null).Global.MultiTenancy.Enabled) { string name = id.Parent.Name; ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromAllTenantsPartitionId(id.GetPartitionId()), 84, "GetDeploymentType", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\SQM\\SmsSqmDataPointHelper.cs"); ExchangeConfigurationUnit exchangeConfigurationUnitByName = tenantConfigurationSession.GetExchangeConfigurationUnitByName(name); result = exchangeConfigurationUnitByName.ProgramId; } else { result = "On-Premises"; } return(result); }
internal static ExchangeConfigurationUnit[] FindSharedConfigurations(SharedConfigurationInfo sci, PartitionId partitionId) { ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.FullyConsistent, ADSessionSettings.FromAllTenantsPartitionId(partitionId), 406, "FindSharedConfigurations", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Deployment\\OrganizationTaskHelper.cs"); return(tenantConfigurationSession.FindSharedConfiguration(sci, true)); }
protected override IConfigDataProvider CreateSession() { List <ADServer> list = ADForest.GetLocalForest().FindAllGlobalCatalogsInLocalSite(); if (list.Count == 0) { throw new CannotFindGlobalCatalogsInForest(ADForest.GetLocalForest().Fqdn); } return(DirectorySessionFactory.Default.CreateTenantConfigurationSession(base.DomainController, false, ConsistencyMode.PartiallyConsistent, ADSessionSettings.FromAllTenantsPartitionId(list[0].Id.GetPartitionId()), 34, "CreateSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\DirectorySetup\\InstallConfigurationUnitsContainer.cs")); }
// Token: 0x06001246 RID: 4678 RVA: 0x000687E8 File Offset: 0x000669E8 public override MailboxData CreateOnDemandMailboxData(Guid itemGuid, string parameters) { OABGeneratorAssistantRunNowParameters oabgeneratorAssistantRunNowParameters; if (!OABGeneratorAssistantRunNowParameters.TryParse(parameters, out oabgeneratorAssistantRunNowParameters)) { OABGeneratorAssistant.Tracer.TraceError <string>((long)this.GetHashCode(), "OABGeneratorAssistant.CreateOnDemandMailboxData: ignoring on-demand request due malformed string parameter: {0}.", parameters); return(null); } ADSessionSettings sessionSettings = OABVariantConfigurationSettings.IsMultitenancyEnabled ? ADSessionSettings.FromAllTenantsPartitionId(oabgeneratorAssistantRunNowParameters.PartitionId) : ADSessionSettings.FromRootOrgScopeSet(); ADUser organizationalMailboxFromAD = this.GetOrganizationalMailboxFromAD(sessionSettings, itemGuid); if (organizationalMailboxFromAD == null) { OABGeneratorAssistant.Tracer.TraceError <Guid>((long)this.GetHashCode(), "OABGeneratorAssistant.CreateOnDemandMailboxData: ignoring on-demand request due to unknown organization mailbox: {0}", itemGuid); return(null); } return(new OABGeneratorMailboxData(organizationalMailboxFromAD.OrganizationId, base.DatabaseInfo.Guid, organizationalMailboxFromAD.ExchangeGuid, organizationalMailboxFromAD.DisplayName, organizationalMailboxFromAD.Sid, organizationalMailboxFromAD.PrimarySmtpAddress.Domain, oabgeneratorAssistantRunNowParameters.ObjectGuid, TenantPartitionHint.FromOrganizationId(organizationalMailboxFromAD.OrganizationId), oabgeneratorAssistantRunNowParameters.Description)); }
internal static ADRawEntry GetADRawEntry(PartitionId partitionId, OrganizationId organizationId, SecurityIdentifier sid) { ADRawEntry adrawEntry = null; if (UserTokenStaticHelper.adRawEntryCache.TryGetValue(sid, out adrawEntry)) { return(adrawEntry); } IRecipientSession recipientSession; if (partitionId != null) { recipientSession = DirectorySessionFactory.Default.CreateTenantRecipientSession(true, ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromAllTenantsPartitionId(partitionId), 92, "GetADRawEntry", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\Core\\Common\\UserTokenStaticHelper.cs"); } else if (organizationId != null && !OrganizationId.ForestWideOrgId.Equals(organizationId)) { recipientSession = DirectorySessionFactory.Default.CreateTenantRecipientSession(true, ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(organizationId), 99, "GetADRawEntry", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\Core\\Common\\UserTokenStaticHelper.cs"); } else { recipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromRootOrgScopeSet(), 106, "GetADRawEntry", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\Core\\Common\\UserTokenStaticHelper.cs"); } recipientSession.UseGlobalCatalog = true; adrawEntry = recipientSession.FindADRawEntryBySid(sid, UserTokenStaticHelper.properties); UserTokenStaticHelper.adRawEntryCache.InsertAbsolute(sid, adrawEntry, UserTokenStaticHelper.cacheTimeout, null); return(adrawEntry); }
internal static void LoadOtherForestObjectInternal(string dc, string searchForest, string originalObjectDN, string externalDirectoryOrganizationId, bool needTargetTenant, out TenantRelocationRequest otherForestObject, out Exception ex) { if (string.IsNullOrEmpty(searchForest)) { throw new ArgumentNullException("searchForest"); } if (string.IsNullOrEmpty(originalObjectDN)) { throw new ArgumentNullException("originalObjectDN"); } if (string.IsNullOrEmpty(externalDirectoryOrganizationId)) { throw new ArgumentNullException("externalDirectoryOrganizationId"); } ex = null; otherForestObject = null; PartitionId partitionId = new PartitionId(searchForest); ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.NonCacheSessionFactory.CreateTenantConfigurationSession(dc, false, ConsistencyMode.PartiallyConsistent, null, ADSessionSettings.FromAllTenantsPartitionId(partitionId), 1539, "LoadOtherForestObjectInternal", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\SystemConfiguration\\TenantRelocationRequest.cs"); tenantConfigurationSession.SessionSettings.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants; QueryFilter queryFilter; if (needTargetTenant) { queryFilter = TenantRelocationRequest.TenantRelocationLandingFilter; } else { queryFilter = TenantRelocationRequest.TenantRelocationRequestFilter; } QueryFilter filter = new AndFilter(new QueryFilter[] { new ComparisonFilter(ComparisonOperator.Equal, ExchangeConfigurationUnitSchema.ExternalDirectoryOrganizationId, externalDirectoryOrganizationId), queryFilter }); try { TenantRelocationRequest[] array = tenantConfigurationSession.Find <TenantRelocationRequest>(null, QueryScope.SubTree, filter, null, 2); if (array.Length > 1) { ex = new ADOperationException(DirectoryStrings.ErrorTargetPartitionHas2TenantsWithSameId(originalObjectDN, searchForest, externalDirectoryOrganizationId)); } else if (array.Length > 0) { otherForestObject = array[0]; } else { ex = new CannotFindTargetTenantException(originalObjectDN, searchForest, externalDirectoryOrganizationId); } } catch (ADTransientException ex2) { ex = ex2; } }