Exemplo n.º 1
0
        protected override void InternalValidate()
        {
            TaskLogger.LogEnter();
            if (base.OptionalIdentityData != null)
            {
                base.OptionalIdentityData.ConfigurationContainerRdn = ClassificationDefinitionConstants.ClassificationDefinitionsRdn;
            }
            base.InternalValidate();
            string name = ((DataClassificationObjectId)this.implementation.DataClassificationPresentationObject.Identity).Name;
            ILookup <string, Rule> dataClassificationsInUse = DlpUtils.GetDataClassificationsInUse(base.DataSession, new string[]
            {
                name
            }, ClassificationDefinitionConstants.RuleIdComparer);

            if (dataClassificationsInUse.Contains(name))
            {
                List <string> list = (from transportRule in dataClassificationsInUse[name]
                                      select transportRule.Name).ToList <string>();
                if (list.Count > 0)
                {
                    base.WriteError(new DataClassificationInUseException(this.implementation.DataClassificationPresentationObject.Name, string.Join(Strings.ClassificationRuleCollectionOffendingListSeparator, list)), ErrorCategory.InvalidOperation, null);
                }
            }
            TaskLogger.LogExit();
        }
        internal static IList <string> GetDeletedRulesInUse(IConfigDataProvider dataSession, TransportRule existingRulePackObject, ISet <string> referencingRules = null, XDocument updatedRulePackXDoc = null)
        {
            ExAssert.RetailAssert(dataSession != null && existingRulePackObject != null, "The data session and rule package object to be updated / deleted must be specified in order to check if any deleted rules are in-use by ETR.");
            HashSet <string> hashSet;

            try
            {
                XDocument ruleCollectionDocumentFromTransportRule = ClassificationDefinitionUtils.GetRuleCollectionDocumentFromTransportRule(existingRulePackObject);
                hashSet = new HashSet <string>(XmlProcessingUtils.GetAllRuleIds(ruleCollectionDocumentFromTransportRule), ClassificationDefinitionConstants.RuleIdComparer);
            }
            catch (ArgumentException)
            {
                ((ClassificationDefinitionsDiagnosticsReporter)ClassificationDefinitionsDiagnosticsReporter.Instance).Tracer.TraceWarning <string>(0L, "Deleting classification rule collection '{0}' with null compressed data.", existingRulePackObject.DistinguishedName);
                return(Enumerable.Empty <string>().ToList <string>());
            }
            catch (AggregateException ex)
            {
                ((ClassificationDefinitionsDiagnosticsReporter)ClassificationDefinitionsDiagnosticsReporter.Instance).Tracer.TraceWarning <string, string>(0L, "Deleting classification rule collection '{0}' with invalid compressed data or invalid decompressed data. Details: {1}", existingRulePackObject.DistinguishedName, ex.Flatten().ToString());
                return(Enumerable.Empty <string>().ToList <string>());
            }
            catch (XmlException ex2)
            {
                ((ClassificationDefinitionsDiagnosticsReporter)ClassificationDefinitionsDiagnosticsReporter.Instance).Tracer.TraceWarning <string, string>(0L, "Deleting classification rule collection '{0}' with invalid XML contents. Details: {1}", existingRulePackObject.DistinguishedName, new AggregateException(new Exception[]
                {
                    ex2
                }).Flatten().ToString());
                return(Enumerable.Empty <string>().ToList <string>());
            }
            if (updatedRulePackXDoc != null)
            {
                foreach (string item in XmlProcessingUtils.GetAllRuleIds(updatedRulePackXDoc))
                {
                    hashSet.Remove(item);
                }
            }
            return(ClassificationRuleCollectionValidationUtils.ProcessClassificationReferences(DlpUtils.GetDataClassificationsInUse(dataSession, hashSet, ClassificationDefinitionConstants.RuleIdComparer), referencingRules));
        }