Skip to content
This repository was archived by the owner on Dec 7, 2018. It is now read-only.

Commit 5a5a8de

Browse files
committed
Add support for un-encoded IDNs via addressable
squash of 30b111f and ea8cb44
1 parent 6118508 commit 5a5a8de

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

celluloid-dns.gemspec

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
2626
spec.add_dependency("celluloid", "~> 0.17.3")
2727
spec.add_dependency("celluloid-io", "~> 0.17.3")
2828
spec.add_dependency("timers", "~> 4.1.0")
29+
spec.add_dependency("addressable", "~> 2.4.0")
2930

3031
spec.add_development_dependency "bundler", "~> 1.3"
3132
spec.add_development_dependency "process-daemon", "~> 1.0.0"

lib/celluloid/dns/resolver.rb

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
require 'securerandom'
2424
require 'celluloid/io'
25+
require 'addressable'
2526

2627
module Celluloid::DNS
2728
class InvalidProtocolError < StandardError
@@ -71,6 +72,7 @@ def fully_qualified_name(name)
7172
end
7273

7374
# ..else if we have a string, we need to do some basic processing:
75+
name = Addressable::IDNA.to_ascii(name) unless name.ascii_only?
7476
if name.end_with? '.'
7577
return Resolv::DNS::Name.create(name)
7678
else

spec/celluloid/dns/resolver_spec.rb

+16
Original file line numberDiff line numberDiff line change
@@ -148,5 +148,21 @@ def handle_connection(socket)
148148

149149
expect(addresses.size).to be > 0
150150
end
151+
152+
it "should resolve punycode encoded IDNs" do
153+
resolver = Celluloid::DNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]])
154+
155+
addresses = resolver.addresses_for('xn--80ajiqg.xn--90ae')
156+
157+
expect(addresses.size).to be > 0
158+
end
159+
160+
it "should resolve raw UTF-8 IDNs" do
161+
resolver = Celluloid::DNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]])
162+
163+
addresses = resolver.addresses_for('имена.бг')
164+
165+
expect(addresses.size).to be > 0
166+
end
151167
end
152168
end

0 commit comments

Comments
 (0)