Пример #1
0
        private bool DlpPolicyMatches(TransportRule rule)
        {
            if (!base.Fields.IsModified("DlpPolicy"))
            {
                return(true);
            }
            Guid immutableId;

            if (!Guid.TryParse(this.DlpPolicy, out immutableId))
            {
                ADComplianceProgram adcomplianceProgram = DlpUtils.GetInstalledTenantDlpPolicies(base.DataSession, this.DlpPolicy).FirstOrDefault <ADComplianceProgram>();
                if (adcomplianceProgram == null)
                {
                    return(false);
                }
                immutableId = adcomplianceProgram.ImmutableId;
            }
            Guid guid;

            if (rule.TryGetDlpPolicyId(out guid))
            {
                return(guid.Equals(immutableId));
            }
            return(string.IsNullOrEmpty(this.DlpPolicy));
        }
Пример #2
0
        internal static ArgumentException ValidateDataClassificationParameters(OrganizationId orgId, IEnumerable <Hashtable> classifications)
        {
            if (classifications == null || classifications.Count <Hashtable>() == 0)
            {
                return(null);
            }
            ArgumentException ex = MessageContainsDataClassificationsPredicate.ValidateDataClassificationStaticParameters(classifications);

            if (ex != null)
            {
                return(ex);
            }
            HashSet <string> hashSet = new HashSet <string>();

            foreach (Hashtable hashtable in classifications)
            {
                TargetDataClassification targetDataClassification = MessageContainsDataClassificationsPredicate.HashtableToDataClassification(hashtable);
                ArgumentException        ex2 = MessageContainsDataClassificationsPredicate.ValidateDataClassificationParameter(targetDataClassification, hashtable);
                if (ex2 != null)
                {
                    return(ex2);
                }
                if (!hashSet.Add(targetDataClassification.Id))
                {
                    return(new ArgumentException(RulesTasksStrings.DuplicateDataClassificationSpecified));
                }
            }
            try
            {
                var source = from value in DlpUtils.QueryDataClassification(hashSet, orgId, null, null, null)
                             select new
                {
                    InvariantName = value.Name,
                    LocalizedName = value.LocalizedName,
                    Identity      = value.Identity.ToString(),
                    ClassificationRuleCollectionId = value.ClassificationRuleCollection.Name
                };
                foreach (Hashtable hashtable2 in classifications)
                {
                    string classificationName = (string)hashtable2["Name".ToUpper()];
                    var <> f__AnonymousType   = source.FirstOrDefault(dataClassification => dataClassification.InvariantName == classificationName || dataClassification.LocalizedName == classificationName || string.Equals(dataClassification.Identity, classificationName, StringComparison.OrdinalIgnoreCase));
                    if (< > f__AnonymousType == null)
                    {
                        return(new ArgumentException(RulesTasksStrings.InvalidMessageDataClassification(classificationName)));
                    }
                    hashtable2["Name".ToUpper()] = < > f__AnonymousType.Identity;
                    hashtable2[TargetDataClassification.OpaqueDataKey.ToUpper()] = < > f__AnonymousType.ClassificationRuleCollectionId;
                }
            }
            catch (ArgumentException result)
            {
                return(result);
            }
            return(null);
        }
 private void GetPolicyRules(string target, List <MailFilterListReport> values)
 {
     values.AddRange(from rule in DlpUtils.GetTransportRules(base.ConfigSession, (Rule rule) => rule.DlpPolicyId == Guid.Empty)
                     select new MailFilterListReport
     {
         Organization    = this.Organization.ToString(),
         SelectionTarget = target,
         Display         = rule.Name,
         Value           = rule.Name
     });
 }
Пример #4
0
        private void SaveDlpPolicy(ADComplianceProgram instance)
        {
            bool flag = MessagingPoliciesSyncLogDataSession.IsNameNewOrChangedForTenantScopedObject(instance);

            this.dataSession.Save(instance);
            if (flag)
            {
                ADComplianceProgram dlpPolicyByName = DlpUtils.GetDlpPolicyByName(this.dataSession, this.policiesCollectionName, instance.Name);
                Guid value;
                if (this.GetExternalDirectoryOrganizationIdToLog(dlpPolicyByName, out value))
                {
                    TenantSettingSyncLogGenerator.Instance.LogChangesForSave(dlpPolicyByName, new Guid?(value), new Guid?(dlpPolicyByName.ImmutableId), null);
                }
            }
        }
 private void GetDlpRules(string target, List <MailFilterListReport> values)
 {
     if (Schema.Utilities.HasDlpRole(this))
     {
         values.AddRange(from rule in DlpUtils.GetTransportRules(base.ConfigSession, (Rule rule) => rule.DlpPolicyId != Guid.Empty)
                         select new MailFilterListReport
         {
             Organization    = this.Organization.ToString(),
             SelectionTarget = target,
             Display         = rule.Name,
             Value           = rule.Name,
             ParentTarget    = GetMailFilterListReport.SelectionTargets.DlpPolicy.ToString(),
             ParentValue     = rule.DlpPolicy
         });
     }
 }
 private void GetDlpPolicies(string target, List <MailFilterListReport> values)
 {
     if (Schema.Utilities.HasDlpRole(this))
     {
         foreach (ADComplianceProgram adcomplianceProgram in DlpUtils.GetInstalledTenantDlpPolicies(base.ConfigSession))
         {
             values.Add(new MailFilterListReport
             {
                 Organization    = base.Organization.ToString(),
                 SelectionTarget = target,
                 Display         = adcomplianceProgram.Name,
                 Value           = adcomplianceProgram.Name
             });
         }
     }
 }
Пример #7
0
        internal void ValidateTransportRule(PropertyInfo property, object task, IConfigDataProvider configSession)
        {
            IList <string> list;

            if (this.TryGetValues <string>(property, task, out list) && list.Count > 0)
            {
                if (configSession == null)
                {
                    throw new NullReferenceException("ValidateTransportRule requires an IConfigDataProvider");
                }
                HashSet <string> installedRules = new HashSet <string>(from rule in DlpUtils.GetTransportRules(configSession, (Rule rule) => true)
                                                                       select rule.Name.ToLower());
                if (!list.All((string rule) => installedRules.Contains(rule.ToLower())))
                {
                    this.ThrowError(property);
                }
            }
        }
Пример #8
0
        internal void ValidateDlpPolicy(PropertyInfo property, object task, IConfigDataProvider configSession)
        {
            IList <string> list;

            if (!DatacenterRegistry.IsForefrontForOffice() && this.TryGetValues <string>(property, task, out list) && list.Count > 0)
            {
                if (configSession == null)
                {
                    throw new NullReferenceException("ValidateDlpPolicy requires an IConfigDataProvider");
                }
                HashSet <string> installedDlp = new HashSet <string>(from dlp in DlpUtils.GetInstalledTenantDlpPolicies(configSession)
                                                                     select dlp.Name.ToLower());
                if (!list.All((string dlp) => installedDlp.Contains(dlp.ToLower())))
                {
                    this.ThrowError(property);
                }
            }
        }
 protected override void InternalProcessRecord()
 {
     try
     {
         if (base.DataSession.Read <ADComplianceProgramCollection>(this.DataObject.Id) == null)
         {
             base.InternalProcessRecord();
         }
     }
     catch (ADObjectAlreadyExistsException)
     {
     }
     using (Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(InstallOutOfBoxDlpPolicyCollection.DlpPolicyTemplatesXmlResourceId))
     {
         DlpUtils.DeleteOutOfBoxDlpPolicies(base.DataSession);
         DlpUtils.SaveOutOfBoxDlpTemplates(base.DataSession, DlpPolicyParser.ParseDlpPolicyTemplates(manifestResourceStream));
     }
 }
Пример #10
0
        private void SaveTransportRule(TransportRule instance)
        {
            bool flag  = MessagingPoliciesSyncLogDataSession.IsNameNewOrChangedForTenantScopedObject(instance);
            Guid empty = Guid.Empty;
            bool flag2 = false;

            if (instance.OrganizationId != OrganizationId.ForestWideOrgId && instance.IsChanged(TransportRuleSchema.Xml))
            {
                flag2 = true;
                if (!instance.Guid.Equals(Guid.Empty))
                {
                    TransportRule transportRuleByGuid = DlpUtils.GetTransportRuleByGuid(this.dataSession, this.rulesCollectionName, instance.Guid);
                    TransportRule transportRule       = (TransportRule)TransportRuleParser.Instance.GetRule(transportRuleByGuid.Xml);
                    transportRule.TryGetDlpPolicyId(out empty);
                }
            }
            this.dataSession.Save(instance);
            if (flag || flag2)
            {
                TransportRule transportRuleByName = DlpUtils.GetTransportRuleByName(this.dataSession, this.rulesCollectionName, instance.Name);
                Guid          empty2 = Guid.Empty;
                List <KeyValuePair <string, object> > list = null;
                if (transportRuleByName != null)
                {
                    TransportRule transportRule2 = (TransportRule)TransportRuleParser.Instance.GetRule(transportRuleByName.Xml);
                    transportRule2.TryGetDlpPolicyId(out empty2);
                    if (!empty2.Equals(empty))
                    {
                        flag = true;
                        list = new List <KeyValuePair <string, object> >();
                        list.Add(new KeyValuePair <string, object>("DLPPolicyId", empty2));
                    }
                }
                Guid value;
                if (flag && this.GetExternalDirectoryOrganizationIdToLog(transportRuleByName, out value))
                {
                    TenantSettingSyncLogGenerator.Instance.LogChangesForSave(transportRuleByName, new Guid?(value), new Guid?(transportRuleByName.ImmutableId), list);
                }
            }
        }
Пример #11
0
        internal override string GetPredicateParameters()
        {
            bool          flag                         = true;
            StringBuilder stringBuilder                = new StringBuilder();
            List <TargetDataClassification> list       = MessageContainsDataClassificationsPredicate.HashtablesToDataClassifications(this.DataClassifications).ToList <TargetDataClassification>();
            Dictionary <string, string>     dictionary = null;

            if (this.OrganizationId != null)
            {
                dictionary = DlpUtils.QueryDataClassification(from value in list
                                                              select value.Id, this.OrganizationId, null, null, null).ToDictionary((DataClassificationPresentationObject k) => k.Identity.ToString(), (DataClassificationPresentationObject v) => v.Name);
            }
            foreach (TargetDataClassification targetDataClassification in list)
            {
                if (flag)
                {
                    flag = false;
                }
                else
                {
                    stringBuilder.Append(", ");
                }
                string input = targetDataClassification.Id;
                if (dictionary != null)
                {
                    input = dictionary[targetDataClassification.Id];
                }
                stringBuilder.Append(string.Format("@{{'Name'={0}; 'MinCount'={1};{2}'MinConfidence'={3}; 'MaxConfidence'={4}}}", new object[]
                {
                    Utils.QuoteCmdletParameter(input),
                    targetDataClassification.MinCount,
                    (targetDataClassification.MaxCount > -1) ? string.Format(" 'MaxCount'={0}; ", targetDataClassification.MaxCount) : " ",
                    targetDataClassification.MinConfidence,
                    targetDataClassification.MaxConfidence
                }));
            }
            return(stringBuilder.ToString());
        }
Пример #12
0
        internal static IEnumerable <string> HashtablesToStrings(IEnumerable <Hashtable> parameters, OrganizationId orgId)
        {
            IEnumerable <TargetDataClassification> source = MessageContainsDataClassificationsPredicate.HashtablesToDataClassifications(parameters);

            if (orgId == null)
            {
                return(from classification in source
                       select classification.ToString());
            }
            string empty = string.Empty;
            IEnumerable <string> result;

            try
            {
                Dictionary <string, Tuple <string, string> > resolvedClassifications = DlpUtils.QueryDataClassification(from value in source
                                                                                                                        select value.Id, orgId, null, null, null).ToDictionary((DataClassificationPresentationObject k) => k.Identity.ToString(), (DataClassificationPresentationObject v) => new Tuple <string, string>(v.Name, v.LocalizedName));
                result = from classificationObject in source
                         select MessageContainsDataClassificationsPredicate.FormatClassificationString(classificationObject, resolvedClassifications);
            }
            catch (KeyNotFoundException)
            {
                throw new ArgumentException(RulesTasksStrings.InvalidMessageClassification(empty));
            }
            return(result);
        }