Namespace modules using full name instead of hex
This commit is contained in:
parent
e0f7c747e5
commit
46e7b8ac98
|
@ -503,9 +503,7 @@ class Msf::Modules::Loader::Base
|
|||
|
||||
# Returns an Array of names to make a fully qualified module name to
|
||||
# wrap the MetasploitModule class so that it doesn't overwrite other
|
||||
# (metasploit) module's classes. Invalid module name characters are
|
||||
# escaped by using 'H*' unpacking and prefixing each code with X so
|
||||
# the code remains a valid module name when it starts with a digit.
|
||||
# (metasploit) module's classes.
|
||||
#
|
||||
# @param [String] module_full_name The unique canonical name
|
||||
# for the module including type.
|
||||
|
@ -513,7 +511,18 @@ class Msf::Modules::Loader::Base
|
|||
#
|
||||
# @see namespace_module
|
||||
def namespace_module_names(module_full_name)
|
||||
NAMESPACE_MODULE_NAMES + [ "Mod" + module_full_name.unpack("H*").first.downcase ]
|
||||
relative_name = module_full_name.split('/').map(&:capitalize).join('__')
|
||||
NAMESPACE_MODULE_NAMES + [relative_name]
|
||||
end
|
||||
|
||||
# This reverses a namespace module's relative name to a module full name
|
||||
#
|
||||
# @param [String] relative_name The namespace module's relative name
|
||||
# @return [String] The module full name
|
||||
#
|
||||
# @see namespace_module_names
|
||||
def reverse_relative_name(relative_name)
|
||||
relative_name.split('__').map(&:downcase).join('/')
|
||||
end
|
||||
|
||||
def namespace_module_transaction(module_full_name, options={}, &block)
|
||||
|
|
|
@ -103,7 +103,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
include_context 'Metasploit::Framework::Spec::Constants cleaner'
|
||||
|
||||
let(:namespace_module_names) do
|
||||
['Msf', 'Modules', 'Mod617578696c696172792f72737065632f6d6f636b']
|
||||
['Msf', 'Modules', 'Auxiliary__Rspec__Mock']
|
||||
end
|
||||
|
||||
let(:namespace_module) do
|
||||
|
@ -291,7 +291,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
end
|
||||
|
||||
let(:relative_name) do
|
||||
'Mod617578696c696172792f72737065632f6d6f636b'
|
||||
'Auxiliary__Rspec__Mock'
|
||||
end
|
||||
|
||||
before(:example) do
|
||||
|
@ -308,7 +308,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
# create an namespace module that can be restored
|
||||
module Msf
|
||||
module Modules
|
||||
module Mod617578696c696172792f72737065632f6d6f636b
|
||||
module Auxiliary__Rspec__Mock
|
||||
class MetasploitModule < Msf::Auxiliary
|
||||
|
||||
end
|
||||
|
@ -316,7 +316,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
end
|
||||
end
|
||||
|
||||
@original_namespace_module = Msf::Modules::Mod617578696c696172792f72737065632f6d6f636b
|
||||
@original_namespace_module = Msf::Modules::Auxiliary__Rspec__Mock
|
||||
|
||||
module_set = double('Module Set')
|
||||
allow(module_set).to receive(:delete).with(module_reference_name)
|
||||
|
@ -549,7 +549,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
end
|
||||
|
||||
let(:relative_name) do
|
||||
'Mod0'
|
||||
'Auxiliary__Rspec__Mock'
|
||||
end
|
||||
|
||||
before(:example) do
|
||||
|
@ -640,7 +640,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
end
|
||||
|
||||
let(:relative_name) do
|
||||
'Mod0'
|
||||
'Auxiliary__Rspec__Mock'
|
||||
end
|
||||
|
||||
before(:example) do
|
||||
|
@ -662,12 +662,12 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
it 'should return the module if it is defined' do
|
||||
module Msf
|
||||
module Modules
|
||||
module Mod0
|
||||
module Auxiliary__Rspec__Mock
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
expect(subject.send(:current_module, module_names)).to eq Msf::Modules::Mod0
|
||||
expect(subject.send(:current_module, module_names)).to eq Msf::Modules::Auxiliary__Rspec__Mock
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -735,18 +735,12 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
expect(subject.send(:namespace_module_name, module_full_name)).to start_with('Msf::Modules::')
|
||||
end
|
||||
|
||||
it 'should prefix the relative name with Mod' do
|
||||
namespace_module_name = subject.send(:namespace_module_name, module_full_name)
|
||||
relative_name = namespace_module_name.gsub(/^.*::/, '')
|
||||
|
||||
expect(relative_name).to start_with('Mod')
|
||||
end
|
||||
|
||||
it 'should be reversible' do
|
||||
namespace_module_name = subject.send(:namespace_module_name, module_full_name)
|
||||
unpacked_name = namespace_module_name.gsub(/^.*::Mod/, '')
|
||||
relative_name = namespace_module_name.gsub(/^.*::/, '')
|
||||
reversed_name = subject.send(:reverse_relative_name, relative_name)
|
||||
|
||||
expect([unpacked_name].pack('H*')).to eq module_full_name
|
||||
expect(reversed_name).to eq module_full_name
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -755,18 +749,12 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
expect(subject.send(:namespace_module_names, module_full_name)).to start_with(['Msf', 'Modules'])
|
||||
end
|
||||
|
||||
it 'should prefix the relative name with Mod' do
|
||||
namespace_module_names = subject.send(:namespace_module_names, module_full_name)
|
||||
|
||||
expect(namespace_module_names.last).to start_with('Mod')
|
||||
end
|
||||
|
||||
it 'should be reversible' do
|
||||
namespace_module_names = subject.send(:namespace_module_names, module_full_name)
|
||||
relative_name = namespace_module_names.last
|
||||
unpacked_name = relative_name.gsub(/^Mod/, '')
|
||||
reversed_name = subject.send(:reverse_relative_name, relative_name)
|
||||
|
||||
expect([unpacked_name].pack('H*')).to eq module_full_name
|
||||
expect(reversed_name).to eq module_full_name
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -774,14 +762,14 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
include_context 'Metasploit::Framework::Spec::Constants cleaner'
|
||||
|
||||
let(:relative_name) do
|
||||
'Mod617578696c696172792f72737065632f6d6f636b'
|
||||
'Auxiliary__Rspec__Mock'
|
||||
end
|
||||
|
||||
context 'with pre-existing namespace module' do
|
||||
before(:example) do
|
||||
module Msf
|
||||
module Modules
|
||||
module Mod617578696c696172792f72737065632f6d6f636b
|
||||
module Auxiliary__Rspec__Mock
|
||||
class Metasploit
|
||||
|
||||
end
|
||||
|
@ -789,7 +777,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
end
|
||||
end
|
||||
|
||||
@existent_namespace_module = Msf::Modules::Mod617578696c696172792f72737065632f6d6f636b
|
||||
@existent_namespace_module = Msf::Modules::Auxiliary__Rspec__Mock
|
||||
end
|
||||
|
||||
context 'with :reload => false' do
|
||||
|
@ -1027,7 +1015,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
end
|
||||
|
||||
let(:relative_name) do
|
||||
'Mod0'
|
||||
'Auxiliary__Rspec__Mock'
|
||||
end
|
||||
|
||||
it 'should do nothing if parent_module is nil' do
|
||||
|
@ -1076,7 +1064,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
before(:example) do
|
||||
module Msf
|
||||
module Modules
|
||||
module Mod0
|
||||
module Auxiliary__Rspec__Mock
|
||||
class Metasploit
|
||||
|
||||
end
|
||||
|
@ -1084,7 +1072,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
end
|
||||
end
|
||||
|
||||
@original_namespace_module = Msf::Modules::Mod0
|
||||
@original_namespace_module = Msf::Modules::Auxiliary__Rspec__Mock
|
||||
|
||||
Msf::Modules.send(:remove_const, relative_name)
|
||||
end
|
||||
|
@ -1093,7 +1081,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
before(:example) do
|
||||
module Msf
|
||||
module Modules
|
||||
module Mod0
|
||||
module Auxiliary__Rspec__Mock
|
||||
class Metasploit2
|
||||
|
||||
end
|
||||
|
@ -1101,7 +1089,7 @@ RSpec.describe Msf::Modules::Loader::Base do
|
|||
end
|
||||
end
|
||||
|
||||
@current_namespace_module = Msf::Modules::Mod0
|
||||
@current_namespace_module = Msf::Modules::Auxiliary__Rspec__Mock
|
||||
end
|
||||
|
||||
context 'with the current constant being the namespace_module' do
|
||||
|
|
Loading…
Reference in New Issue