Changed GET handlers to return recently fixed rule data.
Also wrapped all handlers in a begin/end block that catches internal StandardError exceptions.
This commit is contained in:
@@ -93,7 +93,7 @@ module Dns
|
|||||||
# * <code>:id</code>
|
# * <code>:id</code>
|
||||||
# * <code>:pattern</code>
|
# * <code>:pattern</code>
|
||||||
# * <code>:type</code>
|
# * <code>:type</code>
|
||||||
# * <code>:block</code>
|
# * <code>:response</code>
|
||||||
#
|
#
|
||||||
# @return [Array<Hash>] DNS ruleset (empty if no rules are currently loaded)
|
# @return [Array<Hash>] DNS ruleset (empty if no rules are currently loaded)
|
||||||
def get_ruleset
|
def get_ruleset
|
||||||
|
|||||||
@@ -26,9 +26,14 @@ module Dns
|
|||||||
|
|
||||||
# Returns the entire current DNS ruleset
|
# Returns the entire current DNS ruleset
|
||||||
get '/rules' do
|
get '/rules' do
|
||||||
result = {}
|
begin
|
||||||
result[:rules] = BeEF::Extension::Dns::Server.instance.get_ruleset
|
result = {}
|
||||||
result.to_json
|
result[:rules] = BeEF::Extension::Dns::Server.instance.get_ruleset
|
||||||
|
result.to_json
|
||||||
|
rescue StandardError => e
|
||||||
|
print_error "Internal error while retrieving DNS ruleset (#{e.message})"
|
||||||
|
halt 500
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns a specific rule given its id
|
# Returns a specific rule given its id
|
||||||
@@ -45,6 +50,9 @@ module Dns
|
|||||||
rescue InvalidJsonError => e
|
rescue InvalidJsonError => e
|
||||||
print_error e.message
|
print_error e.message
|
||||||
halt 400
|
halt 400
|
||||||
|
rescue StandardError => e
|
||||||
|
print_error "Internal error while retrieving DNS rule with id #{id} (#{e.message})"
|
||||||
|
halt 500
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -118,6 +126,9 @@ module Dns
|
|||||||
rescue InvalidJsonError => e
|
rescue InvalidJsonError => e
|
||||||
print_error e.message
|
print_error e.message
|
||||||
halt 400
|
halt 400
|
||||||
|
rescue StandardError => e
|
||||||
|
print_error "Internal error while removing DNS rule with id #{id} (#{e.message})"
|
||||||
|
halt 500
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -140,8 +140,8 @@ module RubyDNS
|
|||||||
|
|
||||||
element[:id] = rule.id
|
element[:id] = rule.id
|
||||||
element[:pattern] = rule.pattern
|
element[:pattern] = rule.pattern
|
||||||
element[:type] = rule.type
|
element[:type] = rule.type.to_s.split('::')[-1]
|
||||||
element[:block] = rule.block
|
element[:response] = parse_response(rule.block)
|
||||||
|
|
||||||
result << element
|
result << element
|
||||||
end
|
end
|
||||||
@@ -158,8 +158,8 @@ module RubyDNS
|
|||||||
|
|
||||||
result[:id] = rule.id
|
result[:id] = rule.id
|
||||||
result[:pattern] = rule.pattern
|
result[:pattern] = rule.pattern
|
||||||
result[:type] = rule.type
|
result[:type] = rule.type.to_s.split('::')[-1]
|
||||||
result[:block] = rule.block
|
result[:response] = parse_response(rule.block)
|
||||||
rescue DataMapper::ObjectNotFoundError => e
|
rescue DataMapper::ObjectNotFoundError => e
|
||||||
@logger.error(e.message)
|
@logger.error(e.message)
|
||||||
end
|
end
|
||||||
@@ -183,6 +183,32 @@ module RubyDNS
|
|||||||
id
|
id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# New method that parses response callback and returns RDATA as an array
|
||||||
|
def parse_response(block)
|
||||||
|
# Extract response arguments into an array
|
||||||
|
args = /(?<=respond!\().*(?=\))/.match(block).to_s.split(/,\s*/)
|
||||||
|
|
||||||
|
result = []
|
||||||
|
|
||||||
|
# Determine whether each argument is a domain name, integer, or IP address
|
||||||
|
args.each do |elem|
|
||||||
|
arg = nil
|
||||||
|
|
||||||
|
if /Name\.create\((.*)\)/.match(elem)
|
||||||
|
arg = $1
|
||||||
|
else
|
||||||
|
int_test = elem.to_i
|
||||||
|
arg = (int_test != 0 ? int_test : elem)
|
||||||
|
end
|
||||||
|
|
||||||
|
arg.gsub!('"', '') unless arg.is_a?(Integer)
|
||||||
|
|
||||||
|
result << arg
|
||||||
|
end
|
||||||
|
|
||||||
|
result
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class Transaction
|
class Transaction
|
||||||
|
|||||||
Reference in New Issue
Block a user