123456789_123456789_123456789_123456789_123456789_

Module: Win32::Resolv

Relationships & Source Files
Namespace Children
Modules:
SZ
Defined in: ext/win32/lib/win32/resolv.rb,
ext/win32/lib/win32/resolv.rb,
ext/win32/resolv/resolv.c

Overview

Constant Summary

Class Method Summary

Class Method Details

.get_hosts_dir (private)

[ GitHub ]

  
# File 'ext/win32/lib/win32/resolv.rb', line 69

def get_hosts_dir
  Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg|
    reg.read_s_expand('DataBasePath')
  end
end

.get_hosts_path

[ GitHub ]

  
# File 'ext/win32/lib/win32/resolv.rb', line 14

def self.get_hosts_path
  path = get_hosts_dir
  path = File.expand_path('hosts', path)
  File.exist?(path) ? path : nil
end

.get_info (private)

[ GitHub ]

  
# File 'ext/win32/lib/win32/resolv.rb', line 75

def get_info
  search = nil
  nameserver = get_dns_server_list
  Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg|
    begin
      slist = reg.read_s('SearchList')
      search = slist.split(/,\s*/) unless slist.empty?
    rescue Registry::Error
    end

    if add_search = search.nil?
      search = []
      begin
        nvdom = reg.read_s('NV Domain')
        unless nvdom.empty?
          @search = [ nvdom ]
          if reg.read_i('UseDomainNameDevolution') != 0
            if /^\w+\./ =~ nvdom
              devo = $'
            end
          end
        end
      rescue Registry::Error
      end
    end

    reg.open('Interfaces') do |h|
      h.each_key do |iface, |
        h.open(iface) do |regif|
          next unless ns = %w[NameServer DhcpNameServer].find do |key|
            begin
              ns = regif.read_s(key)
            rescue Registry::Error
            else
              break ns.split(/[,\s]\s*/) unless ns.empty?
            end
          end
          next if (nameserver & ns).empty?

          if add_search
            begin
              [ 'Domain', 'DhcpDomain' ].each do |key|
                dom = regif.read_s(key)
                unless dom.empty?
                  search.concat(dom.split(/,\s*/))
                  break
                end
              end
            rescue Registry::Error
            end
          end
        end
      end
    end
    search << devo if add_search and devo
  end
  [ search.uniq, nameserver.uniq ]
end

.get_resolv_info

[ GitHub ]

  
# File 'ext/win32/lib/win32/resolv.rb', line 20

def self.get_resolv_info
  search, nameserver = get_info
  if search.empty?
    search = nil
  else
    search.delete("")
    search.uniq!
  end
  if nameserver.empty?
    nameserver = nil
  else
    nameserver.delete("")
    nameserver.delete("0.0.0.0")
    nameserver.uniq!
  end
  [ search, nameserver ]
end