diff --git a/lib/msf/ui/logos/3kom-superhack.txt b/data/logos/3kom-superhack.txt similarity index 100% rename from lib/msf/ui/logos/3kom-superhack.txt rename to data/logos/3kom-superhack.txt diff --git a/lib/msf/ui/logos/branded-longhorn.txt b/data/logos/branded-longhorn.txt similarity index 100% rename from lib/msf/ui/logos/branded-longhorn.txt rename to data/logos/branded-longhorn.txt diff --git a/lib/msf/ui/logos/cow-head.txt b/data/logos/cow-head.txt similarity index 100% rename from lib/msf/ui/logos/cow-head.txt rename to data/logos/cow-head.txt diff --git a/lib/msf/ui/logos/cowsay.txt b/data/logos/cowsay.txt similarity index 100% rename from lib/msf/ui/logos/cowsay.txt rename to data/logos/cowsay.txt diff --git a/lib/msf/ui/logos/figlet.txt b/data/logos/figlet.txt similarity index 100% rename from lib/msf/ui/logos/figlet.txt rename to data/logos/figlet.txt diff --git a/lib/msf/ui/logos/i-heart-shells.txt b/data/logos/i-heart-shells.txt similarity index 100% rename from lib/msf/ui/logos/i-heart-shells.txt rename to data/logos/i-heart-shells.txt diff --git a/lib/msf/ui/logos/metasploit-park.txt b/data/logos/metasploit-park.txt similarity index 100% rename from lib/msf/ui/logos/metasploit-park.txt rename to data/logos/metasploit-park.txt diff --git a/lib/msf/ui/logos/metasploit-shield.txt b/data/logos/metasploit-shield.txt similarity index 100% rename from lib/msf/ui/logos/metasploit-shield.txt rename to data/logos/metasploit-shield.txt diff --git a/lib/msf/ui/logos/missile-command.txt b/data/logos/missile-command.txt similarity index 100% rename from lib/msf/ui/logos/missile-command.txt rename to data/logos/missile-command.txt diff --git a/lib/msf/ui/logos/ninja.txt b/data/logos/ninja.txt similarity index 100% rename from lib/msf/ui/logos/ninja.txt rename to data/logos/ninja.txt diff --git a/lib/msf/ui/logos/null-pointer-deref.txt b/data/logos/null-pointer-deref.txt similarity index 100% rename from lib/msf/ui/logos/null-pointer-deref.txt rename to data/logos/null-pointer-deref.txt diff --git a/lib/msf/ui/logos/r7-metasploit.txt b/data/logos/r7-metasploit.txt similarity index 100% rename from lib/msf/ui/logos/r7-metasploit.txt rename to data/logos/r7-metasploit.txt diff --git a/lib/msf/ui/logos/test.rb b/data/logos/test.rb similarity index 100% rename from lib/msf/ui/logos/test.rb rename to data/logos/test.rb diff --git a/lib/msf/ui/logos/wake-up-neo.txt b/data/logos/wake-up-neo.txt similarity index 100% rename from lib/msf/ui/logos/wake-up-neo.txt rename to data/logos/wake-up-neo.txt diff --git a/lib/msf/ui/logos/workflow.txt b/data/logos/workflow.txt similarity index 100% rename from lib/msf/ui/logos/workflow.txt rename to data/logos/workflow.txt diff --git a/lib/msf/base/config.rb b/lib/msf/base/config.rb index beaac2a5b8..4878180280 100644 --- a/lib/msf/base/config.rb +++ b/lib/msf/base/config.rb @@ -65,6 +65,7 @@ class Config < Hash 'ModuleDirectory' => "modules", 'ScriptDirectory' => "scripts", 'LogDirectory' => "logs", + 'LogosDirectory' => "logos", 'SessionLogDirectory' => "logs/sessions", 'PluginDirectory' => "plugins", 'DataDirectory' => "data", @@ -92,6 +93,13 @@ class Config < Hash self.new.config_directory end + # Return the directory that logo files should be loaded from. + # + # @return [String] path to the logos directory. + def self.logos_directory + self.new.logos_directory + end + # Returns the global module directory. # # @return [String] path to global module directory. @@ -148,6 +156,13 @@ class Config < Hash self.new.local_directory end + # Return the user-specific directory that logo files should be loaded from. + # + # @return [String] path to the logos directory. + def self.user_logos_directory + self.new.user_logos_directory + end + # Returns the user-specific module base path # # @return [String] path to user-specific modules directory. @@ -231,6 +246,13 @@ class Config < Hash InstallRoot end + # Return the directory that logo files should be loaded from. + # + # @return [String] path to the logos directory. + def logos_directory + data_directory + FileSep + self['LogosDirectory'] + end + # Returns the configuration directory default. # # @return [String] the root configuration directory. @@ -301,6 +323,13 @@ class Config < Hash config_directory + FileSep + self['LocalDirectory'] end + # Return the user-specific directory that logo files should be loaded from. + # + # @return [String] path to the logos directory. + def user_logos_directory + config_directory + FileSep + self['LogosDirectory'] + end + # Returns the user-specific module base path # # @return [String] path to user-specific modules directory. @@ -339,6 +368,7 @@ class Config < Hash FileUtils.mkdir_p(session_log_directory) FileUtils.mkdir_p(loot_directory) FileUtils.mkdir_p(local_directory) + FileUtils.mkdir_p(user_logos_directory) FileUtils.mkdir_p(user_module_directory) FileUtils.mkdir_p(user_plugin_directory) end diff --git a/lib/msf/ui/banner.rb b/lib/msf/ui/banner.rb index d175af1b92..197b1bc8dc 100644 --- a/lib/msf/ui/banner.rb +++ b/lib/msf/ui/banner.rb @@ -31,9 +31,11 @@ module Banner # Returns a random metasploit logo. # def self.readfile(fname) - base = File.expand_path(File.dirname(__FILE__)) - pathname = File.join(base, "logos", fname) - fdata = "<< Missing banner: #{fname} >>" + pathname = fname + unless File.absolute_path(pathname) == pathname + pathname = File.join(::Msf::Config.logos_directory, fname) + end + fdata = "<< Missing banner: #{pathname} >>" begin raise ArgumentError unless File.readable?(pathname) raise ArgumentError unless File.stat(pathname).size < 4096