[PATCH v2] nss: Add verbose flag to getent tool
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Wed Oct 15 13:48:42 GMT 2025
On 08/10/25 11:56, 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..137636771a 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 int gai_verbose = false;
Maybe use bool here?
> +
> /* 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));
Space after function name.
The patch looks ok, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> + }
> 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;
More information about the Libc-alpha
mailing list