class OpenvasCli::VasTarget

Attributes

comment[R]
in_use[RW]
name[R]
port_range[R]

Public Class Methods

create!(params={}) click to toggle source
# File lib/openvas-cli/vas_target.rb, line 161
def self.create!(params={})
  t = VasTarget.new(params)
  t.save!
  
  t
end
get_all(options = {}) click to toggle source
# File lib/openvas-cli/vas_target.rb, line 168
def self.get_all(options = {})
  params = {:tasks => 1}
  params[:target_id] = options[:id] if options[:id]
  
  req = Nokogiri::XML::Builder.new { |xml|
    xml.get_targets(params)
  }
  ret = []
  
  begin    
    targets = connection.send_receive(req.doc)
    targets.xpath('//target').each { |t|
      targ                       = VasTarget.new
      targ.id                    = extract_value_from("@id", t)
      targ.name                  = extract_value_from("name", t)
      host_string                = extract_value_from("hosts", t)
      all_hosts = host_string.split(/,/)
      all_hosts.each { |hst| hst.strip! }
      targ.hosts                 = all_hosts
      targ.comment               = extract_value_from("comment", t)
      targ.port_range            = extract_value_from("port_range", t)
      targ.in_use                = extract_value_from("in_use", t).to_i > 0
      targ.credential_keys[:ssh] = extract_value_from("ssh_lsc_credential/@id", t)
      targ.credential_keys[:smb] = extract_value_from("smb_lsc_credential/@id", t)
      
      
      t.xpath('tasks/task').each { |task|
        targ.task_keys << extract_value_from("@id", task)
      }
      
      targ.reset_changes
      
      ret << targ
    }
  
  rescue VasExceptions::CommandException => e
    raise e unless e.message =~ /Failed to find target/i
  end
  
  ret
end
get_local_subnets() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 45
def self.get_local_subnets
  adrs = []
  `ifconfig`.split("\n").each { |cmd|
    if cmd =~ /inet addr:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+.*Mask:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/i
      adrs << IPAddress("#{$1}/#{$2}") unless $1 == '127.0.0.1'
    end
  }
  
  adrs.collect{ |a| a.network.to_string }    
end
new(params = {}) click to toggle source
Calls superclass method OpenvasCli::VasBase::new
# File lib/openvas-cli/vas_target.rb, line 56
def initialize(params = {})
  super(params)    

  @org_hosts = @hosts.collect { |h| h } if @hosts
end

Public Instance Methods

changed?() click to toggle source
Calls superclass method
# File lib/openvas-cli/vas_target.rb, line 30
def changed?
  local_changes = false
  
  local_changes = true unless @org_hosts && @org_hosts.eql?(@hosts)  
  
  unless local_changes == true
    local_changes = credential_changed?(:ssh) || credential_changed?(:smb)
  end
        
  local_changes ||  super
end
comment=(val) click to toggle source
# File lib/openvas-cli/vas_target.rb, line 20
def comment=(val)
  comment_will_change! unless val == @comment
  @comment = val
end
create_or_update() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 113
def create_or_update
  if @id
    return unless destroy
  end
  req = Nokogiri::XML::Builder.new { |xml|
    xml.create_target {
      xml.name       { xml.text(@name) }
      xml.comment    { xml.text(@comment) } if @comment
      xml.hosts      { xml.text(hosts_string) }
      xml.ssh_lsc_credential(:id => credentials[:ssh].id) if credentials[:ssh]
      xml.smb_lsc_credential(:id => credentials[:smb].id) if credentials[:smb]
      xml.port_range { xml.text(@port_range) } if @port_range
    }
  }
  
  begin
    resp = VasTarget.connection.send_receive(req.doc)
    @id = VasTarget.extract_value_from("create_target_response/@id", resp)
    reset_changes
    
    true
  rescue VasExceptions::CommandException => e
    errors[:command_failure] << e.message
    
    nil
  end      
  
end
credential_keys() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 66
def credential_keys
  @credential_keys ||= { :smb => nil, :ssh => nil }
end
credentials() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 62
def credentials
  @credentials ||= get_credentials
end
delete_record() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 142
def delete_record
  return unless @id
  
  req = Nokogiri::XML::Builder.new { |xml|
    xml.delete_target(:target_id => @id)
  }
  
  begin
    VasTarget.connection.send_receive(req.doc)
    @id = nil
    
    true
  rescue VasExceptions::CommandException => e
    errors[:command_failure] << e.message
    
    nil
  end  
end
hosts() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 94
def hosts
  @hosts ||= []
end
hosts=(val) click to toggle source
# File lib/openvas-cli/vas_target.rb, line 98
def hosts=(val)
  hosts_will_change! unless @hosts.eql?(val)
  @hosts = val
  
  @org_hosts = val.collect { |h| h } if val
end
hosts_string() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 105
def hosts_string
  hosts.join(", ")
end
hosts_string=(val) click to toggle source
# File lib/openvas-cli/vas_target.rb, line 109
def hosts_string=(val)
  self.hosts = val.split(/, ?/)
end
name=(val) click to toggle source
# File lib/openvas-cli/vas_target.rb, line 15
def name=(val)
  name_will_change! unless val == @name
  @name = val
end
port_range=(val) click to toggle source
# File lib/openvas-cli/vas_target.rb, line 25
def port_range=(val)
  port_range_will_change! unless val == @port_range
  @port_range = val 
end
smb_credential_id() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 70
def smb_credential_id
  credentials[:smb].id if credentials[:smb]
end
smb_credential_id=(val) click to toggle source
# File lib/openvas-cli/vas_target.rb, line 74
def smb_credential_id=(val)
  credentials[:smb] = VasLscCredential.get_by_id(val)
end
ssh_credential_id() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 78
def ssh_credential_id
  credentials[:ssh].id if credentials[:ssh]
end
ssh_credential_id=(val) click to toggle source
# File lib/openvas-cli/vas_target.rb, line 82
def ssh_credential_id=(val)
  credentials[:ssh] = VasLscCredential.get_by_id(val)
end
task_keys() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 90
def task_keys
  @task_keys ||= []
end
tasks() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 86
def tasks
  @tasks ||= get_tasks
end

Private Instance Methods

credential_changed?(key) click to toggle source
# File lib/openvas-cli/vas_target.rb, line 231
def credential_changed?(key)
  credential_keys[key] = nil if credential_keys[key] && credential_keys[key].empty?
  if credential_keys[key] == nil && credentials[key] != nil
    return true
  elsif credential_keys[key] != nil && credentials[key] == nil
    return true
  elsif credential_keys[key] == nil && credentials[key] == nil
    return false
  else
    return credential_keys[key] != credentials[key].id
  end
end
get_credentials() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 221
def get_credentials
  ret = { :ssh => nil, :smb => nil }
  
  @credential_keys.each { |key, value|
    ret[key] = VasLscCredential.get_all(:id => value)[0] if value && !value.empty?
  } if @credential_keys
  
  ret
end
get_tasks() click to toggle source
# File lib/openvas-cli/vas_target.rb, line 211
def get_tasks
  ret = []
  
  @task_keys.each { |key|
    ret << VasTask.get_all(:task_id => key)
  }
  
  ret
end