11
11
12
12
require 'openscap/exceptions'
13
13
require 'openscap/xccdf/benchmark'
14
+ require 'openscap/xccdf/policy'
14
15
15
16
module OpenSCAP
16
17
module Xccdf
17
18
class PolicyModel
19
+ attr_reader :raw
20
+
18
21
def initialize ( b )
19
22
case b
20
23
when OpenSCAP ::Xccdf ::Benchmark
@@ -26,13 +29,36 @@ def initialize(b)
26
29
OpenSCAP . raise! if @raw . null?
27
30
end
28
31
32
+ def policies
33
+ @policies ||= policies_init
34
+ end
35
+
29
36
def destroy
30
37
OpenSCAP . xccdf_policy_model_free @raw
31
38
@raw = nil
32
39
end
40
+
41
+ private
42
+
43
+ def policies_init
44
+ policies = { }
45
+ polit = OpenSCAP . xccdf_policy_model_get_policies raw
46
+ while OpenSCAP . xccdf_policy_iterator_has_more polit
47
+ policy_p = OpenSCAP . xccdf_policy_iterator_next polit
48
+ policy = OpenSCAP ::Xccdf ::Policy . new policy_p
49
+ policies [ policy . id ] = policy
50
+ end
51
+ OpenSCAP . xccdf_policy_iterator_free polit
52
+ policies
53
+ end
33
54
end
34
55
end
35
56
36
57
attach_function :xccdf_policy_model_new , [ :pointer ] , :pointer
37
58
attach_function :xccdf_policy_model_free , [ :pointer ] , :void
59
+
60
+ attach_function :xccdf_policy_model_get_policies , [ :pointer ] , :pointer
61
+ attach_function :xccdf_policy_iterator_has_more , [ :pointer ] , :bool
62
+ attach_function :xccdf_policy_iterator_next , [ :pointer ] , :pointer
63
+ attach_function :xccdf_policy_iterator_free , [ :pointer ] , :void
38
64
end
0 commit comments