dnsruby 1.60.2 → 1.61.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.
Files changed (48) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +9 -6
  3. data/.yardopts +7 -0
  4. data/README.md +7 -4
  5. data/RELEASE_NOTES.md +43 -0
  6. data/Rakefile +1 -0
  7. data/demo/digroot.rb +2 -0
  8. data/demo/rubydig.rb +1 -0
  9. data/dnsruby.gemspec +15 -8
  10. data/lib/dnsruby/code_mappers.rb +3 -0
  11. data/lib/dnsruby/config.rb +30 -8
  12. data/lib/dnsruby/dnssec.rb +4 -0
  13. data/lib/dnsruby/hosts.rb +8 -4
  14. data/lib/dnsruby/message/encoder.rb +2 -2
  15. data/lib/dnsruby/message/header.rb +15 -15
  16. data/lib/dnsruby/name.rb +18 -2
  17. data/lib/dnsruby/packet_sender.rb +14 -2
  18. data/lib/dnsruby/recursor.rb +10 -1
  19. data/lib/dnsruby/resolver.rb +11 -0
  20. data/lib/dnsruby/resource/CAA.rb +1 -1
  21. data/lib/dnsruby/resource/CDNSKEY.rb +17 -0
  22. data/lib/dnsruby/resource/CDS.rb +35 -0
  23. data/lib/dnsruby/resource/DNSKEY.rb +33 -6
  24. data/lib/dnsruby/resource/IN.rb +4 -1
  25. data/lib/dnsruby/resource/URI.rb +57 -0
  26. data/lib/dnsruby/resource/generic.rb +3 -0
  27. data/lib/dnsruby/select_thread.rb +1 -1
  28. data/lib/dnsruby/single_verifier.rb +27 -4
  29. data/lib/dnsruby/validator_thread.rb +4 -4
  30. data/lib/dnsruby/version.rb +1 -1
  31. data/lib/dnsruby/zone_transfer.rb +5 -1
  32. data/test/localdns.rb +29 -0
  33. data/test/tc_caa.rb +0 -1
  34. data/test/tc_dns.rb +11 -1
  35. data/test/tc_dnskey.rb +29 -0
  36. data/test/tc_encoding.rb +31 -0
  37. data/test/tc_hs.rb +4 -3
  38. data/test/tc_long_labels.rb +46 -0
  39. data/test/tc_name.rb +19 -0
  40. data/test/tc_resolv.rb +5 -4
  41. data/test/tc_resolver.rb +28 -2
  42. data/test/tc_rr-opt.rb +9 -3
  43. data/test/tc_rr.rb +33 -0
  44. data/test/tc_soak.rb +33 -67
  45. data/test/tc_tcp_pipelining.rb +27 -19
  46. data/test/tc_verifier.rb +15 -0
  47. data/test/test_dnsserver.rb +110 -17
  48. metadata +50 -44
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 286d5426865cf680082a434f91ceb9004ef616ca
4
- data.tar.gz: b6dfef1f6420e1246c074c86de4ddac5260ba02a
2
+ SHA256:
3
+ metadata.gz: fd2234e013517b2d62083f327de9a28e3d8f5f7c49e5204301f576d01e681809
4
+ data.tar.gz: 5695978850e06ebf1579fc80a7b10aba8e4296dfd210a548fb066cf9762e266d
5
5
  SHA512:
6
- metadata.gz: d447b1b997edfad80524e859f7088143e6b48dc3da6fdbf942777ff8d1f8ad40d09944b8679965ea1623804ecc92c54814d271d7faec73e858a5836d14196173
7
- data.tar.gz: 5f4c06324994a7c07b2257cfaef48b2f482305189fad014a846cf88ccd91988e480949c3279f824e401724a1be7fd83d8427fc766a2b486f898c04430bcdab51
6
+ metadata.gz: b2575fc3c3d7677fecfcb0479d5d5e77fc941ac57b7b171287ae552ef62d8b5ecb050b42774f996754d2a6a7b1b71b83021d0702446cca8856907120851c4665
7
+ data.tar.gz: ddaaf6bbb40bf8ce10f8180be766b4a7218b952673fec5cccc3726bf4bd01aceb01f03c5bdb4b1b86df6c30d14016eaff38e7cea69e979ad25d7bdfa1398a5af
@@ -2,13 +2,16 @@ language: ruby
2
2
  cache: bundler
3
3
  sudo: false
4
4
 
5
+ before_install: gem install bundler
6
+
5
7
  script: "bundle exec rake test"
6
8
 
7
9
  rvm:
8
- - 2.0.0
9
- - 2.1.4
10
- - 2.3.0
11
- # - rbx-2
10
+ - 2.6.6
11
+ - 2.5.8
12
+ - 2.7.1
12
13
  - ruby-head
13
- # - jruby-head
14
- # - ree
14
+
15
+ matrix:
16
+ allow_failures:
17
+ - rvm: ruby-head
@@ -0,0 +1,7 @@
1
+ -
2
+ --main README.md
3
+ LICENSE
4
+ DNSSEC
5
+ EXAMPLES
6
+ EVENTMACHINE
7
+ RELEASE_NOTES.md
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  [![Build Status](https://travis-ci.org/alexdalitz/dnsruby.svg?branch=master)](https://travis-ci.org/alexdalitz/dnsruby)
2
2
  [![Coverage Status](https://img.shields.io/coveralls/alexdalitz/dnsruby.svg)](https://coveralls.io/r/alexdalitz/dnsruby?branch=master)
3
3
 
4
+ <img src="http://caerkettontech.com/dnsruby/DNSRuby-colour-mid.png" width="200" height="200" />
5
+
4
6
  Dnsruby
5
7
  =======
6
8
 
@@ -16,10 +18,10 @@ queries. It is therefore suitable for high volume DNS applications.
16
18
 
17
19
  The following is a (non-exhaustive) list of features :
18
20
 
19
- - Implemented RRs : A, AAAA, AFSDB, ANY, CERT, CNAME, DNAME, GPOS,
20
- HINFO, ISDN, LOC, MB, MG, MINFO, MR, MX, NAPTR, NS, NSAP, NXT,
21
- OPT, PTR, PX, RP, RT, SOA, SPF, SRV, TKEY, TSIG, TXT, WKS,
22
- X25, DNSKEY, RRSIG, NSEC, NSEC3, NSEC3PARAM, DS, DLV
21
+ - Implemented RRs : A, AAAA, AFSDB, ANY, CAA, CERT, CNAME, DNAME,
22
+ GPOS, HINFO, ISDN, LOC, MB, MG, MINFO, MR, MX, NAPTR, NS, NSAP,
23
+ NXT, OPT, PTR, PX, RP, RT, SOA, SPF, SRV, TKEY, TSIG, TXT,
24
+ WKS, X25, DNSKEY, RRSIG, NSEC, NSEC3, NSEC3PARAM, DS, DLV
23
25
 
24
26
  - Generic RR types supported (RFC3597)
25
27
 
@@ -91,3 +93,4 @@ Contact/Links
91
93
  | Github | https://github.com/alexdalitz/dnsruby |
92
94
  | Google Group | https://groups.google.com/forum/#!forum/dnsruby |
93
95
  | Rubygems | http://rubygems.org/gems/dnsruby/ |
96
+ | Documentation | https://www.rubydoc.info/gems/dnsruby/ |
@@ -1,5 +1,48 @@
1
1
  # Release Notes
2
2
 
3
+ ## v1.61.5
4
+
5
+ * CAA record fixes - add contactphone and contactemail
6
+ * Fix eprecation warnings
7
+
8
+ ## v1.61.4
9
+
10
+ * Dnsruby::Name : document .punycode
11
+ * gemspec enhancement
12
+ * add yard build file
13
+ * fix create name include url special characters
14
+ * Fix uninitialized constant error when using via Rails
15
+ * Implement ECDSAP256SHA256 (13) / ECDSAP384SHA384 (14) algorithms for DNSKEY
16
+ * Reinitialize all IANA TAR keys with Dnssec.reset
17
+
18
+ ## v1.61.3
19
+
20
+ * TCP timeout and port changes
21
+
22
+ ## v1.61.2
23
+
24
+ * Add new root key
25
+
26
+ ## v1.61.1
27
+
28
+ * Add Addressable as a gem runtime dependency
29
+
30
+ ## v1.61.0
31
+
32
+ * Add URI, CDS and CDNSKEY records
33
+ * Supply port to DNS.new as optiona parameter
34
+ * Supply timeout to zone transfer connect
35
+ * Fix multi-line strings
36
+ * Try absolute name as candidate in DNS even if not dot supplied
37
+ * Do not try to generate candidates if no domain is given
38
+ * Handle new OpenSSL interface as well as old
39
+ * Handle new DSA interface
40
+ * fix encode error select thread issue
41
+ * handle encoding errors
42
+ * add punycode support
43
+ * Make sure dnssec is enabled in verifier and also in digroot demo
44
+ * Other minor fixes and changes to test code and infrastructure
45
+
3
46
  ## v1.60.2
4
47
 
5
48
  * Fix deletion of TXT records with spaces in dynamic updates (thanks Sean Dilda)
data/Rakefile CHANGED
@@ -22,6 +22,7 @@ def create_task(task_name, test_suite_filespec)
22
22
  t.name = task_name
23
23
  t.test_files = FileList[test_suite_filespec]
24
24
  t.verbose = true
25
+ t.warning = false
25
26
  end
26
27
  end
27
28
 
@@ -51,7 +51,9 @@ end
51
51
 
52
52
  inner_resolver = Dnsruby::Resolver.new
53
53
  inner_resolver.do_validation = true
54
+ inner_resolver.dnssec = true
54
55
  resolver = Dnsruby::Recursor.new(inner_resolver)
56
+ resolver.dnssec = true
55
57
 
56
58
  # Dnsruby::TheLog.level=Logger::DEBUG
57
59
 
@@ -50,6 +50,7 @@ require 'dnsruby'
50
50
 
51
51
 
52
52
  resolver = Dnsruby::Resolver.new
53
+ Dnsruby::TheLog.level = Logger::DEBUG
53
54
  zone_transfer = Dnsruby::ZoneTransfer.new
54
55
 
55
56
 
@@ -15,6 +15,7 @@ SPEC = Gem::Specification.new do |s|
15
15
  stub resolver. It aims to comply with all DNS RFCs, including
16
16
  DNSSEC NSEC3 support.'
17
17
  s.license = "Apache License, Version 2.0"
18
+
18
19
  s.files = `git ls-files -z`.split("\x0")
19
20
 
20
21
  s.post_install_message = \
@@ -23,22 +24,28 @@ DNSSEC NSEC3 support.'
23
24
  For general discussion (please tell us how you use dnsruby): https://groups.google.com/forum/#!forum/dnsruby"
24
25
 
25
26
  s.test_file = "test/ts_offline.rb"
26
- s.has_rdoc = true
27
27
  s.extra_rdoc_files = ["DNSSEC", "EXAMPLES", "README.md", "EVENTMACHINE"]
28
28
 
29
- unless /java/ === RUBY_PLATFORM
30
- s.add_development_dependency 'pry', '~> 0.10'
31
- s.add_development_dependency 'pry-byebug', '~> 2.0' if RUBY_VERSION >= '2'
32
- end
29
+ s.metadata = {
30
+ 'yard.run' => 'yard',
31
+ 'bug_tracker_uri' => 'https://github.com/alexdalitz/dnsruby/issues',
32
+ 'changelog_uri' => 'https://github.com/alexdalitz/dnsruby/blob/master/RELEASE_NOTES.md',
33
+ 'documentation_uri' => 'https://www.rubydoc.info/gems/dnsruby/',
34
+ 'homepage_uri' => 'https://github.com/alexdalitz/dnsruby',
35
+ 'source_code_uri' => 'https://github.com/alexdalitz/dnsruby',
36
+ }
33
37
 
34
- s.add_development_dependency 'rake', '~> 10', '>= 10.3.2'
38
+ s.add_development_dependency 'rake', '>= 12.3.3'
35
39
  s.add_development_dependency 'minitest', '~> 5.4'
36
- s.add_development_dependency 'rubydns', '~> 1.0'
37
- s.add_development_dependency 'nio4r', '~> 1.1'
40
+ s.add_development_dependency 'rubydns', '~> 2.0.1'
41
+ s.add_development_dependency 'nio4r', '~> 2.0'
38
42
  s.add_development_dependency 'minitest-display', '>= 0.3.0'
43
+ s.add_development_dependency('yard', '~> 0.9')
39
44
 
40
45
  if RUBY_VERSION >= "1.9.3"
41
46
  s.add_development_dependency 'coveralls', '~> 0.7'
42
47
  end
48
+
49
+ s.add_runtime_dependency 'simpleidn', '~> 0.1'
43
50
  end
44
51
 
@@ -162,6 +162,8 @@ module Dnsruby
162
162
  NSEC3PARAM= 51 # RFC still pending at time of writing
163
163
  TLSA = 52 # RFC 6698
164
164
  HIP = 55 # RFC 5205
165
+ CDS = 59 # RFC 7344
166
+ CDNSKEY = 60 # RFC 7344
165
167
  SPF = 99 # RFC 4408
166
168
  UINFO = 100 # non-standard
167
169
  UID = 101 # non-standard
@@ -174,6 +176,7 @@ module Dnsruby
174
176
  MAILB = 253 # RFC 1035 (MB, MG, MR)
175
177
  MAILA = 254 # RFC 1035 (obsolete - see MX)
176
178
  ANY = 255 # RFC 1035
179
+ URI = 256 # RFC 7553
177
180
  CAA = 257 # RFC 6844
178
181
  DLV = 32769 # RFC 4431 (informational)
179
182
  update()
@@ -38,6 +38,7 @@ module Dnsruby
38
38
  # a query is performed (or a config parameter requested on) a Resolver which has
39
39
  # not yet been configured.
40
40
  class Config
41
+ DEFAULT_PORT = 53
41
42
  # --
42
43
  # @TODO@ Switches for :
43
44
  #
@@ -101,6 +102,7 @@ module Dnsruby
101
102
  dom=""
102
103
  nd = 1
103
104
  @ndots = 1
105
+ @port = DEFAULT_PORT
104
106
  @apply_search_list = true
105
107
  @apply_domain = true
106
108
  config_hash = Config.default_config_hash
@@ -122,6 +124,7 @@ module Dnsruby
122
124
  ns = config_hash[:nameserver] if config_hash.include? :nameserver
123
125
  s = config_hash[:search] if config_hash.include? :search
124
126
  nd = config_hash[:ndots] if config_hash.include? :ndots
127
+ p = config_hash[:port] if config_hash.include? :port
125
128
  @apply_search_list = config_hash[:apply_search_list] if config_hash.include? :apply_search_list
126
129
  @apply_domain= config_hash[:apply_domain] if config_hash.include? :apply_domain
127
130
  dom = config_hash[:domain] if config_hash.include? :domain
@@ -132,6 +135,7 @@ module Dnsruby
132
135
  @configured = true
133
136
  send("search=",s)
134
137
  send("ndots=",nd)
138
+ send("port=",p)
135
139
  send("domain=",dom)
136
140
  }
137
141
  Dnsruby.log.info{to_s}
@@ -159,6 +163,15 @@ module Dnsruby
159
163
  end
160
164
  end
161
165
 
166
+ # Set port
167
+ def port=(p)
168
+ @configured = true
169
+ @port=p if p
170
+ if !@port.kind_of?(Integer)
171
+ raise ArgumentError.new("invalid port config: #{@port.inspect}")
172
+ end
173
+ end
174
+
162
175
  # Set the default search path
163
176
  def search=(s)
164
177
  @configured = true
@@ -303,15 +316,20 @@ module Dnsruby
303
316
  search = nil
304
317
  domain = nil
305
318
  ndots = 1
319
+ port = DEFAULT_PORT
306
320
  open(filename) {|f|
307
321
  f.each {|line|
308
322
  line.sub!(/[#;].*/, '')
309
323
  keyword, *args = line.split(/\s+/)
310
- args.each { |arg|
311
- arg.untaint
312
- }
324
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.8")
325
+ args.each { |arg|
326
+ arg.untaint
327
+ }
328
+ end
313
329
  next unless keyword
314
330
  case keyword
331
+ when 'port'
332
+ port = args[0].to_i
315
333
  when 'nameserver'
316
334
  nameserver += args
317
335
  when 'domain'
@@ -337,7 +355,7 @@ module Dnsruby
337
355
  end
338
356
  }
339
357
  }
340
- return { :nameserver => nameserver, :domain => domain, :search => search, :ndots => ndots }
358
+ return { :nameserver => nameserver, :domain => domain, :search => search, :ndots => ndots, :port => port }
341
359
  end
342
360
 
343
361
  def inspect #:nodoc: all
@@ -357,6 +375,7 @@ module Dnsruby
357
375
  ret += " domain : #{domain_string}, search : "
358
376
  search.each {|s| ret += s + ", " }
359
377
  ret += " ndots : #{@ndots}"
378
+ ret += " port : #{@port}"
360
379
  return ret
361
380
  end
362
381
 
@@ -423,18 +442,21 @@ module Dnsruby
423
442
  end
424
443
  end
425
444
 
426
- def generate_candidates(name) #:nodoc: all
445
+ def generate_candidates(name_in) #:nodoc: all
427
446
  if !@configured
428
447
  parse_config
429
448
  end
430
449
  candidates = []
431
- name = Name.create(name)
450
+ name = Name.create(name_in)
432
451
  if name.absolute?
433
452
  candidates = [name]
434
453
  else
454
+ candidates.push(Name.create(name_in.to_s + "."))
435
455
  if (@apply_domain)
436
456
  if @ndots > name.length - 1
437
- candidates.push(Name.create(name.to_a+@domain))
457
+ if (@domain != nil)
458
+ candidates.push(Name.create(name.to_a+@domain))
459
+ end
438
460
  end
439
461
  end
440
462
  if (!@apply_search_list)
@@ -452,4 +474,4 @@ module Dnsruby
452
474
  return candidates
453
475
  end
454
476
  end
455
- end
477
+ end
@@ -82,6 +82,9 @@ module Dnsruby
82
82
  @@root_key = RR.create(". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5")
83
83
  @@root_verifier.add_root_ds(@@root_key)
84
84
 
85
+ @@root_key_new = RR.create(". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D")
86
+ @@root_verifier.add_root_ds(@@root_key_new)
87
+
85
88
  @@dlv_verifier = SingleVerifier.new(SingleVerifier::VerifierType::DLV)
86
89
 
87
90
  # @TODO@ Could add a new one of these for each anchor.
@@ -125,6 +128,7 @@ module Dnsruby
125
128
  @@validation_policy = ValidationPolicy::LOCAL_ANCHORS_THEN_ROOT
126
129
  @@root_verifier = SingleVerifier.new(SingleVerifier::VerifierType::ROOT)
127
130
  @@root_verifier.add_root_ds(@@root_key)
131
+ @@root_verifier.add_root_ds(@@root_key_new)
128
132
 
129
133
  @@dlv_verifier = SingleVerifier.new(SingleVerifier::VerifierType::DLV)
130
134
 
@@ -57,15 +57,19 @@ module Dnsruby
57
57
  line.sub!(/#.*/, '')
58
58
  addr, hostname, *aliases = line.split(/\s+/)
59
59
  next unless addr
60
- addr.untaint
61
- hostname.untaint
60
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.8")
61
+ addr.untaint
62
+ hostname.untaint
63
+ end
62
64
  @addr2name[addr] = [] unless @addr2name.include? addr
63
65
  @addr2name[addr] << hostname
64
66
  @addr2name[addr] += aliases
65
67
  @name2addr[hostname] = [] unless @name2addr.include? hostname
66
68
  @name2addr[hostname] << addr
67
69
  aliases.each {|n|
68
- n.untaint
70
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.8")
71
+ n.untaint
72
+ end
69
73
  @name2addr[n] = [] unless @name2addr.include? n
70
74
  @name2addr[n] << addr
71
75
  }
@@ -123,4 +127,4 @@ module Dnsruby
123
127
  end
124
128
  end
125
129
  end
126
- end
130
+ end
@@ -18,7 +18,7 @@ class MessageEncoder #:nodoc: all
18
18
  begin
19
19
  @data << d.pack(template)
20
20
  rescue Encoding::CompatibilityError => e
21
- raise Dnsruby::OtherResolvError.new("IDN support currently requires punycode string")
21
+ raise Dnsruby::EncodeError.new("IDN support currently requires punycode string")
22
22
  end
23
23
  end
24
24
 
@@ -36,7 +36,7 @@ class MessageEncoder #:nodoc: all
36
36
  self.put_pack("C", d.length)
37
37
  @data << d
38
38
  rescue Encoding::CompatibilityError => e
39
- raise Dnsruby::OtherResolvError.new("IDN support currently requires punycode string")
39
+ raise Dnsruby::EncodeError.new("IDN support currently requires punycode string")
40
40
  end
41
41
  end
42
42
 
@@ -190,29 +190,29 @@ class Header
190
190
  retval = ";; id = #{@id}\n"
191
191
 
192
192
  if (@opcode == OpCode::Update)
193
- retval += ";; qr = #{@qr} " +\
194
- "opcode = #{@opcode.string} "+\
193
+ retval += ";; qr = #{@qr} " \
194
+ "opcode = #{@opcode.string} "\
195
195
  "rcode = #{@rcode.string}\n"
196
196
 
197
- retval += ";; zocount = #{@qdcount} "+\
198
- "prcount = #{@ancount} " +\
199
- "upcount = #{@nscount} " +\
197
+ retval += ";; zocount = #{@qdcount} "\
198
+ "prcount = #{@ancount} " \
199
+ "upcount = #{@nscount} " \
200
200
  "adcount = #{@arcount}\n"
201
201
  else
202
- retval += ";; qr = #{@qr} " +\
203
- "opcode = #{@opcode.string} " +\
204
- "aa = #{@aa} " +\
205
- "tc = #{@tc} " +\
202
+ retval += ";; qr = #{@qr} " \
203
+ "opcode = #{@opcode.string} " \
204
+ "aa = #{@aa} " \
205
+ "tc = #{@tc} " \
206
206
  "rd = #{@rd}\n"
207
207
 
208
- retval += ";; ra = #{@ra} " +\
209
- "ad = #{@ad} " +\
210
- "cd = #{@cd} " +\
208
+ retval += ";; ra = #{@ra} " \
209
+ "ad = #{@ad} " \
210
+ "cd = #{@cd} " \
211
211
  "rcode = #{rcode.string}\n"
212
212
 
213
- retval += ";; qdcount = #{@qdcount} " +\
214
- "ancount = #{@ancount} " +\
215
- "nscount = #{@nscount} " +\
213
+ retval += ";; qdcount = #{@qdcount} " \
214
+ "ancount = #{@ancount} " \
215
+ "nscount = #{@nscount} " \
216
216
  "arcount = #{@arcount}\n"
217
217
  end
218
218
 
@@ -26,7 +26,8 @@ module Dnsruby
26
26
  # * Name#wild?
27
27
  # * Name#subdomain_of?(other)
28
28
  # * Name#labels
29
- #
29
+ #
30
+ require 'simpleidn'
30
31
  class Name
31
32
  include Comparable
32
33
  MaxNameLength=255
@@ -52,6 +53,7 @@ module Dnsruby
52
53
  if (arg=="")
53
54
  return Name.new([],false)
54
55
  end
56
+ arg = punycode(arg)
55
57
  return Name.new(split_escaped(arg), /\.\z/ =~ arg ? true : false)
56
58
  # return Name.new(Label.split(arg), /\.\z/ =~ arg ? true : false)
57
59
  when Array
@@ -61,6 +63,20 @@ module Dnsruby
61
63
  end
62
64
  end
63
65
 
66
+ # Convert IDN domain from Unicode UTF-8 to ASCII punycode
67
+ # @param [Object|String] d Unicode domain with emoji inside
68
+ # @return [String] ASCII punycode domain
69
+ # @example
70
+ # Dnsruby::Name.punycode('🏳.cf')
71
+ # => "xn--en8h.cf"
72
+ def self.punycode(d)
73
+ begin
74
+ return SimpleIDN.to_ascii(d)
75
+ rescue
76
+ return d
77
+ end
78
+ end
79
+
64
80
  def self.split_escaped(arg) #:nodoc: all
65
81
  encodedlabels = name2encodedlabels(arg)
66
82
  return encodedlabels
@@ -317,7 +333,7 @@ module Dnsruby
317
333
  i=0;
318
334
 
319
335
  while (i < length )
320
- c=presentation.unpack("x#{i}C1") [0]
336
+ c=presentation.unpack("x#{i}C1")[0]
321
337
  if (c == 46) # ord('.')
322
338
  endstring = presentation[i+1, presentation.length-(i+1)]
323
339
  return Label.new(wire),endstring