653c71e029
MSP-11672 Calling init_module_paths takes 6 seconds on my machine even when there are no files to that are changed just because it takes that long to walk the directories and gather the mtime for each file. Therefore, calling it more than once should be avoided. Also, there is no reason to call it twice as to add paths later, `modules.add_module_paths` should be used.
60 lines
1.9 KiB
Ruby
60 lines
1.9 KiB
Ruby
# -*- coding: binary -*-
|
|
module Msf
|
|
module Simple
|
|
module Framework
|
|
module ModulePaths
|
|
# Initialize the module paths
|
|
#
|
|
# @return [void]
|
|
def init_module_paths(opts={})
|
|
if @module_paths_inited
|
|
fail "Module paths already initialized. To add more module paths call `modules.add_module_path`"
|
|
else
|
|
# Ensure the module cache is accurate
|
|
self.modules.refresh_cache_from_database
|
|
|
|
add_engine_module_paths(Rails.application, opts)
|
|
|
|
Rails.application.railties.engines.each do |engine|
|
|
add_engine_module_paths(engine, opts)
|
|
end
|
|
|
|
# Initialize the user module search path
|
|
if (Msf::Config.user_module_directory)
|
|
self.modules.add_module_path(Msf::Config.user_module_directory, opts)
|
|
end
|
|
|
|
# If additional module paths have been defined globally, then load them.
|
|
# They should be separated by semi-colons.
|
|
if self.datastore['MsfModulePaths']
|
|
self.datastore['MsfModulePaths'].split(";").each { |path|
|
|
self.modules.add_module_path(path, opts)
|
|
}
|
|
end
|
|
|
|
@module_paths_inited = true
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
# Add directories `engine.paths['modules']` from `engine`.
|
|
#
|
|
# @param engine [Rails::Engine] a rails engine or application
|
|
# @param options [Hash] options for {Msf::ModuleManager::ModulePaths#add_module_paths}
|
|
# @return [void]
|
|
def add_engine_module_paths(engine, options={})
|
|
modules_paths = engine.paths['modules']
|
|
|
|
if modules_paths
|
|
modules_directories = modules_paths.existent_directories
|
|
|
|
modules_directories.each do |modules_directory|
|
|
modules.add_module_path(modules_directory, options)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end |