net-dns2 0.8.4 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +13 -5
 - data/CHANGELOG.md +10 -0
 - data/README.md +1 -1
 - data/lib/net/dns/packet.rb +53 -48
 - data/lib/net/dns/resolver.rb +84 -115
 - data/net-dns.gemspec +4 -7
 - metadata +15 -15
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
            !binary "U0hBMQ==":
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: !binary |-
         
     | 
| 
      
 4 
     | 
    
         
            +
                MjQ4ZDlmZjliMDEwZWU5NmYxMTIwOWQ3YTVlMTA3NzYxNTI2ODI5ZQ==
         
     | 
| 
      
 5 
     | 
    
         
            +
              data.tar.gz: !binary |-
         
     | 
| 
      
 6 
     | 
    
         
            +
                ZWFhNmY0NDg3Mzc0NjIwZTQxYWY2ODRhNDRmYzI3MjM3NDZjYjcxOA==
         
     | 
| 
       5 
7 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
              metadata.gz: !binary |-
         
     | 
| 
      
 9 
     | 
    
         
            +
                YjE5MTc4ZjQ2ZmRiN2VhYThkNTIwYmYxODY3Nzg3NTM4YzFmMGY1NWRkZmNi
         
     | 
| 
      
 10 
     | 
    
         
            +
                ZTRlZDgzMWM2OTFkZGM0OWExY2Y4NmEwMGRkZmJmMTIyNWY3MmNiODYzODhh
         
     | 
| 
      
 11 
     | 
    
         
            +
                YTcwNTczNGI3OGUxNWMxYjc3YmIzYmRiNWM5NWFmZDYyYmFiNzE=
         
     | 
| 
      
 12 
     | 
    
         
            +
              data.tar.gz: !binary |-
         
     | 
| 
      
 13 
     | 
    
         
            +
                ODAxMGQ2ZWI3MWMxNGZlZWUyNDI2MmIzZDA2NGU3MmE3Zjc5NzgzYWNlYjk5
         
     | 
| 
      
 14 
     | 
    
         
            +
                NmUyZTZlMDZmMjI5NTIyYjdkZjFlMjhkZThmYmI1MWNiNTkzOWRiYzMwODYx
         
     | 
| 
      
 15 
     | 
    
         
            +
                MGM2MmJlYzAzMGE2ZDgxMGVkMDQ5MDIyZGFiMDJmNzRiZTkyYjY=
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,5 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Changelog
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            ## Release 0.8.5
         
     | 
| 
      
 4 
     | 
    
         
            +
             - FIXED: Disable logger by default and change logger behaivior issue #20
         
     | 
| 
      
 5 
     | 
    
         
            +
             - FIXED: Logger and log4j [feature request] issue #16
         
     | 
| 
      
 6 
     | 
    
         
            +
             - FIXED: Resolver#logger= should not call close on old logger issue #3
         
     | 
| 
      
 7 
     | 
    
         
            +
             - FIXED: Could not disable mac source_address spoofing, added option
         
     | 
| 
      
 8 
     | 
    
         
            +
             - MERGED: Pull request #33, switches to enumerators
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ## Release 0.8.4
         
     | 
| 
      
 11 
     | 
    
         
            +
             - FIXED: Missing file for new spf record, pull/57
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       3 
13 
     | 
    
         
             
            ## Release 0.8.3
         
     | 
| 
       4 
14 
     | 
    
         
             
             - FIXED: Packet size cannot be set issue #1
         
     | 
| 
       5 
15 
     | 
    
         
             
             - FIXED: Now raise exception if raw sockets are requested and we are not
         
     | 
    
        data/README.md
    CHANGED
    
    
    
        data/lib/net/dns/packet.rb
    CHANGED
    
    | 
         @@ -1,4 +1,3 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'logger'
         
     | 
| 
       2 
1 
     | 
    
         
             
            require 'net/dns/names'
         
     | 
| 
       3 
2 
     | 
    
         
             
            require 'net/dns/header'
         
     | 
| 
       4 
3 
     | 
    
         
             
            require 'net/dns/question'
         
     | 
| 
         @@ -65,18 +64,8 @@ module Net 
     | 
|
| 
       65 
64 
     | 
    
         
             
                #
         
     | 
| 
       66 
65 
     | 
    
         
             
                # == Logging facility
         
     | 
| 
       67 
66 
     | 
    
         
             
                #
         
     | 
| 
       68 
     | 
    
         
            -
                #  
     | 
| 
       69 
     | 
    
         
            -
                #  
     | 
| 
       70 
     | 
    
         
            -
                # maybe want to override it or change the file descriptor.
         
     | 
| 
       71 
     | 
    
         
            -
                #
         
     | 
| 
       72 
     | 
    
         
            -
                #   packet = Net::DNS::Packet.new("www.example.com")
         
     | 
| 
       73 
     | 
    
         
            -
                #   packet.logger = $stderr
         
     | 
| 
       74 
     | 
    
         
            -
                #
         
     | 
| 
       75 
     | 
    
         
            -
                #   # or even
         
     | 
| 
       76 
     | 
    
         
            -
                #   packet.logger = Logger.new("/tmp/packet.log")
         
     | 
| 
       77 
     | 
    
         
            -
                #
         
     | 
| 
       78 
     | 
    
         
            -
                # If the <tt>Net::DNS::Packet</tt> class is directly instantiated by the <tt>Net::DNS::Resolver</tt>
         
     | 
| 
       79 
     | 
    
         
            -
                # class, like the great majority of the time, it will use the same logger facility.
         
     | 
| 
      
 67 
     | 
    
         
            +
                # Logger can be set by using logger= to set the logger to any object that implements
         
     | 
| 
      
 68 
     | 
    
         
            +
                # the necessary functions. If no logger is set then no logging is performed.
         
     | 
| 
       80 
69 
     | 
    
         
             
                #
         
     | 
| 
       81 
70 
     | 
    
         
             
                # Logger level will be set to <tt>Logger::Debug</tt> if <tt>$DEBUG</tt> variable is set.
         
     | 
| 
       82 
71 
     | 
    
         
             
                #
         
     | 
| 
         @@ -94,6 +83,7 @@ module Net 
     | 
|
| 
       94 
83 
     | 
    
         | 
| 
       95 
84 
     | 
    
         
             
                  attr_reader :header, :question, :answer, :authority, :additional
         
     | 
| 
       96 
85 
     | 
    
         
             
                  attr_reader :answerfrom, :answersize
         
     | 
| 
      
 86 
     | 
    
         
            +
                  @@logger = nil
         
     | 
| 
       97 
87 
     | 
    
         | 
| 
       98 
88 
     | 
    
         
             
                  # Creates a new instance of <tt>Net::DNS::Packet</tt> class. Arguments are the
         
     | 
| 
       99 
89 
     | 
    
         
             
                  # canonical name of the resource, an optional type field and an optional
         
     | 
| 
         @@ -120,16 +110,39 @@ module Net 
     | 
|
| 
       120 
110 
     | 
    
         
             
                    @answer = []
         
     | 
| 
       121 
111 
     | 
    
         
             
                    @authority = []
         
     | 
| 
       122 
112 
     | 
    
         
             
                    @additional = []
         
     | 
| 
       123 
     | 
    
         
            -
                    @logger = Logger.new $stdout
         
     | 
| 
       124 
     | 
    
         
            -
                    @logger.level = $DEBUG ? Logger::DEBUG : Logger::WARN
         
     | 
| 
       125 
113 
     | 
    
         
             
                  end
         
     | 
| 
       126 
114 
     | 
    
         | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
115 
     | 
    
         
             
                  # Checks if the packet is a QUERY packet
         
     | 
| 
       129 
116 
     | 
    
         
             
                  def query?
         
     | 
| 
       130 
117 
     | 
    
         
             
                    @header.query?
         
     | 
| 
       131 
118 
     | 
    
         
             
                  end
         
     | 
| 
       132 
119 
     | 
    
         | 
| 
      
 120 
     | 
    
         
            +
                  def self.logger= logger
         
     | 
| 
      
 121 
     | 
    
         
            +
                    if logger.respond_to?(:warn) && logger.respond_to?(:debug) && logger.respond_to?(:info)
         
     | 
| 
      
 122 
     | 
    
         
            +
                      @@logger = logger
         
     | 
| 
      
 123 
     | 
    
         
            +
                    else
         
     | 
| 
      
 124 
     | 
    
         
            +
                      raise ArgumentError, "Invalid logger provided to #{self.class}"
         
     | 
| 
      
 125 
     | 
    
         
            +
                    end
         
     | 
| 
      
 126 
     | 
    
         
            +
                  end
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                  def warn *args
         
     | 
| 
      
 129 
     | 
    
         
            +
                    if @@logger
         
     | 
| 
      
 130 
     | 
    
         
            +
                      @@logger.warn *args
         
     | 
| 
      
 131 
     | 
    
         
            +
                    end
         
     | 
| 
      
 132 
     | 
    
         
            +
                  end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                  def debug *args
         
     | 
| 
      
 135 
     | 
    
         
            +
                    if @@logger
         
     | 
| 
      
 136 
     | 
    
         
            +
                      @@logger.debug *args
         
     | 
| 
      
 137 
     | 
    
         
            +
                    end
         
     | 
| 
      
 138 
     | 
    
         
            +
                  end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                  def info *args
         
     | 
| 
      
 141 
     | 
    
         
            +
                    if @@logger
         
     | 
| 
      
 142 
     | 
    
         
            +
                      @@logger.info *args
         
     | 
| 
      
 143 
     | 
    
         
            +
                    end
         
     | 
| 
      
 144 
     | 
    
         
            +
                  end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
       133 
146 
     | 
    
         
             
                  # Returns the packet object in binary data, suitable
         
     | 
| 
       134 
147 
     | 
    
         
             
                  # for sending across a network stream.
         
     | 
| 
       135 
148 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -347,6 +360,15 @@ module Net 
     | 
|
| 
       347 
360 
     | 
    
         
             
                    end
         
     | 
| 
       348 
361 
     | 
    
         
             
                  end
         
     | 
| 
       349 
362 
     | 
    
         | 
| 
      
 363 
     | 
    
         
            +
                  # Filters the elements in the +answer+ section based on the class given
         
     | 
| 
      
 364 
     | 
    
         
            +
                  def elements(type = nil)
         
     | 
| 
      
 365 
     | 
    
         
            +
                    if type
         
     | 
| 
      
 366 
     | 
    
         
            +
                      @answer.select {|elem| elem.kind_of? type}
         
     | 
| 
      
 367 
     | 
    
         
            +
                    else
         
     | 
| 
      
 368 
     | 
    
         
            +
                      @answer
         
     | 
| 
      
 369 
     | 
    
         
            +
                    end
         
     | 
| 
      
 370 
     | 
    
         
            +
                  end
         
     | 
| 
      
 371 
     | 
    
         
            +
             
     | 
| 
       350 
372 
     | 
    
         
             
                  # Iterates every address in the +answer+ section
         
     | 
| 
       351 
373 
     | 
    
         
             
                  # of this <tt>Net::DNS::Packet</tt> instance.
         
     | 
| 
       352 
374 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -357,10 +379,7 @@ module Net 
     | 
|
| 
       357 
379 
     | 
    
         
             
                  # As you can see in the documentation for the <tt>Net::DNS::RR::A</tt> class,
         
     | 
| 
       358 
380 
     | 
    
         
             
                  # the address returned is an instance of <tt>IPAddr</tt> class.
         
     | 
| 
       359 
381 
     | 
    
         
             
                  def each_address(&block)
         
     | 
| 
       360 
     | 
    
         
            -
                     
     | 
| 
       361 
     | 
    
         
            -
                      next unless elem.class == Net::DNS::RR::A
         
     | 
| 
       362 
     | 
    
         
            -
                      yield elem.address
         
     | 
| 
       363 
     | 
    
         
            -
                    end
         
     | 
| 
      
 382 
     | 
    
         
            +
                    elements(Net::DNS::RR::A).map(&:address).each(&block)
         
     | 
| 
       364 
383 
     | 
    
         
             
                  end
         
     | 
| 
       365 
384 
     | 
    
         | 
| 
       366 
385 
     | 
    
         
             
                  # Iterates every nameserver in the +answer+ section
         
     | 
| 
         @@ -371,10 +390,7 @@ module Net 
     | 
|
| 
       371 
390 
     | 
    
         
             
                  #   end
         
     | 
| 
       372 
391 
     | 
    
         
             
                  #
         
     | 
| 
       373 
392 
     | 
    
         
             
                  def each_nameserver(&block)
         
     | 
| 
       374 
     | 
    
         
            -
                     
     | 
| 
       375 
     | 
    
         
            -
                      next unless elem.class == Net::DNS::RR::NS
         
     | 
| 
       376 
     | 
    
         
            -
                      yield elem.nsdname
         
     | 
| 
       377 
     | 
    
         
            -
                    end
         
     | 
| 
      
 393 
     | 
    
         
            +
                    elements(Net::DNS::RR::NS).map(&:nsdname).each(&block)
         
     | 
| 
       378 
394 
     | 
    
         
             
                  end
         
     | 
| 
       379 
395 
     | 
    
         | 
| 
       380 
396 
     | 
    
         
             
                  # Iterates every exchange record in the +answer+ section
         
     | 
| 
         @@ -385,10 +401,7 @@ module Net 
     | 
|
| 
       385 
401 
     | 
    
         
             
                  #   end
         
     | 
| 
       386 
402 
     | 
    
         
             
                  #
         
     | 
| 
       387 
403 
     | 
    
         
             
                  def each_mx(&block)
         
     | 
| 
       388 
     | 
    
         
            -
                     
     | 
| 
       389 
     | 
    
         
            -
                      next unless elem.class == Net::DNS::RR::MX
         
     | 
| 
       390 
     | 
    
         
            -
                      yield elem.preference, elem.exchange
         
     | 
| 
       391 
     | 
    
         
            -
                    end
         
     | 
| 
      
 404 
     | 
    
         
            +
                    elements(Net::DNS::RR::MX).map{|elem| [elem.preference, elem.exchange]}.each(&block)
         
     | 
| 
       392 
405 
     | 
    
         
             
                  end
         
     | 
| 
       393 
406 
     | 
    
         | 
| 
       394 
407 
     | 
    
         
             
                  # Iterates every canonical name in the +answer+ section
         
     | 
| 
         @@ -399,10 +412,7 @@ module Net 
     | 
|
| 
       399 
412 
     | 
    
         
             
                  #   end
         
     | 
| 
       400 
413 
     | 
    
         
             
                  #
         
     | 
| 
       401 
414 
     | 
    
         
             
                  def each_cname(&block)
         
     | 
| 
       402 
     | 
    
         
            -
                     
     | 
| 
       403 
     | 
    
         
            -
                      next unless elem.class == Net::DNS::RR::CNAME
         
     | 
| 
       404 
     | 
    
         
            -
                      yield elem.cname
         
     | 
| 
       405 
     | 
    
         
            -
                    end
         
     | 
| 
      
 415 
     | 
    
         
            +
                    elements(Net::DNS::RR::CNAME).map(&:cname).each(&block)
         
     | 
| 
       406 
416 
     | 
    
         
             
                  end
         
     | 
| 
       407 
417 
     | 
    
         | 
| 
       408 
418 
     | 
    
         
             
                  # Iterates every pointer in the +answer+ section
         
     | 
| 
         @@ -413,10 +423,7 @@ module Net 
     | 
|
| 
       413 
423 
     | 
    
         
             
                  #   end
         
     | 
| 
       414 
424 
     | 
    
         
             
                  #
         
     | 
| 
       415 
425 
     | 
    
         
             
                  def each_ptr(&block)
         
     | 
| 
       416 
     | 
    
         
            -
                     
     | 
| 
       417 
     | 
    
         
            -
                      next unless elem.class == Net::DNS::RR::PTR
         
     | 
| 
       418 
     | 
    
         
            -
                      yield elem.ptrdname
         
     | 
| 
       419 
     | 
    
         
            -
                    end
         
     | 
| 
      
 426 
     | 
    
         
            +
                    elements(Net::DNS::RR::PTR).map(&:ptrdname).each(&block)
         
     | 
| 
       420 
427 
     | 
    
         
             
                  end
         
     | 
| 
       421 
428 
     | 
    
         | 
| 
       422 
429 
     | 
    
         
             
                  # Returns the packet size in bytes.
         
     | 
| 
         @@ -479,8 +486,6 @@ module Net 
     | 
|
| 
       479 
486 
     | 
    
         | 
| 
       480 
487 
     | 
    
         
             
                      @answerfrom = from[2] + ":" + from[1].to_s
         
     | 
| 
       481 
488 
     | 
    
         
             
                      @answersize = data.size
         
     | 
| 
       482 
     | 
    
         
            -
                      @logger = Logger.new $stdout
         
     | 
| 
       483 
     | 
    
         
            -
                      @logger.level = $DEBUG ? Logger::DEBUG : Logger::WARN
         
     | 
| 
       484 
489 
     | 
    
         | 
| 
       485 
490 
     | 
    
         
             
                      #------------------------------------------------------------
         
     | 
| 
       486 
491 
     | 
    
         
             
                      # Header section
         
     | 
| 
         @@ -488,34 +493,34 @@ module Net 
     | 
|
| 
       488 
493 
     | 
    
         
             
                      offset = Net::DNS::HFIXEDSZ
         
     | 
| 
       489 
494 
     | 
    
         
             
                      @header = Net::DNS::Header.parse(data[0..offset-1])
         
     | 
| 
       490 
495 
     | 
    
         | 
| 
       491 
     | 
    
         
            -
                       
     | 
| 
       492 
     | 
    
         
            -
                       
     | 
| 
      
 496 
     | 
    
         
            +
                      debug ";; HEADER SECTION"
         
     | 
| 
      
 497 
     | 
    
         
            +
                      debug @header.inspect
         
     | 
| 
       493 
498 
     | 
    
         | 
| 
       494 
499 
     | 
    
         
             
                      #------------------------------------------------------------
         
     | 
| 
       495 
500 
     | 
    
         
             
                      # Question section
         
     | 
| 
       496 
501 
     | 
    
         
             
                      #------------------------------------------------------------
         
     | 
| 
       497 
502 
     | 
    
         
             
                      section = @header.opCode == "UPDATE" ? "ZONE" : "QUESTION"
         
     | 
| 
       498 
     | 
    
         
            -
                       
     | 
| 
      
 503 
     | 
    
         
            +
                      debug ";; #{section} SECTION (#{@header.qdCount} record#{@header.qdCount == 1 ? '': 's'})"
         
     | 
| 
       499 
504 
     | 
    
         | 
| 
       500 
505 
     | 
    
         
             
                      @question = []
         
     | 
| 
       501 
506 
     | 
    
         
             
                      @header.qdCount.times do
         
     | 
| 
       502 
507 
     | 
    
         
             
                        qobj,offset = parse_question(data,offset)
         
     | 
| 
       503 
508 
     | 
    
         
             
                        @question << qobj
         
     | 
| 
       504 
     | 
    
         
            -
                         
     | 
| 
      
 509 
     | 
    
         
            +
                        debug ";; #{qobj.inspect}"
         
     | 
| 
       505 
510 
     | 
    
         
             
                      end
         
     | 
| 
       506 
511 
     | 
    
         | 
| 
       507 
512 
     | 
    
         
             
                      #------------------------------------------------------------
         
     | 
| 
       508 
513 
     | 
    
         
             
                      # Answer/prerequisite section
         
     | 
| 
       509 
514 
     | 
    
         
             
                      #------------------------------------------------------------
         
     | 
| 
       510 
515 
     | 
    
         
             
                      section = @header.opCode == "UPDATE" ? "PREREQUISITE" : "ANSWER"
         
     | 
| 
       511 
     | 
    
         
            -
                       
     | 
| 
      
 516 
     | 
    
         
            +
                      debug ";; #{section} SECTION (#{@header.qdCount} record#{@header.qdCount == 1 ? '': 's'})"
         
     | 
| 
       512 
517 
     | 
    
         | 
| 
       513 
518 
     | 
    
         
             
                      @answer = []
         
     | 
| 
       514 
519 
     | 
    
         
             
                      @header.anCount.times do
         
     | 
| 
       515 
520 
     | 
    
         
             
                        begin
         
     | 
| 
       516 
521 
     | 
    
         
             
                          rrobj,offset = Net::DNS::RR.parse_packet(data,offset)
         
     | 
| 
       517 
522 
     | 
    
         
             
                          @answer << rrobj
         
     | 
| 
       518 
     | 
    
         
            -
                           
     | 
| 
      
 523 
     | 
    
         
            +
                          debug rrobj.inspect
         
     | 
| 
       519 
524 
     | 
    
         
             
                        rescue NameError => e
         
     | 
| 
       520 
525 
     | 
    
         
             
                          warn "Net::DNS unsupported record type: #{e.message}"
         
     | 
| 
       521 
526 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -525,14 +530,14 @@ module Net 
     | 
|
| 
       525 
530 
     | 
    
         
             
                      # Authority/update section
         
     | 
| 
       526 
531 
     | 
    
         
             
                      #------------------------------------------------------------
         
     | 
| 
       527 
532 
     | 
    
         
             
                      section = @header.opCode == "UPDATE" ? "UPDATE" : "AUTHORITY"
         
     | 
| 
       528 
     | 
    
         
            -
                       
     | 
| 
      
 533 
     | 
    
         
            +
                      debug ";; #{section} SECTION (#{@header.nsCount} record#{@header.nsCount == 1 ? '': 's'})"
         
     | 
| 
       529 
534 
     | 
    
         | 
| 
       530 
535 
     | 
    
         
             
                      @authority = []
         
     | 
| 
       531 
536 
     | 
    
         
             
                      @header.nsCount.times do
         
     | 
| 
       532 
537 
     | 
    
         
             
                        begin
         
     | 
| 
       533 
538 
     | 
    
         
             
                          rrobj,offset = Net::DNS::RR.parse_packet(data,offset)
         
     | 
| 
       534 
539 
     | 
    
         
             
                          @authority << rrobj
         
     | 
| 
       535 
     | 
    
         
            -
                           
     | 
| 
      
 540 
     | 
    
         
            +
                          debug rrobj.inspect
         
     | 
| 
       536 
541 
     | 
    
         
             
                        rescue NameError => e
         
     | 
| 
       537 
542 
     | 
    
         
             
                          warn "Net::DNS unsupported record type: #{e.message}"
         
     | 
| 
       538 
543 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -541,14 +546,14 @@ module Net 
     | 
|
| 
       541 
546 
     | 
    
         
             
                      #------------------------------------------------------------
         
     | 
| 
       542 
547 
     | 
    
         
             
                      # Additional section
         
     | 
| 
       543 
548 
     | 
    
         
             
                      #------------------------------------------------------------
         
     | 
| 
       544 
     | 
    
         
            -
                       
     | 
| 
      
 549 
     | 
    
         
            +
                      debug ";; ADDITIONAL SECTION (#{@header.arCount} record#{@header.arCount == 1 ? '': 's'})"
         
     | 
| 
       545 
550 
     | 
    
         | 
| 
       546 
551 
     | 
    
         
             
                      @additional = []
         
     | 
| 
       547 
552 
     | 
    
         
             
                      @header.arCount.times do
         
     | 
| 
       548 
553 
     | 
    
         
             
                        begin
         
     | 
| 
       549 
554 
     | 
    
         
             
                          rrobj,offset = Net::DNS::RR.parse_packet(data,offset)
         
     | 
| 
       550 
555 
     | 
    
         
             
                          @additional << rrobj
         
     | 
| 
       551 
     | 
    
         
            -
                           
     | 
| 
      
 556 
     | 
    
         
            +
                          debug rrobj.inspect
         
     | 
| 
       552 
557 
     | 
    
         
             
                        rescue NameError => e
         
     | 
| 
       553 
558 
     | 
    
         
             
                          warn "Net::DNS unsupported record type: #{e.message}"
         
     | 
| 
       554 
559 
     | 
    
         
             
                        end
         
     | 
    
        data/lib/net/dns/resolver.rb
    CHANGED
    
    | 
         @@ -29,9 +29,6 @@ end 
     | 
|
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
            module Net
         
     | 
| 
       31 
31 
     | 
    
         
             
              module DNS
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                include Logger::Severity
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
32 
     | 
    
         
             
                # = Net::DNS::Resolver - DNS resolver class
         
     | 
| 
       36 
33 
     | 
    
         
             
                #
         
     | 
| 
       37 
34 
     | 
    
         
             
                # The Net::DNS::Resolver class implements a complete DNS resolver written
         
     | 
| 
         @@ -102,7 +99,6 @@ module Net 
     | 
|
| 
       102 
99 
     | 
    
         
             
                  # explanation of its usage.
         
     | 
| 
       103 
100 
     | 
    
         
             
                  Defaults = {
         
     | 
| 
       104 
101 
     | 
    
         
             
                    :config_file => "/etc/resolv.conf",
         
     | 
| 
       105 
     | 
    
         
            -
                    :log_file => $stdout,
         
     | 
| 
       106 
102 
     | 
    
         
             
                    :port => 53,
         
     | 
| 
       107 
103 
     | 
    
         
             
                    :searchlist => [],
         
     | 
| 
       108 
104 
     | 
    
         
             
                    :nameservers => [IPAddr.new("127.0.0.1")],
         
     | 
| 
         @@ -110,6 +106,7 @@ module Net 
     | 
|
| 
       110 
106 
     | 
    
         
             
                    :source_port => 0,
         
     | 
| 
       111 
107 
     | 
    
         
             
                    :source_address => IPAddr.new("0.0.0.0"),
         
     | 
| 
       112 
108 
     | 
    
         
             
                    :source_address_inet6 => IPAddr.new('::'),
         
     | 
| 
      
 109 
     | 
    
         
            +
                    :spoof_mac => false,
         
     | 
| 
       113 
110 
     | 
    
         
             
                    :interface => "eth0",
         
     | 
| 
       114 
111 
     | 
    
         
             
                    :retry_interval => 5,
         
     | 
| 
       115 
112 
     | 
    
         
             
                    :retry_number => 4,
         
     | 
| 
         @@ -123,6 +120,7 @@ module Net 
     | 
|
| 
       123 
120 
     | 
    
         
             
                    :udp_timeout => UdpTimeout.new(5),
         
     | 
| 
       124 
121 
     | 
    
         
             
                  }
         
     | 
| 
       125 
122 
     | 
    
         | 
| 
      
 123 
     | 
    
         
            +
                  @@logger = nil
         
     | 
| 
       126 
124 
     | 
    
         | 
| 
       127 
125 
     | 
    
         
             
                  class << self
         
     | 
| 
       128 
126 
     | 
    
         | 
| 
         @@ -246,10 +244,6 @@ module Net 
     | 
|
| 
       246 
244 
     | 
    
         
             
                    @config = Defaults.merge config
         
     | 
| 
       247 
245 
     | 
    
         
             
                    @raw = false
         
     | 
| 
       248 
246 
     | 
    
         | 
| 
       249 
     | 
    
         
            -
                    # New logger facility
         
     | 
| 
       250 
     | 
    
         
            -
                    @logger = Logger.new(@config[:log_file])
         
     | 
| 
       251 
     | 
    
         
            -
                    @logger.level = $DEBUG ? Logger::DEBUG : Logger::WARN
         
     | 
| 
       252 
     | 
    
         
            -
             
     | 
| 
       253 
247 
     | 
    
         
             
                    #------------------------------------------------------------
         
     | 
| 
       254 
248 
     | 
    
         
             
                    # Resolver configuration will be set in order from:
         
     | 
| 
       255 
249 
     | 
    
         
             
                    # 1) initialize arguments
         
     | 
| 
         @@ -274,7 +268,7 @@ module Net 
     | 
|
| 
       274 
268 
     | 
    
         
             
                    # Parsing arguments
         
     | 
| 
       275 
269 
     | 
    
         
             
                    #------------------------------------------------------------
         
     | 
| 
       276 
270 
     | 
    
         
             
                    config.each do |key,val|
         
     | 
| 
       277 
     | 
    
         
            -
                      next if key == : 
     | 
| 
      
 271 
     | 
    
         
            +
                      next if key == :config_file
         
     | 
| 
       278 
272 
     | 
    
         
             
                      begin
         
     | 
| 
       279 
273 
     | 
    
         
             
                        eval "self.#{key.to_s} = val"
         
     | 
| 
       280 
274 
     | 
    
         
             
                      rescue NoMethodError
         
     | 
| 
         @@ -283,6 +277,35 @@ module Net 
     | 
|
| 
       283 
277 
     | 
    
         
             
                    end
         
     | 
| 
       284 
278 
     | 
    
         
             
                  end
         
     | 
| 
       285 
279 
     | 
    
         | 
| 
      
 280 
     | 
    
         
            +
                  attr_accessor :spoof_mac
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
      
 282 
     | 
    
         
            +
                  def self.logger= logger
         
     | 
| 
      
 283 
     | 
    
         
            +
                    if logger.respond_to?(:warn) && logger.respond_to?(:debug) && logger.respond_to?(:info)
         
     | 
| 
      
 284 
     | 
    
         
            +
                      @@logger = logger
         
     | 
| 
      
 285 
     | 
    
         
            +
                    else
         
     | 
| 
      
 286 
     | 
    
         
            +
                      raise ArgumentError, "Invalid logger provided to #{self.class}"
         
     | 
| 
      
 287 
     | 
    
         
            +
                    end
         
     | 
| 
      
 288 
     | 
    
         
            +
                  end
         
     | 
| 
      
 289 
     | 
    
         
            +
             
     | 
| 
      
 290 
     | 
    
         
            +
                  def warn *args
         
     | 
| 
      
 291 
     | 
    
         
            +
                    if @@logger
         
     | 
| 
      
 292 
     | 
    
         
            +
                      @@logger.warn *args
         
     | 
| 
      
 293 
     | 
    
         
            +
                    end
         
     | 
| 
      
 294 
     | 
    
         
            +
                  end
         
     | 
| 
      
 295 
     | 
    
         
            +
             
     | 
| 
      
 296 
     | 
    
         
            +
                  def debug *args
         
     | 
| 
      
 297 
     | 
    
         
            +
                    if @@logger
         
     | 
| 
      
 298 
     | 
    
         
            +
                      @debug *args
         
     | 
| 
      
 299 
     | 
    
         
            +
                    end
         
     | 
| 
      
 300 
     | 
    
         
            +
                  end
         
     | 
| 
      
 301 
     | 
    
         
            +
             
     | 
| 
      
 302 
     | 
    
         
            +
                  def info *args
         
     | 
| 
      
 303 
     | 
    
         
            +
                    if @@logger
         
     | 
| 
      
 304 
     | 
    
         
            +
                      @@logger.info *args
         
     | 
| 
      
 305 
     | 
    
         
            +
                    end
         
     | 
| 
      
 306 
     | 
    
         
            +
                  end
         
     | 
| 
      
 307 
     | 
    
         
            +
             
     | 
| 
      
 308 
     | 
    
         
            +
             
     | 
| 
       286 
309 
     | 
    
         
             
                  # Get the resolver search list, returned as an array of entries.
         
     | 
| 
       287 
310 
     | 
    
         
             
                  #
         
     | 
| 
       288 
311 
     | 
    
         
             
                  #   res.searchlist
         
     | 
| 
         @@ -310,10 +333,10 @@ module Net 
     | 
|
| 
       310 
333 
     | 
    
         
             
                    case arg
         
     | 
| 
       311 
334 
     | 
    
         
             
                    when String
         
     | 
| 
       312 
335 
     | 
    
         
             
                      @config[:searchlist] = [arg] if valid? arg
         
     | 
| 
       313 
     | 
    
         
            -
                       
     | 
| 
      
 336 
     | 
    
         
            +
                      info "Searchlist changed to value #{@config[:searchlist].inspect}"
         
     | 
| 
       314 
337 
     | 
    
         
             
                    when Array
         
     | 
| 
       315 
338 
     | 
    
         
             
                      @config[:searchlist] = arg if arg.all? {|x| valid? x}
         
     | 
| 
       316 
     | 
    
         
            -
                       
     | 
| 
      
 339 
     | 
    
         
            +
                      info "Searchlist changed to value #{@config[:searchlist].inspect}"
         
     | 
| 
       317 
340 
     | 
    
         
             
                    else
         
     | 
| 
       318 
341 
     | 
    
         
             
                      raise ArgumentError, "Wrong argument format, neither String nor Array"
         
     | 
| 
       319 
342 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -346,7 +369,7 @@ module Net 
     | 
|
| 
       346 
369 
     | 
    
         
             
                  #
         
     | 
| 
       347 
370 
     | 
    
         
             
                  def nameservers=(arg)
         
     | 
| 
       348 
371 
     | 
    
         
             
                    @config[:nameservers] = convert_nameservers_arg_to_ips(arg)
         
     | 
| 
       349 
     | 
    
         
            -
                     
     | 
| 
      
 372 
     | 
    
         
            +
                    info "Nameservers list changed to value #{@config[:nameservers].inspect}"
         
     | 
| 
       350 
373 
     | 
    
         
             
                  end
         
     | 
| 
       351 
374 
     | 
    
         
             
                  alias_method("nameserver=","nameservers=")
         
     | 
| 
       352 
375 
     | 
    
         | 
| 
         @@ -368,7 +391,7 @@ module Net 
     | 
|
| 
       368 
391 
     | 
    
         
             
                  def packet_size=(arg)
         
     | 
| 
       369 
392 
     | 
    
         
             
                    if arg.respond_to? :to_i
         
     | 
| 
       370 
393 
     | 
    
         
             
                      @config[:packet_size] = arg.to_i
         
     | 
| 
       371 
     | 
    
         
            -
                       
     | 
| 
      
 394 
     | 
    
         
            +
                      info "Packet size changed to value #{@config[:packet_size].inspect}"
         
     | 
| 
       372 
395 
     | 
    
         
             
                    else
         
     | 
| 
       373 
396 
     | 
    
         
             
                      @logger.error "Packet size not set, #{arg.class} does not respond to to_i"
         
     | 
| 
       374 
397 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -392,7 +415,7 @@ module Net 
     | 
|
| 
       392 
415 
     | 
    
         
             
                  def port=(num)
         
     | 
| 
       393 
416 
     | 
    
         
             
                    if (0..65535).include? num
         
     | 
| 
       394 
417 
     | 
    
         
             
                      @config[:port] = num
         
     | 
| 
       395 
     | 
    
         
            -
                       
     | 
| 
      
 418 
     | 
    
         
            +
                      info "Port number changed to #{num}"
         
     | 
| 
       396 
419 
     | 
    
         
             
                    else
         
     | 
| 
       397 
420 
     | 
    
         
             
                      raise ArgumentError, "Wrong port number #{num}"
         
     | 
| 
       398 
421 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -479,17 +502,17 @@ module Net 
     | 
|
| 
       479 
502 
     | 
    
         | 
| 
       480 
503 
     | 
    
         
             
                    begin
         
     | 
| 
       481 
504 
     | 
    
         
             
                      port = rand(64000)+1024
         
     | 
| 
       482 
     | 
    
         
            -
                       
     | 
| 
      
 505 
     | 
    
         
            +
                      info "Try to determine state of source address #{addr} with port #{port}"
         
     | 
| 
       483 
506 
     | 
    
         
             
                      a = TCPServer.new(addr.to_s,port)
         
     | 
| 
       484 
507 
     | 
    
         
             
                    rescue SystemCallError => e
         
     | 
| 
       485 
508 
     | 
    
         
             
                      case e.errno
         
     | 
| 
       486 
509 
     | 
    
         
             
                      when 98 # Port already in use!
         
     | 
| 
       487 
     | 
    
         
            -
                         
     | 
| 
      
 510 
     | 
    
         
            +
                        info "Port already in use"
         
     | 
| 
       488 
511 
     | 
    
         
             
                        retry
         
     | 
| 
       489 
512 
     | 
    
         
             
                      when 99 # Address is not valid: raw socket
         
     | 
| 
       490 
513 
     | 
    
         
             
                        if Process.uid == 0
         
     | 
| 
       491 
514 
     | 
    
         
             
                          @raw = true
         
     | 
| 
       492 
     | 
    
         
            -
                           
     | 
| 
      
 515 
     | 
    
         
            +
                          info "Using raw sockets"
         
     | 
| 
       493 
516 
     | 
    
         
             
                        else
         
     | 
| 
       494 
517 
     | 
    
         
             
                          raise RuntimeError, "Raw sockets requested but not running as root."
         
     | 
| 
       495 
518 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -503,10 +526,10 @@ module Net 
     | 
|
| 
       503 
526 
     | 
    
         
             
                    case addr
         
     | 
| 
       504 
527 
     | 
    
         
             
                    when String
         
     | 
| 
       505 
528 
     | 
    
         
             
                      @config[:source_address] = IPAddr.new(addr)
         
     | 
| 
       506 
     | 
    
         
            -
                       
     | 
| 
      
 529 
     | 
    
         
            +
                      info "Using new source address: #{@config[:source_address]}"
         
     | 
| 
       507 
530 
     | 
    
         
             
                    when IPAddr
         
     | 
| 
       508 
531 
     | 
    
         
             
                      @config[:source_address] = addr
         
     | 
| 
       509 
     | 
    
         
            -
                       
     | 
| 
      
 532 
     | 
    
         
            +
                      info "Using new source address: #{@config[:source_address]}"
         
     | 
| 
       510 
533 
     | 
    
         
             
                    else
         
     | 
| 
       511 
534 
     | 
    
         
             
                      raise ArgumentError, "Unknown dest_address format"
         
     | 
| 
       512 
535 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -528,7 +551,7 @@ module Net 
     | 
|
| 
       528 
551 
     | 
    
         
             
                  def retry_interval=(num)
         
     | 
| 
       529 
552 
     | 
    
         
             
                    if num > 0
         
     | 
| 
       530 
553 
     | 
    
         
             
                      @config[:retry_interval] = num
         
     | 
| 
       531 
     | 
    
         
            -
                       
     | 
| 
      
 554 
     | 
    
         
            +
                      info "Retransmission interval changed to #{num} seconds"
         
     | 
| 
       532 
555 
     | 
    
         
             
                    else
         
     | 
| 
       533 
556 
     | 
    
         
             
                      raise ArgumentError, "Interval must be positive"
         
     | 
| 
       534 
557 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -548,7 +571,7 @@ module Net 
     | 
|
| 
       548 
571 
     | 
    
         
             
                  def retry_number=(num)
         
     | 
| 
       549 
572 
     | 
    
         
             
                    if num.kind_of? Integer and num > 0
         
     | 
| 
       550 
573 
     | 
    
         
             
                      @config[:retry_number] = num
         
     | 
| 
       551 
     | 
    
         
            -
                       
     | 
| 
      
 574 
     | 
    
         
            +
                      info "Retrasmissions number changed to #{num}"
         
     | 
| 
       552 
575 
     | 
    
         
             
                    else
         
     | 
| 
       553 
576 
     | 
    
         
             
                      raise ArgumentError, "Retry value must be a positive integer"
         
     | 
| 
       554 
577 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -577,7 +600,7 @@ module Net 
     | 
|
| 
       577 
600 
     | 
    
         
             
                    case bool
         
     | 
| 
       578 
601 
     | 
    
         
             
                    when TrueClass,FalseClass
         
     | 
| 
       579 
602 
     | 
    
         
             
                      @config[:recursive] = bool
         
     | 
| 
       580 
     | 
    
         
            -
                       
     | 
| 
      
 603 
     | 
    
         
            +
                      info("Recursive state changed to #{bool}")
         
     | 
| 
       581 
604 
     | 
    
         
             
                    else
         
     | 
| 
       582 
605 
     | 
    
         
             
                      raise ArgumentError, "Argument must be boolean"
         
     | 
| 
       583 
606 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -629,7 +652,7 @@ module Net 
     | 
|
| 
       629 
652 
     | 
    
         
             
                    case bool
         
     | 
| 
       630 
653 
     | 
    
         
             
                    when TrueClass,FalseClass
         
     | 
| 
       631 
654 
     | 
    
         
             
                      @config[:defname] = bool
         
     | 
| 
       632 
     | 
    
         
            -
                       
     | 
| 
      
 655 
     | 
    
         
            +
                      info("Defname state changed to #{bool}")
         
     | 
| 
       633 
656 
     | 
    
         
             
                    else
         
     | 
| 
       634 
657 
     | 
    
         
             
                      raise ArgumentError, "Argument must be boolean"
         
     | 
| 
       635 
658 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -648,7 +671,7 @@ module Net 
     | 
|
| 
       648 
671 
     | 
    
         
             
                    case bool
         
     | 
| 
       649 
672 
     | 
    
         
             
                    when TrueClass,FalseClass
         
     | 
| 
       650 
673 
     | 
    
         
             
                      @config[:dns_search] = bool
         
     | 
| 
       651 
     | 
    
         
            -
                       
     | 
| 
      
 674 
     | 
    
         
            +
                      info("DNS search state changed to #{bool}")
         
     | 
| 
       652 
675 
     | 
    
         
             
                    else
         
     | 
| 
       653 
676 
     | 
    
         
             
                      raise ArgumentError, "Argument must be boolean"
         
     | 
| 
       654 
677 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -677,7 +700,7 @@ module Net 
     | 
|
| 
       677 
700 
     | 
    
         
             
                    case bool
         
     | 
| 
       678 
701 
     | 
    
         
             
                    when TrueClass,FalseClass
         
     | 
| 
       679 
702 
     | 
    
         
             
                      @config[:use_tcp] = bool
         
     | 
| 
       680 
     | 
    
         
            -
                       
     | 
| 
      
 703 
     | 
    
         
            +
                      info("Use tcp flag changed to #{bool}")
         
     | 
| 
       681 
704 
     | 
    
         
             
                    else
         
     | 
| 
       682 
705 
     | 
    
         
             
                      raise ArgumentError, "Argument must be boolean"
         
     | 
| 
       683 
706 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -693,7 +716,7 @@ module Net 
     | 
|
| 
       693 
716 
     | 
    
         
             
                    case bool
         
     | 
| 
       694 
717 
     | 
    
         
             
                    when TrueClass,FalseClass
         
     | 
| 
       695 
718 
     | 
    
         
             
                      @config[:ignore_truncated] = bool
         
     | 
| 
       696 
     | 
    
         
            -
                       
     | 
| 
      
 719 
     | 
    
         
            +
                      info("Ignore truncated flag changed to #{bool}")
         
     | 
| 
       697 
720 
     | 
    
         
             
                    else
         
     | 
| 
       698 
721 
     | 
    
         
             
                      raise ArgumentError, "Argument must be boolean"
         
     | 
| 
       699 
722 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -729,7 +752,7 @@ module Net 
     | 
|
| 
       729 
752 
     | 
    
         
             
                  #
         
     | 
| 
       730 
753 
     | 
    
         
             
                  def tcp_timeout=(secs)
         
     | 
| 
       731 
754 
     | 
    
         
             
                    @config[:tcp_timeout] = TcpTimeout.new(secs)
         
     | 
| 
       732 
     | 
    
         
            -
                     
     | 
| 
      
 755 
     | 
    
         
            +
                    info("New TCP timeout value: #{@config[:tcp_timeout]} seconds")
         
     | 
| 
       733 
756 
     | 
    
         
             
                  end
         
     | 
| 
       734 
757 
     | 
    
         | 
| 
       735 
758 
     | 
    
         
             
                  # Return an object representing the value of the stored UDP
         
     | 
| 
         @@ -765,69 +788,7 @@ module Net 
     | 
|
| 
       765 
788 
     | 
    
         
             
                  #
         
     | 
| 
       766 
789 
     | 
    
         
             
                  def udp_timeout=(secs)
         
     | 
| 
       767 
790 
     | 
    
         
             
                    @config[:udp_timeout] = UdpTimeout.new(secs)
         
     | 
| 
       768 
     | 
    
         
            -
                     
     | 
| 
       769 
     | 
    
         
            -
                  end
         
     | 
| 
       770 
     | 
    
         
            -
             
     | 
| 
       771 
     | 
    
         
            -
                  # Set a new log file for the logger facility of the resolver
         
     | 
| 
       772 
     | 
    
         
            -
                  # class. Could be a file descriptor too:
         
     | 
| 
       773 
     | 
    
         
            -
                  #
         
     | 
| 
       774 
     | 
    
         
            -
                  #   res.log_file = $stderr
         
     | 
| 
       775 
     | 
    
         
            -
                  #
         
     | 
| 
       776 
     | 
    
         
            -
                  # Note that a new logging facility will be create, destroing
         
     | 
| 
       777 
     | 
    
         
            -
                  # the old one, which will then be impossibile to recover.
         
     | 
| 
       778 
     | 
    
         
            -
                  #
         
     | 
| 
       779 
     | 
    
         
            -
                  def log_file=(log)
         
     | 
| 
       780 
     | 
    
         
            -
                    @logger.close
         
     | 
| 
       781 
     | 
    
         
            -
                    @config[:log_file] = log
         
     | 
| 
       782 
     | 
    
         
            -
                    @logger = Logger.new(@config[:log_file])
         
     | 
| 
       783 
     | 
    
         
            -
                    @logger.level = $DEBUG ? Logger::DEBUG : Logger::WARN
         
     | 
| 
       784 
     | 
    
         
            -
                  end
         
     | 
| 
       785 
     | 
    
         
            -
             
     | 
| 
       786 
     | 
    
         
            -
                  # This one permits to have a personal logger facility to handle
         
     | 
| 
       787 
     | 
    
         
            -
                  # resolver messages, instead of new built-in one, which is set up
         
     | 
| 
       788 
     | 
    
         
            -
                  # for a +$stdout+ (or +$stderr+) use.
         
     | 
| 
       789 
     | 
    
         
            -
                  #
         
     | 
| 
       790 
     | 
    
         
            -
                  # If you want your own logging facility you can create a new instance
         
     | 
| 
       791 
     | 
    
         
            -
                  # of the +Logger+ class:
         
     | 
| 
       792 
     | 
    
         
            -
                  #
         
     | 
| 
       793 
     | 
    
         
            -
                  #   log = Logger.new("/tmp/resolver.log","weekly",2*1024*1024)
         
     | 
| 
       794 
     | 
    
         
            -
                  #   log.level = Logger::DEBUG
         
     | 
| 
       795 
     | 
    
         
            -
                  #   log.progname = "ruby_resolver"
         
     | 
| 
       796 
     | 
    
         
            -
                  #
         
     | 
| 
       797 
     | 
    
         
            -
                  # and then pass it to the resolver:
         
     | 
| 
       798 
     | 
    
         
            -
                  #
         
     | 
| 
       799 
     | 
    
         
            -
                  #   res.logger = log
         
     | 
| 
       800 
     | 
    
         
            -
                  #
         
     | 
| 
       801 
     | 
    
         
            -
                  # Note that this will destroy the precedent logger.
         
     | 
| 
       802 
     | 
    
         
            -
                  #
         
     | 
| 
       803 
     | 
    
         
            -
                  def logger=(logger)
         
     | 
| 
       804 
     | 
    
         
            -
                    if logger.kind_of? Logger
         
     | 
| 
       805 
     | 
    
         
            -
                      @logger.close
         
     | 
| 
       806 
     | 
    
         
            -
                      @logger = logger
         
     | 
| 
       807 
     | 
    
         
            -
                    else
         
     | 
| 
       808 
     | 
    
         
            -
                      raise ArgumentError, "Argument must be an instance of Logger class"
         
     | 
| 
       809 
     | 
    
         
            -
                    end
         
     | 
| 
       810 
     | 
    
         
            -
                  end
         
     | 
| 
       811 
     | 
    
         
            -
             
     | 
| 
       812 
     | 
    
         
            -
                  # Set the log level for the built-in logging facility.
         
     | 
| 
       813 
     | 
    
         
            -
                  #
         
     | 
| 
       814 
     | 
    
         
            -
                  # The log level can be one of the following:
         
     | 
| 
       815 
     | 
    
         
            -
                  #
         
     | 
| 
       816 
     | 
    
         
            -
                  # - +Net::DNS::DEBUG+
         
     | 
| 
       817 
     | 
    
         
            -
                  # - +Net::DNS::INFO+
         
     | 
| 
       818 
     | 
    
         
            -
                  # - +Net::DNS::WARN+
         
     | 
| 
       819 
     | 
    
         
            -
                  # - +Net::DNS::ERROR+
         
     | 
| 
       820 
     | 
    
         
            -
                  # - +Net::DNS::FATAL+
         
     | 
| 
       821 
     | 
    
         
            -
                  #
         
     | 
| 
       822 
     | 
    
         
            -
                  # Note that if the global variable $DEBUG is set (like when the
         
     | 
| 
       823 
     | 
    
         
            -
                  # -d switch is used at the command line) the logger level is
         
     | 
| 
       824 
     | 
    
         
            -
                  # automatically set at DEGUB.
         
     | 
| 
       825 
     | 
    
         
            -
                  #
         
     | 
| 
       826 
     | 
    
         
            -
                  # For further informations, see Logger documentation in the
         
     | 
| 
       827 
     | 
    
         
            -
                  # Ruby standard library.
         
     | 
| 
       828 
     | 
    
         
            -
                  #
         
     | 
| 
       829 
     | 
    
         
            -
                  def log_level=(level)
         
     | 
| 
       830 
     | 
    
         
            -
                    @logger.level = level
         
     | 
| 
      
 791 
     | 
    
         
            +
                    info("New UDP timeout value: #{@config[:udp_timeout]} seconds")
         
     | 
| 
       831 
792 
     | 
    
         
             
                  end
         
     | 
| 
       832 
793 
     | 
    
         | 
| 
       833 
794 
     | 
    
         
             
                  # Performs a DNS query for the given name, applying the searchlist if
         
     | 
| 
         @@ -861,7 +822,7 @@ module Net 
     | 
|
| 
       861 
822 
     | 
    
         | 
| 
       862 
823 
     | 
    
         
             
                    # If the name contains at least one dot then try it as is first.
         
     | 
| 
       863 
824 
     | 
    
         
             
                    if name.include? "."
         
     | 
| 
       864 
     | 
    
         
            -
                       
     | 
| 
      
 825 
     | 
    
         
            +
                      debug "Search(#{name},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
         
     | 
| 
       865 
826 
     | 
    
         
             
                      ans = query(name,type,cls)
         
     | 
| 
       866 
827 
     | 
    
         
             
                      return ans if ans.header.anCount > 0
         
     | 
| 
       867 
828 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -870,14 +831,14 @@ module Net 
     | 
|
| 
       870 
831 
     | 
    
         
             
                    if name !~ /\.$/ and @config[:dns_search]
         
     | 
| 
       871 
832 
     | 
    
         
             
                      @config[:searchlist].each do |domain|
         
     | 
| 
       872 
833 
     | 
    
         
             
                        newname = name + "." + domain
         
     | 
| 
       873 
     | 
    
         
            -
                         
     | 
| 
      
 834 
     | 
    
         
            +
                        debug "Search(#{newname},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
         
     | 
| 
       874 
835 
     | 
    
         
             
                        ans = query(newname,type,cls)
         
     | 
| 
       875 
836 
     | 
    
         
             
                        return ans if ans.header.anCount > 0
         
     | 
| 
       876 
837 
     | 
    
         
             
                      end
         
     | 
| 
       877 
838 
     | 
    
         
             
                    end
         
     | 
| 
       878 
839 
     | 
    
         | 
| 
       879 
840 
     | 
    
         
             
                    # Finally, if the name has no dots then try it as is.
         
     | 
| 
       880 
     | 
    
         
            -
                     
     | 
| 
      
 841 
     | 
    
         
            +
                    debug "Search(#{name},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
         
     | 
| 
       881 
842 
     | 
    
         
             
                    query(name+".",type,cls)
         
     | 
| 
       882 
843 
     | 
    
         | 
| 
       883 
844 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -915,7 +876,7 @@ module Net 
     | 
|
| 
       915 
876 
     | 
    
         
             
                      name += "." + @config[:domain]
         
     | 
| 
       916 
877 
     | 
    
         
             
                    end
         
     | 
| 
       917 
878 
     | 
    
         | 
| 
       918 
     | 
    
         
            -
                     
     | 
| 
      
 879 
     | 
    
         
            +
                    debug "Query(#{name},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
         
     | 
| 
       919 
880 
     | 
    
         | 
| 
       920 
881 
     | 
    
         
             
                    send(name,type,cls)
         
     | 
| 
       921 
882 
     | 
    
         | 
| 
         @@ -970,31 +931,31 @@ module Net 
     | 
|
| 
       970 
931 
     | 
    
         
             
                    # Choose whether use TCP, UDP or RAW
         
     | 
| 
       971 
932 
     | 
    
         
             
                    if packet_size > @config[:packet_size] # Must use TCP, either plain or raw
         
     | 
| 
       972 
933 
     | 
    
         
             
                      if @raw # Use raw sockets?
         
     | 
| 
       973 
     | 
    
         
            -
                         
     | 
| 
      
 934 
     | 
    
         
            +
                        info "Sending #{packet_size} bytes using TCP over RAW socket"
         
     | 
| 
       974 
935 
     | 
    
         
             
                        method = :send_raw_tcp
         
     | 
| 
       975 
936 
     | 
    
         
             
                      else
         
     | 
| 
       976 
     | 
    
         
            -
                         
     | 
| 
      
 937 
     | 
    
         
            +
                        info "Sending #{packet_size} bytes using TCP"
         
     | 
| 
       977 
938 
     | 
    
         
             
                        method = :query_tcp
         
     | 
| 
       978 
939 
     | 
    
         
             
                      end
         
     | 
| 
       979 
940 
     | 
    
         
             
                    else # Packet size is inside the boundaries
         
     | 
| 
       980 
941 
     | 
    
         
             
                      if @raw # Use raw sockets?
         
     | 
| 
       981 
     | 
    
         
            -
                         
     | 
| 
      
 942 
     | 
    
         
            +
                        info "Sending #{packet_size} bytes using UDP over RAW socket"
         
     | 
| 
       982 
943 
     | 
    
         
             
                        method = :send_raw_udp
         
     | 
| 
       983 
944 
     | 
    
         
             
                      elsif use_tcp? # User requested TCP
         
     | 
| 
       984 
     | 
    
         
            -
                         
     | 
| 
      
 945 
     | 
    
         
            +
                        info "Sending #{packet_size} bytes using TCP"
         
     | 
| 
       985 
946 
     | 
    
         
             
                        method = :query_tcp
         
     | 
| 
       986 
947 
     | 
    
         
             
                      else # Finally use UDP
         
     | 
| 
       987 
     | 
    
         
            -
                         
     | 
| 
      
 948 
     | 
    
         
            +
                        info "Sending #{packet_size} bytes using UDP"
         
     | 
| 
       988 
949 
     | 
    
         
             
                        method = :query_udp
         
     | 
| 
       989 
950 
     | 
    
         
             
                      end
         
     | 
| 
       990 
951 
     | 
    
         
             
                    end
         
     | 
| 
       991 
952 
     | 
    
         | 
| 
       992 
953 
     | 
    
         
             
                    if type == Net::DNS::AXFR
         
     | 
| 
       993 
954 
     | 
    
         
             
                      if @raw
         
     | 
| 
       994 
     | 
    
         
            -
                         
     | 
| 
      
 955 
     | 
    
         
            +
                        info "AXFR query, switching to TCP over RAW socket"
         
     | 
| 
       995 
956 
     | 
    
         
             
                        method = :send_raw_tcp
         
     | 
| 
       996 
957 
     | 
    
         
             
                      else
         
     | 
| 
       997 
     | 
    
         
            -
                         
     | 
| 
      
 958 
     | 
    
         
            +
                        info "AXFR query, switching to TCP"
         
     | 
| 
       998 
959 
     | 
    
         
             
                        method = :query_tcp
         
     | 
| 
       999 
960 
     | 
    
         
             
                      end
         
     | 
| 
       1000 
961 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -1013,11 +974,11 @@ module Net 
     | 
|
| 
       1013 
974 
     | 
    
         
             
                      raise NoResponseError, message
         
     | 
| 
       1014 
975 
     | 
    
         
             
                    end
         
     | 
| 
       1015 
976 
     | 
    
         | 
| 
       1016 
     | 
    
         
            -
                     
     | 
| 
      
 977 
     | 
    
         
            +
                    info "Received #{ans[0].size} bytes from #{ans[1][2]+":"+ans[1][1].to_s}"
         
     | 
| 
       1017 
978 
     | 
    
         
             
                    response = Net::DNS::Packet.parse(ans[0],ans[1])
         
     | 
| 
       1018 
979 
     | 
    
         | 
| 
       1019 
980 
     | 
    
         
             
                    if response.header.truncated? and not ignore_truncated?
         
     | 
| 
       1020 
     | 
    
         
            -
                       
     | 
| 
      
 981 
     | 
    
         
            +
                      info "Packet truncated, retrying using TCP"
         
     | 
| 
       1021 
982 
     | 
    
         
             
                      self.use_tcp = true
         
     | 
| 
       1022 
983 
     | 
    
         
             
                      begin
         
     | 
| 
       1023 
984 
     | 
    
         
             
                        return query(argument,type,cls)
         
     | 
| 
         @@ -1035,7 +996,7 @@ module Net 
     | 
|
| 
       1035 
996 
     | 
    
         
             
                  # since it is using the same infrastucture.
         
     | 
| 
       1036 
997 
     | 
    
         
             
                  #
         
     | 
| 
       1037 
998 
     | 
    
         
             
                  def axfr(name, cls = Net::DNS::IN)
         
     | 
| 
       1038 
     | 
    
         
            -
                     
     | 
| 
      
 999 
     | 
    
         
            +
                    info "Requested AXFR transfer, zone #{name} class #{cls}"
         
     | 
| 
       1039 
1000 
     | 
    
         
             
                    query(name, Net::DNS::AXFR, cls)
         
     | 
| 
       1040 
1001 
     | 
    
         
             
                  end
         
     | 
| 
       1041 
1002 
     | 
    
         | 
| 
         @@ -1173,15 +1134,15 @@ module Net 
     | 
|
| 
       1173 
1134 
     | 
    
         | 
| 
       1174 
1135 
     | 
    
         
             
                        @config[:tcp_timeout].timeout do
         
     | 
| 
       1175 
1136 
     | 
    
         
             
                          socket.connect(sockaddr)
         
     | 
| 
       1176 
     | 
    
         
            -
                           
     | 
| 
      
 1137 
     | 
    
         
            +
                          info "Contacting nameserver #{ns} port #{@config[:port]}"
         
     | 
| 
       1177 
1138 
     | 
    
         
             
                          socket.write(length+packet_data)
         
     | 
| 
       1178 
1139 
     | 
    
         
             
                          ans = socket.recv(Net::DNS::INT16SZ)
         
     | 
| 
       1179 
1140 
     | 
    
         
             
                          len = ans.unpack("n")[0]
         
     | 
| 
       1180 
1141 
     | 
    
         | 
| 
       1181 
     | 
    
         
            -
                           
     | 
| 
      
 1142 
     | 
    
         
            +
                          info "Receiving #{len} bytes..."
         
     | 
| 
       1182 
1143 
     | 
    
         | 
| 
       1183 
1144 
     | 
    
         
             
                          if len == 0
         
     | 
| 
       1184 
     | 
    
         
            -
                             
     | 
| 
      
 1145 
     | 
    
         
            +
                            info "Receiving 0 lenght packet from nameserver #{ns}, trying next."
         
     | 
| 
       1185 
1146 
     | 
    
         
             
                            next
         
     | 
| 
       1186 
1147 
     | 
    
         
             
                          end
         
     | 
| 
       1187 
1148 
     | 
    
         | 
| 
         @@ -1192,13 +1153,13 @@ module Net 
     | 
|
| 
       1192 
1153 
     | 
    
         
             
                          end
         
     | 
| 
       1193 
1154 
     | 
    
         | 
| 
       1194 
1155 
     | 
    
         
             
                          unless buffer.size == len
         
     | 
| 
       1195 
     | 
    
         
            -
                             
     | 
| 
      
 1156 
     | 
    
         
            +
                            info "Malformed packet from nameserver #{ns}, trying next."
         
     | 
| 
       1196 
1157 
     | 
    
         
             
                            next
         
     | 
| 
       1197 
1158 
     | 
    
         
             
                          end
         
     | 
| 
       1198 
1159 
     | 
    
         
             
                        end
         
     | 
| 
       1199 
1160 
     | 
    
         
             
                        return [buffer,["",@config[:port],ns.to_s,ns.to_s]]
         
     | 
| 
       1200 
1161 
     | 
    
         
             
                      rescue TimeoutError
         
     | 
| 
       1201 
     | 
    
         
            -
                         
     | 
| 
      
 1162 
     | 
    
         
            +
                        info "Nameserver #{ns} not responding within TCP timeout, trying next one"
         
     | 
| 
       1202 
1163 
     | 
    
         
             
                        next
         
     | 
| 
       1203 
1164 
     | 
    
         
             
                      ensure
         
     | 
| 
       1204 
1165 
     | 
    
         
             
                        socket.close
         
     | 
| 
         @@ -1220,7 +1181,7 @@ module Net 
     | 
|
| 
       1220 
1181 
     | 
    
         
             
                    @config[:nameservers].each do |ns|
         
     | 
| 
       1221 
1182 
     | 
    
         
             
                      begin
         
     | 
| 
       1222 
1183 
     | 
    
         
             
                        @config[:udp_timeout].timeout do
         
     | 
| 
       1223 
     | 
    
         
            -
                           
     | 
| 
      
 1184 
     | 
    
         
            +
                          info "Contacting nameserver #{ns} port #{@config[:port]}"
         
     | 
| 
       1224 
1185 
     | 
    
         
             
                          ans = if ns.ipv6?
         
     | 
| 
       1225 
1186 
     | 
    
         
             
                            socket6.send(packet_data, 0, ns.to_s, @config[:port])
         
     | 
| 
       1226 
1187 
     | 
    
         
             
                            socket6.recvfrom(@config[:packet_size])
         
     | 
| 
         @@ -1231,7 +1192,7 @@ module Net 
     | 
|
| 
       1231 
1192 
     | 
    
         
             
                        end
         
     | 
| 
       1232 
1193 
     | 
    
         
             
                        break if ans
         
     | 
| 
       1233 
1194 
     | 
    
         
             
                      rescue TimeoutError
         
     | 
| 
       1234 
     | 
    
         
            -
                         
     | 
| 
      
 1195 
     | 
    
         
            +
                        info "Nameserver #{ns} not responding within UDP timeout, trying next one"
         
     | 
| 
       1235 
1196 
     | 
    
         
             
                        next
         
     | 
| 
       1236 
1197 
     | 
    
         
             
                      end
         
     | 
| 
       1237 
1198 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -1248,13 +1209,17 @@ module Net 
     | 
|
| 
       1248 
1209 
     | 
    
         
             
                      octet.read_quad @config[:source_address].to_s
         
     | 
| 
       1249 
1210 
     | 
    
         
             
                      packet.ip_src = octet
         
     | 
| 
       1250 
1211 
     | 
    
         
             
                      packet.udp_src =rand(0xffff-1024) + 1024
         
     | 
| 
       1251 
     | 
    
         
            -
                       
     | 
| 
      
 1212 
     | 
    
         
            +
                      if @config[:spoof_mac]
         
     | 
| 
      
 1213 
     | 
    
         
            +
                        packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address].to_s, {iface: @config[:interface]})
         
     | 
| 
      
 1214 
     | 
    
         
            +
                      end
         
     | 
| 
       1252 
1215 
     | 
    
         
             
                    elsif @config[:source_address_inet6]
         
     | 
| 
       1253 
1216 
     | 
    
         
             
                      octet = PacketFu::Octets.new
         
     | 
| 
       1254 
1217 
     | 
    
         
             
                      octet.read_quad @config[:source_address_inet6].to_s
         
     | 
| 
       1255 
1218 
     | 
    
         
             
                      packet.ip_src = octet
         
     | 
| 
       1256 
1219 
     | 
    
         
             
                      packet.udp_src = @config[:source_address_inet6].to_i
         
     | 
| 
       1257 
     | 
    
         
            -
                       
     | 
| 
      
 1220 
     | 
    
         
            +
                      if @config[:spoof_mac]
         
     | 
| 
      
 1221 
     | 
    
         
            +
                        packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address_inet6].to_s, {iface: @config[:interface]})
         
     | 
| 
      
 1222 
     | 
    
         
            +
                      end
         
     | 
| 
       1258 
1223 
     | 
    
         
             
                    else
         
     | 
| 
       1259 
1224 
     | 
    
         
             
                      raise ArgumentError, "No source address specified, cannot send"
         
     | 
| 
       1260 
1225 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -1281,13 +1246,17 @@ module Net 
     | 
|
| 
       1281 
1246 
     | 
    
         
             
                      octet.read_quad @config[:source_address].to_s
         
     | 
| 
       1282 
1247 
     | 
    
         
             
                      packet.ip_src = octet
         
     | 
| 
       1283 
1248 
     | 
    
         
             
                      packet.udp_src =rand(0xffff-1024) + 1024
         
     | 
| 
       1284 
     | 
    
         
            -
                       
     | 
| 
      
 1249 
     | 
    
         
            +
                      if @config[:spoof_mac]
         
     | 
| 
      
 1250 
     | 
    
         
            +
                        packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address].to_s, {iface: @config[:interface]})
         
     | 
| 
      
 1251 
     | 
    
         
            +
                      end
         
     | 
| 
       1285 
1252 
     | 
    
         
             
                    elsif @config[:source_address_inet6]
         
     | 
| 
       1286 
1253 
     | 
    
         
             
                      octet = PacketFu::Octets.new
         
     | 
| 
       1287 
1254 
     | 
    
         
             
                      octet.read_quad @config[:source_address_inet6].to_s
         
     | 
| 
       1288 
1255 
     | 
    
         
             
                      packet.ip_src = octet
         
     | 
| 
       1289 
1256 
     | 
    
         
             
                      packet.udp_src = @config[:source_address_inet6].to_i
         
     | 
| 
       1290 
     | 
    
         
            -
                       
     | 
| 
      
 1257 
     | 
    
         
            +
                      if @config[:spoof_mac]
         
     | 
| 
      
 1258 
     | 
    
         
            +
                        packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address_inet6].to_s, {iface: @config[:interface]})
         
     | 
| 
      
 1259 
     | 
    
         
            +
                      end
         
     | 
| 
       1291 
1260 
     | 
    
         
             
                    else
         
     | 
| 
       1292 
1261 
     | 
    
         
             
                      raise ArgumentError, "No source address specified, cannot send"
         
     | 
| 
       1293 
1262 
     | 
    
         
             
                    end
         
     | 
    
        data/net-dns.gemspec
    CHANGED
    
    | 
         @@ -1,12 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- encoding: utf-8 -*-
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require 'date'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       4 
6 
     | 
    
         
             
              s.name = "net-dns2"
         
     | 
| 
       5 
     | 
    
         
            -
              s.version = "0.8. 
     | 
| 
      
 7 
     | 
    
         
            +
              s.version = "0.8.5"
         
     | 
| 
       6 
8 
     | 
    
         | 
| 
       7 
9 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       8 
10 
     | 
    
         
             
              s.authors = ["Marco Ceresa", "Simone Carletti", "Christopher Carpenter"]
         
     | 
| 
       9 
     | 
    
         
            -
              s.date =  
     | 
| 
      
 11 
     | 
    
         
            +
              s.date = Date.today.to_s
         
     | 
| 
       10 
12 
     | 
    
         
             
              s.description = "Net::DNS is a pure Ruby DNS library, with a clean OO interface and an extensible API. The net-dns2 ruby gem is an actively maintained fork of the original net-dns."
         
     | 
| 
       11 
13 
     | 
    
         
             
              s.email = "mordocai@mordocai.net"
         
     | 
| 
       12 
14 
     | 
    
         
             
              s.files = [
         
     | 
| 
         @@ -26,11 +28,6 @@ Gem::Specification.new do |s| 
     | 
|
| 
       26 
28 
     | 
    
         
             
              s.homepage = "http://github.com/mordocai/net-dns"
         
     | 
| 
       27 
29 
     | 
    
         
             
              s.require_paths = ["lib"]
         
     | 
| 
       28 
30 
     | 
    
         
             
              s.summary = "Pure Ruby DNS library, fork with fixes."
         
     | 
| 
       29 
     | 
    
         
            -
            #  s.test_files = [
         
     | 
| 
       30 
     | 
    
         
            -
            #    "spec/fixtures/resolv.conf", "spec/resolver_spec.rb", "spec/spec_helper.rb",
         
     | 
| 
       31 
     | 
    
         
            -
            #    "spec/unit/resolver/dns_timeout_spec.rb", "spec/unit/tcp_timeout_spec.rb",
         
     | 
| 
       32 
     | 
    
         
            -
            #    "spec/unit/udp_timeout_spec.rb"
         
     | 
| 
       33 
     | 
    
         
            -
            #  ]
         
     | 
| 
       34 
31 
     | 
    
         
             
              s.required_ruby_version = Gem::Requirement.new(">= 1.9.2")
         
     | 
| 
       35 
32 
     | 
    
         
             
              s.license = 'Ruby'
         
     | 
| 
       36 
33 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: net-dns2
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.8. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.8.5
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Marco Ceresa
         
     | 
| 
         @@ -10,62 +10,62 @@ authors: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       11 
11 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       12 
12 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       13 
     | 
    
         
            -
            date: 2014- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2014-08-28 00:00:00.000000000 Z
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies:
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       16 
16 
     | 
    
         
             
              name: rake
         
     | 
| 
       17 
17 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       18 
18 
     | 
    
         
             
                requirements:
         
     | 
| 
       19 
     | 
    
         
            -
                - -  
     | 
| 
      
 19 
     | 
    
         
            +
                - - ~>
         
     | 
| 
       20 
20 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       21 
21 
     | 
    
         
             
                    version: '10.0'
         
     | 
| 
       22 
22 
     | 
    
         
             
              type: :development
         
     | 
| 
       23 
23 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
24 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       25 
25 
     | 
    
         
             
                requirements:
         
     | 
| 
       26 
     | 
    
         
            -
                - -  
     | 
| 
      
 26 
     | 
    
         
            +
                - - ~>
         
     | 
| 
       27 
27 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       28 
28 
     | 
    
         
             
                    version: '10.0'
         
     | 
| 
       29 
29 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       30 
30 
     | 
    
         
             
              name: yard
         
     | 
| 
       31 
31 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       32 
32 
     | 
    
         
             
                requirements:
         
     | 
| 
       33 
     | 
    
         
            -
                - -  
     | 
| 
      
 33 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
       34 
34 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       35 
35 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       36 
36 
     | 
    
         
             
              type: :development
         
     | 
| 
       37 
37 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       38 
38 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       39 
39 
     | 
    
         
             
                requirements:
         
     | 
| 
       40 
     | 
    
         
            -
                - -  
     | 
| 
      
 40 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
       41 
41 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       42 
42 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       43 
43 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       44 
44 
     | 
    
         
             
              name: rspec
         
     | 
| 
       45 
45 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       46 
46 
     | 
    
         
             
                requirements:
         
     | 
| 
       47 
     | 
    
         
            -
                - -  
     | 
| 
      
 47 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
       48 
48 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       49 
49 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       50 
50 
     | 
    
         
             
              type: :development
         
     | 
| 
       51 
51 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       52 
52 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       53 
53 
     | 
    
         
             
                requirements:
         
     | 
| 
       54 
     | 
    
         
            -
                - -  
     | 
| 
      
 54 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
       55 
55 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       56 
56 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       57 
57 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       58 
58 
     | 
    
         
             
              name: packetfu
         
     | 
| 
       59 
59 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       60 
60 
     | 
    
         
             
                requirements:
         
     | 
| 
       61 
     | 
    
         
            -
                - -  
     | 
| 
      
 61 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
       62 
62 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       63 
63 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       64 
64 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       65 
65 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       66 
66 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       67 
67 
     | 
    
         
             
                requirements:
         
     | 
| 
       68 
     | 
    
         
            -
                - -  
     | 
| 
      
 68 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
       69 
69 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       70 
70 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       71 
71 
     | 
    
         
             
            description: Net::DNS is a pure Ruby DNS library, with a clean OO interface and an
         
     | 
| 
         @@ -76,8 +76,8 @@ executables: [] 
     | 
|
| 
       76 
76 
     | 
    
         
             
            extensions: []
         
     | 
| 
       77 
77 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       78 
78 
     | 
    
         
             
            files:
         
     | 
| 
       79 
     | 
    
         
            -
            -  
     | 
| 
       80 
     | 
    
         
            -
            -  
     | 
| 
      
 79 
     | 
    
         
            +
            - .gitignore
         
     | 
| 
      
 80 
     | 
    
         
            +
            - .travis.yml
         
     | 
| 
       81 
81 
     | 
    
         
             
            - CHANGELOG.md
         
     | 
| 
       82 
82 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       83 
83 
     | 
    
         
             
            - README.md
         
     | 
| 
         @@ -122,17 +122,17 @@ require_paths: 
     | 
|
| 
       122 
122 
     | 
    
         
             
            - lib
         
     | 
| 
       123 
123 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
       124 
124 
     | 
    
         
             
              requirements:
         
     | 
| 
       125 
     | 
    
         
            -
              - -  
     | 
| 
      
 125 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
       126 
126 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       127 
127 
     | 
    
         
             
                  version: 1.9.2
         
     | 
| 
       128 
128 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       129 
129 
     | 
    
         
             
              requirements:
         
     | 
| 
       130 
     | 
    
         
            -
              - -  
     | 
| 
      
 130 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
       131 
131 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       132 
132 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       133 
133 
     | 
    
         
             
            requirements: []
         
     | 
| 
       134 
134 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       135 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 135 
     | 
    
         
            +
            rubygems_version: 2.2.2
         
     | 
| 
       136 
136 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       137 
137 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       138 
138 
     | 
    
         
             
            summary: Pure Ruby DNS library, fork with fixes.
         
     |