class DnsOne::Server
Public Class Methods
new()
click to toggle source
# File lib/dns_one/server.rb, line 8 def initialize @zone_search = ZoneSearch.instance.setup @req_log = nil end
Public Instance Methods
dns_daemon_interfaces()
click to toggle source
# File lib/dns_one/server.rb, line 60 def dns_daemon_interfaces if RExec.current_user == 'root' Global.conf.interfaces else ports = Global.conf.interfaces.map do |port| if port[2] <= 1024 Global.logger.warn "Changing listening port #{port.join ':'} to #{port[2] + 10000} for non-root process." port[2] += 10000 end port end ports end end
resolve(transaction)
click to toggle source
# File lib/dns_one/server.rb, line 21 def resolve transaction rcode = :NoError resp_log = [] begin domain_name = transaction.question.to_s ip_address = transaction.options[:peer] rescue nil records, from_cache = @zone_search.query domain_name, transaction.resource_class, ip_address if records if records.empty? transaction.fail! :NoError else records.each do |rec| resp_log << rec transaction.respond! *[rec.val].flatten, {resource_class: rec.res_class, section: rec.section} end end else rcode = :NXDomain transaction.fail! :NXDomain end rescue => e rcode = :ServFail end @req_log.on_response *[ ip_address, domain_name, transaction.resource_class, rcode, resp_log, from_cache ] raise e if e end
run()
click to toggle source
# File lib/dns_one/server.rb, line 75 def run srv = self RubyDNS::run_server(dns_daemon_interfaces) do on(:start) do srv.start end match(/(.+)/) do |transaction| srv.resolve transaction end otherwise do |transaction| transaction.fail! :NXDomain end end end
start()
click to toggle source
# File lib/dns_one/server.rb, line 13 def start if RExec.current_user == 'root' RExec.change_user Global.conf.run_as end @req_log ||= ReqLog::ReqLog.new Global.logger.info "Running as #{RExec.current_user}" end