IDN with Gemini?
Scot gmi1 at scotdoyle.com
Tue Dec 8 02:21:18 GMT 2020
On 12/7/20 3:46 PM, colecmac at protonmail.com wrote:
> On Monday, December 7, 2020 4:00 PM, Scot<gmi1 at scotdoyle.com> wrote:
>
>> On 12/7/20 12:00 PM,colecmac at protonmail.com wrote:
>>
>>> What parsing would a client have to do?
>>>
>>> - Extracting the domain, so it can be punycoded for DNS lookups
>> Can we be sure gemini host resolution will always use the global DNS?
>>
>> Section 4 of RFC 6055 cautions against assuming that all name resolution
>> is using the global DNS and therefore that querying with punycode
>> domain names will succeed:
>>
>> ? It is inappropriate for an application that calls a general-purpose
>> name resolution library to convert a name to an A-label unless the
>> application is absolutely certain that, in all environments where the
>> application might be used, only the global DNS that uses IDNA
>> A-labels actually will be used to resolve the name.
> ... Do you have an example of a system/network that fails on punycode?
>
Yes, an organization's internal network resolver or a user's local
resolver could reply to utf8 queries but not punycode queries.
For example, adding the line:
? 10.99.99.1? ??.jp
to /etc/hosts on Ubuntu 20.04 with resolver systemd-resolved
and running the test program [1] gives this output:
? error querying 'xn--td2aa.jp': Unknown server error
? name '??.jp' has ip address 10.99.99.1
[1]
#include <netdb.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
int show_ip(char *name) {
? struct hostent *entry;
? entry = gethostbyname(name);
? if (entry) {
??? printf("name '%s' has ip address %s\n\n", entry->h_name,
?????????? inet_ntoa(*((struct in_addr*)entry->h_addr)));
? } else {
??? printf("error querying '%s': %s\n\n", name, hstrerror(h_errno));
? }
}
int main() {
? show_ip("xn--td2aa.jp");
? show_ip("??.jp");
}
Archive home | About this archive