New Upstream Release - dnsruby

Ready changes

Summary

Merged new upstream version: 1.70.0 (was: 1.61.9).

Resulting package

Built on 2023-06-09T00:20 (took 4m17s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases ruby-dnsruby

Lintian Result

Diff

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..bb78947
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,23 @@
+name: CI
+
+on: [push, pull_request]
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        ruby: [ '2.6', '2.7', '3.0', '3.1', '3.2' ] # , 'ruby-head' ]
+    name: Ruby ${{ matrix.ruby }} tests
+    steps:
+      - uses: actions/checkout@v2
+      - name: Setup Ruby
+        uses: ruby/setup-ruby@v1
+        with:
+          ruby-version: ${{ matrix.ruby }}
+      - name: Bundle install
+        run: |
+          gem install bundler
+          bundle install --jobs 4 --retry 3
+      - name: Run tests
+        run: bundle exec rake test
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 2c757c5..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-language: ruby
-cache: bundler
-sudo: false
-
-before_install: gem install bundler
-
-script: "bundle exec rake test"
-
-rvm:
-  - 2.6.6
-  - 2.5.8
-  - 2.7.1
-  - ruby-head
-
-matrix:
-  allow_failures:
-    - rvm: ruby-head
diff --git a/README.md b/README.md
index dadba2d..1b5b706 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[![Build Status](https://travis-ci.org/alexdalitz/dnsruby.svg?branch=master)](https://travis-ci.org/alexdalitz/dnsruby)
+[![Build Status](https://github.com/alexdalitz/dnsruby/actions/workflows/ci.yml/badge.svg)]
 [![Coverage Status](https://img.shields.io/coveralls/alexdalitz/dnsruby.svg)](https://coveralls.io/r/alexdalitz/dnsruby?branch=master)
 
 <img src="http://caerkettontech.com/dnsruby/DNSRuby-colour-mid.png" width="200" height="200" />
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index ae8baf2..41cdf2e 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,5 +1,32 @@
 # Release Notes
 
+## v.1.70.0
+
+* OpenSSL 3 support
+* Resource record hashes no longer include the rdata
+* Removed requite to title-cased Digest - thanks jhawthron
+
+## v.1.61.9
+
+* Remove unused net-ftp dependency
+
+## v.1.61.8
+
+* Fix compatability with Ruby 3.1 - thanks @byroot Jean Boussier
+* Get the digdlv demo to enable dnssec
+
+## v1.61.7
+
+* Fix namespace issue from v1.61.6
+
+## v1.61.6
+
+* RD bit not set on Recursor queries (thanks Sean Dilda!)
+* Handle quoted strings followed by unquoted strings in TXT records
+* do not worry about rogue repeated Ids - just log an error and get on with life
+* Clear Ruby warnings
+* Use GitHub Actions rather than Travis
+
 ## v1.61.5
 
 * CAA record fixes - add contactphone and contactemail
diff --git a/debian/changelog b/debian/changelog
index fade874..71cfb45 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,11 @@
-dnsruby (1.61.5-4) UNRELEASED; urgency=medium
+dnsruby (1.70.0-1) UNRELEASED; urgency=medium
 
   * Update standards version to 4.6.0, no changes needed.
   * Update standards version to 4.6.1, no changes needed.
+  * New upstream release.
+  * New upstream release.
 
- -- Debian Janitor <janitor@jelmer.uk>  Tue, 30 Aug 2022 01:42:28 -0000
+ -- Debian Janitor <janitor@jelmer.uk>  Fri, 09 Jun 2023 00:16:47 -0000
 
 dnsruby (1.61.5-3) unstable; urgency=medium
 
diff --git a/demo/digdlv.rb b/demo/digdlv.rb
index b7ff77c..19bb28a 100755
--- a/demo/digdlv.rb
+++ b/demo/digdlv.rb
@@ -53,6 +53,7 @@ unless (1..3).include?(ARGV.length)
 end
 
 resolver = Dnsruby::Recursor.new
+resolver.dnssec = true
 zone_transfer = Dnsruby::ZoneTransfer.new
 
 dlv_key = Dnsruby::RR.create("dlv.isc.org. IN DNSKEY 257 3 5 BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWEn4MxDCE1+lLy2 brhQv5rN32RKtMzX6Mj70jdzeND4XknW58dnJNPCxn8+jAGl2FZLK8t+ 1uq4W+nnA3qO2+DL+k6BD4mewMLbIYFwe0PG73Te9fZ2kJb56dhgMde5 ymX4BI/oQ+cAK50/xvJv00Frf8kw6ucMTwFlgPe+jnGxPPEmHAte/URk Y62ZfkLoBAADLHQ9IrS2tryAe7mbBZVcOwIeU/Rw/mRx/vwwMCTgNboM QKtUdvNXDrYJDSHZws3xiRXF1Rf+al9UmZfSav/4NWLKjHzpT59k/VSt TDN0YUuWrBNh")
diff --git a/demo/rubydig.rb b/demo/rubydig.rb
index 1b51eef..03995a0 100755
--- a/demo/rubydig.rb
+++ b/demo/rubydig.rb
@@ -50,7 +50,6 @@ require 'dnsruby'
 
 
 resolver = Dnsruby::Resolver.new
-Dnsruby::TheLog.level = Logger::DEBUG
 zone_transfer = Dnsruby::ZoneTransfer.new
 
 
diff --git a/dnsruby.gemspec b/dnsruby.gemspec
index 437bfdf..3367e7f 100644
--- a/dnsruby.gemspec
+++ b/dnsruby.gemspec
@@ -35,17 +35,17 @@ DNSSEC NSEC3 support.'
     'source_code_uri'   => 'https://github.com/alexdalitz/dnsruby',
   }
 
-  s.add_development_dependency 'rake', '>= 12.3.3'
-  s.add_development_dependency 'minitest', '~> 5.4'
-  s.add_development_dependency 'rubydns', '~> 2.0.1'
-  s.add_development_dependency 'nio4r', '~> 2.0'
-  s.add_development_dependency 'minitest-display', '>= 0.3.0'
-  s.add_development_dependency('yard', '~> 0.9')
+  s.add_development_dependency 'rake', '>= 13.0.6'
+  s.add_development_dependency 'minitest', '~> 5.18.0'
+  s.add_development_dependency 'rubydns', '>= 2.0.2'
+  s.add_development_dependency 'nio4r', '>= 2.5.8'
+  s.add_development_dependency 'minitest-display', '>= 0.3.1'
+  s.add_development_dependency('yard', '>= 0.9')
+  # s.add_development_dependency('io-event', '>=1.1.7')
 
   if RUBY_VERSION >= "1.9.3"
-    s.add_development_dependency 'coveralls', '~> 0.7'
+    s.add_development_dependency 'coveralls', '~> 0.8.23'
   end
 
-  s.add_runtime_dependency 'simpleidn', '~> 0.1'
+  s.add_runtime_dependency 'simpleidn', '~> 0.2.1'
 end
-
diff --git a/lib/dnsruby.rb b/lib/dnsruby.rb
index ba0b7ee..867506b 100644
--- a/lib/dnsruby.rb
+++ b/lib/dnsruby.rb
@@ -25,10 +25,6 @@ require 'dnsruby/DNS'
 require 'dnsruby/hosts'
 require 'dnsruby/update'
 require 'dnsruby/zone_transfer'
-require 'dnsruby/dnssec'
-require 'dnsruby/zone_reader'
-require 'dnsruby/resolv'
-
 
 # = Dnsruby library
 # Dnsruby is a thread-aware DNS stub resolver library written in Ruby.
@@ -239,3 +235,7 @@ module Dnsruby
   class ZoneSerialError < ResolvError
   end
 end
+
+require 'dnsruby/dnssec'
+require 'dnsruby/zone_reader'
+require 'dnsruby/resolv'
\ No newline at end of file
diff --git a/lib/dnsruby/DNS.rb b/lib/dnsruby/DNS.rb
index 64fe10a..9e62ded 100644
--- a/lib/dnsruby/DNS.rb
+++ b/lib/dnsruby/DNS.rb
@@ -290,7 +290,7 @@ module Dnsruby
         msg.do_caching = do_caching
         @resolver.do_validation = false
         @resolver.send_async(msg, q)
-        id, ret, exception = q.pop
+        _id, ret, exception = q.pop
         if (exception == nil && ret && ret.rcode == RCode.NOERROR)
           return ret, ret.question[0].qname
         end
diff --git a/lib/dnsruby/config.rb b/lib/dnsruby/config.rb
index 102a4c4..359a46d 100644
--- a/lib/dnsruby/config.rb
+++ b/lib/dnsruby/config.rb
@@ -85,13 +85,10 @@ module Dnsruby
     def initialize()
       @mutex = Mutex.new
       @configured = false
-      #       parse_config
     end
     #  Reset the config to default values
     def Config.reset
-      c = Config.new
       @configured = false
-      #       c.parse_config
     end
 
     def parse_config(config_info=nil) #:nodoc: all
@@ -207,13 +204,13 @@ module Dnsruby
         if (String ===n)
           #  Make sure we can make a Name or an address from it
           begin
-            a = IPv4.create(n)
+            IPv4.create(n)
           rescue ArgumentError
             begin
-              a = IPv6.create(n)
+              IPv6.create(n)
             rescue ArgumentError
               begin
-                a = Name.create(n)
+                Name.create(n)
               rescue ArgumentError
                 raise ArgumentError.new("Can't interpret #{n} as IPv4, IPv6 or Name")
               end
@@ -303,7 +300,7 @@ module Dnsruby
             end
           rescue Exception => e
             Dnsruby.log.error{"Can't make sense of nameserver : #{server}, exception : #{e}"}
-                         raise ArgumentError.new("Can't make sense of nameserver : #{server}, exception : #{e}")
+            raise ArgumentError.new("Can't make sense of nameserver : #{server}, exception : #{e}")
             return nil
           end
         end
diff --git a/lib/dnsruby/dnssec.rb b/lib/dnsruby/dnssec.rb
index 23a37cb..2b923d1 100644
--- a/lib/dnsruby/dnssec.rb
+++ b/lib/dnsruby/dnssec.rb
@@ -14,7 +14,6 @@
 # limitations under the License.
 # ++
 require 'digest/sha2'
-require 'net/ftp'
 require 'dnsruby/key_cache'
 require 'dnsruby/single_verifier'
 module Dnsruby
diff --git a/lib/dnsruby/message/encoder.rb b/lib/dnsruby/message/encoder.rb
index fd0a58c..c031816 100644
--- a/lib/dnsruby/message/encoder.rb
+++ b/lib/dnsruby/message/encoder.rb
@@ -17,7 +17,7 @@ class MessageEncoder #:nodoc: all
   def put_pack(template, *d)
     begin
       @data << d.pack(template)
-    rescue Encoding::CompatibilityError => e
+    rescue Encoding::CompatibilityError
       raise Dnsruby::EncodeError.new("IDN support currently requires punycode string")
     end
   end
@@ -35,7 +35,7 @@ class MessageEncoder #:nodoc: all
     begin
       self.put_pack("C", d.length)
       @data << d
-    rescue Encoding::CompatibilityError => e
+    rescue Encoding::CompatibilityError
       raise Dnsruby::EncodeError.new("IDN support currently requires punycode string")
     end
   end
diff --git a/lib/dnsruby/message/header.rb b/lib/dnsruby/message/header.rb
index 1e37080..a3c5780 100644
--- a/lib/dnsruby/message/header.rb
+++ b/lib/dnsruby/message/header.rb
@@ -31,9 +31,6 @@ class Header
   #  and is allowed to set the bit by policy.)
   attr_accessor :ad
 
-  #  The query response flag
-  attr_accessor :qr
-
   #  Recursion available flag
   attr_accessor :ra
 
diff --git a/lib/dnsruby/name.rb b/lib/dnsruby/name.rb
index 74a642b..e059467 100644
--- a/lib/dnsruby/name.rb
+++ b/lib/dnsruby/name.rb
@@ -259,7 +259,7 @@ module Dnsruby
     #  in: dName a string with a domain name in presentation format (1035
     #  sect 5.1)
     #  out: an array of labels in wire format.
-    def self.name2encodedlabels (dName) #:nodoc: all
+    def self.name2encodedlabels(dName) #:nodoc: all
       #  Check for "\" in the name  : If there, then decode properly - otherwise, cheat and split on "."
       if (dName.index("\\"))
         names=[]
diff --git a/lib/dnsruby/packet_sender.rb b/lib/dnsruby/packet_sender.rb
index e3dfe79..ab6ab0d 100644
--- a/lib/dnsruby/packet_sender.rb
+++ b/lib/dnsruby/packet_sender.rb
@@ -204,26 +204,22 @@ module Dnsruby
       @tcp_pipelining_max_queries = :infinite
       @use_counts = {}
 
-      if (arg==nil)
-        #  Get default config
-        config = Config.new
-        #         @server = config.nameserver[0]
-      elsif (arg.kind_of? String)
-        @server=arg
-      elsif (arg.kind_of? Name)
-        @server=arg
-      elsif (arg.kind_of? Hash)
+      if arg.nil?
+      elsif arg.kind_of? String
+        @server = arg
+      elsif arg.kind_of? Name
+        @server = arg
+      elsif arg.kind_of? Hash
         arg.keys.each do |attr|
           begin
-            if (((attr.to_s == "src_address")||(attr.to_s == "src_address6")) &&
-                ((arg[attr] == nil) || (arg[attr] == "")))
+            if ((attr.to_s == "src_address" || attr.to_s == "src_address6") &&
+                (arg[attr] == nil || arg[attr] == ""))
             else
-              send(attr.to_s+"=", arg[attr])
+              send(attr.to_s + "=", arg[attr])
             end
           rescue Exception => e
             Dnsruby.log.error { "PacketSender : Argument #{attr}, #{arg[attr]} not valid : #{e}\n" }
           end
-          #         end
         end
       end
       # Check server is IP
@@ -235,12 +231,12 @@ module Dnsruby
 
     def check_ipv6
       begin
-        i = IPv4.create(@server)
+        IPv4.create(@server)
         #         @src_address = '0.0.0.0'
         @ipv6=false
       rescue Exception
         begin
-          i = IPv6.create(@server)
+          IPv6.create(@server)
           #           @src_address6 = '::'
           @ipv6=true
         rescue Exception
diff --git a/lib/dnsruby/recursor.rb b/lib/dnsruby/recursor.rb
index e161f6e..d4f6351 100644
--- a/lib/dnsruby/recursor.rb
+++ b/lib/dnsruby/recursor.rb
@@ -227,7 +227,7 @@ module Dnsruby
       #  Nice idea.
 
       #       if (!@@hints || @@hints.length == 0)
-      resolver.recurse=(1)
+      resolver.recurse = true
       packet=resolver.query_no_validation_or_recursion(".", "NS", "IN")
       hints = Hash.new
       if (packet)
@@ -264,7 +264,7 @@ module Dnsruby
               }
             }
             (hints.length * 2).times {
-              id, result, error = q.pop
+              _id, result, _error = q.pop
               if (result)
                 result.answer.each {|rr|
                   TheLog.debug(";; NS address: " + rr.inspect+"\n")
@@ -303,7 +303,7 @@ module Dnsruby
       end
 
       #  Disable recursion flag.
-      resolver.recurse=(0)
+      resolver.recurse = false
       #       end
 
       #   return $self->nameservers( map { @{ $_ } } values %{ $self->{'hints'} } );
@@ -406,7 +406,7 @@ module Dnsruby
       @@mutex.synchronize {
         self.hints=(Hash.new) unless @@hints
       }
-      @resolver.recurse=(0)
+      @resolver.recurse = false
       #  Make sure the authority cache is clean.
       #  It is only used to store A and AAAA records of
       #  the suposedly authoritative name servers.
@@ -622,6 +622,7 @@ module Dnsruby
       end
       resolver = Resolver.new({:nameserver=>nameservers})
       resolver.dnssec = @dnssec
+      resolver.recurse = false
       servers = []
       resolver.single_resolvers.each {|s|
         servers.push(s.server)
@@ -638,7 +639,7 @@ module Dnsruby
         packet = resolver.send_message(query)
         #  @TODO@ Now prune unrelated RRSets (RFC 5452 section 6)
         prune_rrsets_to_rfc5452(packet, known_zone)
-      rescue ResolvTimeout, IOError => e
+      rescue ResolvTimeout, IOError
         #             TheLog.debug(";; nameserver #{levelns.to_s} didn't respond")
         #             next
         TheLog.debug("No response!")
diff --git a/lib/dnsruby/resolver.rb b/lib/dnsruby/resolver.rb
index fa971ff..f97fe29 100644
--- a/lib/dnsruby/resolver.rb
+++ b/lib/dnsruby/resolver.rb
@@ -128,7 +128,9 @@ module Dnsruby
     #  The current Config
     attr_reader :config
 
-    #  Does this Resolver cache answers, and attempt to retrieve answer from the cache?
+    #  Defines whether we will cache responses, or pass every request to the
+    #  upstream resolver.  This is only really useful when querying authoritative
+    #  servers (as the upstream recursive resolver is likely to cache)
     attr_reader :do_caching
 
     #  The array of SingleResolvers used for sending query messages
@@ -171,11 +173,6 @@ module Dnsruby
     #  requirements.
     attr_accessor :do_validation
 
-    #  Defines whether we will cache responses, or pass every request to the
-    #  upstream resolver.  This is only really useful when querying authoritative
-    #  servers (as the upstream recursive resolver is likely to cache)
-    attr_accessor :do_caching
-
     #  --
     #  @TODO@ add load_balance? i.e. Target nameservers in a random, rather than pre-determined, order?
     #  This is best done when configuring the Resolver, as it will re-order servers based on their response times.
@@ -568,7 +565,7 @@ module Dnsruby
     def add_server(server)# :nodoc:
       @configured = true
       res = PacketSender.new(server)
-      log_and_raise("Can't create server #{server}", ArgumentError) unless res
+      Dnsruby.log_and_raise("Can't create server #{server}", ArgumentError) unless res
       update_internal_res(res)
       @single_res_mutex.synchronize { @single_resolvers.push(res) }
     end
@@ -644,7 +641,7 @@ module Dnsruby
         a = Resolver.get_ports_from(p)
         a.each do |x|
           if (@src_port.length > 0) && (x == 0)
-            log_and_raise("src_port of 0 only allowed as only src_port value (currently #{@src_port.length} values",
+            Dnsruby.log_and_raise("src_port of 0 only allowed as only src_port value (currently #{@src_port.length} values",
                 ArgumentError)
           end
           @src_port.push(x)
@@ -668,7 +665,7 @@ module Dnsruby
         return ! ((p == 0) && (src_port.length > 0))
       else
         Dnsruby.log.error("Illegal port (#{p})")
-        log_and_raise("Illegal port #{p}", ArgumentError)
+        Dnsruby.log_and_raise("Illegal port #{p}", ArgumentError)
       end
     end
 
@@ -837,7 +834,7 @@ module Dnsruby
             timeouts[base + offset]=[res, retry_count]
           else
             if timeouts.has_key?(base + retry_delay + offset)
-              log_and_raise('Duplicate timeout key!')
+              Dnsruby.log_and_raise('Duplicate timeout key!')
             end
             timeouts[base + retry_delay + offset]=[res, retry_count]
           end
@@ -878,7 +875,7 @@ module Dnsruby
       end
 
       unless client_queue.kind_of?(Queue)
-        log_and_raise('Wrong type for client_queue in Resolver# send_async')
+        Dnsruby.log_and_raise('Wrong type for client_queue in Resolver# send_async')
         #  @TODO@ Handle different queue tuples - push this to generic send_error method
         client_queue.push([client_query_id, ArgumentError.new('Wrong type of client_queue passed to Dnsruby::Resolver# send_async - should have been Queue, was #{client_queue.class}')])
         return
@@ -1059,13 +1056,13 @@ module Dnsruby
       #  @TODO@ Also, should have option to speak only to configured resolvers (not follow authoritative chain)
       #
       if queue.empty?
-        log_and_raise('Severe internal error - Queue empty in handle_queue_event')
+        Dnsruby.log_and_raise('Severe internal error - Queue empty in handle_queue_event')
       end
       event_id, event_type, response, error = queue.pop
       #  We should remove this packet from the list of outstanding packets for this query
       _resolver, _msg, client_query_id, _retry_count = id
       if id != event_id
-        log_and_raise("Serious internal error!! #{id} expected, #{event_id} received")
+        Dnsruby.log_and_raise("Serious internal error!! #{id} expected, #{event_id} received")
       end
       #       @mutex.synchronize{
       @parent.single_res_mutex.synchronize {
@@ -1078,7 +1075,7 @@ module Dnsruby
         if event_type == Resolver::EventType::RECEIVED ||
               event_type == Resolver::EventType::ERROR
           unless outstanding.include?(id)
-            log_and_raise("Query id not on outstanding list! #{outstanding.length} items. #{id} not on #{outstanding}")
+            Dnsruby.log.error("Query id not on outstanding list! #{outstanding.length} items. #{id} not on #{outstanding}")
           end
           outstanding.delete(id)
         end
@@ -1208,7 +1205,7 @@ module Dnsruby
       #       @mutex.synchronize{
       _query, _client_queue, s_queue, _outstanding = @query_list[client_query_id]
       if s_queue != select_queue
-        log_and_raise("Serious internal error : expected select queue #{s_queue}, got #{select_queue}")
+        Dnsruby.log_and_raise("Serious internal error : expected select queue #{s_queue}, got #{select_queue}")
       end
       stop_querying(client_query_id)
       #  @TODO@ Does the client want notified at this point?
@@ -1221,7 +1218,7 @@ module Dnsruby
       #       @mutex.synchronize {
       _query, client_queue, s_queue, _outstanding = @query_list[client_query_id]
       if s_queue != select_queue
-        log_and_raise("Serious internal error : expected select queue #{s_queue}, got #{select_queue}")
+        Dnsruby.log_and_raise("Serious internal error : expected select queue #{s_queue}, got #{select_queue}")
       end
       if response.rcode == RCode.NXDOMAIN
         send_result(client_queue, client_query_id, select_queue, response, NXDomain.new)
@@ -1237,7 +1234,7 @@ module Dnsruby
       _resolver, _msg, client_query_id, _retry_count = query_id
       _query, client_queue, s_queue, _outstanding = @query_list[client_query_id]
       if s_queue != select_queue
-        log_and_raise("Serious internal error : expected select queue #{s_queue}, got #{select_queue}")
+        Dnsruby.log_and_raise("Serious internal error : expected select queue #{s_queue}, got #{select_queue}")
       end
       #       For some errors, we immediately send result. For others, should we retry?
       #       Either :
diff --git a/lib/dnsruby/resource/CAA.rb b/lib/dnsruby/resource/CAA.rb
index 69a61b8..fd64e44 100644
--- a/lib/dnsruby/resource/CAA.rb
+++ b/lib/dnsruby/resource/CAA.rb
@@ -26,7 +26,7 @@ module Dnsruby
       # The value for the property_tag
       attr_accessor :property_value
       # The value for the flag
-      attr_accessor :flag
+      attr_writer :flag
 
       def from_hash(hash) #:nodoc: all
         @property_tag = hash[:property_tag]
diff --git a/lib/dnsruby/resource/DNSKEY.rb b/lib/dnsruby/resource/DNSKEY.rb
index a5b587e..258bcbf 100644
--- a/lib/dnsruby/resource/DNSKEY.rb
+++ b/lib/dnsruby/resource/DNSKEY.rb
@@ -294,11 +294,11 @@ module Dnsruby
         begin
           key_text.gsub!(/\n/, "")
           key_text.gsub!(/ /, "")
-          #         @key=Base64.decode64(key_text)
-          @key=key_text.unpack("m*")[0]
+          @key=Base64.decode64(key_text)
           public_key
           get_new_key_tag
-        rescue Exception
+        rescue Exception => e
+          Dnsruby.log.error(e)
           raise ArgumentError.new("Key #{key_text} invalid")
         end
       end
@@ -341,13 +341,12 @@ module Dnsruby
         modulus = RR::get_num(@key[pos, @key.length])
         @key_length = (@key.length - pos) * 8
 
-        pkey = OpenSSL::PKey::RSA.new
-        begin
-          pkey.set_key(modulus, exponent, nil) # use set_key, present in later versions of openssl gem
-        rescue NoMethodError
-          pkey.e = exponent # set_key not available in earlier versions, use this approach instead
-          pkey.n = modulus
-        end
+        data_sequence = OpenSSL::ASN1::Sequence([
+                                                  OpenSSL::ASN1::Integer(modulus),
+                                                  OpenSSL::ASN1::Integer(exponent)
+                                                ])
+        asn1 = OpenSSL::ASN1::Sequence(data_sequence)
+        pkey = OpenSSL::PKey::RSA.new(asn1.to_der)
         return pkey
       end
 
@@ -366,18 +365,25 @@ module Dnsruby
         pos += pgy_len
         @key_length = (pgy_len * 8)
 
-        pkey = OpenSSL::PKey::DSA.new
-        begin
-          pkey.set_pgq(p,g,q)
-          pkey.set_key(y, nil) # use set_pgq and set_key, present in later versions of openssl gem
-        rescue NoMethodError
-          pkey.p = p # set_key not available in earlier versions, use this approach instead
-          pkey.q = q
-          pkey.g = g
-          pkey.pub_key = y
-        end
-
-        pkey
+        asn1 = OpenSSL::ASN1::Sequence.new(
+          [
+            OpenSSL::ASN1::Sequence.new(
+              [
+                OpenSSL::ASN1::ObjectId.new('DSA'),
+                OpenSSL::ASN1::Sequence.new(
+                  [
+                    OpenSSL::ASN1::Integer.new(p),
+                    OpenSSL::ASN1::Integer.new(q),
+                    OpenSSL::ASN1::Integer.new(g)
+                  ]
+                )
+              ]
+            ),
+            OpenSSL::ASN1::BitString.new(OpenSSL::ASN1::Integer.new(y).to_der)
+          ]
+        )
+
+        pkey = OpenSSL::PKey::DSA.new(asn1.to_der)
       end
 
       # RFC6605, section 4
@@ -387,13 +393,13 @@ module Dnsruby
       def ec_key(curve = 'prime256v1')
         group = OpenSSL::PKey::EC::Group.new(curve)
         pkey = OpenSSL::PKey::EC.new(group)
-
         # DNSSEC pub does not have first octet that determines whether it's uncompressed
         # or compressed form, but it's required by OpenSSL to parse EC point correctly
-        point_from_pub = "\x04" + @key.to_s # octet string, \x04 prefix determines uncompressed
-        pkey.public_key = OpenSSL::PKey::EC::Point.new(group, point_from_pub)
+        public_key_with_prefix = "\x04" + @key.to_s
+        pkey = OpenSSL::PKey::EC.new(group, public_key_with_prefix)
 
         pkey
+
       end
     end
   end
diff --git a/lib/dnsruby/resource/DS.rb b/lib/dnsruby/resource/DS.rb
index 6ed0331..0e53c49 100644
--- a/lib/dnsruby/resource/DS.rb
+++ b/lib/dnsruby/resource/DS.rb
@@ -14,11 +14,8 @@
 # limitations under the License.
 # ++
 require 'base64'
-begin
-require 'Digest/sha2'
-rescue LoadError
-  require 'digest/sha2'
-end
+require 'digest/sha2'
+
 module Dnsruby
   class RR
     # RFC4034, section 4
diff --git a/lib/dnsruby/resource/NSEC3PARAM.rb b/lib/dnsruby/resource/NSEC3PARAM.rb
index f6dc0ee..c0be33c 100644
--- a/lib/dnsruby/resource/NSEC3PARAM.rb
+++ b/lib/dnsruby/resource/NSEC3PARAM.rb
@@ -85,7 +85,7 @@ module Dnsruby
       #       end
       # 
       def from_data(data) #:nodoc: all
-        hash_alg, flags, iterations, salt_length, salt = data
+        hash_alg, flags, iterations, _salt_length, salt = data
         self.hash_alg=(hash_alg)
         self.flags=(flags)
         self.iterations=(iterations)
diff --git a/lib/dnsruby/resource/RR.rb b/lib/dnsruby/resource/RR.rb
index 156eb31..a274aeb 100644
--- a/lib/dnsruby/resource/RR.rb
+++ b/lib/dnsruby/resource/RR.rb
@@ -350,7 +350,7 @@ class RR
   end
 
   def hash # :nodoc:
-    vars = (self.instance_variables - [:@ttl]).sort
+    vars = (self.instance_variables - [:@ttl, :@rdata]).sort
     vars.inject(0) do |hash_value, var_name|
       hash_value ^ self.instance_variable_get(var_name).hash
     end
diff --git a/lib/dnsruby/resource/TLSA.rb b/lib/dnsruby/resource/TLSA.rb
index a7a35e7..6ce5aff 100644
--- a/lib/dnsruby/resource/TLSA.rb
+++ b/lib/dnsruby/resource/TLSA.rb
@@ -33,8 +33,8 @@ module Dnsruby
         # 255 Private use
         attr_accessor :matching_type
         # sec 2.1.4
-        attr_accessor :data
-        attr_accessor :databin
+        attr_reader :data
+        attr_reader :databin
 
         def verify
           raise ArgumentError, "usage with invalid value: #{@usage}" if @usage < 0 || @usage > 255
@@ -71,7 +71,7 @@ module Dnsruby
           if @matching_type == 0 && @selector == 0 && @databin
             begin
               cert = OpenSSL::X509::Certificate.new(@databin)
-            rescue => e
+            rescue
               raise ArgumentError, 'data is invalid cert '
             end
           end
diff --git a/lib/dnsruby/resource/TXT.rb b/lib/dnsruby/resource/TXT.rb
index 31db8ce..0f4400a 100644
--- a/lib/dnsruby/resource/TXT.rb
+++ b/lib/dnsruby/resource/TXT.rb
@@ -82,7 +82,17 @@ module Dnsruby
             end
           else
             if (seen_strings && !in_string)
-              next
+              if (c == ";")
+                 # Comment in zone file!
+                 return strings
+              end
+              if (c != " " && c != "\t")
+                in_string = true
+                count+=1
+                strings[count] = ""
+              else
+                next
+              end
             end
             if (pos == 0)
               unquoted = true
diff --git a/lib/dnsruby/select_thread.rb b/lib/dnsruby/select_thread.rb
index 9124d69..9f036b5 100644
--- a/lib/dnsruby/select_thread.rb
+++ b/lib/dnsruby/select_thread.rb
@@ -140,7 +140,7 @@ module Dnsruby
       }
       begin
         @@wakeup_sockets[0].send("wakeup!", 0)
-      rescue Exception => e
+      rescue Exception
         #          do nothing
       end
     end
@@ -190,12 +190,11 @@ module Dnsruby
         end
         #         next if (timeout < 0)
         begin
-          ready, write, errors = IO.select(sockets, nil, nil, timeout)
+          ready, _write, _errors = IO.select(sockets, nil, nil, timeout)
         rescue SelectWakeup
           #  If SelectWakeup, then just restart this loop - the select call will be made with the new data
           next
-        rescue IOError, EncodeError => e
-          #           print "IO Error  =: #{e}\n"
+        rescue IOError, EncodeError
           exceptions = clean_up_closed_sockets
           exceptions.each { |exception| send_exception_to_client(*exception) }
 
@@ -248,7 +247,7 @@ module Dnsruby
     # Removes closed sockets from @@sockets, and returns an array containing 1
     # exception for each closed socket contained in @@socket_hash.
     def clean_up_closed_sockets
-      exceptions = @@mutex.synchronize do
+      @@mutex.synchronize do
         closed_sockets_in_hash = @@sockets.select(&:closed?).select { |s| @@socket_hash[s] }
         @@sockets.delete_if { | socket | socket.closed? }
         closed_sockets_in_hash.each_with_object([]) do |socket, exceptions|
@@ -257,6 +256,7 @@ module Dnsruby
           end
         end
       end
+      exceptions
     end
 
     def process_error(errors)
@@ -295,7 +295,6 @@ module Dnsruby
       @@mutex.synchronize do
         ids = get_active_ids(@@query_hash, msg.header.id)
         return if ids.empty? # should be only one
-        query_settings = @@query_hash[ids[0]].clone
       end
 
       answerip = msg.answerip.downcase
@@ -732,7 +731,7 @@ module Dnsruby
       }
 
       responses.each do |item|
-        client_id, client_queue, msg, err, query, res = item
+        client_id, client_queue, msg, err, _query, _res = item
         #         push_to_client(client_id, client_queue, msg, err)
         client_queue.push([client_id, Resolver::EventType::VALIDATED, msg, err])
         notify_queue_observers(client_queue, client_id)
diff --git a/lib/dnsruby/single_verifier.rb b/lib/dnsruby/single_verifier.rb
index 4b33ea1..c5a9feb 100644
--- a/lib/dnsruby/single_verifier.rb
+++ b/lib/dnsruby/single_verifier.rb
@@ -462,7 +462,6 @@ module Dnsruby
     def check_no_wildcard_expansion(msg) # :nodoc:
       #  @TODO@ Do this for NSEC3 records!!!
       proven_no_wildcards = false
-      name = msg.question()[0].qname
       [msg.authority.rrsets('NSEC'), msg.authority.rrsets('NSEC3')].each {|nsec_rrsets|
         nsec_rrsets.each {|nsecs|
           nsecs.rrs.each {|nsec|
@@ -1329,8 +1328,7 @@ module Dnsruby
             msg.security_level = Message::SecurityLevel.SECURE
             return true
           end
-        rescue VerifyError => e
-          #           print "Verify failed : #{e}\n"
+        rescue VerifyError
         end
       end
       if (error)
diff --git a/lib/dnsruby/version.rb b/lib/dnsruby/version.rb
index 896d843..3fea482 100644
--- a/lib/dnsruby/version.rb
+++ b/lib/dnsruby/version.rb
@@ -1,3 +1,3 @@
 module Dnsruby
-  VERSION = '1.61.5'
+  VERSION = '1.70.0'
 end
diff --git a/lib/dnsruby/zone_reader.rb b/lib/dnsruby/zone_reader.rb
index 7ce13b2..976c4c3 100644
--- a/lib/dnsruby/zone_reader.rb
+++ b/lib/dnsruby/zone_reader.rb
@@ -68,7 +68,7 @@ module Dnsruby
             end
             zone.push(rr)
           end
-        rescue Exception => e
+        rescue Exception
           raise ParseException.new("Error reading line #{io.lineno} of #{io.inspect} : [#{line}]")
         end
       end
@@ -303,7 +303,7 @@ module Dnsruby
         (split.length - 2).times {|i| line += "#{split[i+2]} "}
         line += "\n"
         split = line.split
-      rescue Error => e
+      rescue Error
       end
 
       #  Add the type so we can load the zone one RRSet at a time.
diff --git a/lib/dnsruby/zone_transfer.rb b/lib/dnsruby/zone_transfer.rb
index a2fd7a6..01ed5c6 100644
--- a/lib/dnsruby/zone_transfer.rb
+++ b/lib/dnsruby/zone_transfer.rb
@@ -244,7 +244,6 @@ module Dnsruby
     end
 
     def parseRR(rec) #:nodoc: all
-      name = rec.name
       type = rec.type
       delta = Delta.new
 
diff --git a/test/spec_helper.rb b/test/spec_helper.rb
index e7e9b45..3fdfccf 100644
--- a/test/spec_helper.rb
+++ b/test/spec_helper.rb
@@ -1,15 +1,21 @@
+$VERBOSE = true
+
+if Warning.respond_to?(:[]=)
+  Warning[:deprecated] = true
+end
+
 if ENV['RUN_EXTRA_TASK'] == 'TRUE'
   require 'coveralls'
   Coveralls.wear!
 
   require 'simplecov'
 
-  # SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
-      # [SimpleCov::Formatter::HTMLFormatter, Coveralls::SimpleCov::Formatter])
-  SimpleCov.formatter = Coveralls::SimpleCov::Formatter
-  SimpleCov.start do
-    add_filter 'test/'
-  end
+  # # SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
+  #     # [SimpleCov::Formatter::HTMLFormatter, Coveralls::SimpleCov::Formatter])
+  # SimpleCov.formatter = Coveralls::SimpleCov::Formatter
+  # SimpleCov.start do
+  #   add_filter 'test/'
+  # end
 end
 
 require 'minitest'
diff --git a/test/tc_resolv.rb b/test/tc_resolv.rb
index 4b0bd29..4ec7c22 100644
--- a/test/tc_resolv.rb
+++ b/test/tc_resolv.rb
@@ -20,7 +20,7 @@ require_relative '../lib/dnsruby/resolv'
 class TestResolv < Minitest::Test
 
   RELATIVE_NAME = 'google-public-dns-a.google.com'
-  SHORT_RELATIVE_NAME = 'dns.google'
+  SHORT_ABSOLUTE_NAME = 'dns.google.'
   ABSOLUTE_NAME = RELATIVE_NAME + '.'
   IPV4_ADDR     = '8.8.8.8'
   IPV6_ADDR     = '2001:4860:4860::8888'
@@ -54,16 +54,16 @@ class TestResolv < Minitest::Test
 
   def test_resolv_address_to_name
 
-    assert_equal(SHORT_RELATIVE_NAME, Dnsruby::Resolv.getname(IPV4_ADDR).to_s)
+    assert_equal(SHORT_ABSOLUTE_NAME, Dnsruby::Resolv.getname(IPV4_ADDR).to_s(true))
 
     assert_raises(Dnsruby::ResolvError) do
-      Dnsruby::Resolv.getname(SHORT_RELATIVE_NAME)
+      Dnsruby::Resolv.getname(SHORT_ABSOLUTE_NAME)
     end
 
     names = Dnsruby::Resolv.getnames(IPV4_ADDR)
     assert_equal(1, names.size)
-    assert_equal(SHORT_RELATIVE_NAME, names.first.to_s)
-    Dnsruby::Resolv.each_name(IPV4_ADDR) { |name| assert_equal(SHORT_RELATIVE_NAME, name.to_s)}
+    assert_equal(SHORT_ABSOLUTE_NAME, names.first.to_s(true))
+    Dnsruby::Resolv.each_name(IPV4_ADDR) { |name| assert_equal(SHORT_ABSOLUTE_NAME, name.to_s(true))}
   end
 
   def test_resolv_address_to_address
diff --git a/test/tc_resolver.rb b/test/tc_resolver.rb
index 2e9c0f2..67cc3a4 100644
--- a/test/tc_resolver.rb
+++ b/test/tc_resolver.rb
@@ -73,8 +73,8 @@ class TestResolver < Minitest::Test
   end
 
   def test_send_plain_message
-    resolver = Resolver.new
-    response, error = resolver.send_plain_message(Message.new("cnn.com"))
+    resolver = Resolver.new('1.1.1.1')
+    response, error = resolver.send_plain_message(Message.new("example.com", Types.A))
     assert_nil_error(error)
     assert_valid_response(response)
 
@@ -132,7 +132,7 @@ class TestResolver < Minitest::Test
     r = Resolver.new
     q=Queue.new
     r.send_async(m,q,q)
-    id,ret, error=q.pop
+    _id, ret, _error=q.pop
     assert(ret.kind_of?(Message))
     no_pointer=true
     ret.each_answer do |answer|
@@ -185,14 +185,14 @@ class TestResolver < Minitest::Test
         res.retry_times=retry_times
         res.retry_delay=retry_delay
         start=Time.now
-        m = res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
+        res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
         fail
       rescue ResolvTimeout
         stop=Time.now
         time = stop-start
         assert(time <= expected * 1.3 && time >= expected * 0.9, "Wrong time take, expected #{expected}, took #{time}")
       end
-  end
+    end
   end
 
   def test_packet_timeout
@@ -209,7 +209,7 @@ class TestResolver < Minitest::Test
         #  Work out what time should be, then time it to check
         expected = query_timeout
         start=Time.now
-        m = res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
+        res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
         fail
       rescue Dnsruby::ResolvTimeout
         stop=Time.now
@@ -227,7 +227,7 @@ class TestResolver < Minitest::Test
       res.query_timeout=expected
       q = Queue.new
       start = Time.now
-      m = res.send_async(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A), q, q)
+      res.send_async(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A), q, q)
       id,ret,err = q.pop
       stop = Time.now
       assert(id=q)
@@ -382,19 +382,19 @@ class TestRawQuery < Minitest::Test
           resolver.query("google.com", "MX")
           begin
             resolver.query("googlöe.com", "MX") 
-          rescue Dnsruby::ResolvError => e
+          rescue Dnsruby::ResolvError
             # fine
           end
           resolver.query("google.com", "MX")
           resolver.query("google.com", "MX")
           begin
             resolver.query("googlöe.com", "MX")
-          rescue Dnsruby::ResolvError => e
+          rescue Dnsruby::ResolvError
             # fine
           end
           begin
             resolver.query("googlöe.com", "MX") 
-          rescue Dnsruby::ResolvError => e
+          rescue Dnsruby::ResolvError
             # fine
           end
 #          Dnsruby::Cache.delete("googlöe.com", "MX")
diff --git a/test/tc_rr-opt.rb b/test/tc_rr-opt.rb
index 4515d8a..f5f246d 100644
--- a/test/tc_rr-opt.rb
+++ b/test/tc_rr-opt.rb
@@ -28,15 +28,14 @@ class TestRrOpt < Minitest::Test
   # This works only with send_plain_message, not send_message, query, etc.
   def test_plain_respects_bufsize
 
-
-      resolver = Resolver.new(['a.gtld-servers.net', 'b.gtld-servers.net', 'c.gtld-servers.net'])
+      resolver = Resolver.new('a.gtld-servers.net')
       resolver.query_timeout=20
 
     run_test = ->(bufsize) do
 
 
       create_test_query = ->(bufsize) do
-        message = Message.new('com', Types.ANY, Classes.IN)
+        message = Message.new('com', Types.RRSIG, Classes.IN)
         message.add_additional(RR::OPT.new(bufsize))
         message
       end
@@ -46,14 +45,12 @@ class TestRrOpt < Minitest::Test
       if (_error != nil) then
         print "Error at #{bufsize} : #{_error}"
       end
-      # puts "\nBufsize is #{bufsize}, binary message size is #{response.encode.size}"
+#       puts "\nBufsize is #{bufsize}, binary message size is #{response.encode.size}"
       assert_equal(true, response.header.tc)
       assert(response.encode.size <= bufsize)
     end
 
-    #run_test.(512)
-    #run_test.(612)
-    run_test.(4096)
+    run_test.(612)
   end
 
 
diff --git a/test/tc_rr-txt.rb b/test/tc_rr-txt.rb
index 31c0f79..360df28 100644
--- a/test/tc_rr-txt.rb
+++ b/test/tc_rr-txt.rb
@@ -143,7 +143,13 @@ class TestRrTest < Minitest::Test
 
    r1 = RR.create("auto._domainkey.cacert.org.  43200 IN	TXT	\"v=DKIM1\;g=*\;k=rsa\;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDNFxiNr+NHJwih3OPhGr4iwLE+BBDu72YrMSzUnU1FF50CW7iOtuhg796UZ6xrZ5VuhAix6YmmzcvF2UxYzoD/XpfZ4MzBu0ND4/nkt9/YOTyIBzwQqn9uMNve0Y76Zsel89dIJtOI+y+lfnFExV0jKwe53gzmxMVpMSSCcZPGwIDAQAB\"	; ----- DKIM auto for cacert.org")
    r2 = RR.create("auto._domainkey.cacert.org.	43200	IN	TXT	\"v=DKIM1;g=*;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDNFxiNr+NHJwih3OPhGr4iwLE+BBDu72YrMSzUnU1FF50CW7iOtuhg796UZ6xrZ5VuhAix6YmmzcvF2UxYzoD/XpfZ4MzBu0ND4/nkt9/YOTyIBzwQqn9uMNve0Y76Zsel89dIJtOI+y+lfnFExV0jKwe53gzmxMVpMSSCcZPGwIDAQAB\"")
-   assert(r1.to_s == r2.to_s)
+   assert_equal(r1.to_s, r2.to_s)
+  end
+
+  def test_quote_and_unquoted
+    t = Dnsruby::RR::TXT.parse '"a" b'
+    assert_equal("a", t[0])
+    assert_equal("b", t[1])
   end
 
 end
diff --git a/test/tc_tcp.rb b/test/tc_tcp.rb
index dfb59f7..66d6545 100644
--- a/test/tc_tcp.rb
+++ b/test/tc_tcp.rb
@@ -142,14 +142,14 @@ class TestTcp < Minitest::Test
       ans = HackMessage.decode(received_query)
       ans.wipe_additional
       100.times {|i|
-      ans.add_additional(Dnsruby::RR.create("example.com 3600 IN A 1.2.3.#{i}"))
+        ans.add_additional(Dnsruby::RR.create("example.com 3600 IN A 1.2.3.#{i}"))
       }
       ans.header.arcount = 110
       ans.header.tc = true
       socket.send(ans.encode,0)
     }
 
-        server_thread = Thread.new {
+    _server_thread = Thread.new {
       ts = TCPServer.new(port)
       t = ts.accept
       packet = t.recvfrom(2)[0]
diff --git a/test/test_utils.rb b/test/test_utils.rb
index edc9f82..668bc50 100644
--- a/test/test_utils.rb
+++ b/test/test_utils.rb
@@ -1,5 +1,3 @@
-require_relative 'spec_helper'
-
 # Use this in tests in the tests directory with:
 # require_relative 'test_utils'
 # include TestUtils

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/share/rubygems-integration/all/specifications/dnsruby-1.70.0.gemspec

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/share/rubygems-integration/all/specifications/dnsruby-1.61.5.gemspec

Control files: lines which differ (wdiff format)

  • Ruby-Versions: all

More details

Full run details