[PATCH v3 1/2] nss: Add verbose flag to getent tool
Petr Menšík
pemensik@redhat.com
Wed Apr 29 17:12:13 GMT 2026
Hi, still looking for review of this.
https://patchwork.sourceware.org/project/glibc/patch/20251016141821.278836-2-pemensik@redhat.com/
On 16/10/2025 16:18, Petr Menšík wrote:
> Unlike older hosts database served by gethostbyname, getaddrinfo call
> can return varying return codes. Those codes can be vital for providing
> reason why name resolution on the system did not return address. Even
> when getent tool is usually present on every small container image,
> there is often no helpful tool to show getaddrinfo errors.
>
> This simple change adds verbosity flag to getent. With that it can
> provide more details about the reason of the failure. It can help to
> obtain information whether the name queried exists or does not have
> address of requested types only.
>
> The only database where this will help is ahosts* variants. I have not
> found any kind of test to expand with new verbose flag. But I think this
> would be very useful on various limited system, where bind-utils is not
> installed by default. Besides, sometimes getaddrinfo call can return
> different information than DNS protocol itself.
>
> Example of usage:
>
> nss/getent -v ahosts com.
>
> This will tell you the name exists, but has no address.
>
> Signed-off-by: Petr Menšík <pemensik@redhat.com>
> ---
> nss/getent.c | 20 ++++++++++++++++++--
> 1 file changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/nss/getent.c b/nss/getent.c
> index f63f6892b7..58b08f770a 100644
> --- a/nss/getent.c
> +++ b/nss/getent.c
> @@ -58,6 +58,7 @@ static const struct argp_option args_options[] =
> {
> { "service", 's', N_("CONFIG"), 0, N_("Service configuration to be used") },
> { "no-idn", 'i', NULL, 0, N_("disable IDN encoding") },
> + { "verbose", 'v', NULL, 0, N_("print getaddrinfo error details") },
> { "no-addrconfig", 'A', NULL, 0,
> N_("do not filter out unsupported IPv4/IPv6 addresses (with ahosts*)") },
> { NULL, 0, NULL, 0, NULL },
> @@ -84,6 +85,9 @@ static int idn_flags = AI_IDN | AI_CANONIDN;
> /* Set to 0 by --no-addrconfig. */
> static int addrconfig_flags = AI_ADDRCONFIG;
>
> +/* Set to 1 by -v. */
> +static bool gai_verbose = false;
> +
> /* Print the version information. */
> static void
> print_version (FILE *stream, struct argp_state *state)
> @@ -358,9 +362,17 @@ ahosts_keys_int (int af, int xflags, int number, char *key[])
> for (i = 0; i < number; ++i)
> {
> struct addrinfo *res;
> + int gai_result;
>
> - if (getaddrinfo (key[i], NULL, &hint, &res) != 0)
> - result = 2;
> + gai_result = getaddrinfo (key[i], NULL, &hint, &res);
> +
> + if (gai_result != 0)
> + {
> + result = 2;
> + if (gai_verbose)
> + fprintf (stderr, _("Host %s failed: %s\n"), key[i],
> + gai_strerror (gai_result));
> + }
> else
> {
> struct addrinfo *runp = res;
> @@ -910,6 +922,10 @@ parse_option (int key, char *arg, struct argp_state *state)
> idn_flags = 0;
> break;
>
> + case 'v':
> + gai_verbose = true;
> + break;
> +
> case 'A':
> addrconfig_flags = 0;
> break;
--
Petr Menšík
Senior Software Engineer, RHEL
Red Hat, https://www.redhat.com/
PGP: DFCF908DB7C87E8E529925BC4931CA5B6C9FC5CB
More information about the Libc-alpha
mailing list