localhost is either 127.0.0.1 or ::1, nothing else.
authorflorian <florian@openbsd.org>
Mon, 20 Nov 2023 12:15:16 +0000 (12:15 +0000)
committerflorian <florian@openbsd.org>
Mon, 20 Nov 2023 12:15:16 +0000 (12:15 +0000)
commit373da8abb60949de81b32d3c8eaecdaabf17bdaa
tree4070b6b03ca8b0c4e8fd028017873bf0d8c4b334
parent4e63e8f9957526d4ffa42e6da06b1274ae9e1088
localhost is either 127.0.0.1 or ::1, nothing else.

RFC 6761, 6.3 Domain Name Reservation Considerations for "localhost.":
   3.  Name resolution APIs and libraries SHOULD recognize localhost
       names as special and SHOULD always return the IP loopback address
       for address queries and negative responses for all other query
       types.  Name resolution APIs SHOULD NOT send queries for
       localhost names to their configured caching DNS server(s).

This makes sure that the getaddrinfo(3) and gethostbyname(3) family of
functions always return the loopback address and do not send queries
to name servers. This includes "localhost", "localhost." and
everything under ".localhost" and ".localhost.".

For example, a host underneath the .com.ar zone will per default have
a search list of "com.ar.". resolv.conf(5) has a default of "lookup
bind file". Both combined will result in lookups for "localhost" to
not return 127.0.0.1 because localhost.com.ar is registered in DNS.

It has been known for decades that this is a problem, especially for
localhost.

Problem recently spotted by gonzalo@ and debugged by sthen@

Testing sthen, gonzalo
Input & OK phessler, eric, millert
OK sthen, kn, deraadt
lib/libc/asr/asr_private.h
lib/libc/asr/asr_utils.c
lib/libc/asr/getaddrinfo_async.c
lib/libc/asr/gethostnamadr_async.c