lib/inspec_tools/xccdf.rb in inspec_tools-2.3.2 vs lib/inspec_tools/xccdf.rb in inspec_tools-2.3.3
- old
+ new
@@ -15,11 +15,11 @@
def initialize(xccdf, replace_tags = nil)
@xccdf = xccdf
@xccdf = replace_tags_in_xccdf(replace_tags, @xccdf) unless replace_tags.nil?
cci_list_path = File.join(File.dirname(__FILE__), '../data/U_CCI_List.xml')
@cci_items = HappyMapperTools::CCIAttributes::CCI_List.parse(File.read(cci_list_path))
- # @cci_items = HappyMapperTools::CCIAttributes::CCI_List.parse(File.read('./data/U_CCI_List.xml'))
+ register_after_parse_callbacks
@benchmark = HappyMapperTools::StigAttributes::Benchmark.parse(@xccdf)
end
def to_ckl
# TODO: to_ckl
@@ -87,10 +87,18 @@
end
end
private
+ def register_after_parse_callbacks
+ # Determine if the parsed Ident is refrencing a legacy ID number.
+ HappyMapperTools::StigAttributes::Ident.after_parse do |object|
+ object.cci = object.system.eql?('http://cyber.mil/cci')
+ object.legacy = !object.cci
+ end
+ end
+
def replace_tags_in_xccdf(replace_tags, xccdf_xml)
replace_tags.each do |tag|
xccdf_xml = xccdf_xml.gsub(/(<|<)#{tag}(>|>)/, "$#{tag}")
end
xccdf_xml
@@ -131,11 +139,12 @@
control['tags']['satisfies'] = group.rule.description.vuln_discussion.split('Satisfies: ')[1].split(',').map(&:strip) if group.rule.description.vuln_discussion.split('Satisfies: ').length > 1
control['tags']['gid'] = group.id
control['tags']['rid'] = group.rule.id
control['tags']['stig_id'] = group.rule.version
control['tags']['fix_id'] = group.rule.fix.id
- control['tags']['cci'] = group.rule.idents
- control['tags']['nist'] = @cci_items.fetch_nists(group.rule.idents)
+ control['tags']['cci'] = group.rule.idents.select { |i| i.cci }.map { |i| i.ident }
+ control['tags']['legacy'] = group.rule.idents.select { |i| i.legacy}.map { |i| i.ident }
+ control['tags']['nist'] = @cci_items.fetch_nists(control['tags']['cci'])
control['tags']['false_negatives'] = group.rule.description.false_negatives if group.rule.description.false_negatives != ''
control['tags']['false_positives'] = group.rule.description.false_positives if group.rule.description.false_positives != ''
control['tags']['documentable'] = group.rule.description.documentable if group.rule.description.documentable != ''
control['tags']['mitigations'] = group.rule.description.false_negatives if group.rule.description.mitigations != ''
control['tags']['severity_override_guidance'] = group.rule.description.severity_override_guidance if group.rule.description.severity_override_guidance != ''