mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
nss: getent: Print IPv6 scope ID for ahosts/ahostsv6 if available
This information is sometimes useful and actually required for link-local addresses.
This commit is contained in:
parent
b3fbfe8196
commit
0c6d82e979
@ -1,3 +1,7 @@
|
||||
2019-02-12 Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
* nss/getent.c (ahosts_keys_int): Include IPv6 scope ID in output.
|
||||
|
||||
2019-02-12 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
|
||||
[BZ #24122]
|
||||
|
36
nss/getent.c
36
nss/getent.c
@ -40,6 +40,7 @@
|
||||
#include <netinet/in.h>
|
||||
#include <sys/socket.h>
|
||||
#include <scratch_buffer.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
/* Get libc version number. */
|
||||
#include <version.h>
|
||||
@ -393,15 +394,34 @@ ahosts_keys_int (int af, int xflags, int number, char *key[])
|
||||
sockstr = sockbuf;
|
||||
}
|
||||
|
||||
/* Three digits per byte, plus '%' and null terminator. */
|
||||
char scope[3 * sizeof (uint32_t) + 2];
|
||||
struct sockaddr_in6 *addr6
|
||||
= (struct sockaddr_in6 *) runp->ai_addr;
|
||||
if (runp->ai_family != AF_INET6 || addr6->sin6_scope_id == 0)
|
||||
/* No scope ID present. */
|
||||
scope[0] = '\0';
|
||||
else
|
||||
snprintf (scope, sizeof (scope), "%%%" PRIu32,
|
||||
addr6->sin6_scope_id);
|
||||
|
||||
char buf[INET6_ADDRSTRLEN];
|
||||
printf ("%-15s %-6s %s\n",
|
||||
inet_ntop (runp->ai_family,
|
||||
runp->ai_family == AF_INET
|
||||
? (void *) &((struct sockaddr_in *) runp->ai_addr)->sin_addr
|
||||
: (void *) &((struct sockaddr_in6 *) runp->ai_addr)->sin6_addr,
|
||||
buf, sizeof (buf)),
|
||||
sockstr,
|
||||
runp->ai_canonname ?: "");
|
||||
if (inet_ntop (runp->ai_family,
|
||||
runp->ai_family == AF_INET
|
||||
? (void *) &((struct sockaddr_in *) runp->ai_addr)->sin_addr
|
||||
: &addr6->sin6_addr,
|
||||
buf, sizeof (buf)) == NULL)
|
||||
{
|
||||
strcpy (buf, "<invalid>");
|
||||
scope[0] = '\0';
|
||||
}
|
||||
|
||||
int pad = 15 - strlen (buf) - strlen (scope);
|
||||
if (pad < 0)
|
||||
pad = 0;
|
||||
|
||||
printf ("%s%-*s %-6s %s\n",
|
||||
buf, pad, scope, sockstr, runp->ai_canonname ?: "");
|
||||
|
||||
runp = runp->ai_next;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user