protected override void InternalValidate()
        {
            TaskLogger.LogEnter();
            base.InternalValidate();
            this.CheckForDuplicateExistingDomain();
            AcceptedDomain acceptedDomain = new AcceptedDomain();

            acceptedDomain.Name       = this.Name;
            acceptedDomain.DomainName = new SmtpDomainWithSubdomains(this.DomainName, false);
            acceptedDomain.DomainType = this.DomainType;
            acceptedDomain.SetId(base.Session, this.DomainName.ToString());
            acceptedDomain.OrganizationId = base.CurrentOrganizationId;
            NewAcceptedDomain.ValidateDomainName(acceptedDomain, new Task.TaskErrorLoggingDelegate(this.WriteWrappedError));
            if (!this.DomainOwnershipVerified && this.AuthenticationType == AuthenticationType.Federated)
            {
                bool flag = false;
                AcceptedDomainIdParameter    acceptedDomainIdParameter = AcceptedDomainIdParameter.Parse("*");
                IEnumerable <AcceptedDomain> objects = acceptedDomainIdParameter.GetObjects <AcceptedDomain>(this.TenantCU.Id, base.Session);
                foreach (AcceptedDomain acceptedDomain2 in objects)
                {
                    SmtpDomainWithSubdomains smtpDomainWithSubdomains = new SmtpDomainWithSubdomains(acceptedDomain2.DomainName.Domain.ToString(), true);
                    if (smtpDomainWithSubdomains.Match(this.DomainName.ToString()) == acceptedDomain2.DomainName.Domain.Length)
                    {
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    base.WriteError(new OrganizationTaskException(Strings.ErrorTenantAdminsCanOnlyAddSubdomains(this.DomainName.ToString())), ErrorCategory.InvalidOperation, null);
                }
            }
            TaskLogger.LogExit();
        }
        private void CheckForDuplicateExistingDomain()
        {
            AcceptedDomain acceptedDomain = OrganizationTaskHelper.GetAcceptedDomain(AcceptedDomainIdParameter.Parse(this.Name), base.Session, new Task.TaskErrorLoggingDelegate(base.WriteError), false);

            if (acceptedDomain != null)
            {
                base.WriteError(new ManagementObjectAlreadyExistsException(Strings.ErrorAcceptedDomainExists(this.Name)), ErrorCategory.ResourceExists, null);
            }
        }
        private void GetDomains(string target, List <MailFilterListReport> values)
        {
            AcceptedDomainIdParameter acceptedDomainIdParameter = AcceptedDomainIdParameter.Parse("*");

            foreach (AcceptedDomain acceptedDomain in acceptedDomainIdParameter.GetObjects <AcceptedDomain>(null, base.ConfigSession))
            {
                values.Add(new MailFilterListReport
                {
                    Organization    = base.Organization.ToString(),
                    SelectionTarget = target,
                    Display         = acceptedDomain.Name,
                    Value           = acceptedDomain.Name
                });
            }
        }
        private void CleanupSecondaryDomain()
        {
            AcceptedDomain acceptedDomain = OrganizationTaskHelper.GetAcceptedDomain(AcceptedDomainIdParameter.Parse(this.Name), base.Session, new Task.TaskErrorLoggingDelegate(base.WriteError), false);

            if (acceptedDomain != null)
            {
                try
                {
                    base.Session.Delete(acceptedDomain);
                }
                catch (Exception ex)
                {
                    this.WriteWarning(Strings.ErrorNonActiveOrganizationFound(ex.ToString()));
                }
            }
        }
예제 #5
0
        internal void ValidateEmailAddress(PropertyInfo property, object task, IConfigDataProvider configSession, CmdletValidator.EmailAddress addressType, CmdletValidator.WildcardValidationOptions wildcardOptions, CmdletValidator.EmailAcceptedDomainOptions domainOptions = CmdletValidator.EmailAcceptedDomainOptions.SkipVerify)
        {
            IList <string> list;

            if (this.TryGetValues <string>(property, task, out list))
            {
                LocalizedString      message = (addressType == CmdletValidator.EmailAddress.Sender) ? Strings.InvalidSenderAddress : Strings.InvalidRecipientAddress;
                IEnumerable <string> source  = new string[0];
                if (domainOptions == CmdletValidator.EmailAcceptedDomainOptions.Verify)
                {
                    AcceptedDomainIdParameter acceptedDomainIdParameter = AcceptedDomainIdParameter.Parse("*");
                    source = from domain in acceptedDomainIdParameter.GetObjects <AcceptedDomain>(null, configSession)
                             select domain.DomainName.Domain.ToLower();
                }
                foreach (string address in list)
                {
                    bool flag2;
                    bool flag = Schema.Utilities.ValidateEmailAddress(address, out flag2);
                    if (flag && flag2)
                    {
                        flag &= (wildcardOptions == CmdletValidator.WildcardValidationOptions.Allow);
                        if (flag && list.Count > 1)
                        {
                            message = ((addressType == CmdletValidator.EmailAddress.Sender) ? Strings.CannotCombineWildcardSenderAddress : Strings.CannotCombineWildcardRecipientAddress);
                            flag    = false;
                        }
                    }
                    if (flag && domainOptions == CmdletValidator.EmailAcceptedDomainOptions.Verify)
                    {
                        SmtpAddress smtpAddress = new SmtpAddress(address);
                        if (!source.Contains(smtpAddress.Domain, StringComparer.InvariantCultureIgnoreCase))
                        {
                            flag    = false;
                            message = Strings.EmailAddressNotInAcceptedDomain(address);
                        }
                    }
                    if (!flag)
                    {
                        if (this.errorMessageId == null)
                        {
                            throw new InvalidExpressionException(message);
                        }
                        this.ThrowError(property);
                    }
                }
            }
        }
예제 #6
0
        internal void ValidateDomain(PropertyInfo property, object task, IConfigDataProvider configSession)
        {
            IList <Fqdn> list;

            if (this.TryGetValues <Fqdn>(property, task, out list) && list.Count > 0)
            {
                if (configSession == null)
                {
                    throw new NullReferenceException("ValidateDomain requires an IConfigDataProvider");
                }
                AcceptedDomainIdParameter acceptedDomainIdParameter = AcceptedDomainIdParameter.Parse("*");
                HashSet <string>          acceptedDomains           = new HashSet <string>(from domain in acceptedDomainIdParameter.GetObjects <AcceptedDomain>(null, configSession)
                                                                                           select domain.DomainName.Domain.ToLower());
                if (!list.All((Fqdn domain) => acceptedDomains.Contains(domain.Domain.ToLower())))
                {
                    this.ThrowError(property);
                }
            }
        }
 protected override void InternalProcessRecord()
 {
     TaskLogger.LogEnter();
     if (this.TenantCU.OrganizationStatus == OrganizationStatus.PendingAcceptedDomainAddition || this.TenantCU.OrganizationStatus == OrganizationStatus.PendingAcceptedDomainRemoval)
     {
         OrganizationTaskHelper.SetOrganizationStatus(base.Session, this.TenantCU, OrganizationStatus.Active);
     }
     try
     {
         base.InternalProcessRecord();
     }
     catch (Exception)
     {
         this.CleanupSecondaryDomain();
         throw;
     }
     if (!base.HasErrors)
     {
         AcceptedDomain acceptedDomain = OrganizationTaskHelper.GetAcceptedDomain(AcceptedDomainIdParameter.Parse(this.Name), base.Session, new Task.TaskErrorLoggingDelegate(base.WriteError), true);
         base.WriteObject(acceptedDomain);
     }
     else
     {
         this.CleanupSecondaryDomain();
     }
     TaskLogger.LogExit();
 }