Esempio n. 1
0
 public static TransportRule ResolvePolicyRuleObject <T>(T policy, IConfigDataProvider session, string ruleCollectionName) where T : ADObject, new()
 {
     if (typeof(T) != typeof(MalwareFilterPolicy) && typeof(T) != typeof(HostedContentFilterPolicy))
     {
         throw new NotSupportedException();
     }
     try
     {
         ADRuleStorageManager adruleStorageManager = new ADRuleStorageManager(ruleCollectionName, session);
         adruleStorageManager.LoadRuleCollection();
         foreach (Rule rule in adruleStorageManager.GetRuleCollection())
         {
             TransportRule transportRule = (TransportRule)rule;
             if (transportRule.Actions != null && transportRule.Actions.Count > 0 && transportRule.Actions[0].Arguments != null && transportRule.Actions[0].Arguments.Count == 2)
             {
                 string strA = transportRule.Actions[0].Arguments[1].GetValue(null) as string;
                 if (string.Compare(strA, policy.Name, true) == 0)
                 {
                     return(transportRule);
                 }
             }
         }
     }
     catch (RuleCollectionNotInAdException)
     {
         return(null);
     }
     return(null);
 }
Esempio n. 2
0
 protected override void InternalProcessRecord()
 {
     try
     {
         ADRuleStorageManager adruleStorageManager = new ADRuleStorageManager(this.ruleCollectionName, base.DataSession);
         adruleStorageManager.LoadRuleCollection();
         if (base.Fields.IsModified("Priority"))
         {
             this.SetRuleWithPriorityChange(adruleStorageManager);
         }
         else
         {
             this.SetRuleWithoutPriorityChange(adruleStorageManager);
         }
     }
     catch (RuleCollectionNotInAdException)
     {
         base.WriteError(new ArgumentException(Strings.RuleNotFound(this.Identity.ToString()), "Identity"), ErrorCategory.InvalidArgument, this.Identity);
     }
     catch (ParserException exception)
     {
         base.WriteError(exception, ErrorCategory.InvalidData, null);
     }
     catch (ArgumentException exception2)
     {
         base.WriteError(exception2, ErrorCategory.InvalidArgument, null);
     }
     catch (InvalidPriorityException exception3)
     {
         base.WriteError(exception3, ErrorCategory.InvalidArgument, null);
     }
 }
        protected override void InternalProcessRecord()
        {
            MalwareFilterRule malwareFilterRule = new MalwareFilterRule(null, base.Name, base.Priority, base.Enabled ? RuleState.Enabled : RuleState.Disabled, base.Comments, base.Conditions, base.Exceptions, new MalwareFilterPolicyIdParameter(this.policyObject.Name));
            int           priority      = base.Fields.IsModified("Priority") ? malwareFilterRule.Priority : -1;
            TransportRule transportRule = null;

            try
            {
                TransportRule        rule = malwareFilterRule.ToInternalRule();
                ADRuleStorageManager adruleStorageManager = new ADRuleStorageManager(this.ruleCollectionName, base.DataSession);
                adruleStorageManager.LoadRuleCollection();
                adruleStorageManager.NewRule(rule, this.ResolveCurrentOrganization(), ref priority, out transportRule);
            }
            catch (RulesValidationException exception)
            {
                base.WriteError(exception, ErrorCategory.InvalidArgument, base.Name);
            }
            catch (InvalidPriorityException exception2)
            {
                base.WriteError(exception2, ErrorCategory.InvalidArgument, null);
            }
            catch (ParserException exception3)
            {
                base.WriteError(exception3, ErrorCategory.InvalidData, null);
            }
            malwareFilterRule.Priority = priority;
            malwareFilterRule.SetTransportRule(transportRule);
            base.WriteObject(malwareFilterRule);
        }
Esempio n. 4
0
        public override void ProcessRecord()
        {
            if (!this.dataObject.Force && !base.ShouldContinue(Strings.PromptToOverwriteDlpPoliciesOnImport))
            {
                return;
            }
            ADRuleStorageManager adruleStorageManager = new ADRuleStorageManager(Utils.RuleCollectionNameFromRole(), base.DataSession);

            adruleStorageManager.LoadRuleCollection();
            foreach (TransportRuleHandle transportRuleHandle in adruleStorageManager.GetRuleHandles())
            {
                Guid guid;
                if (transportRuleHandle.Rule.TryGetDlpPolicyId(out guid))
                {
                    base.DataSession.Delete(transportRuleHandle.AdRule);
                }
            }
            DlpUtils.GetInstalledTenantDlpPolicies(base.DataSession).ToList <ADComplianceProgram>().ForEach(new Action <ADComplianceProgram>(base.DataSession.Delete));
            List <DlpPolicyMetaData> list = DlpUtils.LoadDlpPolicyInstances(this.dataObject.FileData).ToList <DlpPolicyMetaData>();

            foreach (DlpPolicyMetaData dlpPolicy in list)
            {
                IEnumerable <PSObject> enumerable;
                DlpUtils.AddTenantDlpPolicy(base.DataSession, dlpPolicy, Utils.GetOrganizationParameterValue(this.dataObject.Fields), new CmdletRunner(DlpPolicyTemplateMetaData.AllowedCommands, DlpPolicyTemplateMetaData.RequiredParams, null), out enumerable);
            }
        }
Esempio n. 5
0
        private void BackupRulesForEheMigration()
        {
            ADRuleStorageManager adruleStorageManager = new ADRuleStorageManager(this.ruleCollectionName, base.DataSession);

            adruleStorageManager.LoadRuleCollection();
            this.transportRuleCollectionBackUp = adruleStorageManager.GetRuleCollection();
        }
        protected override void InternalProcessRecord()
        {
            HostedContentFilterRule hostedContentFilterRule = new HostedContentFilterRule(null, base.Name, base.Priority, base.Enabled ? RuleState.Enabled : RuleState.Disabled, base.Comments, base.Conditions, base.Exceptions, new HostedContentFilterPolicyIdParameter(this.policyObject.Name));

            if (this.policyObject.EnableEndUserSpamNotifications && !hostedContentFilterRule.IsEsnCompatible)
            {
                base.WriteError(new OperationNotAllowedException(Strings.ErrorCannotScopeEsnPolicy(this.policyObject.Name)), ErrorCategory.InvalidOperation, null);
            }
            int           priority      = base.Fields.IsModified("Priority") ? hostedContentFilterRule.Priority : -1;
            TransportRule transportRule = null;

            try
            {
                TransportRule        rule = hostedContentFilterRule.ToInternalRule();
                ADRuleStorageManager adruleStorageManager = new ADRuleStorageManager(this.ruleCollectionName, base.DataSession);
                adruleStorageManager.LoadRuleCollection();
                adruleStorageManager.NewRule(rule, this.ResolveCurrentOrganization(), ref priority, out transportRule);
                FfoDualWriter.SaveToFfo <TransportRule>(this, transportRule, TenantSettingSyncLogType.DUALSYNCTR, null);
            }
            catch (RulesValidationException exception)
            {
                base.WriteError(exception, ErrorCategory.InvalidArgument, base.Name);
            }
            catch (InvalidPriorityException exception2)
            {
                base.WriteError(exception2, ErrorCategory.InvalidArgument, null);
            }
            catch (ParserException exception3)
            {
                base.WriteError(exception3, ErrorCategory.InvalidData, null);
            }
            hostedContentFilterRule.Priority = priority;
            hostedContentFilterRule.SetTransportRule(transportRule);
            base.WriteObject(hostedContentFilterRule);
        }
Esempio n. 7
0
        protected override IConfigurable PrepareDataObject()
        {
            TaskLogger.LogEnter();
            TransportRule transportRule = (TransportRule)base.PrepareDataObject();

            if (base.HasErrors)
            {
                return(null);
            }
            TransportRule transportRule2;

            try
            {
                transportRule2 = (TransportRule)TransportRuleParser.Instance.GetRule(transportRule.Xml);
            }
            catch (ParserException exception)
            {
                base.WriteError(exception, ErrorCategory.InvalidData, null);
                return(null);
            }
            if (transportRule2.IsTooAdvancedToParse)
            {
                base.WriteError(new InvalidOperationException(Strings.CannotModifyRuleDueToVersion(transportRule2.Name)), ErrorCategory.InvalidOperation, null);
                return(null);
            }
            OrganizationId organizationId = transportRule.OrganizationId;

            if (organizationId != OrganizationId.ForestWideOrgId)
            {
                ADRuleStorageManager adruleStorageManager;
                try
                {
                    adruleStorageManager = new ADRuleStorageManager(base.RuleCollectionName, base.DataSession);
                }
                catch (RuleCollectionNotInAdException exception2)
                {
                    base.WriteError(exception2, ErrorCategory.InvalidOperation, null);
                    return(null);
                }
                adruleStorageManager.LoadRuleCollection();
                InvalidOperationException ex = Utils.CheckRuleForOrganizationLimits((IConfigurationSession)base.DataSession, base.TenantGlobalCatalogSession, adruleStorageManager, organizationId, transportRule2, false);
                if (ex != null)
                {
                    base.WriteError(ex, ErrorCategory.InvalidOperation, null);
                    return(null);
                }
            }
            if (Utils.Exchange12HubServersExist(this))
            {
                this.WriteWarning(Strings.SetRuleSyncAcrossDifferentVersionsNeeded);
            }
            transportRule2.Enabled = RuleState.Enabled;
            transportRule2.Mode    = (base.Fields.IsModified("Mode") ? this.Mode : RuleMode.Enforce);
            string xml = TransportRuleSerializer.Instance.SaveRuleToString(transportRule2);

            transportRule.Xml = xml;
            TaskLogger.LogExit();
            return(transportRule);
        }
Esempio n. 8
0
        internal static ILookup <string, Microsoft.Exchange.MessagingPolicies.Rules.Rule> GetDataClassificationsInUse(IConfigDataProvider tenantSession, IEnumerable <string> dataClassificationIds, IEqualityComparer <string> dataClassificationIdComparer = null)
        {
            ArgumentValidator.ThrowIfNull("tenantSession", tenantSession);
            ArgumentValidator.ThrowIfNull("dataClassificationIds", dataClassificationIds);
            if (!dataClassificationIds.Any <string>())
            {
                return(Enumerable.Empty <Microsoft.Exchange.MessagingPolicies.Rules.Rule>().ToLookup((Microsoft.Exchange.MessagingPolicies.Rules.Rule rule) => null));
            }
            ADRuleStorageManager adruleStorageManager = new ADRuleStorageManager(Utils.RuleCollectionNameFromRole(), tenantSession);

            adruleStorageManager.LoadRuleCollection();
            return(DlpUtils.GetDataClassificationsReferencedByRuleCollection(adruleStorageManager.GetRuleCollection(), dataClassificationIds, dataClassificationIdComparer));
        }
Esempio n. 9
0
        private void WriteFormattedRules()
        {
            ADRuleStorageManager ruleStorageManager = base.RuleStorageManager;

            ruleStorageManager.LoadRuleCollection();
            IEnumerable <TransportRuleHandle> ruleHandles = ruleStorageManager.GetRuleHandles();
            List <Rule> list = new List <Rule>();

            foreach (TransportRuleHandle transportRuleHandle in ruleHandles)
            {
                string text = null;
                try
                {
                    Rule rule = Rule.CreateFromInternalRule(this.supportedPredicates, this.supportedActions, transportRuleHandle.Rule, transportRuleHandle.AdRule.Priority, transportRuleHandle.AdRule);
                    if (base.NeedSuppressingPiiData)
                    {
                        rule.SuppressPiiData(Utils.GetSessionPiiMap(base.ExchangeRunspaceConfig));
                    }
                    list.Add(rule);
                }
                catch (ArgumentException ex)
                {
                    text = ex.Message;
                }
                catch (InvalidOperationException ex2)
                {
                    text = ex2.Message;
                }
                catch (ParserException ex3)
                {
                    text = ex3.Message;
                }
                catch (RulesValidationException ex4)
                {
                    text = ex4.Message;
                }
                if (text != null)
                {
                    base.WriteWarning(Strings.ErrorObjectHasValidationErrorsWithId(transportRuleHandle.AdRule.Identity.ToString()) + " " + text);
                }
            }
            this.WriteResult(new BinaryFileDataObject
            {
                FileData = PowershellTransportRuleSerializer.Serialize(list)
            });
        }
Esempio n. 10
0
        protected override void InternalValidate()
        {
            base.InternalValidate();
            TransportConfigContainer transportConfigContainer = (TransportConfigContainer)this.DataObject.GetOriginalObject();

            if (!(this.DataObject.Schema is TransportConfigContainerSchema))
            {
                if (this.DataObject.IsModified(TransportConfigContainerSchema.AnonymousSenderToRecipientRatePerHour) || this.DataObject.IsModified(TransportConfigContainerSchema.MaxDumpsterSizePerDatabase) || this.DataObject.IsModified(TransportConfigContainerSchema.MaxDumpsterTime) || this.DataObject.IsModified(TransportConfigContainerSchema.MaxReceiveSize) || this.DataObject.IsModified(TransportConfigContainerSchema.MaxRecipientEnvelopeLimit) || this.DataObject.IsModified(TransportConfigContainerSchema.SupervisionTags) || this.DataObject.IsModified(TransportConfigContainerSchema.ShadowHeartbeatFrequency) || this.DataObject.IsModified(TransportConfigContainerSchema.ShadowResubmitTimeSpan) || base.Fields.IsModified("QueueDiagnosticsAggregationInterval") || base.Fields.IsModified("DiagnosticsAggregationServicePort") || base.Fields.IsModified("AgentGeneratedMessageLoopDetectionInSubmissionEnabled") || base.Fields.IsModified("AgentGeneratedMessageLoopDetectionInSmtpEnabled") || base.Fields.IsModified("MaxAllowedAgentGeneratedMessageDepth") || base.Fields.IsModified("MaxAllowedAgentGeneratedMessageDepthPerAgent"))
                {
                    this.WriteWarning(Strings.WarningUnsupportedEdgeTransportConfigProperty);
                }
                if (Server.IsSubscribedGateway(base.GlobalConfigSession))
                {
                    ADPropertyDefinition[] array = new ADPropertyDefinition[]
                    {
                        ADAMTransportConfigContainerSchema.InternalSMTPServers,
                        ADAMTransportConfigContainerSchema.TLSReceiveDomainSecureList,
                        ADAMTransportConfigContainerSchema.TLSSendDomainSecureList,
                        ADAMTransportConfigContainerSchema.ShadowHeartbeatRetryCount,
                        ADAMTransportConfigContainerSchema.ShadowHeartbeatTimeoutInterval,
                        ADAMTransportConfigContainerSchema.ShadowMessageAutoDiscardInterval,
                        ADAMTransportConfigContainerSchema.RejectMessageOnShadowFailure,
                        ADAMTransportConfigContainerSchema.ShadowMessagePreferenceSetting,
                        ADAMTransportConfigContainerSchema.MaxRetriesForLocalSiteShadow,
                        ADAMTransportConfigContainerSchema.MaxRetriesForRemoteSiteShadow
                    };
                    foreach (ADPropertyDefinition adpropertyDefinition in array)
                    {
                        if (this.DataObject.IsModified(adpropertyDefinition))
                        {
                            base.WriteError(new CannotSetTransportServerPropertyOnSubscribedEdgeException(adpropertyDefinition.Name), ErrorCategory.InvalidOperation, base.Identity);
                        }
                    }
                    this.ValidateFlagSettingUnchanged <bool>(transportConfigContainer, ADAMTransportConfigContainerSchema.ShadowRedundancyDisabled, "ShadowRedundancyEnabled");
                    this.ValidateFlagSettingUnchanged <ShadowMessagePreference>(transportConfigContainer, ADAMTransportConfigContainerSchema.ShadowMessagePreferenceSetting, "ShadowMessagePreferenceSetting");
                    this.ValidateFlagSettingUnchanged <bool>(transportConfigContainer, ADAMTransportConfigContainerSchema.RejectMessageOnShadowFailure, "RejectMessageOnShadowFailure");
                }
            }
            if (VariantConfiguration.InvariantNoFlightingSnapshot.Global.MultiTenancy.Enabled)
            {
                this.ValidateLegacyArchiveLiveJournalingConfiguration(transportConfigContainer);
                if (this.DataObject.IsModified(ADAMTransportConfigContainerSchema.JournalingReportNdrTo))
                {
                    SmtpAddress journalingReportNdrTo = this.DataObject.JournalingReportNdrTo;
                    if (this.DataObject.JournalingReportNdrTo.IsValidAddress)
                    {
                        JournalNdrValidationCheckResult journalNdrValidationCheckResult = JournalRuleObject.ValidateJournalNdrMailboxSetting(base.DataSession, this.DataObject.JournalingReportNdrTo);
                        if (journalNdrValidationCheckResult == JournalNdrValidationCheckResult.JournalNdrCannotBeNullReversePath)
                        {
                            base.WriteError(new InvalidOperationException(Strings.JournalNdrMailboxCannotBeNull), ErrorCategory.InvalidOperation, null);
                        }
                        else if (journalNdrValidationCheckResult == JournalNdrValidationCheckResult.JournalNdrExistInJournalRuleRecipient)
                        {
                            base.WriteError(new InvalidOperationException(Strings.JournalNdrMailboxInJournalRuleRecipient), ErrorCategory.InvalidOperation, null);
                        }
                        else if (journalNdrValidationCheckResult == JournalNdrValidationCheckResult.JournalNdrExistInJournalRuleJournalEmailAddress)
                        {
                            this.WriteWarning(Strings.JournalNdrMailboxInJournalRuleJournalEmailAddress);
                        }
                    }
                }
            }
            this.WarnForJournalNdrMailboxSetting(transportConfigContainer);
            if (this.DataObject.IsModified(ADAMTransportConfigContainerSchema.TLSReceiveDomainSecureList) && this.DataObject.TLSReceiveDomainSecureList.Count > 256)
            {
                base.WriteError(new ExceededMaximumCollectionCountException(ADAMTransportConfigContainerSchema.TLSReceiveDomainSecureList.Name, 256, this.DataObject.TLSReceiveDomainSecureList.Count), ErrorCategory.InvalidOperation, base.Identity);
            }
            if (this.DataObject.IsModified(ADAMTransportConfigContainerSchema.TLSSendDomainSecureList) && this.DataObject.TLSSendDomainSecureList.Count > 256)
            {
                base.WriteError(new ExceededMaximumCollectionCountException(ADAMTransportConfigContainerSchema.TLSSendDomainSecureList.Name, 256, this.DataObject.TLSSendDomainSecureList.Count), ErrorCategory.InvalidOperation, base.Identity);
            }
            if (this.DataObject.IsModified(ADAMTransportConfigContainerSchema.ExternalPostmasterAddress) && this.DataObject.ExternalPostmasterAddress != null && (!this.DataObject.ExternalPostmasterAddress.Value.IsValidAddress || this.DataObject.ExternalPostmasterAddress.Value == SmtpAddress.NullReversePath))
            {
                base.WriteError(new InvalidPostMasterAddressException(), ErrorCategory.InvalidOperation, base.Identity);
            }
            if (this.DataObject.IsModified(TransportConfigContainerSchema.TransportRuleRegexValidationTimeout) && this.DataObject.TransportRuleRegexValidationTimeout.TotalMilliseconds <= 0.0)
            {
                base.WriteError(new InvalidArgumentException("TransportRuleRegexValidationTimeout"), ErrorCategory.InvalidArgument, this.DataObject.TransportRuleRegexValidationTimeout);
            }
            if (this.DataObject.IsChanged(TransportConfigContainerSchema.SupervisionTags))
            {
                HashSet <string> hashSet = new HashSet <string>(transportConfigContainer.SupervisionTags, StringComparer.OrdinalIgnoreCase);
                foreach (string item in this.DataObject.SupervisionTags)
                {
                    hashSet.Remove(item);
                }
                if (hashSet.Count != 0)
                {
                    this.WriteWarning(Strings.WarningSupervisionTagsRemoved);
                }
            }
            this.ValidateShadowRedundancyPreference(transportConfigContainer);
            if (this.DataObject.IsModified(ADAMTransportConfigContainerSchema.SafetyNetHoldTime))
            {
                this.WriteWarning(Strings.WarningSafetyNetHoldTimeMustBeGreaterThanReplayLagTime);
            }
            if (VariantConfiguration.InvariantNoFlightingSnapshot.Transport.LimitTransportRules.Enabled && this.DataObject.IsModified(TransportConfigContainerSchema.TransportRuleLimit))
            {
                int num  = (int)this.DataObject[TransportConfigContainerSchema.TransportRuleLimit];
                int num2 = 0;
                try
                {
                    ADRuleStorageManager adruleStorageManager = new ADRuleStorageManager(Utils.RuleCollectionNameFromRole(), base.DataSession);
                    adruleStorageManager.LoadRuleCollection();
                    num2 = adruleStorageManager.Count;
                }
                catch (RuleCollectionNotInAdException)
                {
                }
                if (num2 > num)
                {
                    base.WriteError(new TransportRuleLimitTooSmallException(num, num2), ErrorCategory.InvalidOperation, base.Identity);
                }
            }
        }
Esempio n. 11
0
 internal static IEnumerable <TransportRuleHandle> GetTransportRuleHandles(IConfigDataProvider dataSession, out ADRuleStorageManager ruleStorageManager)
 {
     ruleStorageManager = new ADRuleStorageManager(Utils.RuleCollectionNameFromRole(), dataSession);
     ruleStorageManager.LoadRuleCollection();
     return(ruleStorageManager.GetRuleHandles());
 }