openscap 0.4.8 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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