diff --git a/src/common/helpers.py b/src/common/helpers.py index 570b5213b..ecccd5029 100644 --- a/src/common/helpers.py +++ b/src/common/helpers.py @@ -119,13 +119,23 @@ def parse_jid(jidstring): return prep(*decompose_jid(jidstring)) def idn_to_ascii(host): - '''convert IDN (Internationalized Domain Names) to ACE (ASCII-compatible encoding)''' + '''convert IDN (Internationalized Domain Names) to ACE + (ASCII-compatible encoding)''' labels = idna.dots.split(host) converted_labels = [] for label in labels: converted_labels.append(idna.ToASCII(label)) return ".".join(converted_labels) +def ascii_to_idn(host): + '''convert ACE (ASCII-compatible encoding) to IDN + (Internationalized Domain Names)''' + labels = idna.dots.split(host) + converted_labels = [] + for label in labels: + converted_labels.append(idna.ToUnicode(label)) + return ".".join(converted_labels) + def parse_resource(resource): '''Perform stringprep on resource and return it''' if resource: diff --git a/src/common/nslookup.py b/src/common/nslookup.py index e7b55ab98..a23400416 100644 --- a/src/common/nslookup.py +++ b/src/common/nslookup.py @@ -109,13 +109,19 @@ class Resolver: # _xmpp-client._tcp.jabber.org service = 30 30 5222 jabber.org. if not result: return [] + ufqdn = helpers.ascii_to_idn(fqdn) # Unicode domain name hosts = [] lines = result.split('\n') for line in lines: if line == '': continue + domain = None if line.startswith(fqdn): - rest = line[len(fqdn):].split('=') + domain = fqdn + elif line.startswith(ufqdn): + domain = ufqdn + if domain: + rest = line[len(host):].split('=') if len(rest) != 2: continue answer_type, props_str = rest