This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]