Exemple #1
0
        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);
 }
Exemple #3
0
        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);
        }
Exemple #4
0
        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));
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
                    }
                }
            }
        }
Exemple #11
0
        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();
        }
Exemple #14
0
        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);
                }
            }
        }
Exemple #16
0
        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);
        }
Exemple #17
0
        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"));
 }
Exemple #19
0
        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));
        }
Exemple #20
0
        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);
        }
Exemple #22
0
        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));
        }
Exemple #23
0
        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;
            }
        }