From a8ea014f25af6fee48daf802bd82a5529230de22 Mon Sep 17 00:00:00 2001 From: Samuel Huckins Date: Wed, 15 Aug 2012 10:16:47 -0500 Subject: [PATCH] MDM cache update --- lib/gemcache/ruby/1.9.1/bin/mdm_console | 12 ++++++++---- .../active_record_models/host.rb | 8 +++++++- .../active_record_models/tag.rb | 8 ++++++++ .../metasploit_data_models-0.0.2.43DEV.gemspec | 2 +- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/gemcache/ruby/1.9.1/bin/mdm_console b/lib/gemcache/ruby/1.9.1/bin/mdm_console index 7c56696959..86a91fd9e0 100755 --- a/lib/gemcache/ruby/1.9.1/bin/mdm_console +++ b/lib/gemcache/ruby/1.9.1/bin/mdm_console @@ -1,4 +1,4 @@ -#!/usr/bin/env ruby_noexec_wrapper +#!/Users/shuckins/.rvm/rubies/ruby-1.9.3-p194/bin/ruby # # This file was generated by RubyGems. # @@ -10,9 +10,13 @@ require 'rubygems' version = ">= 0" -if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then - version = $1 - ARGV.shift +if ARGV.first + str = ARGV.first + str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding + if str =~ /\A_(.*)_\z/ + version = $1 + ARGV.shift + end end gem 'metasploit_data_models', version diff --git a/lib/gemcache/ruby/1.9.1/gems/metasploit_data_models-0.0.2.43DEV/lib/metasploit_data_models/active_record_models/host.rb b/lib/gemcache/ruby/1.9.1/gems/metasploit_data_models-0.0.2.43DEV/lib/metasploit_data_models/active_record_models/host.rb index 6f0186ff41..16b462101e 100755 --- a/lib/gemcache/ruby/1.9.1/gems/metasploit_data_models-0.0.2.43DEV/lib/metasploit_data_models/active_record_models/host.rb +++ b/lib/gemcache/ruby/1.9.1/gems/metasploit_data_models-0.0.2.43DEV/lib/metasploit_data_models/active_record_models/host.rb @@ -3,6 +3,7 @@ module MetasploitDataModels::ActiveRecordModels::Host base.class_eval{ belongs_to :workspace, :class_name => "Mdm::Workspace" + # hosts_tags are cleaned up in before_destroy: has_many :hosts_tags, :class_name => "Mdm::HostTag" has_many :tags, :through => :hosts_tags, :class_name => "Mdm::Tag" has_many :services, :dependent => :destroy, :class_name => "Mdm::Service", :order => "services.port, services.proto" @@ -24,6 +25,8 @@ module MetasploitDataModels::ActiveRecordModels::Host validates_exclusion_of :address, :in => ['127.0.0.1'] validates_uniqueness_of :address, :scope => :workspace_id, :unless => Proc.new { |host| host.ip_address_invalid? } + before_destroy :cleanup_tags + # This is replicated by the IpAddressValidator class. Had to put it here as well to avoid # SQL errors when checking address uniqueness. def ip_address_invalid? @@ -57,10 +60,13 @@ module MetasploitDataModels::ActiveRecordModels::Host accepts_nested_attributes_for :services, :reject_if => lambda { |s| s[:port].blank? }, :allow_destroy => true - def before_destroy + def cleanup_tags + # No need to keep tags with no hosts tags.each do |tag| tag.destroy if tag.hosts == [self] end + # Clean up association table records + Mdm::HostTag.delete_all("host_id = #{self.id}") end # Determine if the fingerprint data is readable. If not, it nearly always diff --git a/lib/gemcache/ruby/1.9.1/gems/metasploit_data_models-0.0.2.43DEV/lib/metasploit_data_models/active_record_models/tag.rb b/lib/gemcache/ruby/1.9.1/gems/metasploit_data_models-0.0.2.43DEV/lib/metasploit_data_models/active_record_models/tag.rb index e0156eabdb..e87148f9b0 100755 --- a/lib/gemcache/ruby/1.9.1/gems/metasploit_data_models-0.0.2.43DEV/lib/metasploit_data_models/active_record_models/tag.rb +++ b/lib/gemcache/ruby/1.9.1/gems/metasploit_data_models-0.0.2.43DEV/lib/metasploit_data_models/active_record_models/tag.rb @@ -11,9 +11,17 @@ module MetasploitDataModels::ActiveRecordModels::Tag } validates :desc, :length => {:maximum => 8191, :message => "desc must be less than 8k."} + before_destroy :cleanup_hosts + def to_s name end + + def cleanup_hosts + # Clean up association table records + Mdm::HostTag.delete_all("tag_id = #{self.id}") + end + } end end diff --git a/lib/gemcache/ruby/1.9.1/specifications/metasploit_data_models-0.0.2.43DEV.gemspec b/lib/gemcache/ruby/1.9.1/specifications/metasploit_data_models-0.0.2.43DEV.gemspec index 077ce55a67..00bbe02eb8 100644 --- a/lib/gemcache/ruby/1.9.1/specifications/metasploit_data_models-0.0.2.43DEV.gemspec +++ b/lib/gemcache/ruby/1.9.1/specifications/metasploit_data_models-0.0.2.43DEV.gemspec @@ -6,7 +6,7 @@ Gem::Specification.new do |s| s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version= s.authors = ["Trevor Rosen"] - s.date = "2012-06-25" + s.date = "2012-08-15" s.description = "Implements minimal ActiveRecord models and database helper code used in both the Metasploit Framework (MSF) and Metasploit commercial editions." s.email = ["trevor_rosen@rapid7.com"] s.executables = ["mdm_console"]