openscap 0.4.8 → 0.5.0

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.
Files changed (51) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +7 -18
  3. data/Rakefile +4 -2
  4. data/lib/openscap/all.rb +2 -11
  5. data/lib/openscap/ds/arf.rb +5 -13
  6. data/lib/openscap/ds/sds.rb +9 -12
  7. data/lib/openscap/exceptions.rb +1 -10
  8. data/lib/openscap/libc.rb +1 -10
  9. data/lib/openscap/openscap.rb +11 -11
  10. data/lib/openscap/source.rb +12 -17
  11. data/lib/openscap/text.rb +35 -15
  12. data/lib/openscap/version.rb +2 -11
  13. data/lib/openscap/xccdf/benchmark.rb +65 -22
  14. data/lib/openscap/xccdf/fix.rb +6 -14
  15. data/lib/openscap/xccdf/group.rb +33 -10
  16. data/lib/openscap/xccdf/ident.rb +2 -10
  17. data/lib/openscap/xccdf/item.rb +36 -71
  18. data/lib/openscap/xccdf/item_common.rb +40 -0
  19. data/lib/openscap/xccdf/policy.rb +11 -10
  20. data/lib/openscap/xccdf/policy_model.rb +16 -16
  21. data/lib/openscap/xccdf/profile.rb +10 -19
  22. data/lib/openscap/xccdf/reference.rb +5 -13
  23. data/lib/openscap/xccdf/rule.rb +12 -25
  24. data/lib/openscap/xccdf/ruleresult.rb +1 -10
  25. data/lib/openscap/xccdf/session.rb +20 -30
  26. data/lib/openscap/xccdf/status.rb +35 -0
  27. data/lib/openscap/xccdf/tailoring.rb +4 -16
  28. data/lib/openscap/xccdf/testresult.rb +11 -26
  29. data/lib/openscap/xccdf/value.rb +1 -10
  30. data/lib/openscap/xccdf.rb +2 -11
  31. data/lib/openscap.rb +1 -10
  32. data/test/common/testcase.rb +2 -11
  33. data/test/data/sds-complex.xml +1 -1
  34. data/test/data/xccdf.xml +2 -1
  35. data/test/ds/arf_test.rb +11 -20
  36. data/test/ds/sds_test.rb +24 -15
  37. data/test/integration/arf_waiver_test.rb +6 -15
  38. data/test/openscap_test.rb +1 -10
  39. data/test/source_test.rb +14 -23
  40. data/test/text_test.rb +1 -10
  41. data/test/xccdf/arf_test.rb +2 -12
  42. data/test/xccdf/benchmark_test.rb +97 -20
  43. data/test/xccdf/item_test.rb +82 -0
  44. data/test/xccdf/policy_test.rb +36 -17
  45. data/test/xccdf/profile_test.rb +51 -18
  46. data/test/xccdf/session_ds_test.rb +14 -23
  47. data/test/xccdf/session_test.rb +3 -12
  48. data/test/xccdf/tailoring_test.rb +1 -10
  49. data/test/xccdf/testresult_test.rb +10 -19
  50. data/test/xccdf/value_test.rb +67 -0
  51. metadata +16 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 622927a649b2dd5feaf2151484df58166f77b7e7
4
- data.tar.gz: e4271432dd3c6d41454ae9c1e6d70dc6522aef42
2
+ SHA256:
3
+ metadata.gz: 31f300d3cdcf9b72dcc0e552f4ce9c6113d54b1f9b5316441bff1133a09106ed
4
+ data.tar.gz: fdcb823bf21e22ed25cdd77f0bf534227db14af84f0f7383d7f74c65cf690932
5
5
  SHA512:
6
- metadata.gz: 85e324684a3bbf5a58a179e7363f008680680b93db3e1a01635bfcdf9c9d3f22b9b61dce1f0cee2591ac83a8b5d66202863ec4042433f46c6daa7c970217f9d7
7
- data.tar.gz: 4ad741fdce87513d609a4759215f7555135c9c4be5af32185d649cd7a1c7b702a636c6720a5014aec848fc63e493a08888d64af6fd8ceca173424cacb0700dc3
6
+ metadata.gz: a21ae53d6e42bd055058423e54615780483bec7f8c0514a55dfa953ef6e37d88256c0404135a432e964339a9e26fb0a79ba9963e51ffd0317ba28428d7a70c5a
7
+ data.tar.gz: 790d230ca7fc2b54f9188f5362851d428152000d84d30f935222a323a8276838b491c640a81708f11b592d0c48dfa759f90718d7b80ae1201c9a4344b37513e4
data/README.md CHANGED
@@ -1,13 +1,13 @@
1
- ![ruby-openscap icon](http://isimluk.fedorapeople.org/ruby-OpenSCAP-small.png) ruby-OpenSCAP
1
+ ruby-OpenSCAP <img alt="icon" src="http://isimluk.fedorapeople.org/ruby-OpenSCAP-small.png" width="100">
2
2
  =============
3
3
 
4
4
  Description
5
5
  -------------
6
- A FFI wrapper around the OpenSCAP library.
6
+ An FFI wrapper around the OpenSCAP library.
7
7
 
8
8
  Features/problems
9
9
  -------------
10
- Current version supports minimal set of functions needed to build own scanner. This module
10
+ Current version supports minimal set of functions needed to build own scanner. This gem
11
11
  is self documented by its test suite.
12
12
 
13
13
  Sample Scanner Implementation
@@ -23,28 +23,17 @@ Sample Scanner Implementation
23
23
 
24
24
  Development Requirements
25
25
  -------------
26
- On Fedora, command is
26
+ On Fedora, commands are
27
27
 
28
- dnf install ruby-devel rubygem-rake rubygem-ffi rubygem-bundler openscap
29
-
30
- On RHEL you can install requirements by issuing
31
-
32
- yum install ruby-devel rubygem-rake rubygem-bundler openscap
33
- gem install ffi # or install rubygem-ffi RPM package from EPEL
28
+ dnf install openscap
29
+ bundle install
34
30
 
35
31
 
36
32
  Test Requirements
37
33
  -------------
38
34
  On Fedora, more packages are necessary, but rubocop can be of the latest version
39
35
 
40
- dnf install rubygem-minitest rubygem-test-unit rubygems-devel bzip2
41
- gem install rubocop
42
-
43
- For tests on RHEL7, you need minitest package and specific older version of rubocop.
44
- Newer versions of rubocop requires Ruby >= 2.1.0
45
-
46
- yum install rubygem-minitest bzip2
47
- gem install rubocop -v 0.50.0
36
+ dnf install bzip2
48
37
 
49
38
  Tests are then performed using script
50
39
 
data/Rakefile CHANGED
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler'
2
4
 
3
- Bundler::GemHelper.install_tasks :name => 'openscap'
5
+ Bundler::GemHelper.install_tasks name: 'openscap'
4
6
 
5
7
  task :test do
6
8
  $LOAD_PATH.unshift('lib')
7
9
  $LOAD_PATH.unshift('test')
8
- Dir.glob('./test/**/*_test.rb') { |f| require f }
10
+ Dir.glob('./test/**/*_test.rb').each { |f| require f }
9
11
  end
data/lib/openscap/all.rb CHANGED
@@ -1,12 +1,3 @@
1
- #
2
- # Copyright (c) 2016 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
- Dir.glob(File.join(File.dirname(__FILE__), '{xccdf,ds,}', '*.rb'), &method(:require))
3
+ # Dir.glob(File.join(File.dirname(__FILE__), '{xccdf,ds,}', '*.rb')).each(&method(:require))
@@ -1,13 +1,4 @@
1
- #
2
- # Copyright (c) 2014--2016 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  require 'openscap/ds/sds'
13
4
  require 'openscap/source'
@@ -57,6 +48,7 @@ module OpenSCAP
57
48
  html_p = OpenSCAP.ds_rds_session_get_html_report @session
58
49
  OpenSCAP.raise! if OpenSCAP.error?
59
50
  return nil if html_p.null?
51
+
60
52
  html = html_p.read_string
61
53
  OpenSCAP::LibC.free html_p
62
54
  html
@@ -66,8 +58,8 @@ module OpenSCAP
66
58
 
67
59
  attach_function :ds_rds_session_new_from_source, [:pointer], :pointer
68
60
  attach_function :ds_rds_session_free, [:pointer], :void
69
- attach_function :ds_rds_session_select_report, [:pointer, :string], :pointer
70
- attach_function :ds_rds_session_replace_report_with_source, [:pointer, :pointer], :int
71
- attach_function :ds_rds_session_select_report_request, [:pointer, :string], :pointer
61
+ attach_function :ds_rds_session_select_report, %i[pointer string], :pointer
62
+ attach_function :ds_rds_session_replace_report_with_source, %i[pointer pointer], :int
63
+ attach_function :ds_rds_session_select_report_request, %i[pointer string], :pointer
72
64
  attach_function :ds_rds_session_get_html_report, [:pointer], :pointer
73
65
  end
@@ -1,13 +1,4 @@
1
- #
2
- # Copyright (c) 2014 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  require 'openscap/source'
13
4
 
@@ -24,6 +15,12 @@ module OpenSCAP
24
15
  OpenSCAP.ds_sds_session_new_from_source param[:source].raw
25
16
  end
26
17
  OpenSCAP.raise! if @raw.null?
18
+
19
+ begin
20
+ yield self
21
+ ensure
22
+ destroy
23
+ end if block_given?
27
24
  end
28
25
 
29
26
  def select_checklist(p = {})
@@ -52,6 +49,6 @@ module OpenSCAP
52
49
 
53
50
  attach_function :ds_sds_session_new_from_source, [:pointer], :pointer
54
51
  attach_function :ds_sds_session_free, [:pointer], :void
55
- attach_function :ds_sds_session_select_checklist, [:pointer, :string, :string, :string], :pointer
56
- attach_function :ds_sds_session_get_html_guide, [:pointer, :string], :string
52
+ attach_function :ds_sds_session_select_checklist, %i[pointer string string string], :pointer
53
+ attach_function :ds_sds_session_get_html_guide, %i[pointer string], :string
57
54
  end
@@ -1,13 +1,4 @@
1
- #
2
- # Copyright (c) 2014 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  module OpenSCAP
13
4
  class OpenSCAPError < StandardError
data/lib/openscap/libc.rb CHANGED
@@ -1,13 +1,4 @@
1
- #
2
- # Copyright (c) 2014 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  require 'ffi'
13
4
 
@@ -1,19 +1,10 @@
1
- #
2
- # Copyright (c) 2014--2016 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  require 'ffi'
13
4
 
14
5
  module OpenSCAP
15
6
  extend FFI::Library
16
- ffi_lib ['libopenscap.so.8', 'openscap']
7
+ ffi_lib ['libopenscap.so.8', 'libopenscap.so.25', 'openscap']
17
8
 
18
9
  def self.error?
19
10
  oscap_err
@@ -34,6 +25,15 @@ module OpenSCAP
34
25
  raise OpenSCAPError, err
35
26
  end
36
27
 
28
+ def self._iterate(over:, as:, &)
29
+ has_more_method = "#{as}_iterator_has_more"
30
+ next_method = "#{as}_iterator_next"
31
+ free_method = "#{as}_iterator_free"
32
+
33
+ yield send(next_method, over) while send(has_more_method, over)
34
+ send(free_method, over)
35
+ end
36
+
37
37
  attach_function :oscap_init, [], :void
38
38
  attach_function :oscap_cleanup, [], :void
39
39
  attach_function :oscap_get_version, [], :string
@@ -1,13 +1,4 @@
1
- #
2
- # Copyright (c) 2014--2016 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  require 'openscap'
13
4
 
@@ -29,6 +20,12 @@ module OpenSCAP
29
20
  raise OpenSCAP::OpenSCAPError, "Cannot initialize #{self.class.name} with '#{param}'"
30
21
  end
31
22
  OpenSCAP.raise! if @raw.null?
23
+
24
+ begin
25
+ yield self
26
+ ensure
27
+ destroy
28
+ end if block_given?
32
29
  end
33
30
 
34
31
  def type
@@ -37,9 +34,7 @@ module OpenSCAP
37
34
 
38
35
  def validate!
39
36
  e = FFI::MemoryPointer.new(:char, 4096)
40
- unless OpenSCAP.oscap_source_validate(@raw, XmlReporterCallback, e).zero?
41
- OpenSCAP.raise! e.read_string
42
- end
37
+ OpenSCAP.raise!(e.read_string) unless OpenSCAP.oscap_source_validate(@raw, XmlReporterCallback, e).zero?
43
38
  end
44
39
 
45
40
  def save(filepath = nil)
@@ -62,13 +57,13 @@ module OpenSCAP
62
57
  end
63
58
 
64
59
  attach_function :oscap_source_new_from_file, [:string], :pointer
65
- attach_function :oscap_source_new_from_memory, [:pointer, :int, :string], :pointer
60
+ attach_function :oscap_source_new_from_memory, %i[pointer int string], :pointer
66
61
  attach_function :oscap_source_get_scap_type, [:pointer], :int
67
62
  attach_function :oscap_source_free, [:pointer], :void
68
- attach_function :oscap_source_save_as, [:pointer, :string], :int
63
+ attach_function :oscap_source_save_as, %i[pointer string], :int
69
64
 
70
- callback :xml_reporter, [:string, :int, :string, :pointer], :int
71
- attach_function :oscap_source_validate, [:pointer, :xml_reporter, :pointer], :int
65
+ callback :xml_reporter, %i[string int string pointer], :int
66
+ attach_function :oscap_source_validate, %i[pointer xml_reporter pointer], :int
72
67
  XmlReporterCallback = proc do |filename, line_number, error_message, e|
73
68
  offset = e.get_string(0).length
74
69
  msg = "#{filename}:#{line_number}: #{error_message}"
data/lib/openscap/text.rb CHANGED
@@ -1,20 +1,16 @@
1
- #
2
- # Copyright (c) 2014 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  module OpenSCAP
13
4
  class Text
14
5
  attr_reader :raw
15
6
 
16
- def initialize
17
- @raw = OpenSCAP.oscap_text_new
7
+ def initialize(t = nil)
8
+ @raw = case t
9
+ when FFI::Pointer
10
+ t
11
+ when nil
12
+ OpenSCAP.oscap_text_new
13
+ end
18
14
  end
19
15
 
20
16
  def text=(str)
@@ -22,7 +18,7 @@ module OpenSCAP
22
18
  end
23
19
 
24
20
  def text
25
- OpenSCAP.oscap_text_get_text(raw)
21
+ OpenSCAP.oscap_text_get_text(@raw).force_encoding Encoding::UTF_8
26
22
  end
27
23
 
28
24
  def destroy
@@ -34,22 +30,46 @@ module OpenSCAP
34
30
  class TextList
35
31
  def initialize(oscap_text_iterator)
36
32
  @raw = oscap_text_iterator
33
+
34
+ begin
35
+ yield self
36
+ ensure
37
+ destroy
38
+ end if block_given?
37
39
  end
38
40
 
39
41
  def plaintext(lang = nil)
40
42
  OpenSCAP.oscap_textlist_get_preferred_plaintext @raw, lang
41
43
  end
42
44
 
45
+ def markup(lang:)
46
+ text_pointer = OpenSCAP.oscap_textlist_get_preferred_text @raw, lang
47
+ return nil if text_pointer.null?
48
+
49
+ Text.new(text_pointer).text
50
+ end
51
+
43
52
  def destroy
44
53
  OpenSCAP.oscap_text_iterator_free @raw
45
54
  end
55
+
56
+ def self.extract(pointer, lang:, markup:)
57
+ new(pointer) do |list|
58
+ if markup
59
+ return list.markup(lang:)
60
+ else
61
+ return list.plaintext(lang)
62
+ end
63
+ end
64
+ end
46
65
  end
47
66
 
48
67
  attach_function :oscap_text_new, [], :pointer
49
- attach_function :oscap_text_set_text, [:pointer, :string], :bool
68
+ attach_function :oscap_text_set_text, %i[pointer string], :bool
50
69
  attach_function :oscap_text_get_text, [:pointer], :string
51
70
  attach_function :oscap_text_free, [:pointer], :void
52
71
 
53
- attach_function :oscap_textlist_get_preferred_plaintext, [:pointer, :string], :string
72
+ attach_function :oscap_textlist_get_preferred_plaintext, %i[pointer string], :string
73
+ attach_function :oscap_textlist_get_preferred_text, %i[pointer string], :pointer
54
74
  attach_function :oscap_text_iterator_free, [:pointer], :void
55
75
  end
@@ -1,14 +1,5 @@
1
- #
2
- # Copyright (c) 2014--2018 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  module OpenSCAP
13
- VERSION = '0.4.8'.freeze
4
+ VERSION = '0.5.0'
14
5
  end
@@ -1,21 +1,16 @@
1
- #
2
- # Copyright (c) 2014--2016 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  require 'openscap/source'
13
4
  require 'openscap/xccdf/profile'
14
5
  require 'openscap/xccdf/item'
6
+ require 'openscap/xccdf/item_common'
7
+ require 'openscap/xccdf/value'
8
+ require 'openscap/xccdf/status'
15
9
 
16
10
  module OpenSCAP
17
11
  module Xccdf
18
12
  class Benchmark
13
+ include ItemCommon
19
14
  attr_reader :raw
20
15
 
21
16
  def initialize(p)
@@ -27,6 +22,20 @@ module OpenSCAP
27
22
  "Cannot initialize OpenSCAP::Xccdf::Benchmark with '#{p}'"
28
23
  end
29
24
  OpenSCAP.raise! if @raw.null?
25
+
26
+ begin
27
+ yield self
28
+ ensure
29
+ destroy
30
+ end if block_given?
31
+ end
32
+
33
+ def resolved?
34
+ OpenSCAP.xccdf_benchmark_get_resolved @raw
35
+ end
36
+
37
+ def status_current
38
+ Status.new OpenSCAP.xccdf_benchmark_get_status_current(raw)
30
39
  end
31
40
 
32
41
  def profiles
@@ -37,8 +46,40 @@ module OpenSCAP
37
46
  @items ||= items_init
38
47
  end
39
48
 
49
+ def each_item(&)
50
+ OpenSCAP._iterate over: OpenSCAP.xccdf_item_get_content(@raw), as: 'xccdf_item' do |pointer|
51
+ yield OpenSCAP::Xccdf::Item.build(pointer)
52
+ end
53
+ end
54
+
55
+ def each_profile(&)
56
+ OpenSCAP._iterate over: OpenSCAP.xccdf_benchmark_get_profiles(@raw), as: 'xccdf_profile' do |pointer|
57
+ yield OpenSCAP::Xccdf::Profile.new pointer
58
+ end
59
+ end
60
+
61
+ def each_value(&)
62
+ OpenSCAP._iterate over: OpenSCAP.xccdf_benchmark_get_values(@raw), as: 'xccdf_value' do |pointer|
63
+ yield OpenSCAP::Xccdf::Value.new pointer
64
+ end
65
+ end
66
+
67
+ def policy_model
68
+ @policy_model ||= PolicyModel.new(self)
69
+ end
70
+
71
+ def schema_version
72
+ pointer = OpenSCAP.xccdf_benchmark_get_schema_version(@raw)
73
+ OpenSCAP.xccdf_version_info_get_version(pointer)
74
+ end
75
+
40
76
  def destroy
41
- OpenSCAP.xccdf_benchmark_free @raw
77
+ # Policy Model takes ownership of Xccdf::Benchmark. It is one of these lovely quirks of libopenscap
78
+ if @policy_model
79
+ @policy_model.destroy
80
+ else
81
+ OpenSCAP.xccdf_benchmark_free @raw
82
+ end
42
83
  @raw = nil
43
84
  end
44
85
 
@@ -46,27 +87,18 @@ module OpenSCAP
46
87
 
47
88
  def profiles_init
48
89
  profiles = {}
49
- profit = OpenSCAP.xccdf_benchmark_get_profiles raw
50
- while OpenSCAP.xccdf_profile_iterator_has_more profit
51
- profile_p = OpenSCAP.xccdf_profile_iterator_next profit
52
- profile = OpenSCAP::Xccdf::Profile.new profile_p
90
+ each_profile do |profile|
53
91
  profiles[profile.id] = profile
54
92
  end
55
- OpenSCAP.xccdf_profile_iterator_free profit
56
93
  profiles
57
94
  end
58
95
 
59
96
  def items_init
60
97
  items = {}
61
- items_it = OpenSCAP.xccdf_item_get_content raw
62
- while OpenSCAP.xccdf_item_iterator_has_more items_it
63
- item_p = OpenSCAP.xccdf_item_iterator_next items_it
64
- item = OpenSCAP::Xccdf::Item.build item_p
98
+ each_item do |item|
65
99
  items.merge! item.sub_items
66
100
  items[item.id] = item
67
- # TODO: iterate through childs
68
101
  end
69
- OpenSCAP.xccdf_item_iterator_free items_it
70
102
  items
71
103
  end
72
104
  end
@@ -75,8 +107,19 @@ module OpenSCAP
75
107
  attach_function :xccdf_benchmark_import_source, [:pointer], :pointer
76
108
  attach_function :xccdf_benchmark_free, [:pointer], :void
77
109
 
110
+ attach_function :xccdf_benchmark_get_status_current, [:pointer], :pointer
111
+ attach_function :xccdf_benchmark_get_resolved, [:pointer], :pointer
78
112
  attach_function :xccdf_benchmark_get_profiles, [:pointer], :pointer
79
113
  attach_function :xccdf_profile_iterator_has_more, [:pointer], :bool
80
114
  attach_function :xccdf_profile_iterator_next, [:pointer], :pointer
81
115
  attach_function :xccdf_profile_iterator_free, [:pointer], :void
116
+ attach_function :xccdf_benchmark_get_values, [:pointer], :pointer
117
+ attach_function :xccdf_value_iterator_has_more, [:pointer], :bool
118
+ attach_function :xccdf_value_iterator_next, [:pointer], :pointer
119
+ attach_function :xccdf_value_iterator_free, [:pointer], :void
120
+
121
+ attach_function :xccdf_benchmark_get_schema_version, [:pointer], :pointer
122
+ attach_function :xccdf_version_info_get_version, [:pointer], :string
82
123
  end
124
+
125
+ require_relative 'policy_model'
@@ -1,13 +1,4 @@
1
- #
2
- # Copyright (c) 2015--2016 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  module OpenSCAP
13
4
  module Xccdf
@@ -15,6 +6,7 @@ module OpenSCAP
15
6
  def initialize(raw)
16
7
  raise OpenSCAP::OpenSCAPError, "Cannot initialize #{self.class.name} with '#{raw}'" \
17
8
  unless raw.is_a?(FFI::Pointer)
9
+
18
10
  @raw = raw
19
11
  end
20
12
 
@@ -37,10 +29,10 @@ module OpenSCAP
37
29
 
38
30
  def to_hash
39
31
  {
40
- :id => id,
41
- :platform => platform,
42
- :system => fix_system,
43
- :content => content
32
+ id:,
33
+ platform:,
34
+ system: fix_system,
35
+ content:
44
36
  }
45
37
  end
46
38
  end
@@ -1,13 +1,4 @@
1
- #
2
- # Copyright (c) 2015 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  require 'openscap/exceptions'
13
4
  require 'openscap/xccdf'
@@ -16,6 +7,38 @@ require 'openscap/xccdf/item'
16
7
  module OpenSCAP
17
8
  module Xccdf
18
9
  class Group < Item
10
+ def each_child(&)
11
+ OpenSCAP._iterate over: OpenSCAP.xccdf_item_get_content(@raw), as: 'xccdf_item' do |pointer|
12
+ yield OpenSCAP::Xccdf::Item.build pointer
13
+ end
14
+ end
15
+
16
+ def each_value(&)
17
+ OpenSCAP._iterate over: OpenSCAP.xccdf_group_get_values(@raw), as: 'xccdf_value' do |pointer|
18
+ yield OpenSCAP::Xccdf::Value.new pointer
19
+ end
20
+ end
21
+
22
+ def sub_items
23
+ @sub_items ||= sub_items_init
24
+ end
25
+
26
+ private
27
+
28
+ def sub_items_init
29
+ collect = {}
30
+ each_child do |item|
31
+ collect.merge! item.sub_items
32
+ collect[item.id] = item
33
+ end
34
+ collect
35
+ end
19
36
  end
20
37
  end
38
+
39
+ attach_function :xccdf_item_get_content, [:pointer], :pointer
40
+ attach_function :xccdf_item_iterator_has_more, [:pointer], :bool
41
+ attach_function :xccdf_item_iterator_next, [:pointer], :pointer
42
+ attach_function :xccdf_item_iterator_free, [:pointer], :void
43
+ attach_function :xccdf_group_get_values, [:pointer], :pointer
21
44
  end
@@ -1,13 +1,4 @@
1
- #
2
- # Copyright (c) 2015--2016 Red Hat Inc.
3
- #
4
- # This software is licensed to you under the GNU General Public License,
5
- # version 2 (GPLv2). There is NO WARRANTY for this software, express or
6
- # implied, including the implied warranties of MERCHANTABILITY or FITNESS
7
- # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
8
- # along with this software; if not, see
9
- # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10
- #
1
+ # frozen_string_literal: true
11
2
 
12
3
  module OpenSCAP
13
4
  module Xccdf
@@ -15,6 +6,7 @@ module OpenSCAP
15
6
  def initialize(raw)
16
7
  raise OpenSCAP::OpenSCAPError, "Cannot initialize #{self.class.name} with '#{raw}'" \
17
8
  unless raw.is_a?(FFI::Pointer)
9
+
18
10
  @raw = raw
19
11
  end
20
12