class Stubby::Extensions::DNS::Server
Constants
- IN
- UPSTREAM
Public Instance Methods
expand_rule(trigger, instruction)
click to toggle source
# File lib/stubby/extensions/dns.rb, line 79 def expand_rule(trigger, instruction) i = URI.parse(instruction) t = URI.parse(trigger) # If not specifying a record type, match a t.path = "/a" if t.path.empty? if i.scheme.nil? { t.to_s => "dns-a://#{instruction}" } else { t.to_s => instruction } end end
process(name, resource_class, transaction)
click to toggle source
# File lib/stubby/extensions/dns.rb, line 25 def process(name, resource_class, transaction) body = HTTPI.post("http://#{STUBBY_MASTER}:9000/rules/search.json", trigger: "dns://#{name}/#{symbol_from_resource_class(resource_class)}").body instruction = MultiJson.load(body) if instruction.nil? or instruction == "@" transaction.passthrough!(UPSTREAM) return end url = URI.parse(instruction) response_resource_class = resource url.scheme.gsub('dns-', '') if !IPAddress.valid?(url.host) and response_resource_class == IN::A response_resource_class = IN::CNAME end response = url.host if [IN::CNAME, IN::MX].include? response_resource_class response = Resolv::DNS::Name.create(url.host) end puts "DNS: #{name} => #{response}-#{resource_class.name})" if response_resource_class == IN::MX transaction.respond!(10, response, :resource_class => response_resource_class, :ttl => 0) else transaction.respond!(response, :resource_class => response_resource_class, :ttl => 0) end end
restore!()
click to toggle source
# File lib/stubby/extensions/dns.rb, line 75 def restore! restore_references end
run!(session, options)
click to toggle source
# File lib/stubby/extensions/dns.rb, line 63 def run!(session, options) return if options[:dns] == false trap("INT"){ stop! } @session = session setup_references and run_dns_server end
stop!()
click to toggle source
# File lib/stubby/extensions/dns.rb, line 71 def stop! teardown_references and stop_dns_server end
Private Instance Methods
resource(pattern)
click to toggle source
# File lib/stubby/extensions/dns.rb, line 95 def resource(pattern) return IN::A unless pattern.respond_to? :to_sym symbol_to_resource_class[pattern.to_sym] || IN::A end
run_dns_server()
click to toggle source
# File lib/stubby/extensions/dns.rb, line 120 def run_dns_server logger.level = Logger::INFO EventMachine.run do run(:listen => [[:tcp, STUBBY_MASTER, 53], [:udp, STUBBY_MASTER, 53]]) end end
stop_dns_server()
click to toggle source
# File lib/stubby/extensions/dns.rb, line 129 def stop_dns_server fire :stop EventMachine::stop_event_loop rescue end
symbol_from_resource_class(klass)
click to toggle source
# File lib/stubby/extensions/dns.rb, line 100 def symbol_from_resource_class(klass) symbol_to_resource_class.invert[klass] || :a end
symbol_to_resource_class()
click to toggle source
# File lib/stubby/extensions/dns.rb, line 104 def symbol_to_resource_class { a: IN::A, aaaa: IN::AAAA, srv: IN::SRV, wks: IN::WKS, minfo: IN::MINFO, mx: IN::MX, ns: IN::NS, ptr: IN::PTR, soa: IN::SOA, txt: IN::TXT, cname: IN::CNAME } end