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