changes requested for the conditionality system for module OPTIONS/ACTIONS/TARGETS
This commit is contained in:
parent
938173feb3
commit
091481b783
|
@ -0,0 +1,38 @@
|
|||
# -*- coding: binary -*-
|
||||
module Msf
|
||||
module OptCondition
|
||||
|
||||
# Check a condition's result
|
||||
def self.eval_condition(left_value, operator, right_value)
|
||||
case operator.to_sym
|
||||
when :==
|
||||
right_value == left_value
|
||||
when :!=
|
||||
right_value != left_value
|
||||
when :in
|
||||
right_value.include?(left_value)
|
||||
when :nin
|
||||
!right_value.include?(left_value)
|
||||
end
|
||||
end
|
||||
|
||||
# Check an OPTION conditions. This function supports
|
||||
# dump_options()
|
||||
def self.show_option(mod, opt)
|
||||
return true if opt.conditions.empty?
|
||||
left_source = opt.conditions[0]
|
||||
operator = opt.conditions[1]
|
||||
right_value = opt.conditions[2]
|
||||
if left_source == "ACTION"
|
||||
left_value = mod.action.name.to_s
|
||||
elsif left_source == "TARGET"
|
||||
left_value = mod.target.name.to_s
|
||||
else
|
||||
left_value = mod.datastore[left_source] || opt.default
|
||||
end
|
||||
|
||||
eval_condition(left_value, operator, right_value)
|
||||
end
|
||||
|
||||
end
|
||||
end #end end #end_modules
|
|
@ -557,9 +557,9 @@ class ReadableText
|
|||
|
||||
mod.options.sorted.each do |name, opt|
|
||||
|
||||
next unless Msf::Serializer::OptConditions.show_option(mod, opt)
|
||||
val = mod.datastore[name].nil? ? opt.default : mod.datastore[name]
|
||||
|
||||
next unless Msf::Serializer::OptConditions.show_option(mod, opt)
|
||||
next if (opt.advanced?)
|
||||
next if (opt.evasion?)
|
||||
next if (missing && opt.valid?(val))
|
||||
|
|
|
@ -8,7 +8,7 @@ module Msf
|
|||
|
||||
# This overrides default from 'nil' to 'false'
|
||||
def initialize(in_name, attrs = [],
|
||||
required: true, desc: nil, default: false, conditions: [], aliases: [])
|
||||
default: false, **kwargs)
|
||||
super
|
||||
end
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ module Msf
|
|||
|
||||
# This overrides required default from 'false' to 'true'
|
||||
def initialize(in_name, attrs = [],
|
||||
required: true, desc: nil, default: nil, enums: [], aliases: [])
|
||||
required: true, **kwargs)
|
||||
super
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue