class Dns::CatalogZone::CatalogZone

for catalog zone

Attributes

allow_transfers[R]
masters[R]
notifies[R]
zones[R]

Public Class Methods

new(zonename, rrsets) click to toggle source

initialize zone

# File lib/dns/catalog_zone/catalog_zone.rb, line 36
def initialize(zonename, rrsets)
  @rrsets = rrsets
  @zonename = Dnsruby::Name.create(zonename).to_s + '.'
  @zones = {}
  @templates = {}
  @masters = {}
  @notifies = {}
  @allow_transfers = {}

  version_name = Dnsruby::Name.create("version.#{@zonename}")
  masters_name = Dnsruby::Name.create("masters.#{@zonename}")
  notifies_name = Dnsruby::Name.create("notifies.#{@zonename}")
  transfer_name = Dnsruby::Name.create("allow-transfer.#{@zonename}")

  @rrsets.each do |rr|
    # version
    if rr.name == version_name && rr.type == Dnsruby::Types::TXT
      @version = rr.strings.join('')
    end
    # global master option
    add_masters(rr, '.') if rr.name == masters_name
    add_masters(rr, rr.name.labels[0]) if rr.name.subdomain_of?(masters_name)

    # global notify option
    add_notifies(rr, '.') if rr.name == notifies_name
    add_notifies(rr, rr.name.labels[0]) if rr.name.subdomain_of?(notifies_name)

    # global allow-transfer option
    add_allow_transfers(rr, '.') if rr.name == transfer_name
    add_allow_transfers(rr, rr.name.labels[0]) if rr.name.subdomain_of?(transfer_name)
  end
  case @version
  when '1'
    parse_v1
  else
    raise ValidateError, "#{@version} is unknown Catalog zone schema version"
  end
end

Private Instance Methods

parse_v1() click to toggle source
# File lib/dns/catalog_zone/catalog_zone.rb, line 117
def parse_v1
  # step 1 load zones
  parse_zones
  # step 2 load options
  parse_zones_options
end
parse_zones() click to toggle source
# File lib/dns/catalog_zone/catalog_zone.rb, line 77
def parse_zones
  zones_str = Dnsruby::Name.create("zones.#{@zonename}")
  # step 1 load zones
  @rrsets.each do |rr|
    next unless rr.name.subdomain_of?(zones_str)
    next unless rr.type == Dnsruby::Types::PTR
    mhash = Digest::SHA1.hexdigest(rr.domainname.canonical)
    if mhash != rr.name.labels[0].to_s
      raise ValidateError, "#{rr.name.labels[0]} PTR #{mhash} is not equal hash."
    end
    @zones[rr.name.labels[0].to_s] = Dns::CatalogZone::Zone.new(rr.domainname)
  end
end
parse_zones_options() click to toggle source
# File lib/dns/catalog_zone/catalog_zone.rb, line 91
def parse_zones_options
  zones_name = Dnsruby::Name.create("zones.#{@zonename}")
  @rrsets.each do |rr|
    next unless rr.name.subdomain_of?(zones_name)
    label = type = mhash = nil
    if @zones[rr.name.labels[1].to_s]
      label = '.'
      type = rr.name.labels[0].to_s
      mhash = rr.name.labels[1].to_s
    elsif @zones[rr.name.labels[2].to_s]
      label = rr.name.labels[0].to_s
      type = rr.name.labels[1].to_s
      mhash = rr.name.labels[2].to_s
    end

    case type
    when 'masters'
      @zones[mhash].add_masters(rr, label)
    when 'notifies'
      @zones[mhash].add_notifies(rr, label)
    when 'allow-transfer'
      @zones[mhash].add_allow_transfers(rr, label)
    end
  end
end