Class: Radd::Nameserver

Inherits:
Async::DNS::Server
  • Object
show all
Defined in:
lib/radd/nameserver.rb

Instance Method Summary collapse

Constructor Details

#initializeNameserver

Returns a new instance of Nameserver.



4
5
6
# File 'lib/radd/nameserver.rb', line 4

def initialize
  super(Async::DNS::Endpoint.for(Radd.dns_host, port: Radd.dns_port))
end

Instance Method Details

#process(name, resource_class, transaction) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/radd/nameserver.rb', line 8

def process(name, resource_class, transaction)
  name = Resolv::DNS::Name.create(name.downcase)
  # NOTE: do not use case..when, as resource classes are not identical
  if Resolv::DNS::Resource::IN::A == resource_class
    if Radd.mname == name || Radd.origin == name
      return respond_a(transaction, Radd.ip)
    elsif name.subdomain_of?(Radd.origin)
      return respond_a(transaction, Radd.query(name))
    end
  elsif resource_class <= Resolv::DNS::Resource::SOA && Radd.origin == name
    # mname, rname, serial, refresh, retry_, expire, minimum
    return transaction.respond!(Radd.mname, Radd.rname, Radd.serial, 10800, 1800, 604800, 1800)
  elsif resource_class <= Resolv::DNS::Resource::NS && Radd.origin == name
    return transaction.respond!(Radd.mname)
  end
  transaction.fail!(:Refused)
end