openscap_parser 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/openscap_parser/fix.rb +55 -0
- data/lib/openscap_parser/fixes.rb +21 -0
- data/lib/openscap_parser/profile.rb +0 -7
- data/lib/openscap_parser/rule.rb +14 -0
- data/lib/openscap_parser/rule_identifier.rb +7 -0
- data/lib/openscap_parser/rule_result.rb +10 -0
- data/lib/openscap_parser/selectors.rb +9 -0
- data/lib/openscap_parser/set_value.rb +18 -0
- data/lib/openscap_parser/set_values.rb +21 -0
- data/lib/openscap_parser/sub.rb +18 -0
- data/lib/openscap_parser/subs.rb +38 -0
- data/lib/openscap_parser/tailoring_file.rb +2 -0
- data/lib/openscap_parser/test_result.rb +2 -0
- data/lib/openscap_parser/version.rb +1 -1
- data/lib/openscap_parser/xml_node.rb +4 -0
- data/openscap_parser.gemspec +1 -1
- metadata +11 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec101e20e8153fa638aa705ab0bfdcf48624a8c70e74670727454f3811adc175
|
4
|
+
data.tar.gz: 0b2fe6ab34ff284a586709cc6d4a91054d54e4f41749b1fdecffd8af3cc6a37e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4dc7ff782e6d0b2dc61c066462291b039f649d70fc56adef4507c99d55e90626adc839c1ac23352e39b2401011f5e7196e8b63a066d1402b3754b2fee6d94e0
|
7
|
+
data.tar.gz: 0b9141c770ba031dadb3a720e80d61ef3077895c6d6356db39ee1be5b92338b13cf935e1e7a3f83cf4c77abb05a725cb34cef7d6e0fb0c5288ce8f66a45cd7d9
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'openscap_parser/xml_node'
|
3
|
+
require 'openscap_parser/subs'
|
4
|
+
|
5
|
+
module OpenscapParser
|
6
|
+
class Fix < XmlNode
|
7
|
+
include OpenscapParser::Subs
|
8
|
+
|
9
|
+
def id
|
10
|
+
@id ||= @parsed_xml['id']
|
11
|
+
end
|
12
|
+
|
13
|
+
def system
|
14
|
+
@system ||= @parsed_xml['system']
|
15
|
+
end
|
16
|
+
|
17
|
+
def complexity
|
18
|
+
@complexity ||= @parsed_xml['complexity']
|
19
|
+
end
|
20
|
+
|
21
|
+
def disruption
|
22
|
+
@disruption ||= @parsed_xml['disruption']
|
23
|
+
end
|
24
|
+
|
25
|
+
def strategy
|
26
|
+
@strategy ||= @parsed_xml['strategy']
|
27
|
+
end
|
28
|
+
|
29
|
+
def full_text(set_values)
|
30
|
+
full_text_lines(set_values).join('')
|
31
|
+
end
|
32
|
+
|
33
|
+
def full_text_lines(set_values)
|
34
|
+
map_child_nodes(set_values).map do |text_node|
|
35
|
+
text_node.respond_to?(:text) ? text_node.text : ''
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def map_child_nodes(set_values = [])
|
40
|
+
map_sub_nodes @parsed_xml.children, set_values
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_h
|
44
|
+
{
|
45
|
+
:id => id,
|
46
|
+
:system => system,
|
47
|
+
:complexity => complexity,
|
48
|
+
:disruption => disruption,
|
49
|
+
:strategy => strategy,
|
50
|
+
:text => text,
|
51
|
+
:subs => subs.map(&:to_h)
|
52
|
+
}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'openscap_parser/fix'
|
4
|
+
|
5
|
+
module OpenscapParser
|
6
|
+
module Fixes
|
7
|
+
def self.included(base)
|
8
|
+
base.class_eval do
|
9
|
+
def fixes
|
10
|
+
@fixes ||= fix_nodes.map do |fix_node|
|
11
|
+
OpenscapParser::Fix.new(parsed_xml: fix_node)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def fix_nodes(xpath = ".//fix")
|
16
|
+
xpath_nodes(xpath)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -24,13 +24,6 @@ module OpenscapParser
|
|
24
24
|
@parsed_xml.xpath("select[@selected='true']/@idref").map(&:text)
|
25
25
|
end
|
26
26
|
|
27
|
-
def set_values
|
28
|
-
@set_values ||= @parsed_xml.xpath("set-value") &&
|
29
|
-
@parsed_xml.xpath("set-value").map do |set_value|
|
30
|
-
[set_value['idref'], set_value.text]
|
31
|
-
end.to_h
|
32
|
-
end
|
33
|
-
|
34
27
|
def to_h
|
35
28
|
{ :id => id, :title => title, :description => description }
|
36
29
|
end
|
data/lib/openscap_parser/rule.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'openscap_parser/rule_identifier'
|
4
4
|
require 'openscap_parser/rule_references'
|
5
|
+
require 'openscap_parser/fixes'
|
5
6
|
require 'openscap_parser/xml_file'
|
6
7
|
|
7
8
|
# Mimics openscap-ruby Rule interface
|
@@ -9,6 +10,7 @@ module OpenscapParser
|
|
9
10
|
class Rule < XmlNode
|
10
11
|
include OpenscapParser::Util
|
11
12
|
include OpenscapParser::RuleReferences
|
13
|
+
include OpenscapParser::Fixes
|
12
14
|
|
13
15
|
def id
|
14
16
|
@id ||= parsed_xml['id']
|
@@ -54,5 +56,17 @@ module OpenscapParser
|
|
54
56
|
def identifier_node
|
55
57
|
@identifier_node ||= parsed_xml.at_xpath('ident')
|
56
58
|
end
|
59
|
+
|
60
|
+
def to_h
|
61
|
+
{
|
62
|
+
:id => id,
|
63
|
+
:selected => selected,
|
64
|
+
:severity => severity,
|
65
|
+
:title => title,
|
66
|
+
:description => description,
|
67
|
+
:rationale => rationale,
|
68
|
+
:identifier => rule_identifier.to_h
|
69
|
+
}
|
70
|
+
end
|
57
71
|
end
|
58
72
|
end
|
@@ -22,6 +22,16 @@ module OpenscapParser
|
|
22
22
|
@result ||= parsed_xml.at_xpath('result') &&
|
23
23
|
parsed_xml.at_xpath('result').text || ''
|
24
24
|
end
|
25
|
+
|
26
|
+
def to_h
|
27
|
+
{
|
28
|
+
:id => id,
|
29
|
+
:time => time,
|
30
|
+
:severity => severity,
|
31
|
+
:weight => weight,
|
32
|
+
:result => result
|
33
|
+
}
|
34
|
+
end
|
25
35
|
end
|
26
36
|
end
|
27
37
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'openscap_parser/xml_node'
|
3
|
+
|
4
|
+
module OpenscapParser
|
5
|
+
class SetValue < XmlNode
|
6
|
+
def id
|
7
|
+
@id ||= @parsed_xml['idref']
|
8
|
+
end
|
9
|
+
|
10
|
+
def text
|
11
|
+
@text ||= @parsed_xml.text
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_h
|
15
|
+
{ :id => id, :text => text }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'openscap_parser/set_value'
|
4
|
+
|
5
|
+
module OpenscapParser
|
6
|
+
module SetValues
|
7
|
+
def self.included(base)
|
8
|
+
base.class_eval do
|
9
|
+
def set_values
|
10
|
+
@set_values ||= set_value_nodes.map do |set_value_node|
|
11
|
+
OpenscapParser::SetValue.new(parsed_xml: set_value_node)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def set_value_nodes(xpath = ".//set-value")
|
16
|
+
xpath_nodes(xpath)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'openscap_parser/xml_node'
|
3
|
+
|
4
|
+
module OpenscapParser
|
5
|
+
class Sub < XmlNode
|
6
|
+
def id
|
7
|
+
@id ||= @parsed_xml['idref']
|
8
|
+
end
|
9
|
+
|
10
|
+
def use
|
11
|
+
@use ||= @parsed_xml['use']
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_h
|
15
|
+
{ :id => id, :text => text, :use => use }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'openscap_parser/sub'
|
4
|
+
|
5
|
+
module OpenscapParser
|
6
|
+
module Subs
|
7
|
+
def self.included(base)
|
8
|
+
base.class_eval do
|
9
|
+
def subs
|
10
|
+
return [] unless sub_nodes
|
11
|
+
@subs ||= sub_nodes.map do |xml|
|
12
|
+
Sub.new(parsed_xml: xml)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def sub_nodes(xpath = './/sub')
|
17
|
+
@sub_nodes ||= xpath_nodes(xpath)
|
18
|
+
end
|
19
|
+
|
20
|
+
def map_sub_nodes(children, set_values)
|
21
|
+
children.map do |child|
|
22
|
+
next child if child.name == 'text'
|
23
|
+
next replace_sub(Sub.new(parsed_xml: child), set_values) if child.name == 'sub'
|
24
|
+
child
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def replace_sub(sub, set_values)
|
31
|
+
set_value = set_values.find { |set_value| set_value.id == sub.id }
|
32
|
+
return unless set_value
|
33
|
+
set_value.parsed_xml.children.first
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'openscap_parser/rule_results'
|
4
|
+
require 'openscap_parser/selectors'
|
4
5
|
|
5
6
|
module OpenscapParser
|
6
7
|
class TestResult < XmlNode
|
7
8
|
include OpenscapParser::RuleResults
|
9
|
+
include OpenscapParser::Selectors
|
8
10
|
|
9
11
|
def target
|
10
12
|
@target ||= parsed_xml.at_xpath('target') &&
|
data/openscap_parser.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
|
12
12
|
spec.summary = %q{Parse OpenSCAP content}
|
13
13
|
spec.description = %q{This gem is a Ruby interface into SCAP content. It can parse SCAP datastream files (i.e. ssg-rhel7-ds.xml), scan result files output by oscap eval, and tailoring files.}
|
14
|
-
spec.homepage = 'https://github.com/
|
14
|
+
spec.homepage = 'https://github.com/OpenSCAP/openscap_parser'
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
17
17
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openscap_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Lobato Garcia
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-01-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -149,6 +149,8 @@ files:
|
|
149
149
|
- lib/openscap_parser/benchmark.rb
|
150
150
|
- lib/openscap_parser/benchmarks.rb
|
151
151
|
- lib/openscap_parser/datastream_file.rb
|
152
|
+
- lib/openscap_parser/fix.rb
|
153
|
+
- lib/openscap_parser/fixes.rb
|
152
154
|
- lib/openscap_parser/profile.rb
|
153
155
|
- lib/openscap_parser/profiles.rb
|
154
156
|
- lib/openscap_parser/rule.rb
|
@@ -158,6 +160,11 @@ files:
|
|
158
160
|
- lib/openscap_parser/rule_result.rb
|
159
161
|
- lib/openscap_parser/rule_results.rb
|
160
162
|
- lib/openscap_parser/rules.rb
|
163
|
+
- lib/openscap_parser/selectors.rb
|
164
|
+
- lib/openscap_parser/set_value.rb
|
165
|
+
- lib/openscap_parser/set_values.rb
|
166
|
+
- lib/openscap_parser/sub.rb
|
167
|
+
- lib/openscap_parser/subs.rb
|
161
168
|
- lib/openscap_parser/tailoring.rb
|
162
169
|
- lib/openscap_parser/tailoring_file.rb
|
163
170
|
- lib/openscap_parser/tailorings.rb
|
@@ -174,7 +181,7 @@ files:
|
|
174
181
|
- lib/ssg/unarchiver.rb
|
175
182
|
- lib/tasks/ssg.rake
|
176
183
|
- openscap_parser.gemspec
|
177
|
-
homepage: https://github.com/
|
184
|
+
homepage: https://github.com/OpenSCAP/openscap_parser
|
178
185
|
licenses:
|
179
186
|
- MIT
|
180
187
|
metadata: {}
|
@@ -193,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
193
200
|
- !ruby/object:Gem::Version
|
194
201
|
version: '0'
|
195
202
|
requirements: []
|
196
|
-
rubygems_version: 3.0.
|
203
|
+
rubygems_version: 3.0.3
|
197
204
|
signing_key:
|
198
205
|
specification_version: 4
|
199
206
|
summary: Parse OpenSCAP content
|