[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