Beispiel #1
0
        protected virtual void Initialize()
        {
            ExAssert.RetailAssert(this.StoredRuleCollection != null, "The stored transport rule instance for classification rule collection presentation object must not be null");
            XDocument ruleCollectionDocumentFromTransportRule = ClassificationDefinitionUtils.GetRuleCollectionDocumentFromTransportRule(this.StoredRuleCollection);

            this.Initialize(ruleCollectionDocumentFromTransportRule);
        }
        private bool TryParseADRulePack(TransportRule adRulePack, out XDocument rulePackXDocument)
        {
            ArgumentValidator.ThrowIfNull("adRulePack", adRulePack);
            rulePackXDocument = null;
            Exception ex = null;

            try
            {
                rulePackXDocument = ClassificationDefinitionUtils.GetRuleCollectionDocumentFromTransportRule(adRulePack);
            }
            catch (ArgumentException ex2)
            {
                ex = ex2;
            }
            catch (AggregateException ex3)
            {
                ex = ex3;
            }
            catch (XmlException ex4)
            {
                ex = ex4;
            }
            if (ex != null)
            {
                this.task.WriteWarning(Strings.WarningInvalidRuleCollectionADObject(adRulePack.Identity.ToString(), ex.Message));
            }
            return(rulePackXDocument != null);
        }
        protected override void WriteResult(IConfigurable dataObject)
        {
            TaskLogger.LogEnter();
            TransportRule transportRule = dataObject as TransportRule;

            if (transportRule != null)
            {
                XDocument ruleCollectionDocumentFromTransportRule = ClassificationDefinitionUtils.GetRuleCollectionDocumentFromTransportRule(transportRule);
                if (ruleCollectionDocumentFromTransportRule != null)
                {
                    string[] ruleIdQueries = new string[]
                    {
                        ((DataClassificationObjectId)this.implementation.DataClassificationPresentationObject.Identity).Name
                    };
                    List <QueryMatchResult> list = XmlProcessingUtils.GetMatchingRulesById(ruleCollectionDocumentFromTransportRule, ruleIdQueries).ToList <QueryMatchResult>();
                    if (list.Count > 0)
                    {
                        ClassificationRuleCollectionPresentationObject rulePackPresentationObject = ClassificationRuleCollectionPresentationObject.Create(transportRule);
                        DataClassificationPresentationObject           result = DataClassificationPresentationObject.Create(list[0].MatchingRuleId, list[0].MatchingRuleXElement, list[0].MatchingResourceXElement, rulePackPresentationObject);
                        this.WriteResult(result);
                    }
                }
            }
            else
            {
                base.WriteResult(dataObject);
            }
            TaskLogger.LogExit();
        }
Beispiel #4
0
        private XDocument TryGetRuleCollectionDocumentFromTransportRule(TransportRule transportRule)
        {
            XDocument result = null;

            try
            {
                result = ClassificationDefinitionUtils.GetRuleCollectionDocumentFromTransportRule(transportRule);
            }
            catch (InvalidOperationException)
            {
                ClassificationDefinitionsDiagnosticsReporter.Instance.WriteInvalidObjectInformation(this.GetHashCode(), transportRule.OrganizationId, transportRule.DistinguishedName);
            }
            catch (ArgumentException underlyingException)
            {
                ClassificationDefinitionsDiagnosticsReporter.Instance.WriteCorruptRulePackageDiagnosticsInformation(this.GetHashCode(), transportRule.OrganizationId, transportRule.DistinguishedName, underlyingException);
            }
            catch (AggregateException ex)
            {
                ClassificationDefinitionsDiagnosticsReporter.Instance.WriteCorruptRulePackageDiagnosticsInformation(this.GetHashCode(), transportRule.OrganizationId, transportRule.DistinguishedName, ex.Flatten());
            }
            catch (XmlException ex2)
            {
                ClassificationDefinitionsDiagnosticsReporter.Instance.WriteCorruptRulePackageDiagnosticsInformation(this.GetHashCode(), transportRule.OrganizationId, transportRule.DistinguishedName, new AggregateException(new Exception[]
                {
                    ex2
                }).Flatten());
            }
            return(result);
        }
Beispiel #5
0
        internal static IEnumerable <Tuple <TransportRule, XDocument> > AggregateOobAndCustomClassificationDefinitions(OrganizationId organizationId, IConfigurationSession openedDataSession = null, Func <TransportRule, bool> inclusiveFilter = null, QueryFilter additionalFilter = null, IClassificationDefinitionsDataReader dataReader = null, IClassificationDefinitionsDiagnosticsReporter classificationDefinitionsDiagnosticsReporter = null)
        {
            IClassificationDefinitionsDataReader          dataReaderToUse = dataReader ?? ClassificationDefinitionsDataReader.DefaultInstance;
            IClassificationDefinitionsDiagnosticsReporter classificationDefinitionsDiagnosticsReporterToUse = classificationDefinitionsDiagnosticsReporter ?? ClassificationDefinitionsDiagnosticsReporter.Instance;

            foreach (TransportRule transportRule in dataReaderToUse.GetAllClassificationRuleCollection(organizationId, openedDataSession, additionalFilter))
            {
                if (inclusiveFilter != null)
                {
                    if (!inclusiveFilter(transportRule))
                    {
                        continue;
                    }
                }
                XDocument rulePackXDoc;
                try
                {
                    rulePackXDoc = ClassificationDefinitionUtils.GetRuleCollectionDocumentFromTransportRule(transportRule);
                }
                catch (InvalidOperationException)
                {
                    classificationDefinitionsDiagnosticsReporterToUse.WriteInvalidObjectInformation(0, organizationId, transportRule.DistinguishedName);
                    continue;
                }
                catch (ArgumentException underlyingException)
                {
                    classificationDefinitionsDiagnosticsReporterToUse.WriteCorruptRulePackageDiagnosticsInformation(0, organizationId, transportRule.DistinguishedName, underlyingException);
                    continue;
                }
                catch (AggregateException ex)
                {
                    classificationDefinitionsDiagnosticsReporterToUse.WriteCorruptRulePackageDiagnosticsInformation(0, organizationId, transportRule.DistinguishedName, ex.Flatten());
                    continue;
                }
                catch (XmlException ex2)
                {
                    classificationDefinitionsDiagnosticsReporterToUse.WriteCorruptRulePackageDiagnosticsInformation(0, organizationId, transportRule.DistinguishedName, new AggregateException(new Exception[]
                    {
                        ex2
                    }).Flatten());
                    continue;
                }
                yield return(new Tuple <TransportRule, XDocument>(transportRule, rulePackXDoc));
            }
            yield break;
        }
        protected override IConfigurable PrepareDataObject()
        {
            TaskLogger.LogEnter();
            TransportRule transportRule = null;

            try
            {
                transportRule = this.TryGetDataObject();
                XDocument rulePackXDoc;
                if (transportRule == null)
                {
                    transportRule = (TransportRule)base.PrepareDataObject();
                    string rawIdentity = this.ClassificationRuleCollectionIdentity.RawIdentity;
                    transportRule.SetId(ClassificationDefinitionUtils.GetClassificationRuleCollectionContainerId(base.DataSession).GetChildId(rawIdentity));
                    transportRule.OrganizationId = base.CurrentOrganizationId;
                    transportRule.Xml            = null;
                    string organizationId;
                    string name;
                    if (base.CurrentOrganizationId != null && base.CurrentOrganizationId.OrganizationalUnit != null)
                    {
                        organizationId = base.CurrentOrganizationId.OrganizationalUnit.ObjectGuid.ToString();
                        name           = base.CurrentOrganizationId.OrganizationalUnit.Name;
                    }
                    else
                    {
                        organizationId = base.CurrentOrgContainerId.ObjectGuid.ToString();
                        name           = base.CurrentOrgContainerId.DomainId.Name;
                    }
                    rulePackXDoc = ClassificationDefinitionUtils.CreateRuleCollectionDocumentFromTemplate(rawIdentity, organizationId, name);
                }
                else
                {
                    rulePackXDoc = ClassificationDefinitionUtils.GetRuleCollectionDocumentFromTransportRule(transportRule);
                }
                this.implementation = new DataClassificationCmdletsImplementation(this);
                this.implementation.Initialize(transportRule, rulePackXDoc);
            }
            catch (LocalizedException exception)
            {
                base.WriteError(exception, ErrorCategory.InvalidOperation, null);
            }
            TaskLogger.LogExit();
            return(transportRule);
        }
Beispiel #7
0
        private void InitializeExistingRulePack(TransportRule existingRulePack)
        {
            this.ExistingRulePackDataObject = existingRulePack;
            if (ClassificationRuleCollectionOperationType.Update == this.OperationType)
            {
                ExAssert.RetailAssert(existingRulePack != null, "ValidationContext constructor must check that there's an existing rule pack data object for update operation.");
            }
            if (this.OperationType == ClassificationRuleCollectionOperationType.Import || existingRulePack == null)
            {
                return;
            }
            XDocument xdocument = null;

            try
            {
                xdocument = ClassificationDefinitionUtils.GetRuleCollectionDocumentFromTransportRule(existingRulePack);
            }
            catch (InvalidOperationException)
            {
                this.classificationDiagnosticsReporter.WriteInvalidObjectInformation(this.GetHashCode(), existingRulePack.OrganizationId, existingRulePack.DistinguishedName);
            }
            catch (ArgumentException underlyingException)
            {
                this.classificationDiagnosticsReporter.WriteCorruptRulePackageDiagnosticsInformation(this.GetHashCode(), existingRulePack.OrganizationId, existingRulePack.DistinguishedName, underlyingException);
            }
            catch (AggregateException ex)
            {
                this.classificationDiagnosticsReporter.WriteCorruptRulePackageDiagnosticsInformation(this.GetHashCode(), existingRulePack.OrganizationId, existingRulePack.DistinguishedName, ex.Flatten());
            }
            catch (XmlException ex2)
            {
                this.classificationDiagnosticsReporter.WriteCorruptRulePackageDiagnosticsInformation(this.GetHashCode(), existingRulePack.OrganizationId, existingRulePack.DistinguishedName, new AggregateException(new Exception[]
                {
                    ex2
                }).Flatten());
            }
            this.existingrulePackXDocument = xdocument;
        }
        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));
        }