예제 #1
0
 // Token: 0x06005DA2 RID: 23970 RVA: 0x00142FC3 File Offset: 0x001411C3
 public TenantOrganizationPresentationObject(ExchangeConfigurationUnit dataObject) : base(dataObject)
 {
     this.PopulateTaskPopulatedProperties();
 }
예제 #2
0
 protected bool MustScopeToSharedConfiguration(ExchangeConfigurationUnit configUnit)
 {
     return(this.SharedTenantConfigurationMode == SharedTenantConfigurationMode.Static || (this.SharedTenantConfigurationMode == SharedTenantConfigurationMode.Dehydrateable && configUnit.IsDehydrated));
 }
예제 #3
0
        private static bool ShouldCreateTenantTemplate(string programId, string offerId, PartitionId partitionId, out ExchangeConfigurationUnit sctConfigUnit)
        {
            sctConfigUnit = null;
            ADDriverContext processADContext = ADSessionSettings.GetProcessADContext();

            if (processADContext == null || processADContext.Mode != ContextMode.Setup)
            {
                return(true);
            }
            ADPagedReader <ExchangeConfigurationUnit> adpagedReader = TemplateTenantConfiguration.FindAllTempateTenants(programId, offerId, partitionId);

            foreach (ExchangeConfigurationUnit exchangeConfigurationUnit in adpagedReader)
            {
                if (exchangeConfigurationUnit.SharedConfigurationInfo != null && ((IComparable)TemplateTenantConfiguration.RequiredTemplateTenantVersion).CompareTo(exchangeConfigurationUnit.SharedConfigurationInfo.CurrentVersion) <= 0)
                {
                    sctConfigUnit = exchangeConfigurationUnit;
                    return(false);
                }
            }
            return(true);
        }
예제 #4
0
        private static bool ShouldCreateSharedConfiguration(string programId, string offerId, PartitionId partitionId, out ExchangeConfigurationUnit sctConfigUnit)
        {
            sctConfigUnit = null;
            ADDriverContext processADContext = ADSessionSettings.GetProcessADContext();

            if (processADContext == null || processADContext.Mode != ContextMode.Setup)
            {
                return(true);
            }
            SharedConfigurationInfo sci = SharedConfigurationInfo.FromInstalledVersion(programId, offerId);

            sctConfigUnit = SharedConfiguration.FindOneSharedConfiguration(sci, partitionId);
            return(sctConfigUnit == null);
        }
예제 #5
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();
        }
예제 #6
0
 protected override void InternalProcessRecord()
 {
     TaskLogger.LogEnter();
     if (this.isRelocationComplete)
     {
         ITenantConfigurationSession tenantConfigurationSession = this.CreateAllTenantsScopedConfigSession(this.DataObject.OrganizationId);
         ITenantRecipientSession     recipientSession           = this.CreateRecipientSession(this.DataObject.OrganizationId.OrganizationalUnit);
         Container            container            = tenantConfigurationSession.Read <Container>(this.DataObject.OrganizationId.ConfigurationUnit.Parent);
         ADOrganizationalUnit adorganizationalUnit = null;
         bool useConfigNC = tenantConfigurationSession.UseConfigNC;
         try
         {
             tenantConfigurationSession.UseConfigNC = false;
             adorganizationalUnit = tenantConfigurationSession.Read <ADOrganizationalUnit>(this.DataObject.OrganizationId.OrganizationalUnit);
         }
         finally
         {
             tenantConfigurationSession.UseConfigNC = useConfigNC;
         }
         if (adorganizationalUnit != null)
         {
             this.CleanupRecipients(this.DataObject.OrganizationId.OrganizationalUnit, recipientSession);
             tenantConfigurationSession.DeleteTree(adorganizationalUnit, null);
         }
         if (container != null)
         {
             this.RemoveExternalDirOrgIdFromCU(tenantConfigurationSession, this.DataObject.OrganizationId.ConfigurationUnit);
             tenantConfigurationSession.DeleteTree(container, null);
         }
         if (!this.DeprovisionedTarget)
         {
             ITenantConfigurationSession tenantConfigurationSession2 = this.CreateAllTenantsScopedConfigSession(this.DataObject.TargetOrganizationId);
             ExchangeConfigurationUnit   exchangeConfigurationUnit   = tenantConfigurationSession2.Read <ExchangeConfigurationUnit>(this.DataObject.TargetOrganizationId.ConfigurationUnit);
             exchangeConfigurationUnit.RelocationSourceForestRaw              = null;
             exchangeConfigurationUnit.RelocationStatusDetailsRaw             = RelocationStatusDetails.NotStarted;
             exchangeConfigurationUnit.TenantRelocationCompletionTargetVector = null;
             tenantConfigurationSession2.Save(exchangeConfigurationUnit);
         }
     }
     else
     {
         ITenantConfigurationSession tenantConfigurationSession3 = this.CreateAllTenantsScopedConfigSession(this.DataObject.TargetOrganizationId);
         if (this.DataObject.TargetOrganizationId != null)
         {
             if (!TenantRelocationStateCache.IgnoreRelocationTimeConstraints() && !this.WaitForReplicationConvergenceInTargetForest(this.DataObject.TargetOriginatingServer, new TimeSpan(0, 5, 0)))
             {
                 base.WriteError(new ReplicationNotCompleteException(this.DataObject.TargetForest, this.DataObject.TargetOriginatingServer), ErrorCategory.InvalidOperation, this.DataObject.Identity);
             }
             ITenantRecipientSession recipientSession2  = this.CreateRecipientSession(this.DataObject.TargetOrganizationId.OrganizationalUnit);
             Container            container2            = tenantConfigurationSession3.Read <Container>(this.DataObject.TargetOrganizationId.ConfigurationUnit.Parent);
             ADOrganizationalUnit adorganizationalUnit2 = null;
             if (this.DataObject.TargetOrganizationId.OrganizationalUnit != null)
             {
                 bool useConfigNC2 = tenantConfigurationSession3.UseConfigNC;
                 try
                 {
                     tenantConfigurationSession3.UseConfigNC = false;
                     adorganizationalUnit2 = tenantConfigurationSession3.Read <ADOrganizationalUnit>(this.DataObject.TargetOrganizationId.OrganizationalUnit);
                 }
                 finally
                 {
                     tenantConfigurationSession3.UseConfigNC = useConfigNC2;
                 }
             }
             if (adorganizationalUnit2 != null)
             {
                 this.CleanupRecipients(this.DataObject.TargetOrganizationId.OrganizationalUnit, recipientSession2);
                 tenantConfigurationSession3.DeleteTree(adorganizationalUnit2, null);
             }
             if (container2 != null)
             {
                 this.RemoveExternalDirOrgIdFromCU(tenantConfigurationSession3, this.DataObject.TargetOrganizationId.ConfigurationUnit);
                 tenantConfigurationSession3.DeleteTree(container2, null);
             }
         }
         this.DataObject.RelocationSyncStartTime = null;
         this.DataObject.LockdownStartTime       = null;
         this.DataObject.RetiredStartTime        = null;
         this.DataObject.TransitionCounter       = null;
         this.DataObject.TargetForest            = null;
         this.DataObject.SafeLockdownSchedule    = null;
         this.DataObject[TenantRelocationRequestSchema.RelocationStatusDetailsRaw] = null;
         this.DataObject[TenantRelocationRequestSchema.RelocationSourceForestRaw]  = null;
         this.DataObject[TenantRelocationRequestSchema.TenantRelocationFlags]      = 0;
         base.InternalProcessRecord();
     }
     TaskLogger.LogExit();
 }