مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-11-30 21:32:30 +00:00
fix: translate unicode domain names to Punycode for compatibility with DNS (#2823)
هذا الالتزام موجود في:
ملتزم من قبل
GitHub
الأصل
ae30cc7615
التزام
be0df7b463
@@ -17,10 +17,8 @@ class DNSResolver
|
||||
# @param [String] name
|
||||
# @return [Array<String>]
|
||||
def a(name)
|
||||
dns do |dns|
|
||||
dns.getresources(name, Resolv::DNS::Resource::IN::A).map do |s|
|
||||
s.address.to_s
|
||||
end
|
||||
get_resources(name, Resolv::DNS::Resource::IN::A).map do |s|
|
||||
s.address.to_s
|
||||
end
|
||||
end
|
||||
|
||||
@@ -29,10 +27,8 @@ class DNSResolver
|
||||
# @param [String] name
|
||||
# @return [Array<String>]
|
||||
def aaaa(name)
|
||||
dns do |dns|
|
||||
dns.getresources(name, Resolv::DNS::Resource::IN::AAAA).map do |s|
|
||||
s.address.to_s
|
||||
end
|
||||
get_resources(name, Resolv::DNS::Resource::IN::AAAA).map do |s|
|
||||
s.address.to_s
|
||||
end
|
||||
end
|
||||
|
||||
@@ -41,10 +37,8 @@ class DNSResolver
|
||||
# @param [String] name
|
||||
# @return [Array<String>]
|
||||
def txt(name)
|
||||
dns do |dns|
|
||||
dns.getresources(name, Resolv::DNS::Resource::IN::TXT).map do |s|
|
||||
s.data.to_s.strip
|
||||
end
|
||||
get_resources(name, Resolv::DNS::Resource::IN::TXT).map do |s|
|
||||
s.data.to_s.strip
|
||||
end
|
||||
end
|
||||
|
||||
@@ -53,10 +47,8 @@ class DNSResolver
|
||||
# @param [String] name
|
||||
# @return [Array<String>]
|
||||
def cname(name)
|
||||
dns do |dns|
|
||||
dns.getresources(name, Resolv::DNS::Resource::IN::CNAME).map do |s|
|
||||
s.name.to_s.downcase
|
||||
end
|
||||
get_resources(name, Resolv::DNS::Resource::IN::CNAME).map do |s|
|
||||
s.name.to_s.downcase
|
||||
end
|
||||
end
|
||||
|
||||
@@ -65,16 +57,14 @@ class DNSResolver
|
||||
# @param [String] name
|
||||
# @return [Array<Array<Integer, String>>]
|
||||
def mx(name)
|
||||
dns do |dns|
|
||||
records = dns.getresources(name, Resolv::DNS::Resource::IN::MX).map do |m|
|
||||
[m.preference.to_i, m.exchange.to_s]
|
||||
end
|
||||
records.sort do |a, b|
|
||||
if a[0] == b[0]
|
||||
[-1, 1].sample
|
||||
else
|
||||
a[0] <=> b[0]
|
||||
end
|
||||
records = get_resources(name, Resolv::DNS::Resource::IN::MX).map do |m|
|
||||
[m.preference.to_i, m.exchange.to_s]
|
||||
end
|
||||
records.sort do |a, b|
|
||||
if a[0] == b[0]
|
||||
[-1, 1].sample
|
||||
else
|
||||
a[0] <=> b[0]
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -90,7 +80,7 @@ class DNSResolver
|
||||
(parts.size - 1).times do |n|
|
||||
d = parts[n, parts.size - n + 1].join(".")
|
||||
|
||||
records = dns.getresources(d, Resolv::DNS::Resource::IN::NS).map do |s|
|
||||
records = get_resources(d, Resolv::DNS::Resource::IN::NS).map do |s|
|
||||
s.name.to_s
|
||||
end
|
||||
|
||||
@@ -124,6 +114,13 @@ class DNSResolver
|
||||
end
|
||||
end
|
||||
|
||||
def get_resources(name, type)
|
||||
encoded_name = DomainName::Punycode.encode_hostname(name)
|
||||
dns do |dns|
|
||||
dns.getresources(encoded_name, type)
|
||||
end
|
||||
end
|
||||
|
||||
class << self
|
||||
|
||||
# Return a resolver which will use the nameservers for the given domain
|
||||
|
||||
المرجع في مشكلة جديدة
حظر مستخدم