| Class | Resolv::Hosts |
| In: |
lib/resolv.rb
|
| Parent: | Object |
| DefaultFileName | = | Win32::Resolv.get_hosts_path |
| DefaultFileName | = | '/etc/hosts' |
# File lib/resolv.rb, line 288
288: def initialize(filename = DefaultFileName)
289: @filename = filename
290: @mutex = Mutex.new
291: @initialized = nil
292: end
# File lib/resolv.rb, line 336
336: def each_address(name, &proc)
337: lazy_initialize
338: if @name2addr.include?(name)
339: @name2addr[name].each(&proc)
340: end
341: end
# File lib/resolv.rb, line 354
354: def each_name(address, &proc)
355: lazy_initialize
356: if @addr2name.include?(address)
357: @addr2name[address].each(&proc)
358: end
359: end
# File lib/resolv.rb, line 325
325: def getaddress(name)
326: each_address(name) {|address| return address}
327: raise ResolvError.new("#{@filename} has no name: #{name}")
328: end
# File lib/resolv.rb, line 330
330: def getaddresses(name)
331: ret = []
332: each_address(name) {|address| ret << address}
333: return ret
334: end
# File lib/resolv.rb, line 343
343: def getname(address)
344: each_name(address) {|name| return name}
345: raise ResolvError.new("#{@filename} has no address: #{address}")
346: end
# File lib/resolv.rb, line 348
348: def getnames(address)
349: ret = []
350: each_name(address) {|name| ret << name}
351: return ret
352: end
# File lib/resolv.rb, line 294
294: def lazy_initialize
295: @mutex.synchronize {
296: unless @initialized
297: @name2addr = {}
298: @addr2name = {}
299: open(@filename) {|f|
300: f.each {|line|
301: line.sub!(/#.*/, '')
302: addr, hostname, *aliases = line.split(/\s+/)
303: next unless addr
304: addr.untaint
305: hostname.untaint
306: @addr2name[addr] = [] unless @addr2name.include? addr
307: @addr2name[addr] << hostname
308: @addr2name[addr] += aliases
309: @name2addr[hostname] = [] unless @name2addr.include? hostname
310: @name2addr[hostname] << addr
311: aliases.each {|n|
312: n.untaint
313: @name2addr[n] = [] unless @name2addr.include? n
314: @name2addr[n] << addr
315: }
316: }
317: }
318: @name2addr.each {|name, arr| arr.reverse!}
319: @initialized = true
320: end
321: }
322: self
323: end