Skip to content

Commit e991a98

Browse files
committedDec 9, 2024
Use software_version instead of just version for consistency (closes #148).
1 parent 7a0c780 commit e991a98

File tree

4 files changed

+78
-43
lines changed

4 files changed

+78
-43
lines changed
 

‎lib/ronin/exploits/mixins/has_targets.rb

+14-7
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,12 @@ def targets
9191
# @option kwargs [Symbol, nil] :software
9292
# The software name of the target.
9393
#
94-
# @option kwargs [String, nil] :version
94+
# @option kwargs [String, nil] :software_version
9595
# The software version of the target.
9696
#
97+
# @option kwargs [String, nil] :version
98+
# Alias for `software_version:`.
99+
#
97100
# @example
98101
# target arch: :x86_64, os: :linux, software: 'Apache' do |t|
99102
# t.foo = 0x123456
@@ -172,15 +175,15 @@ def perform_validate
172175
# @param [Symbol] software
173176
# The targeted software.
174177
#
175-
# @param [Symbol] version
178+
# @param [Symbol] software_version
176179
# The targeted software version.
177180
#
178181
# @raise [NoMatchingTarget]
179182
# No matching target could be found.
180183
#
181184
# @api semipublic
182185
#
183-
def select_target(arch: nil, os: nil, os_version: nil, software: nil, version: nil)
186+
def select_target(arch: nil, os: nil, os_version: nil, software: nil, software_version: nil)
184187
targets = self.class.targets.lazy
185188

186189
if arch
@@ -199,9 +202,9 @@ def select_target(arch: nil, os: nil, os_version: nil, software: nil, version: n
199202
targets = targets.select { |target| target.software == software }
200203
end
201204

202-
if version
205+
if software_version
203206
targets = targets.select do |target|
204-
target.version == version
207+
target.software_version == software_version
205208
end
206209
end
207210

@@ -289,9 +292,13 @@ def software
289292
#
290293
# @api public
291294
#
292-
def version
293-
target.version if target
295+
# @since 1.2.0
296+
#
297+
def software_version
298+
target.software_version if target
294299
end
300+
301+
alias version software_version
295302
end
296303
end
297304
end

‎lib/ronin/exploits/target.rb

+17-9
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,11 @@ class Target < OpenStruct
5454
# The target's software version.
5555
#
5656
# @return [String, nil]
57-
attr_reader :version
57+
#
58+
# @since 1.2.0
59+
attr_reader :software_version
60+
61+
alias version software_version
5862

5963
#
6064
# Creates a new ExploitTarget object
@@ -71,20 +75,24 @@ class Target < OpenStruct
7175
# @param [String, nil] software
7276
# The software name of the target (ex: `"Apache"`).
7377
#
74-
# @param [String, nil] version
78+
# @param [String, nil] software_version
7579
# The software version of the target (ex: `"2.4.54"`).
7680
#
81+
# @param [String, nil] version
82+
# Alias for `software_version:`.
83+
#
7784
# @yield [target]
7885
# If a block is given, it will be passed the new target object.
7986
#
8087
# @yieldparam [Target] target
8188
# The newly created target object.
8289
#
83-
def initialize(arch: nil,
84-
os: nil,
85-
os_version: nil,
86-
software: nil,
87-
version: nil,
90+
def initialize(arch: nil,
91+
os: nil,
92+
os_version: nil,
93+
software: nil,
94+
software_version: nil,
95+
version: nil,
8896
**params)
8997
super(**params)
9098

@@ -93,8 +101,8 @@ def initialize(arch: nil,
93101
@os = os
94102
@os_version = os_version
95103

96-
@software = software
97-
@version = version
104+
@software = software
105+
@software_version = software_version || version
98106

99107
yield self if block_given?
100108
end

‎spec/mixins/has_targets_spec.rb

+23-23
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,14 @@ class ExampleExploit < Ronin::Exploits::Exploit
122122
os: :linux,
123123
os_version: '5.18.1',
124124
software: 'Apache',
125-
version: '2.4.53',
125+
software_version: '2.4.53',
126126
foo: 1
127127

128128
target arch: :arm,
129129
os: :macos,
130130
os_version: '10.13',
131131
software: 'nginx',
132-
version: '1.22.0',
132+
software_version: '1.22.0',
133133
foo: 2
134134
end
135135
end
@@ -289,37 +289,37 @@ class ExampleExploit < Ronin::Exploits::Exploit
289289
end
290290
end
291291

292-
context "when given the version: keyword argument" do
293-
let(:version) { '1.22.0' }
292+
context "when given the software_version: keyword argument" do
293+
let(:software_version) { '1.22.0' }
294294

295-
it "must find the target in .targets with the matching #version" do
296-
subject.select_target(version: version)
295+
it "must find the target in .targets with the matching #software_version" do
296+
subject.select_target(software_version: software_version)
297297

298-
expect(subject.target.version).to eq(version)
298+
expect(subject.target.software_version).to eq(software_version)
299299
end
300300
end
301301

302302
context "when given multiple keyword arguments" do
303-
let(:arch) { :arm }
304-
let(:os) { :macos }
305-
let(:os_version) { '10.13' }
306-
let(:software) { 'nginx' }
307-
let(:version) { '1.22.0' }
303+
let(:arch) { :arm }
304+
let(:os) { :macos }
305+
let(:os_version) { '10.13' }
306+
let(:software) { 'nginx' }
307+
let(:software_version) { '1.22.0' }
308308

309309
it "must find the target in .targets which matches all given values" do
310310
subject.select_target(
311311
arch: arch,
312312
os: os,
313313
os_version: os_version,
314314
software: software,
315-
version: version
315+
software_version: software_version
316316
)
317317

318-
expect(subject.target.arch).to eq(arch)
319-
expect(subject.target.os).to eq(os)
320-
expect(subject.target.os_version).to eq(os_version)
321-
expect(subject.target.software).to eq(software)
322-
expect(subject.target.version).to eq(version)
318+
expect(subject.target.arch).to eq(arch)
319+
expect(subject.target.os).to eq(os)
320+
expect(subject.target.os_version).to eq(os_version)
321+
expect(subject.target.software).to eq(software)
322+
expect(subject.target.software_version).to eq(software_version)
323323
end
324324
end
325325

@@ -412,22 +412,22 @@ class ExampleExploit < Ronin::Exploits::Exploit
412412
end
413413
end
414414

415-
describe "#version" do
415+
describe "#software_version" do
416416
context "when a target has been set" do
417417
subject do
418-
test_class.new(target: {version: '1.22.0'})
418+
test_class.new(target: {software_version: '1.22.0'})
419419
end
420420

421-
it "must return the #target's #version" do
422-
expect(subject.version).to eq(subject.target.version)
421+
it "must return the #target's #software_version" do
422+
expect(subject.software_version).to eq(subject.target.software_version)
423423
end
424424
end
425425

426426
context "when no target has been set" do
427427
subject { test_class.new }
428428

429429
it "must return nil" do
430-
expect(subject.version).to be(nil)
430+
expect(subject.software_version).to be(nil)
431431
end
432432
end
433433
end

‎spec/target_spec.rb

+24-4
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
expect(subject.software).to be(nil)
2424
end
2525

26-
it "must default #version to nil" do
27-
expect(subject.version).to be(nil)
26+
it "must default #software_version to nil" do
27+
expect(subject.software_version).to be(nil)
2828
end
2929

3030
context "when given the arch: keyword argument" do
@@ -67,13 +67,23 @@
6767
end
6868
end
6969

70+
context "when given the software_version: keyword argument" do
71+
let(:software_version) { '1.2.3' }
72+
73+
subject { described_class.new(software_version: software_version) }
74+
75+
it "must set #software_version" do
76+
expect(subject.software_version).to be(software_version)
77+
end
78+
end
79+
7080
context "when given the version: keyword argument" do
7181
let(:version) { '1.2.3' }
7282

7383
subject { described_class.new(version: version) }
7484

75-
it "must set #version" do
76-
expect(subject.version).to be(version)
85+
it "must set #software_version" do
86+
expect(subject.software_version).to be(version)
7787
end
7888
end
7989

@@ -89,4 +99,14 @@
8999
end
90100
end
91101
end
102+
103+
describe "#version" do
104+
let(:software_version) { '1.2.3' }
105+
106+
subject { described_class.new(software_version: software_version) }
107+
108+
it "must be an alias for #software_version" do
109+
expect(subject.version).to eq(subject.software_version)
110+
end
111+
end
92112
end

0 commit comments

Comments
 (0)