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); }
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); }
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); } }
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); }
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); }
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)); }
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) }); }
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); } } }
internal static IEnumerable <TransportRuleHandle> GetTransportRuleHandles(IConfigDataProvider dataSession, out ADRuleStorageManager ruleStorageManager) { ruleStorageManager = new ADRuleStorageManager(Utils.RuleCollectionNameFromRole(), dataSession); ruleStorageManager.LoadRuleCollection(); return(ruleStorageManager.GetRuleHandles()); }