This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] nss: getent: Print IPv6 scope ID for ahosts/ahostsv6 if available
- From: Florian Weimer <fweimer at redhat dot com>
- To: libc-alpha at sourceware dot org
- Date: Thu, 31 Jan 2019 19:00:11 +0100
- Subject: [PATCH] nss: getent: Print IPv6 scope ID for ahosts/ahostsv6 if available
2019-01-31 Florian Weimer <fweimer@redhat.com>
* nss/getent.c (ahosts_keys_int): Include IPv6 scope ID in output.
diff --git a/nss/getent.c b/nss/getent.c
index f25de8f1fc..1159ba2636 100644
--- a/nss/getent.c
+++ b/nss/getent.c
@@ -393,14 +393,24 @@ ahosts_keys_int (int af, int xflags, int number, char *key[])
sockstr = sockbuf;
}
+ char scope_buf[3 * sizeof (unsigned long long int) + 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_buf[0] = '\0';
+ else
+ snprintf (scope_buf, sizeof (scope_buf), "%%%llu",
+ (unsigned long long int) addr6->sin6_scope_id);
+
char buf[INET6_ADDRSTRLEN];
- printf ("%-15s %-6s %s\n",
+ printf ("%-15s%s %-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,
+ : &addr6->sin6_addr,
buf, sizeof (buf)),
- sockstr,
+ scope_buf, sockstr,
runp->ai_canonname ?: "");
runp = runp->ai_next;