Exemple #1
0
            protected override void HandleNonAuthoritativeDomains(EmailAddressPolicy policy, HashSet <SmtpDomain> domains)
            {
                ProxyAddressTemplateCollection proxyAddressTemplateCollection = new ProxyAddressTemplateCollection();

                foreach (ProxyAddressTemplate proxyAddressTemplate in policy.NonAuthoritativeDomains)
                {
                    SmtpDomain smtpDomain;
                    if (!UpdateEmailAddressPolicy.DomainValidator.TryGetDomain(proxyAddressTemplate, out smtpDomain))
                    {
                        proxyAddressTemplateCollection.Add(proxyAddressTemplate);
                    }
                }
                bool flag = false;

                foreach (SmtpDomain smtpDomain2 in domains)
                {
                    SmtpProxyAddressTemplate item = new SmtpProxyAddressTemplate("@" + smtpDomain2.Domain, false);
                    proxyAddressTemplateCollection.Add(item);
                    if (!flag && !policy.NonAuthoritativeDomains.Contains(item))
                    {
                        flag = true;
                    }
                }
                if (!flag)
                {
                    flag = (proxyAddressTemplateCollection.Count != policy.NonAuthoritativeDomains.Count);
                }
                if (flag)
                {
                    UpdateEmailAddressPolicy.CheckEapVersion(policy);
                    policy.NonAuthoritativeDomains = proxyAddressTemplateCollection;
                }
            }
Exemple #2
0
        protected override void InternalValidate()
        {
            TaskLogger.LogEnter();
            base.InternalValidate();
            OrganizationId organizationId = this.DataObject.OrganizationId;
            OrganizationalUnitIdParameter organizationalUnitIdParameter = null;

            if (base.Fields.IsModified("RecipientContainer"))
            {
                if (this.RecipientContainer == null)
                {
                    this.DataObject.RecipientContainer = null;
                }
                else
                {
                    organizationalUnitIdParameter = this.RecipientContainer;
                }
            }
            else if (this.DataObject.IsModified(AddressBookBaseSchema.RecipientContainer) && this.DataObject.RecipientContainer != null)
            {
                organizationalUnitIdParameter = new OrganizationalUnitIdParameter(this.DataObject.RecipientContainer);
            }
            if (organizationalUnitIdParameter != null)
            {
                if (base.GlobalConfigSession.IsInPreE14InteropMode())
                {
                    base.WriteError(new InvalidOperationException(Strings.ErrorCannotSetRecipientContainer), ErrorCategory.InvalidArgument, this.DataObject.Identity);
                }
                this.DataObject.RecipientContainer = NewAddressBookBase.GetRecipientContainer(organizationalUnitIdParameter, (IConfigurationSession)base.DataSession, organizationId, new NewAddressBookBase.GetUniqueObject(base.GetDataObject <ExchangeOrganizationalUnit>), new Task.ErrorLoggerDelegate(base.WriteError), new Task.TaskVerboseLoggingDelegate(base.WriteVerbose));
            }
            if (this.IsObjectStateChanged() && this.DataObject.HasMailboxManagerSetting)
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorCanNotUpgradePolicyWithMailboxSetting(this.Identity.ToString())), ErrorCategory.InvalidOperation, this.DataObject.Id);
            }
            if (this.IsObjectStateChanged() && this.DataObject.ExchangeVersion.IsOlderThan(ExchangeObjectVersion.Exchange2007))
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorObjectNotManagableFromCurrentConsole(this.Identity.ToString(), this.DataObject.ExchangeVersion.ToString())), ErrorCategory.InvalidOperation, this.DataObject.Identity);
            }
            if (!base.HasErrors)
            {
                if (this.DataObject.IsChanged(EmailAddressPolicySchema.Priority) && this.DataObject.Priority != 0)
                {
                    UpdateEmailAddressPolicy.PreparePriorityOfEapObjects(organizationId, this.DataObject, base.DataSession, new TaskExtendedErrorLoggingDelegate(this.WriteError), out this.affectedPolicies, out this.affectedPoliciesOriginalPriority);
                }
                if (!base.HasErrors && (this.DataObject.IsChanged(EmailAddressPolicySchema.RecipientFilter) || this.DataObject.IsChanged(EmailAddressPolicySchema.Priority) || this.DataObject.IsChanged(EmailAddressPolicySchema.RawEnabledEmailAddressTemplates) || this.DataObject.IsChanged(EmailAddressPolicySchema.DisabledEmailAddressTemplates) || this.DataObject.IsChanged(EmailAddressPolicySchema.NonAuthoritativeDomains) || this.DataObject.IsChanged(EmailAddressPolicySchema.RecipientContainer)))
                {
                    this.DataObject[EmailAddressPolicySchema.RecipientFilterApplied] = false;
                }
            }
            if (this.domainValidator == null || !this.domainValidator.OrganizationId.Equals(organizationId))
            {
                this.domainValidator = new UpdateEmailAddressPolicy.WritableDomainValidator(organizationId, this.ConfigurationSession, new Task.TaskErrorLoggingDelegate(base.WriteError));
            }
            this.domainValidator.Validate(this.DataObject);
            TaskLogger.LogExit();
        }
        protected override IConfigurable PrepareDataObject()
        {
            TaskLogger.LogEnter();
            IConfigurationSession configurationSession = (IConfigurationSession)base.DataSession;

            this.containerId = base.CurrentOrgContainerId.GetDescendantId(EmailAddressPolicy.RdnEapContainerToOrganization);
            this.DataObject  = (EmailAddressPolicy)base.PrepareDataObject();
            if (!base.HasErrors)
            {
                this.DataObject.SetId(this.containerId.GetChildId(base.Name));
                if (!this.DataObject.IsModified(EmailAddressPolicySchema.Priority))
                {
                    this.DataObject.Priority = EmailAddressPolicyPriority.Lowest;
                }
                if (!base.HasErrors && (this.DataObject.Priority != 0 || !this.DataObject.IsModified(EmailAddressPolicySchema.Priority)))
                {
                    UpdateEmailAddressPolicy.PreparePriorityOfEapObjects(base.OrganizationId ?? OrganizationId.ForestWideOrgId, this.DataObject, base.DataSession, new TaskExtendedErrorLoggingDelegate(this.WriteError), out this.affectedPolicies, out this.affectedPoliciesOriginalPriority);
                }
                OrganizationalUnitIdParameter organizationalUnitIdParameter = null;
                if (base.Fields.IsModified("RecipientContainer"))
                {
                    if (this.RecipientContainer == null)
                    {
                        this.DataObject.RecipientContainer = null;
                    }
                    else
                    {
                        organizationalUnitIdParameter = this.RecipientContainer;
                    }
                }
                else if (this.DataObject.RecipientContainer != null)
                {
                    organizationalUnitIdParameter = new OrganizationalUnitIdParameter(this.DataObject.RecipientContainer);
                }
                if (organizationalUnitIdParameter != null)
                {
                    if (base.GlobalConfigSession.IsInPreE14InteropMode())
                    {
                        base.WriteError(new InvalidOperationException(Strings.ErrorCannotSetRecipientContainer), ErrorCategory.InvalidArgument, this.DataObject.Identity);
                    }
                    this.DataObject.RecipientContainer = NewAddressBookBase.GetRecipientContainer(organizationalUnitIdParameter, (IConfigurationSession)base.DataSession, base.OrganizationId ?? OrganizationId.ForestWideOrgId, new NewAddressBookBase.GetUniqueObject(base.GetDataObject <ExchangeOrganizationalUnit>), new Task.ErrorLoggerDelegate(base.WriteError), new Task.TaskVerboseLoggingDelegate(base.WriteVerbose));
                }
            }
            TaskLogger.LogExit();
            return(this.DataObject);
        }
Exemple #4
0
        protected override void InternalProcessRecord()
        {
            TaskLogger.LogEnter();
            if (base.IsProvisioningLayerAvailable)
            {
                base.UserSpecifiedParameters["DomainController"] = this.DataObject.OriginatingServer;
                try
                {
                    OrganizationId    organizationId  = this.DataObject.OrganizationId;
                    ADSessionSettings sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopes(base.RootOrgContainerId, organizationId, base.ExecutingUserOrganizationId, false);
                    IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(base.TenantGlobalCatalogSession.DomainController, true, ConsistencyMode.PartiallyConsistent, sessionSettings, 287, "InternalProcessRecord", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\SystemConfigurationTasks\\RecipientPolicy\\UpdateEmailAddressPolicy.cs");
                    tenantOrRootOrgRecipientSession.UseGlobalCatalog = true;
                    UpdateEmailAddressPolicy.UpdateRecipients(this.DataObject, this.DataObject.OrganizationId, base.DomainController, tenantOrRootOrgRecipientSession, new Task.TaskVerboseLoggingDelegate(base.WriteVerbose), new Task.TaskWarningLoggingDelegate(this.WriteWarning), new WriteProgress(base.WriteProgress), this, this.FixMissingAlias.IsPresent);
                    goto IL_1AF;
                }
                catch (DataSourceTransientException ex)
                {
                    base.WriteError(new InvalidOperationException(Strings.ErrorReadMatchingRecipients(this.Identity.ToString(), this.DataObject.LdapRecipientFilter, ex.Message), ex), ErrorCategory.InvalidOperation, this.DataObject.Id);
                    TaskLogger.Trace("Exception is raised while reading recipients: {0}", new object[]
                    {
                        ex.ToString()
                    });
                    goto IL_1AF;
                }
                catch (DataSourceOperationException ex2)
                {
                    base.WriteError(new InvalidOperationException(Strings.ErrorReadMatchingRecipients(this.Identity.ToString(), this.DataObject.LdapRecipientFilter, ex2.Message), ex2), ErrorCategory.InvalidOperation, this.DataObject.Id);
                    TaskLogger.Trace("Exception is raised while reading recipients matching filter: {0}", new object[]
                    {
                        ex2.ToString()
                    });
                    goto IL_1AF;
                }
            }
            base.WriteError(new InvalidOperationException(Strings.ErrorNoProvisioningHandlerAvailable), ErrorCategory.InvalidOperation, null);
IL_1AF:
            if (!this.DataObject.ExchangeVersion.IsOlderThan(ExchangeObjectVersion.Exchange2007))
            {
                this.DataObject[EmailAddressPolicySchema.LastUpdatedRecipientFilter] = this.DataObject.RecipientFilter;
                this.DataObject[EmailAddressPolicySchema.RecipientFilterApplied]     = true;
            }
            base.InternalProcessRecord();
            TaskLogger.LogExit();
        }
 protected override void InternalValidate()
 {
     TaskLogger.LogEnter();
     base.InternalValidate();
     if (!base.HasErrors)
     {
         if (base.DataObject.Priority == EmailAddressPolicyPriority.Lowest)
         {
             this.WriteError(new InvalidOperationException(Strings.ErrorInvalidOperationOnLowestEap(this.Identity.ToString())), ErrorCategory.InvalidOperation, base.DataObject.Identity, false);
         }
         this.affectedPolicies = null;
         if (EmailAddressPolicySchema.Priority.ValidateValue(base.DataObject.Priority, false) == null)
         {
             base.DataObject.Priority = EmailAddressPolicyPriority.Lowest;
             UpdateEmailAddressPolicy.PreparePriorityOfEapObjects(base.DataObject.OrganizationId, base.DataObject, base.DataSession, new TaskExtendedErrorLoggingDelegate(this.WriteError), out this.affectedPolicies, out this.affectedPoliciesOriginalPriority);
         }
     }
     TaskLogger.LogExit();
 }
Exemple #6
0
            protected override void HandleNonAuthoritativeDomains(EmailAddressPolicy policy, HashSet <SmtpDomain> domains)
            {
                ProxyAddressTemplateCollection proxyAddressTemplateCollection = new ProxyAddressTemplateCollection();

                foreach (ProxyAddressTemplate proxyAddressTemplate in policy.NonAuthoritativeDomains)
                {
                    SmtpDomain template;
                    if (!UpdateEmailAddressPolicy.DomainValidator.TryGetDomain(proxyAddressTemplate, out template) || (!SetAcceptedDomain.DomainEditValidator.Conflict(this.newDomain, template) && !SetAcceptedDomain.DomainEditValidator.Conflict(this.oldDomain, template)))
                    {
                        proxyAddressTemplateCollection.Add(proxyAddressTemplate);
                    }
                }
                foreach (SmtpDomain smtpDomain in domains)
                {
                    if (SetAcceptedDomain.DomainEditValidator.Conflict(this.newDomain, smtpDomain) || SetAcceptedDomain.DomainEditValidator.Conflict(this.oldDomain, smtpDomain))
                    {
                        SmtpProxyAddressTemplate item = new SmtpProxyAddressTemplate("@" + smtpDomain.Domain, false);
                        proxyAddressTemplateCollection.Add(item);
                    }
                }
                UpdateEmailAddressPolicy.CheckEapVersion(policy);
                policy.NonAuthoritativeDomains = proxyAddressTemplateCollection;
                this.session.Save(policy);
            }
        protected override void InternalProcessRecord()
        {
            TaskLogger.LogEnter();
            bool flag = this.affectedPolicies != null && this.affectedPolicies.Length > 0;
            List <EmailAddressPolicy> list = new List <EmailAddressPolicy>();

            try
            {
                if (this.affectedPolicies != null)
                {
                    for (int i = 0; i < this.affectedPolicies.Length; i++)
                    {
                        if (flag)
                        {
                            base.WriteProgress(Strings.ProgressEmailAddressPolicyPreparingPriority, Strings.ProgressEmailAddressPolicyAdjustingPriority(this.affectedPolicies[i].Identity.ToString()), i * 99 / this.affectedPolicies.Length + 1);
                        }
                        base.DataSession.Save(this.affectedPolicies[i]);
                        this.affectedPolicies[i].Priority = this.affectedPoliciesOriginalPriority[i];
                        list.Add(this.affectedPolicies[i]);
                    }
                }
                base.InternalProcessRecord();
                if (!base.HasErrors)
                {
                    list.Clear();
                }
                if (base.IsProvisioningLayerAvailable)
                {
                    base.UserSpecifiedParameters["DomainController"] = base.DataObject.OriginatingServer;
                }
                else
                {
                    base.WriteError(new InvalidOperationException(Strings.ErrorNoProvisioningHandlerAvailable), ErrorCategory.InvalidOperation, null);
                }
            }
            finally
            {
                for (int j = 0; j < list.Count; j++)
                {
                    EmailAddressPolicy emailAddressPolicy = list[j];
                    try
                    {
                        if (flag)
                        {
                            base.WriteProgress(Strings.ProgressEmailAddressPolicyPreparingPriority, Strings.ProgressEmailAddressPolicyRollingBackPriority(emailAddressPolicy.Identity.ToString()), j * 99 / list.Count + 1);
                        }
                        base.DataSession.Save(emailAddressPolicy);
                    }
                    catch (DataSourceTransientException)
                    {
                        this.WriteWarning(Strings.VerboseFailedToRollbackPriority(emailAddressPolicy.Id.ToString()));
                    }
                }
            }
            if (!base.HasErrors)
            {
                if (base.IsProvisioningLayerAvailable)
                {
                    try
                    {
                        OrganizationId    organizationId  = base.DataObject.OrganizationId;
                        ADSessionSettings sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopes(base.RootOrgContainerId, organizationId, base.ExecutingUserOrganizationId, false);
                        IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(base.TenantGlobalCatalogSession.DomainController, true, ConsistencyMode.PartiallyConsistent, sessionSettings, 190, "InternalProcessRecord", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\SystemConfigurationTasks\\RecipientPolicy\\RemoveEmailAddressPolicy.cs");
                        tenantOrRootOrgRecipientSession.UseGlobalCatalog = true;
                        UpdateEmailAddressPolicy.UpdateRecipients(base.DataObject, base.DataObject.OrganizationId, base.DomainController, tenantOrRootOrgRecipientSession, new Task.TaskVerboseLoggingDelegate(base.WriteVerbose), new Task.TaskWarningLoggingDelegate(this.WriteWarning), new WriteProgress(base.WriteProgress), this);
                        goto IL_2DE;
                    }
                    catch (DataSourceTransientException ex)
                    {
                        this.WriteWarning(Strings.ErrorReadMatchingRecipients(this.Identity.ToString(), base.DataObject.LdapRecipientFilter, ex.Message));
                        TaskLogger.Trace("Exception is raised while reading recipients: {0}", new object[]
                        {
                            ex.ToString()
                        });
                        goto IL_2DE;
                    }
                    catch (DataSourceOperationException ex2)
                    {
                        this.WriteWarning(Strings.ErrorReadMatchingRecipients(this.Identity.ToString(), base.DataObject.LdapRecipientFilter, ex2.Message));
                        TaskLogger.Trace("Exception is raised while reading recipients matching filter: {0}", new object[]
                        {
                            ex2.ToString()
                        });
                        goto IL_2DE;
                    }
                }
                base.WriteError(new InvalidOperationException(Strings.ErrorNoProvisioningHandlerAvailable), ErrorCategory.InvalidOperation, null);
            }
IL_2DE:
            TaskLogger.LogExit();
        }
Exemple #8
0
 internal static int PreparePriorityOfEapObjects(OrganizationId organizationId, EmailAddressPolicy policy, IConfigDataProvider session, TaskExtendedErrorLoggingDelegate writeError, out EmailAddressPolicy[] policiesAdjusted, out EmailAddressPolicyPriority[] originalPriorities)
 {
     policiesAdjusted   = null;
     originalPriorities = null;
     try
     {
         QueryFilter queryFilter = new AndFilter(new QueryFilter[]
         {
             new ComparisonFilter(ComparisonOperator.LessThan, EmailAddressPolicySchema.Priority, EmailAddressPolicyPriority.Lowest),
             new ComparisonFilter(ComparisonOperator.GreaterThanOrEqual, EmailAddressPolicySchema.Priority, EmailAddressPolicyPriority.Highest)
         });
         if (policy.ObjectState != ObjectState.New)
         {
             queryFilter = new AndFilter(new QueryFilter[]
             {
                 queryFilter,
                 new ComparisonFilter(ComparisonOperator.NotEqual, ADObjectSchema.Id, new ADObjectId(null, policy.Guid))
             });
         }
         IConfigurationSession configurationSession       = (IConfigurationSession)session;
         ADPagedReader <EmailAddressPolicy> adpagedReader = configurationSession.FindPaged <EmailAddressPolicy>(EmailAddressPolicyIdParameter.GetRootContainerId(configurationSession, organizationId), QueryScope.OneLevel, queryFilter, new SortBy(EmailAddressPolicySchema.Priority, SortOrder.Ascending), 0);
         EmailAddressPolicy[] array = adpagedReader.ReadAllPages();
         Array.Sort <EmailAddressPolicy>(array, EmailAddressPolicy.PriorityComparer);
         if (policy.Priority != EmailAddressPolicyPriority.Lowest)
         {
             if (policy.ObjectState == ObjectState.New)
             {
                 if ((array.Length == 0 && policy.Priority != EmailAddressPolicyPriority.Highest) || (array.Length > 0 && policy.Priority > 1 + array[array.Length - 1].Priority))
                 {
                     writeError(new ArgumentException(Strings.ErrorInvalidEapNewPriority(policy.Priority.ToString()), "Priority"), ErrorCategory.InvalidArgument, policy.Id, true);
                 }
             }
             else if ((array.Length == 0 && policy.Priority != EmailAddressPolicyPriority.Highest) || (array.Length > 0 && policy.Priority > array[array.Length - 1].Priority))
             {
                 writeError(new ArgumentException(Strings.ErrorInvalidEapSetPriority(policy.Priority.ToString()), "Priority"), ErrorCategory.InvalidArgument, policy.Id, true);
             }
         }
         List <EmailAddressPolicy>         list  = new List <EmailAddressPolicy>();
         List <EmailAddressPolicyPriority> list2 = new List <EmailAddressPolicyPriority>();
         bool flag = false;
         for (int i = 0; i < array.Length; i++)
         {
             int num = i + (flag ? 1 : 0) + EmailAddressPolicyPriority.Highest;
             if (!flag && num == policy.Priority)
             {
                 flag = true;
                 num++;
             }
             EmailAddressPolicyPriority priority = array[i].Priority;
             UpdateEmailAddressPolicy.CheckEapVersion(array[i]);
             array[i].Priority = (EmailAddressPolicyPriority)num;
             if (array[i].IsChanged(EmailAddressPolicySchema.Priority))
             {
                 list.Add(array[i]);
                 list2.Add(priority);
             }
         }
         if (!flag)
         {
             UpdateEmailAddressPolicy.CheckEapVersion(policy);
             policy.Priority = (EmailAddressPolicyPriority)(array.Length + EmailAddressPolicyPriority.Highest);
         }
         foreach (EmailAddressPolicy emailAddressPolicy in list)
         {
             ValidationError[] array2 = emailAddressPolicy.Validate();
             int num2 = 0;
             while (array2.Length > num2)
             {
                 writeError(new InvalidOperationException(Strings.ErrorInvalidOperationOnEapObject(emailAddressPolicy.Id.ToString(), array2[num2].Description)), ErrorCategory.InvalidData, policy.Id, array2.Length - 1 == num2);
                 num2++;
             }
         }
         policiesAdjusted   = list.ToArray();
         originalPriorities = list2.ToArray();
         return(list.Count);
     }
     catch (DataSourceTransientException exception)
     {
         writeError(exception, ErrorCategory.ReadError, policy.Id, true);
     }
     return(-1);
 }
Exemple #9
0
        private static void UpdateRecipients(EmailAddressPolicy eap, OrganizationId organizationId, string domainController, IRecipientSession globalCatalogSession, Task.TaskVerboseLoggingDelegate writeVerbose, Task.TaskWarningLoggingDelegate writeWarning, WriteProgress writeProgress, Task cmdlet, bool fixMissingAlias)
        {
            UpdateEmailAddressPolicy.AssertArgumentNotNull(eap, "eap");
            UpdateEmailAddressPolicy.AssertArgumentNotNull(writeVerbose, "writeVerbose");
            UpdateEmailAddressPolicy.AssertArgumentNotNull(writeWarning, "writeWarning");
            UpdateEmailAddressPolicy.AssertArgumentNotNull(writeProgress, "writeProgress");
            if (string.IsNullOrEmpty(eap.LdapRecipientFilter) && !fixMissingAlias)
            {
                return;
            }
            int num = 0;

            try
            {
                if (cmdlet != null && cmdlet.Stopping)
                {
                    return;
                }
                IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(false, ConsistencyMode.PartiallyConsistent, globalCatalogSession.SessionSettings, 409, "UpdateRecipients", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\SystemConfigurationTasks\\RecipientPolicy\\UpdateEmailAddressPolicy.cs");
                tenantOrRootOrgRecipientSession.EnforceDefaultScope = false;
                IEnumerable <ADRecipient> enumerable = eap.FindMatchingRecipientsPaged(globalCatalogSession, organizationId, null, fixMissingAlias);
                string    text      = null;
                Hashtable hashtable = new Hashtable();
                foreach (ADRecipient adrecipient in enumerable)
                {
                    if (cmdlet != null && cmdlet.Stopping)
                    {
                        return;
                    }
                    if (!string.IsNullOrEmpty(domainController) && string.IsNullOrEmpty(text))
                    {
                        try
                        {
                            string configurationDomainControllerFqdn = SystemConfigurationTasksHelper.GetConfigurationDomainControllerFqdn(domainController);
                            int    num2 = configurationDomainControllerFqdn.IndexOf(".");
                            if (0 <= num2)
                            {
                                text = configurationDomainControllerFqdn.Substring(num2);
                            }
                        }
                        catch (SocketException ex)
                        {
                            writeWarning(Strings.ErrorResolveFqdnForDomainController(domainController, ex.Message));
                            return;
                        }
                    }
                    string text2 = adrecipient.Id.DomainId.DistinguishedName.ToLowerInvariant();
                    if (!hashtable.ContainsKey(text2))
                    {
                        SystemConfigurationTasksHelper.PrepareDomainControllerRecipientSessionForUpdate(tenantOrRootOrgRecipientSession, adrecipient.Id, domainController, text);
                        IEnumerable <ADRecipient> collection = eap.FindMatchingRecipientsPaged(tenantOrRootOrgRecipientSession, organizationId, adrecipient.Id, fixMissingAlias);
                        List <ADRecipient>        list       = new List <ADRecipient>();
                        Exception ex2 = null;
                        Exception ex3 = null;
                        try
                        {
                            list.AddRange(collection);
                        }
                        catch (DataSourceOperationException ex4)
                        {
                            TaskLogger.Trace("Exception caught when re-read recipient from DC : {0}", new object[]
                            {
                                ex4.ToString()
                            });
                            if (ex4.InnerException is ActiveDirectoryObjectNotFoundException || ex4.InnerException is AuthenticationException)
                            {
                                ex3 = ex4;
                            }
                            else
                            {
                                ex2 = ex4;
                            }
                        }
                        catch (DataSourceTransientException ex5)
                        {
                            TaskLogger.Trace("Exception caught when re-read recipient from DC : {0}", new object[]
                            {
                                ex5.ToString()
                            });
                            if (ex5.InnerException is ActiveDirectoryOperationException || ex5.InnerException is ActiveDirectoryServerDownException)
                            {
                                ex3 = ex5;
                            }
                            else
                            {
                                ex2 = ex5;
                            }
                        }
                        if (ex3 != null)
                        {
                            hashtable.Add(text2, null);
                            writeWarning(Strings.ErrorCannotUpdateRecipientOfDomain(DNConvertor.FqdnFromDomainDistinguishedName(text2), ex3.Message));
                        }
                        else if (ex2 != null)
                        {
                            writeWarning(Strings.ErrorFailedToReadRecipientForUpdate(adrecipient.Id.ToString(), ex2.Message));
                        }
                        else if (1 == list.Count)
                        {
                            ADRecipient adrecipient2 = list[0];
                            if (cmdlet != null && cmdlet.Stopping)
                            {
                                return;
                            }
                            num = num++ % 99 + 1;
                            writeProgress(Strings.ProgressActivityUpdateRecipient, Strings.ProgressStatusUpdateRecipient(adrecipient2.Id.ToString()), num);
                            writeVerbose(Strings.ProgressStatusUpdateRecipient(adrecipient2.Id.ToString()));
                            try
                            {
                                if (fixMissingAlias && string.IsNullOrEmpty(adrecipient2.Alias))
                                {
                                    if (adrecipient2 is ADMicrosoftExchangeRecipient)
                                    {
                                        adrecipient2.Alias = RecipientTaskHelper.GenerateUniqueAlias(globalCatalogSession, adrecipient2.OrganizationId, ADMicrosoftExchangeRecipient.DefaultName, writeVerbose);
                                    }
                                    else if (adrecipient2 is ADSystemAttendantMailbox)
                                    {
                                        adrecipient2.Alias = RecipientTaskHelper.GenerateUniqueAlias(globalCatalogSession, adrecipient2.OrganizationId, (adrecipient2 as ADSystemAttendantMailbox).ServerName + "-SA", writeVerbose);
                                    }
                                    else
                                    {
                                        adrecipient2.Alias = RecipientTaskHelper.GenerateUniqueAlias(globalCatalogSession, adrecipient2.OrganizationId, adrecipient2.Name, writeVerbose);
                                    }
                                    writeWarning(Strings.WarningGeneratingMissingAlias(adrecipient2.Identity.ToString(), adrecipient2.Alias));
                                }
                                if (!adrecipient2.IsReadOnly)
                                {
                                    ProvisioningLayer.UpdateAffectedIConfigurable(cmdlet, RecipientTaskHelper.ConvertRecipientToPresentationObject(adrecipient2), true);
                                }
                                if (!adrecipient2.IsValid || adrecipient2.IsReadOnly)
                                {
                                    writeWarning(Strings.ErrorCannotUpdateInvalidRecipient(adrecipient2.Id.ToString()));
                                }
                                else
                                {
                                    if (cmdlet.IsVerboseOn && adrecipient2.ObjectState != ObjectState.Unchanged)
                                    {
                                        writeVerbose(TaskVerboseStringHelper.GetConfigurableObjectChangedProperties(adrecipient2));
                                    }
                                    tenantOrRootOrgRecipientSession.Save(adrecipient2);
                                }
                            }
                            catch (DataSourceTransientException ex6)
                            {
                                writeWarning(Strings.ErrorUpdateRecipient(adrecipient2.Id.ToString(), ex6.Message));
                                TaskLogger.Trace("Exception is raised while updating recipient '{0}': {1}", new object[]
                                {
                                    adrecipient2.Id.ToString(),
                                    ex6.Message
                                });
                            }
                            catch (DataSourceOperationException ex7)
                            {
                                writeWarning(Strings.ErrorUpdateRecipient(adrecipient2.Id.ToString(), ex7.Message));
                                TaskLogger.Trace("Exception is raised while updating recipient '{0}': {1}", new object[]
                                {
                                    adrecipient2.Id.ToString(),
                                    ex7.Message
                                });
                            }
                            catch (DataValidationException ex8)
                            {
                                writeWarning(Strings.ErrorUpdateRecipient(adrecipient2.Id.ToString(), ex8.Message));
                                TaskLogger.Trace("Exception is raised while updating recipient '{0}': {1}", new object[]
                                {
                                    adrecipient2.Id.ToString(),
                                    ex8.Message
                                });
                            }
                        }
                    }
                }
            }
            finally
            {
                if (cmdlet != null && cmdlet.Stopping)
                {
                    ExManagementApplicationLogger.LogEvent(ManagementEventLogConstants.Tuple_RecipientsUpdateForEmailAddressPolicyCancelled, new string[]
                    {
                        eap.Identity.ToString(),
                        eap.LdapRecipientFilter,
                        ADRecipientSchema.EmailAddresses.Name
                    });
                }
            }
            if (num != 0)
            {
                writeVerbose(Strings.ProgressStatusFinished);
                writeProgress(Strings.ProgressActivityUpdateRecipient, Strings.ProgressStatusFinished, 100);
            }
        }
Exemple #10
0
 internal static void UpdateRecipients(EmailAddressPolicy eap, OrganizationId organizationId, string domainController, IRecipientSession globalCatalogSession, Task.TaskVerboseLoggingDelegate writeVerbose, Task.TaskWarningLoggingDelegate writeWarning, WriteProgress writeProgress, Task cmdlet)
 {
     UpdateEmailAddressPolicy.UpdateRecipients(eap, organizationId, domainController, globalCatalogSession, writeVerbose, writeWarning, writeProgress, cmdlet, false);
 }