From: Rich Felker <dalias@libc.org>
To: musl@lists.openwall.com
Subject: Re: [musl] EAI_NODATA in musl
Date: Mon, 19 Sep 2022 18:26:07 -0400 [thread overview]
Message-ID: <20220919222607.GD9709@brightrain.aerifal.cx> (raw)
In-Reply-To: <20220919221402.GC9709@brightrain.aerifal.cx>
On Mon, Sep 19, 2022 at 06:14:03PM -0400, Rich Felker wrote:
> I just posted on libc-coord about an idea that sounded good, and it
> turns out glibc and nearly everyone else have had it for a long time:
>
> https://www.openwall.com/lists/libc-coord/2022/09/19/2
>
> I'd like to bring the same to musl, even though it's not standardized
> yet, since it's a clear candidate for standardization and solves a
> major problem with the libc DNS API, namely inability to distinguish
> NxDomain from NODATA.
>
> Aside from that, it should help justify musl's distinguishing of these
> two (very different) results in how search domain fallbacks work and
> how results for one of the A or AAAA erroring out get handled. Our
> misleadingly reporting "name exists but has no address" as "name
> doesn't exist" has made it hard for folks to understand why we don't
> keep going on the search when "name does not exist".
>
> Draft patch attached, untested.
>
> diff --git a/include/netdb.h b/include/netdb.h
> index d096c781..3af065e2 100644
> --- a/include/netdb.h
> +++ b/include/netdb.h
> @@ -44,6 +44,7 @@ struct addrinfo {
> #define EAI_NONAME -2
> #define EAI_AGAIN -3
> #define EAI_FAIL -4
> +#define EAI_NODATA -5
> #define EAI_FAMILY -6
> #define EAI_SOCKTYPE -7
> #define EAI_SERVICE -8
> diff --git a/src/network/gai_strerror.c b/src/network/gai_strerror.c
> index 9596580e..56b71503 100644
> --- a/src/network/gai_strerror.c
> +++ b/src/network/gai_strerror.c
> @@ -6,7 +6,7 @@ static const char msgs[] =
> "Name does not resolve\0"
> "Try again\0"
> "Non-recoverable error\0"
> - "Unknown error\0"
> + "Name has no usable address\0"
> "Unrecognized address family or invalid length\0"
> "Unrecognized socket type\0"
> "Unrecognized service\0"
> diff --git a/src/network/lookup_name.c b/src/network/lookup_name.c
> index bec6ba22..37d481f9 100644
> --- a/src/network/lookup_name.c
> +++ b/src/network/lookup_name.c
> @@ -79,7 +79,7 @@ static int name_from_hosts(struct address buf[static MAXADDRS], char canon[stati
> case 0:
> continue;
> default:
> - badfam = EAI_NONAME;
> + badfam = EAI_NODATA;
> break;
> }
>
> @@ -175,7 +175,7 @@ static int name_from_dns(struct address buf[static MAXADDRS], char canon[static
> __dns_parse(abuf[i], alens[i], dns_parse_callback, &ctx);
>
> if (ctx.cnt) return ctx.cnt;
> - return EAI_NONAME;
> + return EAI_NODATA;
> }
>
> static int name_from_dns_search(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family)
Some details to work out:
1. getaddrinfo errors out with EAI_NONAME early when AI_ADDRCONFIG
finds that the requested address family is not configured. The
logic here probably needs to be changed to still perform a lookup
but suppress the results if all requested families were precluded
by AI_ADDRCONFIG.
2. gethostbyname* need to process EAI_NODATA and convert to (already
existing) NO_DATA.
3. There was one other point where EAI_NONAME appeared in
lookup_name.c but it was wrong and just fixed by 1e7fb12f77.
Anything else?
Rich
next prev parent reply other threads:[~2022-09-19 22:26 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-19 22:14 Rich Felker
2022-09-19 22:26 ` Rich Felker [this message]
2022-09-19 23:31 ` Rich Felker
2022-09-21 15:41 ` Rich Felker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220919222607.GD9709@brightrain.aerifal.cx \
--to=dalias@libc.org \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).