-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy patharf.rb
65 lines (55 loc) · 1.97 KB
/
arf.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# frozen_string_literal: true
require 'openscap/ds/sds'
require 'openscap/source'
require 'openscap/xccdf/testresult'
require 'openscap/libc'
module OpenSCAP
module DS
class Arf
attr_reader :source
def initialize(param)
case param
when String, Hash
@source = OpenSCAP::Source.new(param)
@session = OpenSCAP.ds_rds_session_new_from_source @source.raw
else
raise OpenSCAP::OpenSCAPError, "Cannot initialize #{self.class.name} with '#{param}'"
end
OpenSCAP.raise! if @session.null?
end
def destroy
OpenSCAP.ds_rds_session_free(@session)
@session = nil
@source.destroy
end
def test_result(id = nil)
source = OpenSCAP.ds_rds_session_select_report(@session, id)
OpenSCAP.raise! if source.nil?
OpenSCAP::Xccdf::TestResult.new(source)
end
def test_result=(tr)
source = tr.source
OpenSCAP.raise! unless OpenSCAP.ds_rds_session_replace_report_with_source(@session, source.raw).zero?
end
def report_request(id = nil)
source_p = OpenSCAP.ds_rds_session_select_report_request(@session, id)
source = OpenSCAP::Source.new source_p
OpenSCAP::DS::Sds.new(source)
end
def html
html_p = OpenSCAP.ds_rds_session_get_html_report @session
OpenSCAP.raise! if OpenSCAP.error?
return nil if html_p.null?
html = html_p.read_string
OpenSCAP::LibC.free html_p
html
end
end
end
attach_function :ds_rds_session_new_from_source, [:pointer], :pointer
attach_function :ds_rds_session_free, [:pointer], :void
attach_function :ds_rds_session_select_report, %i[pointer string], :pointer
attach_function :ds_rds_session_replace_report_with_source, %i[pointer pointer], :int
attach_function :ds_rds_session_select_report_request, %i[pointer string], :pointer
attach_function :ds_rds_session_get_html_report, [:pointer], :pointer
end