openvas-cli 0.2.9 → 0.2.10
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.
- data/VERSION +1 -1
- data/lib/openvas-cli/vas_config.rb +28 -24
- data/lib/openvas-cli/vas_preference.rb +19 -5
- data/lib/openvas-cli/vas_report.rb +16 -14
- data/openvas-cli.gemspec +2 -2
- data/spec/openvas-cli/vas_config_spec.rb +7 -0
- data/spec/openvas-cli/vas_preference_spec.rb +71 -5
- data/spec/openvas-cli/vas_report_spec.rb +19 -0
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.10
|
@@ -47,33 +47,37 @@ module OpenvasCli
|
|
47
47
|
req = Nokogiri::XML::Builder.new { |xml|
|
48
48
|
xml.get_configs(params)
|
49
49
|
}
|
50
|
-
|
51
|
-
resp = connection.send_receive(req.doc)
|
52
|
-
|
53
50
|
ret = []
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
cfg.name = extract_value_from("name", xml)
|
58
|
-
cfg.comment = extract_value_from("comment", xml)
|
59
|
-
cfg.families_grow = extract_value_from("family_count/growing", xml).to_i > 0
|
60
|
-
cfg.rules_grow = extract_value_from("nvt_count/growing", xml).to_i > 0
|
61
|
-
cfg.in_use = extract_value_from("in_use", xml).to_i > 0
|
51
|
+
|
52
|
+
begin
|
53
|
+
resp = connection.send_receive(req.doc)
|
62
54
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
cfg.
|
55
|
+
|
56
|
+
resp.xpath("/get_configs_response/config").each { |xml|
|
57
|
+
cfg = VasConfig.new
|
58
|
+
cfg.id = extract_value_from("@id", xml)
|
59
|
+
cfg.name = extract_value_from("name", xml)
|
60
|
+
cfg.comment = extract_value_from("comment", xml)
|
61
|
+
cfg.families_grow = extract_value_from("family_count/growing", xml).to_i > 0
|
62
|
+
cfg.rules_grow = extract_value_from("nvt_count/growing", xml).to_i > 0
|
63
|
+
cfg.in_use = extract_value_from("in_use", xml).to_i > 0
|
64
|
+
|
65
|
+
xml.xpath("tasks/task").each { |t| cfg.tasks << VasTask.from_xml_node(t) }
|
66
|
+
xml.xpath("families/family").each { |f| cfg.families << VasNVTFamily.from_xml_node(f) }
|
67
|
+
xml.xpath("preferences/preference").each { |p|
|
68
|
+
p = VasPreference.from_xml_node(p)
|
69
|
+
p.config_id = cfg.id
|
70
|
+
p.reset_changes
|
71
|
+
cfg.preferences << p
|
72
|
+
}
|
73
|
+
|
74
|
+
cfg.reset_changes
|
75
|
+
|
76
|
+
ret << cfg
|
70
77
|
}
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
ret << cfg
|
75
|
-
}
|
76
|
-
|
78
|
+
rescue Exception => e
|
79
|
+
end
|
80
|
+
|
77
81
|
ret
|
78
82
|
end
|
79
83
|
|
@@ -56,7 +56,7 @@ module OpenvasCli
|
|
56
56
|
|
57
57
|
def full_name
|
58
58
|
if @nvt_id && !@nvt_id.empty?
|
59
|
-
"#{
|
59
|
+
"#{nvt_name}[#{@val_type_desc}]:#{@name}"
|
60
60
|
else
|
61
61
|
@name
|
62
62
|
end
|
@@ -98,6 +98,14 @@ module OpenvasCli
|
|
98
98
|
nil
|
99
99
|
end
|
100
100
|
|
101
|
+
def self.get_by_name(config_id, name, nvt_id=nil)
|
102
|
+
if nvt_id
|
103
|
+
get_all(:config_id => config_id, :name => name, :nvt_oid => nvt_id).first
|
104
|
+
else
|
105
|
+
get_all(:config_id => config_id, :name => name).first
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
101
109
|
# Pulls Vas preferences.
|
102
110
|
# === Options:
|
103
111
|
# [:config_id] => [configuration_id]] pulls preferences associated with the provided configuration id
|
@@ -109,7 +117,13 @@ module OpenvasCli
|
|
109
117
|
params = {}
|
110
118
|
params[:config_id] = options[:config_id] if options[:config_id]
|
111
119
|
params[:nvt_oid] = options[:nvt_oid] if options[:nvt_oid]
|
112
|
-
|
120
|
+
if options[:name]
|
121
|
+
if options[:nvt_oid]
|
122
|
+
params[:preference] = options[:name]
|
123
|
+
else
|
124
|
+
manual_filter = true
|
125
|
+
end
|
126
|
+
end
|
113
127
|
|
114
128
|
req = Nokogiri::XML::Builder.new { |xml|
|
115
129
|
if params.empty?
|
@@ -122,10 +136,10 @@ module OpenvasCli
|
|
122
136
|
begin
|
123
137
|
prefs = connection.send_receive(req.doc)
|
124
138
|
|
125
|
-
prefs.xpath("
|
126
|
-
pref
|
139
|
+
prefs.xpath("/get_preferences_response/preference").each { |p|
|
140
|
+
pref = from_xml_node(p, options[:config_id])
|
127
141
|
if manual_filter
|
128
|
-
ret << pref if
|
142
|
+
ret << pref if pref.name == options[:name] && pref.nvt_id.empty?
|
129
143
|
else
|
130
144
|
ret << pref
|
131
145
|
end
|
@@ -56,7 +56,8 @@ module OpenvasCli
|
|
56
56
|
end
|
57
57
|
|
58
58
|
ret = []
|
59
|
-
|
59
|
+
|
60
|
+
repts.xpath('/get_reports_response/report/report').each { |r|
|
60
61
|
rep = VasReport.new
|
61
62
|
rep.id = extract_value_from("@id", r)
|
62
63
|
rep.task_id = extract_value_from("task/@id", r)
|
@@ -77,7 +78,7 @@ module OpenvasCli
|
|
77
78
|
rep.result_count[:medium][:total] = extract_value_from("result_count/warning/full", r).to_i
|
78
79
|
rep.result_count[:medium][:filtered] = extract_value_from("result_count/warning/filtered", r).to_i
|
79
80
|
|
80
|
-
r.xpath("results/result").each { |result|
|
81
|
+
r.xpath("./results/result").each { |result|
|
81
82
|
rep.results << VasResult.parse_result_node(result)
|
82
83
|
}
|
83
84
|
|
@@ -86,18 +87,19 @@ module OpenvasCli
|
|
86
87
|
|
87
88
|
options[:sort] = :started_at unless options[:sort]
|
88
89
|
options[:sort_order] = :descending unless options[:sort_order]
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
90
|
+
unless options[:id]
|
91
|
+
if options[:sort] == :started_at
|
92
|
+
if options[:sort_order] == :ascending
|
93
|
+
ret.sort! { |a,b| a.started_at <=> b.started_at }
|
94
|
+
else
|
95
|
+
ret.sort! { |a,b| b.started_at <=> a.started_at }
|
96
|
+
end
|
97
|
+
elsif options[:sort] == :task_name
|
98
|
+
if options[:sort_order] == :ascending
|
99
|
+
ret.sort! { |a,b| a.task_name <=> b.task_name }
|
100
|
+
else
|
101
|
+
ret.sort! { |a,b| b.task_name <=> a.task_name }
|
102
|
+
end
|
101
103
|
end
|
102
104
|
end
|
103
105
|
|
data/openvas-cli.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{openvas-cli}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.10"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Reed Swenson"]
|
12
|
-
s.date = %q{2011-04-
|
12
|
+
s.date = %q{2011-04-14}
|
13
13
|
s.description = %q{A full ruby implementation of the OpenVAS OMP (version 2.0) protocol.}
|
14
14
|
s.email = %q{fleureed@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -77,5 +77,12 @@ module OpenvasCli
|
|
77
77
|
n_pref = new_cfg.preferences[i]
|
78
78
|
n_pref.value.should == pref.value
|
79
79
|
end
|
80
|
+
|
81
|
+
it 'should not throw an exception when trying to pull with an invalid ID' do
|
82
|
+
lambda {
|
83
|
+
cfg = VasConfig.get_by_id("foo")
|
84
|
+
cfg.should be nil
|
85
|
+
}.should_not raise_error
|
86
|
+
end
|
80
87
|
end
|
81
88
|
end
|
@@ -11,16 +11,82 @@ module OpenvasCli
|
|
11
11
|
}
|
12
12
|
end
|
13
13
|
|
14
|
-
it 'should pull a single preference by name' do
|
15
|
-
|
14
|
+
it 'should pull a single preference by name and nvt_oid' do
|
15
|
+
config = VasConfig.get_all.choice
|
16
|
+
|
17
|
+
prefs = VasPreference.get_all(:config_id => config.id)
|
18
|
+
o_pref = prefs.choice
|
19
|
+
while o_pref.nvt_id.empty?
|
20
|
+
o_pref = prefs.choice
|
21
|
+
end
|
22
|
+
o_pref.should_not be nil
|
23
|
+
|
24
|
+
|
25
|
+
prefs = VasPreference.get_all(:config_id => config.id, :nvt_oid => o_pref.nvt_id, :name=>o_pref.name)
|
26
|
+
prefs.count.should == 1
|
27
|
+
|
28
|
+
n_pref = prefs.first
|
29
|
+
n_pref.should_not be nil
|
30
|
+
|
31
|
+
o_pref.full_name.should == n_pref.full_name
|
32
|
+
o_pref.value.should == n_pref.value
|
33
|
+
o_pref.config_id.should == n_pref.config_id
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should pull a single preference by name for the global configuration' do
|
37
|
+
config = VasConfig.get_all.choice
|
38
|
+
|
39
|
+
prefs = VasPreference.get_all(:config_id => config.id)
|
40
|
+
o_pref = prefs.choice
|
41
|
+
while !o_pref.nvt_id.empty?
|
42
|
+
o_pref = prefs.choice
|
43
|
+
end
|
44
|
+
o_pref.should_not be nil
|
45
|
+
|
46
|
+
|
47
|
+
prefs = VasPreference.get_all(:config_id => config.id, :name=>o_pref.name)
|
48
|
+
prefs.count.should == 1
|
49
|
+
|
50
|
+
n_pref = prefs.first
|
51
|
+
n_pref.should_not be nil
|
52
|
+
|
53
|
+
o_pref.full_name.should == n_pref.full_name
|
54
|
+
o_pref.value.should == n_pref.value
|
55
|
+
o_pref.config_id.should == n_pref.config_id
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'get_by_name should pull a single preference by name and nvt_oid' do
|
59
|
+
config = VasConfig.get_all.choice
|
60
|
+
|
61
|
+
prefs = VasPreference.get_all(:config_id => config.id)
|
62
|
+
o_pref = prefs.choice
|
63
|
+
while o_pref.nvt_id.empty?
|
64
|
+
o_pref = prefs.choice
|
65
|
+
end
|
66
|
+
o_pref.should_not be nil
|
67
|
+
|
68
|
+
n_pref = VasPreference.get_by_name(config.id, o_pref.name, o_pref.nvt_id)
|
69
|
+
n_pref.should_not be nil
|
70
|
+
|
71
|
+
o_pref.full_name.should == n_pref.full_name
|
72
|
+
o_pref.value.should == n_pref.value
|
73
|
+
o_pref.config_id.should == n_pref.config_id
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'get_by_name should pull a single preference by name for the global configuration' do
|
77
|
+
config = VasConfig.get_all.choice
|
16
78
|
|
17
|
-
|
79
|
+
prefs = VasPreference.get_all(:config_id => config.id)
|
80
|
+
o_pref = prefs.choice
|
81
|
+
while !o_pref.nvt_id.empty?
|
82
|
+
o_pref = prefs.choice
|
83
|
+
end
|
18
84
|
o_pref.should_not be nil
|
19
85
|
|
20
|
-
n_pref = VasPreference.
|
86
|
+
n_pref = VasPreference.get_by_name(config.id, o_pref.name)
|
21
87
|
n_pref.should_not be nil
|
22
88
|
|
23
|
-
o_pref.
|
89
|
+
o_pref.full_name.should == n_pref.full_name
|
24
90
|
o_pref.value.should == n_pref.value
|
25
91
|
o_pref.config_id.should == n_pref.config_id
|
26
92
|
end
|
@@ -106,5 +106,24 @@ module OpenvasCli
|
|
106
106
|
last_date = r.task_name
|
107
107
|
}
|
108
108
|
end
|
109
|
+
|
110
|
+
it 'should pull results for a report when the ID and a filter is specified' do
|
111
|
+
report_ids = {}
|
112
|
+
VasReport.get_all(:levels => [:high, :medium]).each { |r|
|
113
|
+
report_ids[r.id] = r.results.count unless r.results.empty?
|
114
|
+
}
|
115
|
+
report_ids.each { |id, count|
|
116
|
+
options = {
|
117
|
+
:sort_order => :descending,
|
118
|
+
:sort => :started_at,
|
119
|
+
:levels => [:high, :medium],
|
120
|
+
:id => id
|
121
|
+
}
|
122
|
+
rept = VasReport.get_all(options)[0]
|
123
|
+
rept.should_not be nil
|
124
|
+
rept.should have(count).results
|
125
|
+
}
|
126
|
+
|
127
|
+
end
|
109
128
|
end
|
110
129
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openvas-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 10
|
10
|
+
version: 0.2.10
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Reed Swenson
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-14 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|