Module/Rule.AuditPolicy/Convert/AuditPolicyRule.Convert.psm1
# Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. using module .\..\..\Common\Common.psm1 using module .\..\AuditPolicyRule.psm1 using namespace System.Text # Header <# .SYNOPSIS Converts the xccdf check-content element into an audit policy object. #> class AuditPolicyRuleConvert : AuditPolicyRule { <# .SYNOPSIS Empty constructor for SplitFactory #> AuditPolicyRuleConvert () { } <# .SYNOPSIS Converts an xccdf stig rule element into a Audit Policy Rule .PARAMETER XccdfRule The STIG rule to convert #> AuditPolicyRuleConvert ([xml.xmlelement] $XccdfRule) : base ($XccdfRule, $true) { $tokens = $this.ExtractProperties() $this.SetSubcategory($tokens) $this.SetAuditFlag($tokens) $this.Ensure = [Ensure]::Present $this.SetDuplicateRule() $this.SetDscResource() } <# .SYNOPSIS Extracts and returns the audit policy settings from the check-content. .DESCRIPTION This match looks for the following patterns 1. Category >> Subcategory - AuditFlag 2. Category -> Subcategory - AuditFlag .NOTES If any rule does not match this pattern, please update the xccdf change log file to align to one of these options. #> [RegularExpressions.MatchCollection] ExtractProperties () { return [regex]::Matches( $this.RawString, '(?:(?:\w+(?:\s|\/))+(?:(?: >|>|-)>(?:\s+)?))(?<subcategory>(?:.+?(?=\s-\s)))\s-\s(?<auditflag>(?:\w+)+)' ) } <# .SYNOPSIS Set the subcategory name .DESCRIPTION Set the subcategory value. If the returned audit policy subcategory is not valid, the parser status is set to fail. #> [void] SetSubcategory ([RegularExpressions.MatchCollection] $Regex) { $thisSubcategory = $regex.Groups.Where( {$_.Name -eq 'subcategory'} ).Value if (-not $this.SetStatus($thisSubcategory)) { $this.set_Subcategory($thisSubcategory.trim()) } } <# .SYNOPSIS Set the subcategory flag .DESCRIPTION Set the subcategory flag. If the returned audit policy subcategory is not valid, the parser status is set to fail. #> [void] SetAuditFlag ([RegularExpressions.MatchCollection] $Regex) { $thisAuditFlag = $Regex.Groups.Where( {$_.Name -eq 'auditflag'} ).Value if (-not $this.SetStatus($thisAuditFlag)) { $this.set_AuditFlag($thisAuditFlag) } } hidden [void] SetDscResource () { if ($null -eq $this.DuplicateOf) { $this.DscResource = 'AuditPolicySubcategory' } else { $this.DscResource = 'None' } } <# .SYNOPSIS Checks if a rule matches an audit policy setting. #> static [bool] Match ([string] $CheckContent) { if ( $CheckContent -Match "\bAuditpol\b" -and $CheckContent -NotMatch "resourceSACL" ) { return $true } return $false } } |